Креш - тест : оцінка рівня написання JavaScript - коду
пише:
- Оцініть, будь ласка, рівень написання коду - http://demenkov. dp.ua/dou / .
Що добре, що погано, і в якому напрямку зосередити зусилля по підвищенню своєї кваліфікації?
Я почитав код і в цілому, потрібно сказати, вс? досить непогано. Тобто всі мінуси, які я пишу нижче, це не якісь глобальні проблеми, а різні дрібниці.
Очевидно, що за трьома таких прикладів оцінити рівень мені складно, але якщо б я таке побачив на співбесіді, я б швидше за все людини взяв ;)
Отже, по мінусів:
- Це не має відношення до саме скілів програмування, але вс? ж. Стилістика кульгає. Тобто прогалини, то їх немає: у перерахуванні аргументів функції, після слів if/for, при присвоєнні, і т.п. Це дратує, якщо чесно, трохи важко читати конструкції «for (i = 0; i
- Рядки, як керуючі елементи - це неправильно. У них можна помилитися і ніколи цього не дізнаєшся. Конкретне місце - в першому прикладі функція manipulateBlock. Якщо так хочеться відкривати/закривати однією функцією, можна було зробити параметр-boolean, або що-небудь таке. Або chartMode. Я б виділив з drawData якийсь хелпер і зробив би дві функції, одну для малювання ліній, іншу - для гістограм.
- Той же manipulateBlock. Цикл for ід?т по всьому дівам, незважаючи на те, що потрібний існує всього один. Чи не простіше було зробити функцію getBlock, яка бер?т айдішнік і по ньому знаходить і повертає блок? Тоді й сенсу в одній функції на збереження і видалення не оста?тся. Більш того, можна було id ложить не в атрибут idblock (який, до речі, не існує, для них рекомендують використовувати атрибути data-*), а просто в id - і тоді getElementById, і справа в капелюсі.
- Один хендлер на всі івенти - спірне рішення, і більш того, onclick? addEventListener ж.
- Маленька (зовсім) помилка проектування. У другому прикладі getData, якщо це буде Аяксова функція, не зможе нічого повертати. Їй потрібен коллбек.
- Знову пошук таблиці (в 3 прикладі) за допомогою циклу. getElementsByTagName ("table") [0]?
- Не розумію, навіщо постійно використовувати worker.что-то, якщо можна this.что-то?
Фух, закінчив начебто. В цілому вс? кл?во, я досить прискіпливий, мені здається. Принаймні, у нас в команді я очевидно найприскіпливіший, так що не напружуйся сильно.
Мій варіант вирішення завдання № 1
Він працює ідентично оригінальному . Я не міняв стилі/HTML (практично), тільки замінив JavaScript.
Я виділив окремо функції роботи з меню, блоками, і просто загальні хелпери. Це спрощує тестування (можна тестувати кожен рівень функціональності окремо), і розуміння - легше зрозуміти, хто за що відповідає.
Наприклад, рівень обробки блоків нічого не знає про меню і не в курсі про структуру DOM, меню спокійно собі тасує дані і майже не в курсі про блоки (ну, трохи в курсі, звичайно ;)).
Один з івент-Хендлер робить трохи більше, ніж я хотів би (аппендіт блок до батьківського елементу), але при такій кількості коду я не бачу сенсу про це багато думати. Ну і в цілому я постарався організувати/відформатувати код так, щоб це було легко читати.
Можна було б, до речі, загорнути блоки в об'єкти, і т. д., але великого сенсу це не нес?т. Тут не треба менедж занадто складні структури і не передбачається розвитку коду, тому зберігання даних в DOM цілком нормально працює.
Удачі!
P.S. І англійський потрібно Імпрув, якщо написи у другому прикладі - не опечатки/etc. Про ч?м ти знаєш, напевно.
Опубліковано: 08/10/12 @ 07:52
Розділ javascript
Рекомендуємо:
Андрій Балушка , Школа тестирование : «Немає змісту вчитува Всіх підряд , просто щоб заробляті гроші»
Спам : від тушонки до світового панування
значення реклами
Лікувати будемо на відстані
Призначення і форма проведення тренінгів