mixed $some_var;

09 Dec 2004

A jednak nie jestem za zamordziem silnych typów. Tak też sobie doszedłem do wniosku próbując przenieść (czego to się dla sportu/z nudów nie robi w przerwie w pracy) kawałek kodu z PHP4 na C#, potem Javę (lub raczej moje chwiejne kroczki w Javie). Kawałek ów zakładał wykorzystanie wzorca strategii do walidacji identyfikatora (be it NIP, PESEL, nr buta czy książeczki WR). Generalnie, chodzi o działanie na stringach, a gdy te staną się już liczbami, działanie na liczbach. O ile sztuczka ta w PHP wykonywalna jest za strzeleniem z palców, to w językach z silną kontrolą typów nie jest już tak łatwo.

Pamiętam jak będąc małym szczeniaczkiem nabyłem książkę wydawnictwa BUM Ogólne struktury danych, w której autorka (Agnieszka, nazwiska nie pomnę) rzeźbi przez 50 stron metody porównujące liczby dla różnych typów. A było to wszystko dla Pascala, więc i typów niemało (byte shortint word integer longint real comp(?) char string datetime i co tam jeszcze się plątało).
Dla mnie? Absurd. Już lepsze byłoby zastosowanie makra preprocesora C. A najwygodniej byłoby mieć w swoim $FAVOURITE_LANG konstrukcję pozwalającą na opuszczenie kontroli typów. Tak jest. Właśnie w ten sposób - co nie jest dozwolone jest zabronione, chcesz się wyluzować od silnych typów to weź to powiedz (czyli zupełnie inaczej aniżeli w PHP, nad czym bardzo boleję). W ten sposób do porównania integera z realem pani Agnieszce nie byłaby potrzebna żadna dodatkowa metoda, a przez co książka ta (bardzo dobrze wyjaśniająca ideę stosu i kolejki dla nie-assemblerowców) byłaby dużo chudsza, jeśli w ogóle byłoby ją po co wydawać.

Jeszcze jedno przypomniało mi się w kontekście Pascala i książki pani Agnieszki. Typy proceduralne/funkcyjne. Świetna rzecz.
Type TCompareFunc = function (arg1, arg2 : Integer) : Shortint
Daleko bardziej intuicyjne niż wskaźniki do funkcji w C. Też bardzo mi brak tego w PHP - do znudzenia będę płakał nad przekazywaniem funkcji przez literał w tym chorym skarłowaciałym języczku programowanka.

Z Pascala wiele już nie pamiętam i wypadłem z wprawy w wykorzystywaniu tych skrawków możliwości, jakie dawał, ale wydaje mi się, że 36 × 1015 funkcji porównujących można byłoby zastąpić prostym trikiem z jawnym rzutowaniem argumentów przekazanych jako Pointer na konkretny typ. Jako hardkorowego fanatyka Pascala te piekielne oszustwa rodem z C przerażały.

Hmm, chyba znalazłem źródło swojego pragnienia silnych typów ;-)

Digg del.icio.us StumbleUpon Wykop Reddit Folksr

permalink | trackback | rss

 
 
str()

...i nie rowery a samochody, i nie rozdają a kradną. Autorka nazywa się Agata Lesicka.

Jajcus

Spodobałoby ci się traktowanie funkcji przez Pythona. Tam to jest zwykły obiekt (nic dziwnego "", czy 1 to też są obiekty), który można sobie dowolnie przekazywać, a nawet dynamicznie tworzyć (i to niekoniecznie kompilując stringa) -- np. po prostu robisz funkcję która przyjmuje regexp i zwraca funkcję walidującą dowolny ciąg. Co więcej można zrobić obiekt, który będzie się zachowywał jak funkcja mimo że będzie instancją zwykłej klasy.
Oczywiście języki funkcyjne idą jeszcze dalej (ale raczej w nieco/zupełnie innym kierunku), ale do programowania funkcyjnego to trzeba się całkiem przestawić.

Agata

Ze tez po takim czasie ktos pamieta te stara ksiazke???:)

Ale chyba nie zrozumial pan o co w niej chodzilo...

Z podrowieniami,
Autorka

str()

Czy to na prawdę Pani? Wobec tego jest mi niewymownie miło gościć tutaj Panią. Jestem winien ogromnie podziękowania za to, że dzięki Ogólnym Strukturom Danych przestałem traktować obiekty jako wygodniejsze zamienniki Unitów, że doceniłem doniosłe znaczenie hermetyzacji, enkapsulacji, zamknięcia na modyfikację przy pozostaniu otwartym na zmiany. Nie pamiętam z tamtych czasów żadnej książki, która przedstawiałaby teorię OOP dobrze. Pani pokazała to w praktyce.

Proszę jednak przyznać, że nie wszystkie funkcje typu CompareFunc były niezbędne: DateTime jest długą liczbą, więc rozbijanie go do pól rekordu i porównywanie każdego z nich w logice trójstanowej jest niecelowe. Oczywiście tracimy wówczas takie "szczegóły" jak przenośność i niezależnośc od platformy, ale w mrocznych czasach DOS-a i TP7 owe szczegóły można było spokojnie traktować bez cudzysłowia.

Agata

Ta ksiazka byla pochodna mojej pracy magisterskiej pisanej pod opieka p. Andrzeja Marciniaka na Politechnice Poznanskiej :) Milo mi, ze ktos czegokolwiek sie z niej nauczyl. Pana wypowiedz znalazlam zupelnie przez przypadek i bylam na prawde zaskoczona, ze ktos odwoluje sie do tak starej ksiazki. Pewnie ma Pan racje, kilka rzeczy moznaby na pewno napisac inaczej, czy poprawic...
Dla mnie to takie stare dzieje, a i moja kariera zawodowa daleko odeszla od "obiektow" :)
Pozdrowienia,
Agata Lesicka
P.S.
Wszystkie wypowiedzi napisane z uzyciem IE :)

Dago

Bardzo miło trafić na Pani ślad Pani Agato :-)
Dawany, bardzo kłopotliwy uczeń :-)
Pozdrawiam serdecznie.

Your turn:

nick:
and?:
www (if any):
Wpisz kod:code
mixed $some_var; php dynamiczne agata lesicka