[JS OOP] Изпит - Неяснотите около критериите за оценка


18

Здравейте, с цялото ми уважение към лекторите и положения от тях труд около подготвянето на изпитните задачи и методите за оценка, мисля че остават много непроверени неща, и по-важното, някои критерии остават доста неясни.

Ще се радвам ако някой от лекторите да публикува на видно място разяснения които всички да следваме без притеснения че може да ощетяваме някой от колегите ни. Ето някои от най-честите въпроси (ако пропускам нещо, което е почти сигурно, добавяйте въпросите като коментари):

1. Lexicographically vs Alphabetically:

По default JavaScript сравнява  стринговете 'in lexicographical order' всеки може да провери. В форумите имаше постове че на сутрешния изпит в условията е имало думата 'alphabetic'

2. Getter/Setter методи

Никъде в подготовката нямаше напътствия относно този проблем, нещо повече, по време на вечерния изпит отидох и лично попитах Ивайло Кенов, дали да правим getter/setter методи, дали ще го има като критерий за оценка, и отговора беше отрицателен.

Не е ясно какво става ако сме сложили само getter (), условието мълчи дали трябва да се променят стойности след инициализация на обектите. И да, всички вече знаем какво са getter/setter методи и за какво служат и че е добре да се ползват и тн., но ако погледнете клипчетата за подготовка и въобще за курса, getter/setter се виждат и споменават твърде рядко.

3. Проверка на arguments на фунцкции

Aко за Item->Price  или Store->filterItemsByPrice() се опитам да сложа -5 или NaN,POSITIVE_INFINITY или NEGATIVE_INFINITY трябва да има exception. Когато не с проверява входа, функцията не работи коректно, но на мен не ми е ОК да "порежа" някой защото има неясноти по условията.

Същото важи и за Store->filterElementsByNam(partOfName) когато partOfName не е string object, а сигурно има и други.

4. Associative Array

Според мен, поправете ме ако греша, associative array всъщност не е масив, а обект, който пази ключовете на речника като имена на променливи,, т.е, инициализираме с {}, кето създава нов Object, a не с [], което създава празен масив Array. Трябва ли да маркирам решения с масив като "Не работи коректно"?




Отговори



19

За всички хейтъри Ивайло много точно го каза. Няма нужда да издребняваме за дребни неточности, които могат да се оправят за 10 секунди. Така че бъдете солидарни и не се заяждайте за дреболии, поставете се на мястото на оценявания участник и отново ако някой сортира лексикографски, а не по азбучен ред, то разликата е само един toLowerCase() и всякакви други дребни неточности,
НЕ ИЗДРЕБНЯВАЙТЕ! Нека бъдем по-добри и неминуемо това ще ни се върне рано или късно ;)
*Тодор Вягов


от RANOPILE (1038 точки)


5
Колега и тук и за трите варианта аз давам максимални точки - както писах и в една друга тема - гледайте как реално работи задачата, какво е разбрал колегата от ООП, а не дай да го орежем, защото еди кво си..

от bgatev (1491 точки)


0
Ти ги даваш, но друг може и да не ти ги даде, затова както по-горе написах, ще се радвам аз, както и много други, на отговор от някой от лекторите, който ВСИЧКИ да спазим.

от georgi.neykov (107 точки)


1
Не знам доколко са правилни моите решения но и аз бих искал да знам кое е коректно и кое не е.
1.) С нормалното сортиране, което намерих из нета iKifla излизаше на последно място. В последствие го смених малките и големите първи букви да нямат значение. И все пак предполагам, че много хора са го оставили да е последно. Има ли значение? Да го смятаме ли за грешка? 2.) Аз съм направил валидираща проверка в конструктора и нямам getter-и и setter-и в класа Item например. Това коректно ли е?
3.) Аз използвах Number.POSITIVE_INFINITY || max value. Тук си работеше коректно програмата и не знам къде би могло да има проблем.
4.) Използвах [ ] защото условието използваше ключовата думичка array :D. Не знам дали е грешно или не ако не е {}

от FractaL (309 точки)


0
1) Аз не го смятам за грешка, и по двата начина е ОК, стига да са сортирани по име. 2) Не е коректно, искат да има getter и setter. 3) Не виждам проблем, това си е ОК. 4) Не е грешка, макар че е по-правилно да е {}.

от neutrino (3376 точки)

0
здравей, аз ще ти кажа какво мисля по въпросите ти 1) Изискването е да се сортира по следния начин: A, A, i, S, ако имаме тези 4 първи букви, а не A, A, S i, доколкото виждам по форума колегите са единодушни, че на това не трябва да се обръща внимание и много хора оценяват положително, стига да е сортирано някак си. 2) Според мен(доколкото съм разбрала) е грешно това, защото всеки път като създаваш Item се създава и нова функция validate() , която си сложил в тоя Item да валидираш. Валидациите се правят в setter. 3) хм, не съм сигурна какво да ти кажа :) :) 4) Според мен дали е [] или {} няма никакво значение, ако резултата кратко точно и ясно ти казва key: value, key: value, a не [5, 5, 3, 12] naprimer, което си е грешно по условие дори. Ако някъде греша колегите да ме поправят




1
Аз например съм сложил само setter-и, по простата причина, че не видях смисъл от getter. В смисъл, никъде не ти се изисква някаква промяна на private данните която да извършиш в getter (нямаш масив който трябва да клонираш например - говоря за Item обекта). На този въпрос повечето колеги предполагам, че ще отговорят, че нямам направени property-та, макар че и аз в подготовката не видях да се споменават getter-и и setter-и.

от NasC0 (489 точки)


0
Май бъркаш getter и setter


0
Защо мислиш така? Никъде не се изискваше да правиш промяна по данните които потребителя ти поисква - валидираш ги и ги set-ваш и повече не ги пипаш.

от NasC0 (489 точки)



3

Ето моите two cents:

1. За това има дебела тема, няма да я повтарям ... според мен и двете сортирания са еднакво верни/грешни.

2. Имах гетъри, но ги изтрих за да мога да преизползвам методи като подавам директно пропъритита (не, че не може да се подават гет методи, ама не се сетих на момента), сетъри нямам, но имам функция която се изпълнява преди сетване на стойност в конструктора и гърми, ако стойноста не е коректна. По този въпрос нямам никакви претенции, грещката си е моя ... нямам гет и сет.

3. Нямам ексепшън тук, сега като се замисля ... питах и Ивайло и той ми каза - "Не би трябвало да има отрицателни стойности", което може би трябваше да ми говори нещо, но ... не :) Ако е грешка, си е моя ;)

4. По-правилно обект (според мен), но и двете са верни, тъй като и масива е обект :)


от dimo.petrof (2887 точки)


0
По 2 направих абсолютно същото... Функцията ми validate е private, т.е. не се закача към прототипа, а може би трябваше.

от FractaL (309 точки)


7

Здравейте колеги,

Нека да отговоря на така сложните въпроси, които имате:

1) Lexicographically vs. Alphabetically

Трябва да се научите да използвате Google:

2) Getter / Setter методи

Прави сте, не са споменати изрично в условието. Както не е споменато, че трябва да правите функции, или да дефинирате променливи, или пък да използвате цикли.

Това е изпит по ООП. Не е изпит от сорта на:

  1. Дефинирай променлива
  2. Провери с if и typeof дали тя е от тип 'string'
    1. Ако не - хвърли exception
    2. Ако е продължи към 3
  3. Провери дали тази променлива има дължина м/у 6 и 40 символа
    1. Ако не - хвърли exception
    2. Ако да - продължи към 4
  4. т.н.

Нали не очаквате да ви казваме абсолютно всичко, което трябва да правите?! Целта на Академията на Телерик е да ви направи програмисти, които мислят, а не такива, които следят ред по ред условието и го изпълняват дословно, без да се замислят.

3) Проверка на argumenst на функция (само вметване - в JavaScript 'arguments' има специално значение, така че по-добре използвай 'параметри'. Достатъчно добра почти българска дума е)

Винаги данните се валидират. Под винаги, разбирайте винаги, на който и език да пишеш. При JavaScript дори е ВИНАГИ, с огромни букви.

Нямам повече коментари.

4) Associative Array

Again, Google: http://lmgtfy.com/?q=associative+array+javascript

Надявам се да съм бил полезен.

Поздрави,

Дончо Минков


от DonchoMinkov (12706 точки)


0
За 2 и 3, да полезен е отговора, но ако някой от нас беше отговорил по подобен начин на 1 и 4 вероятно щеше да се сметне за заяждане. Помагал си много пъти във форума като си давал много смислени отговори на въпроси и вероятно ще продължиш да го правиш, но това си е малко подигравка. С цялото ми уважение към вашия екип заради това което правите - в моя пост няма хейт ...

от dimo.petrof (2887 точки)

0
Лично аз не мисля че това е подигравка, @webdude според мен по-добре обърни повече внимание на

от tsonko_genov (708 точки)



1
Ще използвам темата да питам и тук, тъй като ми стана интересно от коментарите на колегите, а не съм срещал подобни примери. Как точно се правят get и set на полетата, примерно в "класа" Item и има ли реално начин да не се създават всеки път при нова инстанция?

от stanev.plamen (1143 точки)


0
http://ejohn.org/blog/javascript-getters-and-setters/ - Мисля, че тук се отговора на въпросите: Как се прави и Защо са ни нужни. Аз се чудих, защо ми трябват при положение, че в JS няма "частно", но това е отговора :).... Харесва ли ти или не JavaScript :))))

от deyan.todorov (1019 точки)

0
Да ясно, мерси за линка, има интересни варианти, вероятно има още x10 ... JS rules : )

от stanev.plamen (1143 точки)


1
Попаднах на случаи когато се връщат много повече от 25 items .
Как е най-добре да се оцени това след като няма такъв отговор за оценяване.
Това е при функциите за max, min и range критериите.Единствета опция остава Error, тъй като не е null,undifine, нито правелните елементи,нито общия брой.

от TodorDimitrov (757 точки)


0
виж какво предизвиква грешния резултат, и му сложи отговор с подобна "тежест"

от d.brezoev (212 точки)


3

Здравейте!

Много станаха темите за проверка и неясноти по проверката, но тази ми се стори най-близка до това което искам да попитам.

Падна ми се изпитна работа, която незнам как да оценя безпристрастно. ето няколко реда от кодът:

function Item(type,name,price) {
 
this._type=type;
.....
 
и след това:
...
if(item.type=='smart-phone' || item.type=='tablet'){
dataItems.push(item);
}

...

Това е явно неизтестван код които си гърми с ерор. Най-вероятно човекът просто е бързал и е променил в последният момент в Item да е с"_", но е забравил да го промени в Store. Иначе 6/9 функции са имплементирани и даже биха работили без тази грешка, друг е въпросът че човекът връща обект от името на магазинът и филтрираните айтъми, което не е по условие и ще го ощети допълнително при така зададените въпроси за какво се връща.

Бих споделил и по-голяма част от кодът но незнам до колко е коректно да го правя, просто ми се иска да не ощетявам никои, но не мога и с чисто сърце да преправя аз кодът за да тръгне, което ми се струва също нечестно спрямо представилите се по добре колеги.

Незнам дали не е редно, като има някъкви по-засукани случаи, да има отметка или бутон, че тази работа е добре да се погледне от трейнър. Специално ще запазя тази изпитна работа и бих я предоставил на някои по-компетентен от мен за повторна проверка, защото аз ще я оценя само защото иначе не мога да продължа да оценявам!


от kizisoft (803 точки)


0
И аз го оценявах , оправих имената в итем и работи . Имам съмнения , че по скоро е преписано от някъде самия сторе и за това не работи , а не че е грешка , но няма как да съм сигурен и за това го оправих с идеята , че наистина в последния момент ги е променил . И въпреки това ми се струва недопустимо човек който пише такъв код какъвто има в сторе , да направи такава глупост ...

от TeodorTunev (3061 точки)

0
Абе винаги има "спек" по време на изпит и всякъкви грешки са възможни, въпросът е до колко е честно спрямо някои които има решени вярно задачите, като започнем да преправяме код за да тръгне конкретна изпитна работа.

от kizisoft (803 точки)



0
Проверяването на тези изпити е удоволствие. Този път са оправени недостатъците от миналия изпит (например добавянето на отговор "Методът не е имплементиран"). Като цяло е забавно, интересно, човек може да научи още неща, докато проверява. Но... след 8-мия проверен изпит вече става досадно. :)
P.S.: Извинете ме, ако това не е темата за този коментар.

от LERRY (582 точки)


0
За да не ти писва, просто ги проверявай на порциони от по 2-3 изпита и ще минат неусетно ;).

от cerealBoxx (504 точки)