Як ви використовуєте набір качок у javascript, не перевіряючи завжди властивості та методи?
Просто: не завжди перевіряйте властивості та методи.
У Рубі те, що ти називаєш, називається "курячий набір". На мові, динамічно набраній качкою, ви просто довіряєте, що абонент передає вам відповідний об’єкт. Завдання, що телефонує, - поважати його сторону договору.
Я знаю, що JavaScript використовує набір качок, і спочатку я думав, що це полегшить поліморфізм порівняно з сильно набраними мовами, такими як C #.
Тут ви плутаєте кілька ортогональних осей введення тексту. Існує чотири ортогональних осі введення тексту:
- Коли : динамічне введення тексту (типи невідомі та перевірені до виконання) та статичне введення (типи відомі та перевірені перед виконанням)
- Що : типи качок (типи засновані на поведінці ), структурна типізація (типи засновані на структурі ) та номінальна типізація (типи засновані на імені )
- Ви їх можете бачити? явне введення тексту (типи мають бути явно анотованими) проти неявного введення тексту (типи виводяться)
- сильне введення та слабке введення тексту - ви, можливо, помітили, що я не дав цьому влучному заголовку чи поясненню в круглих дужках, це тому, що на відміну від семи термінів, які мають вище, кожен має єдине загальновизнане точне визначення, ці два терміни мають близько десятка напіввживаних розпливчастих визначень, які суперечать один одному; в ідеалі вам слід взагалі уникати цих термінів, і якщо ви повинні їх використовувати, то в першу чергу їх точно визначте
Оскільки ви згадали C #: він здебільшого статично набраний, але підтримує динамічне введення через тип dynamic
, він в основному номінально набраний, але анонімні типи використовують структурну типізацію, а синтаксичні візерунки (наприклад, синтаксис розуміння запитів LINQ) можна стверджувати, що це або качка -типізований або структурно набраний, він здебільшого явно набраний, але підтримує неявне введення тексту для аргументів загального типу та локальних змінних (хоча випадок локальної змінної є досить дивним порівняно з більшістю інших мов, тому що ви не можете просто залишити тип, замість цього вам доведеться надайте йому явного псевдотипуvar
, іншими словами, якщо ви хочете неявний тип, ви мусите це прямо сказати). Незалежно від того, сильно чи слабко набрано C #, важливо визначити два терміни, які ви використовуєте, однак зауважте, що в C # може бути помилок типу виконання, особливо через небезпечну коваріацію масиву.
Я знаю, що я міг просто не перевірити, але відстеження помилок часу роботи JavaScript може бути кошмаром, оскільки вони не завжди трапляються там, де помилка насправді виникає в коді.
Налагодження - це не простий навик навчання. Однак існують методи, які спрощують налагодження, наприклад, Saff Squeeze - це техніка, описана Кентом Беком, яка використовує тести та рефакторинг для налагодження:
Регресійне тестування та видавлювання шафу
Кент Бек, Інститут трьох річок
Анотація: Щоб ефективно ізолювати дефект, починайте з тесту на системному рівні та поступово встромляйте та підрізайте, поки у вас є найменший можливий тест, який демонструє дефект.