Loading...
EBojilova avatar EBojilova 330 Точки

[Exam] Advanced JS - 21 Февруари 2016 - решения, впечатления, резултати

Както винаги аз съм най-нетърпелива и поствам първа впечатленията си от изпита.

Този път за разлика от последните ми 3-4 явявания на изпит, съм доволна. По принцип си го обичам ООП.

Условието беше написано подробно и ясно, като за такива разсеяни, като мен :) Видя ми се и по-лесен от предишния изпит от 27.Март.2015.

Това ми е решението- включително написах и допълнителната задача за бонус точките.

https://github.com/EBojilova/JavaScriptAdvanced/tree/master/Demos-Homeworks-Exams/Exams/Exam210216/SolutionEB

Напавих copy-paste на един изпит решен от Наков-Estates. Валидациите ги  копирах също от там, но с малки поправки и добавки, да ми вършат работа за конкретния изпит. Валидациите съм ги сложила в extensions.js, дано не съм сбъркала. Ето от къде преписвах:

https://github.com/EBojilova/JavaScriptAdvanced/blob/master/Demos-Homeworks-Exams/Exams/Estates/Estates-Solution-In-Class/Estates.js

Най-често натисках клавишите Ctrl+R :)

Това, което единствено не направих, е проверката за абстрактния клас. Хвърляше ми грешка и просто я закоментирах. Нея трябва да я оправя, но накрая вече виждах замрежено и реших, да си ходя :) 

Решението е във вида в който съм го предала на изпита. Всякакви мнения са добре дошли.

9
JavaScript Advanced 21/02/2016 21:20:15
aanguelov avatar aanguelov 219 Точки

Ти първа, аз втори, май все така се получава smiley

Ето го моето решение, доста съм доволен от изпита, беше си направо лесен. Останах до самия край, за да си тествам валидациите, но сигурно пак ще ми гръмне някой юнит тест.

2
EBojilova avatar EBojilova 330 Точки

Сега се сетих, че изобщо не съм тествала валидациите и си открих една грешка, ама too late :)

0
aanguelov avatar aanguelov 219 Точки

E то и аз като погледнах твоето решение се сетих какво означава "Think of a way to optimize the appending of elements.", че и Боги наблегна на това в началото на изпита, ама късно... smiley

0
moholovka avatar moholovka 169 Точки

Елена, булевите не трябва да се валидират, а парсват, примерно може да ти пуснат 123 и това трябва да е true. Иначе проверката за намбър мисля че със isNaN е достатъчна.

3
moholovka avatar moholovka 169 Точки

https://github.com/IvanMladenov/AdvancedJS/tree/master/JSExamPreparation/Exam

Това е моето решение, благодаря на Богомил за перфектно направеното условие и готин изпит. Писането си беше доста, но изпита беше като цяло лесен. Валидациите не ми се проверяваха, въпреки че за едната бях 90% сигурен че не работи, както и добавянето на опшъните накуп, но реших че бонус точките от домашните ще компенсират и си тръгнах рано рано :)

3
Blaskowitzzz avatar Blaskowitzzz 41 Точки

Евала наистина на Боги за кадърно направения изпит, в условието имаше точно това, което се иска от тебе. Общо взето за час и половина бях готов и стоях още половин час да си проверявам дали не съм изпуснал нещо. Според мен можеше да ни се даде още малко да си поиграем с DOM-а и да добавим някой друг event, но като цяло доста ми хареса този формат, надявам се и последните два курса да са толкова интересни и приятни.

Като се прибирах си прочетох пак условието и забелязах това, което каза колегата горе, че за bool не трябват валидации, а само да се парснат, сигурно съм прецакал някой друг unit test, но oh well...

Сега като погледнах други решения ме е малко яд за именуването на модулите - аз се подведох по generator.js, където са с малка буква и не се сетих, че мога да си ги кръстя PascalCase, както е по конвенция и да направя:

eventsSystem.course = Course;

Мислех да пише custom exception-и, да извеждам валидациите в extensions и да тествам валидациите, но видях, че конзолата не дава грешки, а и мързела си каза думата и си тръгнах.

Ако на някой му се гледа малко copy-paste driven development, ето решението ми :D 

3
21/02/2016 23:46:48
LoKSET avatar LoKSET 160 Точки

Като цяло изпита не беше труден, да. Можех да изведа валидациите в отделни методи, но нещо не стигнах до това. Единствено с бонуса нещо се омотах, незнайно защо реших че опциите трябва да се попълват при някакъв ивент, вместо просто да си ги наслагам директно - фейспалм. И заприлича на това http://pastebin.com/QibkMhQK

Това със слагането на "Choose Hall" е останало от преден вариант когато не разкачах лисънъра и трябваше да предотвратя повторения на нещата.

Все пак работи горе-долу, така че предполагам не е голяма драма.

 

2
22/02/2016 12:17:34
Innos avatar Innos 419 Точки

Изпита по лично мнение беше лесничък с повечко boiler plating, сега като го обсъждаме и аз фейспалмвам че не се сетих за documentFragment-a за въвеждане на Option-ите. Общо взето 1 час за писане на моделите и още 30 мин за дебъгване на потенциални грешки които може да съм пропуснал. Другите 2 часа си играх с Custom Exception-ите и изнасянето на валидацията в помощен модул в extensions. Поблъсках си главата, защото се оказа че Firebug-a в Firefox не показва stacktrace-а на custom exception-ите по някаква причина, докато в Chrome си работи. След 2та часа играчка сериозно взех да се замислям дали, всички тея екстра валидации дето натръшках не са голяма глупост, ама нали ги писах ги оставих. Общо взето приятен изпит, иначе и аз очаквах че ще има повече работа по DOM-a.

Ето какво направих и аз.

2
22/02/2016 00:20:47
malkstor avatar malkstor 348 Точки

Подкрепям мненията, дадени до сега. Доста приятен и направо лесен изпит. Имаше си трики моменти тук-там, но всичко беше толкова добре описано и кадърно направено, че не остана място за ***-капани.

Това е което направих. Накрая се захванах да опитам и с require.js да го направя, но нещо се поомотах с app.js и си го оставих за домашно.

5
bulgaria_mitko avatar bulgaria_mitko 133 Точки

EDIT: може би трябваше да сложа и кода си, но това е поправения код: 

Здравейте на всички. исках да попитам според вас, понеже имах само 2 часа на разположение, защото гонех да хвана самолет и сега си видях 2 основни грешки в бързината съм ги допуснал като седнах да си довърша изпита. едната е че не връщам "класовете" с new. примерно: (и съответно ми се чупи кода)

scope.course = function(name, numberOfLectures) {
    return Course(name, numberOfLectures);
};

другата е че проверката ми дали е клас е:

if (event instanceof Party) {
   	this.parties.push(event);
}

а би трябвало да е scope._Party

Как мислите, това колко би повлияло на крайната оценка? мерси

1
22/02/2016 12:31:02
LoKSET avatar LoKSET 160 Точки

Директно става с scope.course = Course; няма смисъл от тази функция. И не трябва да е с new защото new-то е отвън.

а проверката трябва да е if (event instanceof scope.party)

Сигурно ще изгърмят някои юнит тестове заради това, тъй като Party не се вижда в това iife и следователно тази проверка никога няма да мине и ще има ReferenceError.

2
22/02/2016 12:51:03
r_petrov avatar r_petrov 14 Точки

Поздравявам те за изключително подробното и максимално абстрактно решение (тук поне функциите предоставят тази възможност). Хареса ми, че за валидациите си направила отделен обект - аз бързах и си пописах малко повече във всеки отделен сетър :)

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

пример от модула Hall:
1) В конструктора съм правил следните statement-и за private членовете:
this._name = this.setName(name);

Докато при теб е: 

this.setName(name);
2) А накрая кодът ми е следния:
eventsSystem.hall = function(name, capacity) {
    return new Hall(name, capacity);
};

Не можах да разбера защо ми гърми, когато стартирам generator.js. Пробвах и като при теб:

eventsSystem.hall = Hall;

Резултатът е пак същия:

TypeError: eventsSystem.hall is not a function 

Това ми остави съмнения доколко правилно съм работил.

П.П. сори, че не пращам връзка към профила ми в Github, но съм забравил как се качват неща там, а в момента нямам време да прегледам как ставаше.

Поздрави!

1
LoKSET avatar LoKSET 160 Точки

И аз първоначално го направих така  this._name = this.setName(name); като някакво мазало между C# и Джава. Когато всички неща се оказаха undefined, тъй като в сетър също го променях, а той самият не връща нищо бързо се усетих и го направих setName(name); Иначе ако връщаш стринг в него е все тая.

2
r_petrov avatar r_petrov 14 Точки

Честно казано, все още разсъждавам от гледна точка на, да ги наречем по-организираните, езици и ми е малко трудно да "прещракна" на Джаваскриптска вълна. Още малко ми трябва :)

1
aanguelov avatar aanguelov 219 Точки

TypeError: eventsSystem.hall is not a function 

 

Тази грешка ти я е хвърляло, защото си в индекса си заредил генератора, преди моделите. Съответно генератора търси да създаде нова зала, обаче няма все още такъв модел.

.js файловете в индекса се зареждат първо тези от папката models, след това generator.js и накрая app.js

3
moholovka avatar moholovka 169 Точки

Направих го изпита и с requirejs ако на някой му потрябва. Не мисля че е станало точно както трябва, но за първи отпит толкова :)

Не съм включил jquery и jsgrid, но не съм сигурен и че трябва, въпреки че са много код.

https://github.com/IvanMladenov/AdvancedJS/tree/master/JSExamPreparation/ExamWithRequire

2
22/02/2016 23:33:22
boyanst avatar boyanst 29 Точки

Здравейте,

Ето и моето решение на изпита. Сега като погледнах видях, че регексите съм ги пооплескал. Оправих ги и сега мисля, че са наред. Грешката, е че аз написах  /[a-zA-Z ]+/g;  вместо /^[a-zA-Z ]+$/g; Засъжаление не се сетих да ги тествам на място щях да се осетя, че не бачкат

Линк

1
EBojilova avatar EBojilova 330 Точки

И аз си открих същата грешка след изпита, ама това е положението. Не съм тествала на място :) 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.