Wpis z mikrobloga

Denerwują mnie te różne konwencje w językach. W takiej Javie, c++ i c# domyślny konstruktor to nazwa klasy. W pythonie to już trzeba wpisać _ init (musiałem dodać spację, bo głupi wykop usuwał znaki ). Dlaczego akurat to? Po co w ogóle te znaki _? Nie mogłoby być po prostu init?

Albo ciągi znaków. W takim c# jak widzisz cudzysłów, to wiesz, że masz do czynienia ze stringiem. W innych językach używają ' albo nawet `. Ehh..

Tak samo łączenie stringów. Znak plusa jest bardzo intuyzyjny i występuje w wielu językach, a taki php wybrał sobie znak kropki.. Ehh..

Albo daty w JavaScript. new Date().getDay() zwróci numer dnia, ale poniedziałek to 1. new Date().getMonth() zwróci numer miesiąca, ale styczeń to 0. Dlaczego raz iterujemy od 0, a w podobnym przypadku od 1?

#programowanie #naukaprogramowania #programujzwykopem
  • 10
@becvvv: _init_ to dużo lepszy pomysł niż nazwa klasy, te podkreślenia można uznać za znak, że metoda nie jest "normalna" i jest wołana w innych kontekstach niż standardowe obiekt.metoda(). Dobrze to ma zrobione typescript: zamiast nazwy klasy mamy słowo kluczowe constructor a najlepiej Rust/Go: nie ma konstruktora, problem rozwiązany xd. Dlaczego nazwa klasy jest bez sensu? Bo konstruktor to konstruktor, pisanie elementów składni języka, które trzymają niepotrzebny kontekst jest
Albo daty w JavaScript. new Date().getDay() zwróci numer dnia, ale poniedziałek to 1. new Date().getMonth() zwróci numer miesiąca, ale styczeń to 0. Dlaczego raz iterujemy od 0, a w podobnym przypadku od 1?


@becvvv: W Polsce pierwszym dniem tygodnia jest poniedziałek ale w niektórych krajach to niedziela jest uważana za pierwszy dzień. Dlatego niedziela to 0 a poniedziałek to 1.
Jeżeli chodzi o getMonth() ma to pewien sens - jak masz
@becvvv: No i masz iterację od 0. Miesiące zwracane przez getMonth() są iterowane od zera. Dni zwracane przez getDay() też są numerowane od 0 (przy czym to niedziela jest dniem zerowym, zgodnie ze zwyczajem numeracji dni w systemie anglosaskim)
@becvvv: Akurat Python ma bardzo dobre rozwiązania w tej kwestii:

1) Init poniewaz to tak naprawde nie jest konstruktor a Inicjalizator a Python tylko celniej dobral nazwe. I tak duzo osob potocznie mowi na to konstruktor.

2) Dzieki tym specjalnym metodom "__" Python definiuje swoj wlasny API dzieki ktoremu mozesz z latwoscia zrobic wlasna klasa ktora ma dostep do funkcji jezyka np. len(). Przez to mamy jawnie nakreslona granice pomiedzy tym