Jak korzystać z pisania kaczego w javascript bez zawsze sprawdzania właściwości i metod?
Proste: nie zawsze sprawdzaj właściwości i metody.
W Ruby to, co nazywasz, nazywa się „pisaniem kurczaków”. W dynamicznie pisanym języku, po prostu ufasz, że osoba dzwoniąca przekazuje ci odpowiedni obiekt. Zadaniem dzwoniącego jest uhonorowanie jego strony kontraktu.
Wiem, że javascript używa pisania kaczego i na początku myślałem, że to ułatwi polimorfizm w porównaniu do silnie pisanych języków, takich jak C #.
Mylisz tutaj wiele prostopadłych osi pisania. Istnieją cztery prostopadłe osie pisania:
- Kiedy : dynamiczne pisanie (typy nie są znane i sprawdzane do czasu uruchomienia) vs. pisanie statyczne (typy są znane i sprawdzane przed uruchomieniem)
- Co : pisanie kaczką (typy oparte na zachowaniu ), pisanie strukturalne (typy oparte na strukturze ) i pisanie nominalne (typy oparte na nazwie )
- Czy ich widzisz? pisanie jawne (typy muszą być jawnie opatrzone adnotacjami) a pisanie niejawne (typy są wywnioskowane)
- mocne pisanie vs. słabe pisanie - być może zauważyłeś, że nie nadałem temu chwytliwemu tytułowi ani wyjaśnienia w nawiasach, ponieważ w przeciwieństwie do siedmiu powyższych terminów, z których każdy ma jedną powszechnie akceptowaną precyzyjną definicję, te dwa terminy mieć około tuzina częściowo rozpowszechnionych niejasnych definicji, które są sobie przeciwne; najlepiej unikać tych terminów, a jeśli musisz ich użyć, najpierw je dokładnie zdefiniuj
Ponieważ wspomniałeś o C #: najczęściej jest to typowanie statyczne, ale obsługuje typowanie dynamiczne poprzez typ dynamic
, to jest typowo typowe, ale typy anonimowe używają typowania strukturalnego, a wzorce składniowe (takie jak składnia rozumienia zapytania LINQ) mogą być argumentowane jako kaczka -typowy lub strukturalny, najczęściej jest jawnie wpisany, ale obsługuje niejawne pisanie argumentów typów ogólnych i zmiennych lokalnych (chociaż wielkość zmiennych lokalnych jest raczej dziwna w porównaniu do większości innych języków, ponieważ nie można po prostu pominąć tego typu, zamiast tego należy nadaj mu wyraźny pseudo-typvar
, innymi słowy, jeśli chcesz typ niejawny, musisz to wyraźnie powiedzieć). Jednak to, czy C # jest silnie, czy słabo typowany, zależy od tego, której definicji dwóch terminów używasz, jednak zauważ, że w C # może występować wiele błędów typu środowiska wykonawczego, szczególnie z powodu niebezpiecznej kowariancji macierzy.
Wiem, że po prostu nie mogłem sprawdzić, ale śledzenie błędów w czasie wykonywania javascript może być koszmarem, ponieważ nie zawsze zdarzają się tam, gdzie błąd występuje w kodzie.
Debugowanie nie jest łatwą umiejętnością do nauczenia się. Istnieją jednak techniki ułatwiające debugowanie, np. Saff Squeeze to technika opisana przez Kent Beck, która używa testów i refaktoryzacji do debugowania:
Testowanie regresji i wyciskanie Saffa
Kent Beck, Three Rivers Institute
Streszczenie: Aby skutecznie izolować defekt, zacznij od testu na poziomie systemu, a następnie stopniowo dołączaj i przycinaj, aż uzyskasz możliwie najmniejszy test demonstrujący defekt.