Coś dla nieprzekonanych do dynamicznego typowania
Natrafiłem dzisiaj na artykuł Bruce'a Eckela
Strong Typing vs. Strong Testing. Autor, znawca języków programowania,
znany autorytet w tej dziedzinie (autor słynnej książki Thinking in
Java
), opisuje w nim jak przekonał się do dynamicznego typowania
mimo, że wcześniej za jedyne słuszne uznawał statyczne systemy typów.
Oczywiście język z dynamicznym typowaniem, którym się zachwyca, to Python.
Interesująca jest też kontynuacja
tematu — odpowiedź na list profesora, który z poprzednim artykułem
się nie zgadza. Blog Bruce'a
Eckela dodałem do linkowni — czuję, że będę tam często zaglądał.
Miłe jest, że do Pythona przekonuje się coraz więcej znawców poważnych
języków
i miłe jest, że potrafią opisać czemu Python jest taki dobry
— zawsze to kolejne argumenty do przekonania nieprzekonanych. Co do
statycznego typowania, to też nie uważam tego za coś niezbędnego, ale raczej, że
w większości przypadków przeszkadza, jednak nie jestem też przeciwnikiem
wprowadzenia takich, opcjonalnych oczywiście, rozszerzeń do Pythona. Dobrze
czasem jest mieć możliwość zaznaczyć w kodzie dla jakich argumentów jest on
przygotowany. Często jest to istotna informacja dla innych developerów (ale tu
wystarcza odpowiednia dokumentacja) i dla interpretera/kompilatora (pozwala na
lepszą optymalizację krytycznych elementów kodu). Problem polega na tym, żeby
wprowadzić to nie psując przejrzystości i elastyczności języka i aby nie było
to nadużywane.
Śledzenie komentarzy (RSS)
Jesteście obserwowani...
17 marca 2005 11:47:12
Taaa, Eckelowi ostatnio się trochę poprzestawiało. Oprócz statycznego typowania wziął sobie na cel sprawdzane wyjątki w Javie, bo niby strasznie komplikują kod. Jak się ich nie umie stosować, to faktycznie komplikują, a jak ktoś słyszał o łańcuchach wyjątków, to okazuje się, że wszystko jest proste i eleganckie.<br><br>
Co do dynamicznego typowania, to używając często PHP muszę przyznać, że bardzo cierpię z powodu braku statycznego typowania. Mam jakąś funkcję/metodę w klasie, to zanim jej użyję, muszę sprawdzać print_r(...), co ona właściwie zwraca , podobnie trzeba się szarpać z argumentami.<br><br>
Oczywiście sprawę załatwia dokumentacja, tylko, po pierwsze musi być, a jeśli sami coś robimy, to musimy ją sami napisać. I tu jest zabawna rzecz. W Javie JavaDoc sam nam wygeneruje dokumentację dotyczącą typów argumentów i zwracanych wartości. W Pythonie jak te świstaki, zamiast kod pisać, to dziergamy dokumentację. Zmienimy argumenty w metodzie, to w Javie JavaDoc automatycznie to uwzględni, a w Pythonie? Poprawiamy sami, chyba, że zapomnimy<br><br>
Kolejna sprawa, to fakt, że dynamiczne typowanie jest często fikcją, o czym można się łatwo przekonać definiując w Pythonie 'tuple' z jednym elementem, robimy to tak:<br>
<pre>mojatupla = 'hello',</pre><br>
warto zwrócić uwagę na przecinek na końcu, to on wskazuje, że mamy do czynienia nie ze Stringiem a z Tuplą. Ja już wolę oznaczać typ zmiennej słowem kluczowym, niż przecinkiem, ale to już kwestia gustu.<br><br>
Wielu ludzi zapomniało, po co Java została utworzona. Nie tworzone jej, żeby można było w niej pisać programy szybko. Stworzono ją po to, żeby można pisać w niej niezawodne programy, po to statyczne typowanie, wyjątki, maszyna wirtualna itp.<br><br>
W Pythonie, żeby można mieć zaufanie do programu, to trzeba napisać kilobajty testów jednostkowych. W Javie też pisze się bardzo często testy jednostkowe (tam to już jest standard), ale przynajmniej nie trzeba napisać tego tyle, co w Pythonie, bo wiele rzeczy po prostu sprawdza kompilator. I znowu w Javie piszemy kod, a Pythonie odwalamy robotę kompilatora.<br><br>
Z tymi modami na języki programowania, to trzeba uważać... :)