-
Data: 2019-01-11 21:31:44
Temat: Re: Jaki język polecić początkującemu? - komentarz do artykułu w Programista 9/2018
Od: AK <n...@n...net> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 2019-01-11 19:14, g...@g...com wrote:
> W dniu czwartek, 10 stycznia 2019 15:47:22 UTC+1 użytkownik AK napisał:
>
>> Metkowanie.
>> 1. Obiekty w Pythonie sa wylacznie "metkowane".
>> Kopiowane sa wylacznie prymitywy (int , float, bool i.. i chyba tyle).
>
> Tzn. przekazywane przez referencję?
Nie. To jednak nie jest to samo co referencja w C++ czy innej
Javie.
>
>> 2. definicja funkcji to jest _statement_ wiec wszystko co podlega
>> ewaluacji, jest _wlasnie wtedy_ ewaluowane.
>> Stad wartosci domyslne sa ewaluowane w momencie wykonania
>> _statementu_ def function().
>
> A jakie są pozostałe "statementy"?
Takie jak w manualu.
>>>> Kwestia czy zle (przylaczam sie do twierdzenia ze jest to mylace,
>>>> - choc wylacznie dla poczatkujacych), czy dobrze (przy rekurencji
>>>> przydatne czesto) jest dyskusyjna.
>>>
>>> To może podaj kilka argumentów na rzecz takiego rozwiązania
>>> (bo ja serio nie widzę żadnego)
>>
>> W rekurencji latwo zapamietac jakas "sciezke" wlasnie w takim
>> parametrze.
>>
>> No ale przyklad z tej dyskusji.
>>
>> pierwsze = [2]
>> def jest_pierwsza(liczba, pierwsze=pierwsze):
>> erasto = int(sqrt(liczba) + 0.5)
>> czy_pierwsza = all(liczba % pierwsza for pierwsza in pierwsze
>> if pierwsza <= erasto)
>> if czy_pierwsza: pierwsze.append(liczba)
>> return czy_pierwsza
>>
>> Mozna zapisac tak:
>>
>> def jest_pierwsza(liczba, pierwsze=[2]):
>> erasto = int(sqrt(liczba) + 0.5)
>> czy_pierwsza = all(liczba % pierwsza for pierwsza in pierwsze
>> if pierwsza <= erasto)
>> if czy_pierwsza: pierwsze.append(liczba)
>> return czy_pierwsza
>>
>> Po co tworzyc niepotrzebnie globala/statica jesli jest on potrzebny
>> tylko wewnetrznie?
>> Jak wiadomo Python nie posiada takiej konstrukcji zmiennych/obiektow
>> statycznych funkcji w takim sensie jak C
>>
>> int fun()
>> {
>> static int = 3;
>> }
>>
>> wiec w ten sposob tworzy sie w Pythonie wlasnie zmienne statyczne
>> nie zasmiecajac wyzszego namespace.
>
> Można też użyć do tego celu "domknięcia", albo klasy.
Po co ?
PS: Owszem, Przy wiekszej ilosci danych/atrybutow uzywa sie w Py klasy,
named tuple, slownika, domkniec itp itp.
> Przekazanie parametru rekurencyjnie do funkcji to nic trudnego
Po co przekazywac "z gory" jesli mozna to samo uzyskac
w lokalnym scope ? No po co ? Bo?
>>>> PS: Innym podejsciam jest zastosowanie czegos w rodzaju:
>>>>
>>>> def f(x=on_the_call(None)):
>>>> return x
>>>
>>> Czyli mamy co najmniej dwa złe idiomy zamiast jednego dobrego rozwiązania.
>>
>> Dlaczego zle ?
>> Nie widze w nich nic zlego.
>
> Sam powiedziałeś, że "bywa mylące".
> Ja uważam, że jest mylące z dobrych powodów.
No jesli sie nie czyta wpierw nic o jezyku/manuali
to wszytsko bywa mylace :)
Poza tym to bardzo standardowe idiomy.
Wszedzie w Py spotykane.
>> Zwlaszcza w stosunku do expr w takim Lisp gdzie nawet priorytet
>> opeatorow poszedl do kosza wiec trzeba go wymuszac odpowiednia
>> kolejnoscia ewaluacji i/lub nawiasami (a nawet trzeba wymuszac/okreslac
>> tymiz lewo-prawo-lacznosc operatorow).
>> Np: (* A (* B (* C D))) to co innego niz (* (* (* C D) B) A)
>> Przecie to nieskonczone zrodlo pomylek.
> ?
> Jakich pomyłek?
> W każdym języku f(x, f(y, f(z, w))) to raczej coś innego niż
> f(f(f(z, w), y, x).
Tyle ze przy mnozeniu jest to to samo.
Chodzi o to ze trzeba ciagle pilnowac priorytetow operatorow
(czy kolejnisci) przez odpowednie konstrukcje - czyli na bakier
normalnej metematyce. Notacja Lisp akurat wyrazeniom arytmetycznym
wyraznie szkodzi i nie ma co tego tlumaczyc "elegancja" czy
"czystoscia" paradygmatow jezyka. To syf w uzyciu i tyle!
> I to nie jest "wymuszanie nawiasami lewo-prawo-łączności operatorów",
> bo w Lispie syntaktyczine w ogóle nie ma czegoś takiego.
> Akurat operator mnożenia jest (semantycznie) łączny i przemienny,
> toteż nie ma znaczenia, czy napiszesz tak, czy inaczej.
Ma znaczenie bo w jezykach programowania _istnieja efekty
uboczne_ i kolejnosc ewaluacji (od lewa do prawa) MA
znaczenie.
> Możesz też napisać (* A B C D) albo (* C D B A).
Moge. Tylko czy to wyglada na zapis matematyczny?
Toz to zwykla lista :)
>
>> PS: Tylko mi nie probuj mowic, ze jest inaczej bo drzewiej
>> pisywalem (fakt ze rzadko, nie umialem sie przekonac:) w AutoLispie
>> makra do AutoCADa "cus tam" liczace i... to dla numeryka byl
>> istny koszmar :(
>
> Co ja mam Ci próbować wmówić?
> Jak czegoś nie lubisz, to to Twoja sprawa.
Nie lubie dlatego, ze nie lubie.
Nie lubie, bo sprawia tak wiele niedogodnosci,
ze odciaga od domeny na rzecz młotka.
>
>> W porzadnych jezykach programowania kolejnosc obliczania expr. byla
>> zawsze od lewa do prawa, a priorytet operatorow jest scisle okreslony
>> i dla arytmetycznych zgodny z normalna matematyka.
>
> Lepiej zamiast "normalna matematyka" powiedzieć
> "matematyka, której mnie uczono".
Mnie uczono normalnej a nie (pre-post-s)fiksowanej.
>
>> Oczywiscie C/C++ to popsul bo w nim stwierdzono (z wydumanych wzgledow
>> wydajnosciowych oczywscie:) ze kolejnosc ewaluacji czesci wyrazen jest
>> .. dowolna co rowniez jest zrodlem niekiedy koszmarow (gdy
>> funckcje maja efekty uboczne - a miewaja czesciej niz sie wydaje:).
>
> W "normalnej matematyce" funkcje nie mają efektów ubocznych.
Programowanie "realne" to nie matematyka i efekty uboczne
sa "immanentna czescia" nie tylko C++.
W "moich czasach" nie mowilo sie "funkcje" ale "procedury".
Nazwe "funkcje" (intencjonalnie) zostawialo sie matematyce.
Algol/Simula"
integer procedure A()
begin
end
real procedure A()
begin
end
procedure C()
begin
end
>> PS: Nawiasy nie pomoga. Nawiasy w C/C++ wymuszaja priorytety, ale nie
>> kolejnosc ewaluacji wyrazen.
>> Np takie cus w Algolu, Pascalu, Fortranie, PL/I, Javie, C# czy innym
>> Pythonie:
>> double y = 3;
>> double fun(double x)
>> {
>> y += x;
>> return y;
>> }
>> z = 2 * fun(3) + fun(7);
>> byloby jednoznaczne (wynik 25), ale juz w C/C++ moze to byc
>> albo 25 albo 36 (zaleznie od kierunku wiatru, kompilatora,
>> gestosci Slonca, % w nalewce Szwagra itp).
>
> No i bardzo dobrze.
> Przynajmniej zniechęca ludzi do pisania takich programów.
Masz Ty pojecie o produkcyjnym rzemiosle?
Jesli mozna, to ludzie pisza zle i tyle.
Zaden jezyk przed tym nie uchroni, lecz powinien przynajmniej
zadbac, aby wyniki byly powtarzalne i nie zalezaly od kierunku wiatru.
Jezyki takie jak Algolu/Simula, Pascalu, Modula2, Fortran, PL/I, Java,
Python, C#, VB o to zadbaly. C++ nie.
AK
Następne wpisy z tego wątku
- 11.01.19 22:42 g...@g...com
- 14.01.19 09:36 Maciej Sobczak
- 14.01.19 09:47 g...@g...com
- 14.01.19 10:12 AK
- 14.01.19 10:29 AK
- 15.01.19 08:03 Maciej Sobczak
- 15.01.19 08:12 Maciej Sobczak
- 15.01.19 08:16 Maciej Sobczak
- 15.01.19 08:46 g...@g...com
- 15.01.19 12:28 AK
- 15.01.19 12:32 AK
- 15.01.19 12:44 AK
- 16.01.19 11:13 Maciej Sobczak
- 16.01.19 12:01 g...@g...com
- 16.01.19 12:28 Maciej Sobczak
Najnowsze wątki z tej grupy
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
Najnowsze wątki
- 2024-11-08 Warszawa => Head of International Freight Forwarding Department <=
- 2024-11-08 Warszawa => Key Account Manager <=
- 2024-11-08 Szczecin => Key Account Manager (ERP) <=
- 2024-11-08 Białystok => Full Stack web developer (obszar .Net Core, Angular6+) <
- 2024-11-08 Wrocław => Senior PHP Symfony Developer <=
- 2024-11-08 Warszawa => QA Engineer <=
- 2024-11-08 Warszawa => QA Inżynier <=
- 2024-11-08 Warszawa => Key Account Manager <=
- 2024-11-08 Gdańsk => Software .Net Developer <=
- 2024-11-08 Akumulator Hyundai
- 2024-11-08 Warszawa => Manager/Specialist e-commerce (B2C) <=
- 2024-11-08 Gdańsk => Specjalista ds. Sprzedaży <=
- 2024-11-08 Gdańsk => Kierownik Działu Spedycji Międzynarodowej <=
- 2024-11-08 znaj podstawe
- 2024-11-08 Chrzanów => Specjalista ds. public relations <=