Konrad Karpieszuk

Konrad Karpieszuk WordPress Plugin
Compatibility
Assurance for WPML

Temat: Po co to całe typowanie?

witam

Nie znam Javy (upraszczając), ale postanowilem zadac to pytanie tutaj bo jesli chodzi o typowanie, to wlasnie ten jezyk jako pierwszy przychodzi mi na mysl :)

Programuje jedynie w PHP, gdzie nie musze sie przejmowac czy tworzona przeze mnie zmienna ma byc int, double itd. Moge swobodnie zmieniac typy w czasie zabaw ze zmienna, a jak potrzebuje aby faktycznie w danym momencie miala konkretny typ, to go rzutuje (afaik podobnie jak w Javie, przez dopisanie typu w nawiasie przed zmienną).

I zawsze sie zastanawiam czy wymuszanie tak silnego typowania w Javie - nie tylko dla zmiennych ale i chocby obiektow - w czyms pomaga? Mozecie mi to wyjasnic? Czy dzieki temu lepiej sie programuje, a moze dzieki temu ze zmienna z gory ma okreslony typ, kompilator (czy tez interpreter, nie wiem co jest w javie) szybciej dziala?

Nie zrozumcie mnie zle: nie przyszedlem tu by powiedziec, ze typowanie jest zle. Chce sie dowiedziec co daje dopisanie tego typu przy definiowaniu zmiennej/klasy. Bo zakladam ze cos daje, tylko ze ja nie wiem co.

konto usunięte

Temat: Po co to całe typowanie?

W skrócie :kosztem pewnej elastyczności zmniejszasz zakres nieczytelności kodu.
Jest to dosyć istotne przy tzw. Inżynierii wstecznej. Kiedy masz projekt wykonywany przez zespół kilkunastu/kilkudziesięciu osób (z czego połowa to studenci) wizja szukania czy zmienna o wdzięcznej nazwie $aaa, na którą natrafiłeś w trakcie korzystania z cudzego kodu jest w danej chwili samochodem, wypłatą czy też po prostu double jest wizją mroczną.

Z drugiej strony pewne środowiska postępowe, które wykształciły sposoby na neutralizację szkód poczynionych w kodzie przez pseudoprogramistów zauważyły ograniczenia Javy stąd coraz większa popularność scali i innych takich.

A teraz pytanie do ciebie. Jakie konkretnie korzyści zyskujesz mając zmienną typu zmiennego?
Konrad Karpieszuk

Konrad Karpieszuk WordPress Plugin
Compatibility
Assurance for WPML

Temat: Po co to całe typowanie?

Paweł Włodarski:
A teraz pytanie do ciebie. Jakie konkretnie korzyści zyskujesz mając zmienną typu zmiennego?

pewnie niewielkie, ale:

- szybciej pisze kod. zamiast:
Klasa instancja = new Klasa(); (jesli nie pomylilem, jak pisalem nie znam Javy)

pisze po prostu:
$instancja = new Klasa();

(wiem ze to drobiazg)

- drugie to operacje matematyczne na liczbach.
jak dam:
$wynik = $liczba / 2;
wiem, ze jesli $liczba = 3 to wynik zawsze bede mial 1.5. W Javie afaik musze sie upewnic ze $liczba to double (tak wiem, to tez kwestia dopisania slowa).

Po prostu pierwsze co mysle jak widze te typy to to, ze w kodzie jest za duzo wyrazow :)

konto usunięte

Temat: Po co to całe typowanie?

Nie jestem w stanie wymyślić wszystkich zalet i wad obu rozwiązań ale mam dwa spostrzeżenia:

* w php jest zawsze burdel

* jak eclipse wie, jaki ma obiekt, to ładnie mi podpowiada metody
Roger Zacharczyk

Roger Zacharczyk Programista (gry,
webserwisy,
aplikacje użytkowe),
fotograf

Temat: Po co to całe typowanie?

Konrad Karpieszuk:
- drugie to operacje matematyczne na liczbach.
jak dam:
$wynik = $liczba / 2;
wiem, ze jesli $liczba = 3 to wynik zawsze bede mial 1.5. W Javie afaik musze sie upewnic ze $liczba to double (tak wiem, to tez kwestia dopisania slowa).

Po prostu pierwsze co mysle jak widze te typy to to, ze w kodzie jest za duzo wyrazow :)
To teraz pozyskaj część całkowitą z wyniku :P
Maciej Nowicki

Maciej Nowicki Java Developer

Temat: Po co to całe typowanie?

Konrad Karpieszuk:
Paweł Włodarski:
A teraz pytanie do ciebie. Jakie konkretnie korzyści zyskujesz mając zmienną typu zmiennego?

To co wymieniłeś jako zalety, ja zaliczyłbym do największych wad braku ścisłej (jawnej) kontroli typów, powodujących, że obiema rękoma podpisuję się pod stwierdzeniem, że "kto się w pehapie połapie".
- szybciej pisze kod. zamiast:
Klasa instancja = new Klasa(); (jesli nie pomylilem, jak pisalem nie znam Javy)

pisze po prostu:
$instancja = new Klasa();

I super. Dzięki temu wiem, że dalej w kodzie zmienna instancja będzie instancją klasy Klasa lub jej podklasy. A w php? Co tylko dusza zapragnie, have a nice debugging time ;)
- drugie to operacje matematyczne na liczbach.
jak dam:
$wynik = $liczba / 2;
wiem, ze jesli $liczba = 3 to wynik zawsze bede mial 1.5. W Javie afaik musze sie upewnic ze $liczba to double (tak wiem, to tez kwestia dopisania slowa).

Właśnie nie zawsze, bo wszystko zależy od tego, co będziesz miał w $liczba. A co jeżeli wcześniej zrobisz $liczba = "du.a"? Albo co gorsza, w czasie wykonania programu następi taka sytuacja? W Javie to niemożliwe, błąd zostanie wyłapany już na etapie kompilacji, właśnie dzięki jawnemu typowaniu. Dopiero w Javie masz pewność jaki będzie wynik, oczywiście w zależności od typu zmiennych wynik i liczba.

Do tego dodajmy oczywiście znaczny wzrost szybkości.

konto usunięte

Temat: Po co to całe typowanie?

1. To, czy eclipse podpowiada, czy nie, nie wynika z silnego typowania.
2. "Ciężko się połapać w php" - to nie język, tylko programiści robią burdel - faktem jest, że PHP na burdel pozwala w większym stopniu niż Java, ale zarówno tu jak i tu można stworzyć dobry i zły model obiektowy, który będzie miał swoje konsekwencje.
3. Z pierwszego posta wynika, że PHP nie posiada typowania (?!) co jest bzdurą. M/w taką jak ocena moralna tegoż (dobre/złe).
4. Typowanie w Javie jest statyczne i silne.
5. Typowanie w PHP jest dynamiczne i słabe.
6. Typowanie statyczne oznacza określanie typów zmiennych w kodzie źródłowym, czyli przed kompilacją czy interpretacją kodu. Typowanie dynamiczne dostosowuje typ zmiennej podczas działania aplikacji.
7. Typowanie silne wymusza kontrolę typów zmiennych - nie wykonamy na stringu operacji przeznaczonej dla integera. Typowanie słabe odwrotnie: de facto implikuje niejawne rzutowanie.
8. Tak, typowanie może być dynamiczne i silne (np. w Pythonie).
9. Ciężko tłumaczyć zalety i wady jednego i drugiego typowania osobie, która nie wie co to typowanie.
10. Wiesz czym jest przekazywanie przez wartość a czym przez referencję? Wiesz czym są wskaźniki (w Javie: referencje)?

konto usunięte

Temat: Po co to całe typowanie?

.Ten post został edytowany przez Autora dnia 04.08.16 o godzinie 20:50

Temat: Po co to całe typowanie?

Na początek może trochę historii. Kiedyś, w powszechnym użytku były języki o słabej typizacji. Mam tu na myśli Fortran, Cobol, Lisp, Ada jak również C. Tak tak C jest językiem o słabym typie. Efekt pisania programów w tych językach był taki, że zawierały mnóstwo błędów, które wychodziły na etapie uruchamiania oprogramowania i były trudne do lokalizacji. W większości przypadków z powodu tego, że człowiek jest istotą omylną i tyle. Pociągało to za sobą straszne nakłady środków na etapie testów. Dokładnie chodzi o testy białe, czy jak kto woli inspekcję kodu. W swojej książce Ian Sommersville - "Inżynieria oprogramowania" podaje, że nakłady z tym związane sięgały nawet 50% kosztów wytworzenia oprogramowania. Ilość błędów jaką znajdywano tą metodą sięgała (o ile dobrze pamiętam) koło 60% wszystkich błędów jakie oprogramowanie zawierało.

Jak to jest dziś, czyli od wprowadzenia C++. Otóż większość z tych błędów (ponad 90%), których znalezienie kiedyś wymagało posadzenia sztabu ludzi dziś są automatycznie wyłapywane już na etapie kompilacji, czy jak to Dariusz Wawer wskazał bezpośrednio w Eclipse po przez bieżącą analizę leksykalną, semantyczną i składniową drzewa AST.

Zyski

Dla programisty - więcej luzu i większa produktywność poprzez możliwość przeniesienia wysiłku z jak to zapisać na co ma być zapisane.

Dla produktu - szybszy czas wytworzenia, przy minimalnej ilości (czeskich) błędów.

Dla firmy i produktu - mniejszy koszt wytworzenia = większe zyski lub większa konkurencyjność. Proszę pamiętaj, że czas też jest kosztem.
Konrad Karpieszuk

Konrad Karpieszuk WordPress Plugin
Compatibility
Assurance for WPML

Temat: Po co to całe typowanie?

musze przyznac, ze zrozumialem :) zwlaszcza jak sobie przypomnialem ile czasu zdarza mi sie spedzic na znalezieniu powodu dlaczego:

jakasFunkcja('param= . $zmienna');

nie dziala (a ostatecznie okazywalo sie, ze $zmienna jest tablicą liczb, a nie jak sie spodziewalem liczbą) ;)

----

pytanie oftopicznie: odnosnie wspomnianej przez Piotra inżynierii oprogramowania. czy ktoś zna jakieś wykłady online na ten temat? Obecnie ogladam sobie http://bit.ly/gC3bwh ale doszedlem do wykladu 6. i zauwazam, ze nie jest to to, czego oczekiwalem (tam sa podstawy programowania, a szukam jakichs wykladow, ktore naucza mnie pisac sprytniejszy, szybszy kod w krotszym czasie)

I jako, ze pytanie jest oftopiczne: czy jest tu na GL jakas grupa zajmujaca sie tym tematem?

Temat: Po co to całe typowanie?

Konrad Karpieszuk:
musze przyznac, ze zrozumialem :) zwlaszcza jak sobie przypomnialem ile czasu zdarza mi sie spedzic na znalezieniu powodu dlaczego:

jakasFunkcja('param= . $zmienna');

nie dziala (a ostatecznie okazywalo sie, ze $zmienna jest tablicą liczb, a nie jak sie spodziewalem liczbą) ;)

----

pytanie oftopicznie: odnosnie wspomnianej przez Piotra inżynierii oprogramowania. czy ktoś zna jakieś wykłady online na ten temat? Obecnie ogladam sobie http://bit.ly/gC3bwh ale doszedlem do wykladu 6. i zauwazam, ze nie jest to to, czego oczekiwalem (tam sa podstawy programowania, a szukam jakichs wykladow, ktore naucza mnie pisac sprytniejszy, szybszy kod w krotszym czasie)

I jako, ze pytanie jest oftopiczne: czy jest tu na GL jakas grupa zajmujaca sie tym tematem?

Dzisiaj mam chyba wenę na pomaganie ludziom ;)

Inżynieria oprogramowania to cały proces wytwarzania oprogramowania i z samym pisaniem kodu ma niewiele wspólnego.

Jeżeli poszukujesz informacji dotyczącej, sprytniejszego i ładniejszego kodowania polecam trzy publikacje szeroko wykorzystywane także w środowiskach akademickich na całym świecie:

1) Cormen T. H., Leiserson C. E., Rivest R. L., Stein C.: Wprowadzenie do algorytmów, WNT, Warszawa 2004.

2) Bentley J.: Perełki oprogramowania, WNT, Warszawa 1992.

3) Knuth D. E.: Sztuka programowania tomy I–III, WNT, Warszawa 2002.

Jako czwarte źródło, zakrawające już o architekturę, polecam zapoznanie się z wzorcami projektowymi.

Uwaga wszystkie publikacje są ciężkie w odbiorze i wymagają dużo skupienia w celu zrozumienia, co tam jest napisane.

konto usunięte

Temat: Po co to całe typowanie?

Konrad Karpieszuk:
jakasFunkcja('param= . $zmienna');

Mógłbyś wyjaśnić tę składnię? Bo mówimy o PHP, tak?
temat? Obecnie ogladam sobie http://bit.ly/gC3bwh

Pod tym linkiem jest "MediaMarkt jest jednak dla idiotów".
ale doszedlem do wykladu 6. i zauwazam, ze nie jest to to, czego oczekiwalem (tam sa podstawy programowania,

Podobnie jak statyczne typowanie.
a szukam jakichs wykladow, ktore naucza mnie pisac sprytniejszy, szybszy kod w krotszym czasie)

W jakim języku? // Tak, ja wiem, że dobry programista to i na drzwiach od stodoły, ale w czymś trzeba się uczyć..Łukasz Karpuć edytował(a) ten post dnia 03.12.10 o godzinie 16:32
Konrad Karpieszuk

Konrad Karpieszuk WordPress Plugin
Compatibility
Assurance for WPML

Temat: Po co to całe typowanie?

Łukasz Karpuć:
Konrad Karpieszuk:
jakasFunkcja('param= . $zmienna');

Mógłbyś wyjaśnić tę składnię? Bo mówimy o PHP, tak?

tak, w javie to chyba bedzie:

jakasFunkcja('param=' + zmienna);

chodzi mi o probe konkatencji stringa z tablicą, podczas gdy w zalozeniu chcialem to zrobic na dwoch stringach
temat? Obecnie ogladam sobie http://bit.ly/gC3bwh

Pod tym linkiem jest "MediaMarkt jest jednak dla idiotów".

to ja jednak nie lapie tego bit.ly bo juz ktorys raz mi cos takiego robi

http://tinyurl.com/34tw6y8
W jakim języku? // Tak, ja wiem, że dobry programista to i na drzwiach od stodoły, ale w czymś trzeba się uczyć..

w angielskim lub polskim :) jesli pytasz o jezyk programowania najlepiej by bylo php, ale moga byc i inne. w tamtych wykladach jest wlasnie java i specjalnie mi to nie przeszkadza
Konrad Karpieszuk

Konrad Karpieszuk WordPress Plugin
Compatibility
Assurance for WPML

Temat: Po co to całe typowanie?

Piotr Rusoł:
Inżynieria oprogramowania to cały proces wytwarzania oprogramowania i z samym pisaniem kodu ma niewiele wspólnego.

no wiem. w tych wykladach co ogladam wykladowca na poczatku powiedzial, ze sama znajomosc jezyka programowania nie czyni dobrym programista, tak samo jak sama znajomosc jezyka angielskiego nie czyni dobrym pisarzem. to mnie zachecilo do dalszego ogladania, tymczasem przy 6. wykladzie nadal ucze sie czym jest zmienna, czym funkcja, jakie mamy rodzaje operatorow... to wszystko znam i to wlasnie po prostu nauka jezyka, a nie tego jak dobrze programowac. (ale moze facet sie jeszcze rozkreci)

Temat: Po co to całe typowanie?

Konrad Karpieszuk:
Piotr Rusoł:
Inżynieria oprogramowania to cały proces wytwarzania oprogramowania i z samym pisaniem kodu ma niewiele wspólnego.

no wiem. w tych wykladach co ogladam wykladowca na poczatku powiedzial, ze sama znajomosc jezyka programowania nie czyni dobrym programista, tak samo jak sama znajomosc jezyka angielskiego nie czyni dobrym pisarzem. to mnie zachecilo do dalszego ogladania, tymczasem przy 6. wykladzie nadal ucze sie czym jest zmienna, czym funkcja, jakie mamy rodzaje operatorow... to wszystko znam i to wlasnie po prostu nauka jezyka, a nie tego jak dobrze programowac. (ale moze facet sie jeszcze rozkreci)

Zawsze będziesz się z tym stykał na każdym kroku - nawet w pierwszych trzech publikacjach. Chodzi o to jak je czytasz. Czy patrzysz na tekst i zastanawiasz się co to jest funkcja? Czy może patrzysz na kod i znając cel jaki przyświecał jego powstaniu zaczynasz dochodzić dlaczego ktoś zapisał to tak a nie inaczej.

konto usunięte

Temat: Po co to całe typowanie?

Konrad Karpieszuk:

tak, w javie to chyba bedzie:

jakasFunkcja('param=' + zmienna);

chodzi mi o probe konkatencji stringa z tablicą, podczas gdy w zalozeniu chcialem to zrobic na dwoch stringach

Konkatenacja zwykle dotyczy tylko stringów ;) pytam, bo:
- tego raczej nie powinno się robić przy wywołaniu funkcji
- dziwnie to wygląda, ale rozumiem, że to przykład
- jakasFunkcja('param=' . $zmienna); - jak rozumiem, w Twoim przykładzie była pomyłka?
W jakim języku? // Tak, ja wiem, że dobry programista to i na drzwiach od stodoły, ale w czymś trzeba się uczyć..

w angielskim lub polskim :) jesli pytasz o jezyk programowania najlepiej by bylo php, ale moga byc i inne. w tamtych wykladach jest wlasnie java i specjalnie mi to nie przeszkadza

Ja bym proponował Javę, albo C++ jeśli masz więcej cierpliwości. I naukę od podstaw tych języków, albo jednego z nich.
Konrad Karpieszuk

Konrad Karpieszuk WordPress Plugin
Compatibility
Assurance for WPML

Temat: Po co to całe typowanie?

Łukasz Karpuć:
- dziwnie to wygląda, ale rozumiem, że to przykład

zgadza sie
- jakasFunkcja('param=' . $zmienna); - jak rozumiem, w Twoim przykładzie była pomyłka?

znow sie zgadza :)

konto usunięte

Temat: Po co to całe typowanie?

Nie miałem styczności czysto z PHP, ale przeglądając składnię i słuchając kolegi oraz widząc jego kod programu mogę powiedzieć to co Marcin.

"kto się w pehapie połapie"

Co do Javy, nie jestem jakimś specem, ale Stringa i Tablicy nie połączysz, da się łączyć Stringi. Jeżeli zaczynasz naukę javy, to nie łam się zacznij od podstaw i pisz sam szukaj wiedzy.
Ze swojej strony mogę polecić Ci 2 książki na start:

Java Podstawy (Horstmann)
Java Techniki Zaawansowane (Horstmann)

Miałem kilka innych książek do Javy (np seńor Bruce'a Eckela) i mogę tylko polecić te 2 pomarańczowe z serii CORE. A Eckella lepiej omijaj szerokim łukiem.....(mowa tylko o Java+Eckel)

konto usunięte

Temat: Po co to całe typowanie?

Tak jeszcze napiszę, że lepiej może nie bierz się od razu za Inżynierię Oprogramowania. Znasz wordpressa i php-a... to nieco mało, żeby od razu lecieć w tamtą stronę.

Jeśli chcesz nauczyć się technik optymalnego programowania i sztuczek różnej maści to pobaw się grafiką trójwymiarową (możesz zrobić prostą grę).

Tradycyjnie to się odbywa w C++, ale szlag Cię może trafić, bo jak widzę jesteś już po studiach, więc już i tak dosyć późno na naukę wszystkiego od podstaw. Myślę, że przechodząc z PHP-a mógłbyś się mocno rozczarować, gdy przekroczenie zakresu tablicy zamiast wyrzucić notice (?!) jak w PHP, czy wyjątek w Javie wszystko będzie działać*. Ba! Nawet zwróci nawet co nieco.

Dlatego proponuję Ci Javę. Dużo mniej problemów, w Twojej sytuacji chyba będzie lepsza. Kontrola zakresów, wymuszony obiekt modelowy** (ze statycznym importem nie jest to takie wredne nawet dla przyzwyczajonych do pisania na funkcjach), przenośność, itp. itd.

Przed rozpoczęciem pisania gry dobrze by było poznać struktury danych. Więc naumiej się co to jest stos, co to kolejka, co to lista i czym się różni od tablicy itp. W PHP wszystko to wpiep...li do tablicy asocjacyjnej, a typy z SPL kuleją.

Omijaj tylko Perla.

Pisanie gry to naprawdę fajna sprawa, bo chcesz nauczyć się sztuczek, które powodują tę magię na ekranie i używasz bardzo wielu różnych aspektów (gfx, sfx, input...).

No i się rozpisałem, ale cóż..

--
*albo i nie, zależy na jaki fragment pamięci trafisz
**ta... model obiektowy oczywiście, ale senny jestem chyba ;)
Konrad Karpieszuk

Konrad Karpieszuk WordPress Plugin
Compatibility
Assurance for WPML

Temat: Po co to całe typowanie?

nie, nie :) ja nie chce sie uczyc javy. mi jest z php dobrze i bedzie dobrze dopoki bede mial klientow. podchodze do tego pragmatycznie :)

watek zaczalem bo sie chcialem po prostu dowiedziec, to co juz dowiedzialem sie o typach, dzieki. potem zapytalem o inzynierie, bo mimo wszystko - mimo programowania w php juz chyba z 7 lat - caly czas uwazam sie za kieskiego w tym. programy dzialaja, ale czuje, ze moglbym je pisac sprytniej (szybciej).

kiedys mialem ksiazke o wzorcach projektowych w php, jednak wzialem sie za nia imo za wczesnie i nie przywiazalem do tego wiekszej uwagi. teraz kupilbym ja znowu, ale jak widac ostatnio odkrylem wideo-wyklady za free i szukam czy jest cos o tym na sieci :)



Wyślij zaproszenie do