Wpis z mikrobloga

#javascript #programowanie

Przyznam szczerze, że jako osoba wywodząca się z języków ze statycznym typowaniem i normalną obiektowością, to umieram lekko w środku jak widzę coś w tym stylu:

function Animal(name) {
this.name = name;
}

Samowiszący w powietrzu konstruktor który tak naprawdę tworzy obiekt ale nazywa się funkcja xD W funkcji sobie wsadziłem this bo czemu nie i utworzyłem w niej pole, bo czemu nie xD

class Animal { constructor(name) { this.name = name; } };

Wywali teraz error, bo funkcja a klasa to jedno i to samo xD

class BetterAnimal extends Animal { constructor(name) { super(name); } };

#!$%@? #!$%@?, odziedziczyłem "funkcję" i teraz nazwałem to klasą xD

Chyba zaczynam rozumieć skąd się biorą te memy z JavaScriptem w roli głównej. Jak widzę, że w czasie życia obiektu da mu się modyfikować prototyp i jak utworzymy kolejny obiekt tego typu, to już może mieć w środku co innego, to aż mi się ręce trzęsą jak sobie pomyślę co się może stać jak jakiś "maestro" się do tego dobierze xD
  • 17
  • Odpowiedz
@Khaine: Jak się wie co się robi, to elastyczność javascriptu jest zaletą a nie wadą. Jeżeli się nie wie to się trzyma od tego z daleka ;)
  • Odpowiedz
@Khaine: Nie uda ci się osiągnąć takiego OOP jaki używałeś w innych językach, co nie koniecznie uważam za wadę. Najlepiej zapomnij o JS i zacznij pisać w TypeScript, przeżyjesz mniejszy szok :P
  • Odpowiedz
@Veni: Wiadomo, że da się tego używać po ludzku, ale już widziałem co potrafią ludzie odwalać nawet w językach gdzie się pilnuje typów i tego co się dzieje znacznie bardziej, więc już mi wyobraźnia podpowiada jaką wesołą sesję debugowania może jakiś "miszcz kodowania" załatwić w JSie.

@miglanc102: Na razie to się bawię i sprawdzam czy w ogóle da się tutaj chociaż udawać obiektowość w pseudo-klasycznym wydaniu.

Nie uda ci się
  • Odpowiedz
@kebab-case: Tak się bawię, jeszcze nie wiem jak będę potem docelowo tego używał. Natomiast faktycznie jako frontend głównie reagujący na zdarzenia, to funkcyjnie pewnie by się tutaj dało porzeźbić.
  • Odpowiedz
@Khaine: Obecnie TS trzyma się mocno specyfikacji JS nie dodając nowych feature które mogłyby kolidować. Typy w TS są równie dziurawe co C# z tym że programiści nadużywają "any". Porozmawiajmy lepiej o programowaniu funkcyjnym, JS i w tym nie jest najlepszy xD ale jest świetny gdy dopiero zaczynasz z FP
  • Odpowiedz
@Khaine: ale czego w sumie oczekujesz po dynamicznym języku? Przecież nie zabroni ci tak napisać w czasie kompilacji, a dopiero w czasie interpretacji zrozumie co tam nabazgrałeś. Zupełnie inne przeznaczenie, i w sumie nie wyobrażam sobie pisać frontu w statycznych językach bo #!$%@? bym dostał.

Zawsze jest Ruby jak chcesz się pobawić inaczej ( ͡° ͜ʖ ͡°)
  • Odpowiedz
Zawsze jest Ruby jak chcesz się pobawić inaczej ( ͡° ͜ʖ ͡°)


@Czarzy: Nie wszystko na raz ( ͡º ͜ʖ͡º) Najpierw wolę ogarnąć jakiś fullstack w "standardzie przemysłowym" czyli np. C# + HTML/JS/CSS.
  • Odpowiedz
@Khaine: Błędem jest uważanie, że klasy w Javascript to to samo, co klasy w innych językach programowania. Gdyby każdy język był skonstruowany tak samo, to po #!$%@? w ogóle istniałyby jakiekolwiek inne? Javascript konsoliduje różne paradygmaty programowania, a brak wiedzy, że funkcje w JS są obiektami, podobnie jak klasy(prototypy) i narzekanie, że nie są tym samym co w innym języku to absurd.
Tak, można w Javascript tworzyć koszmarny kod. Co nie
  • Odpowiedz
Jak się wie co się robi, to elastyczność javascriptu jest zaletą a nie wadą. Jeżeli się nie wie to się trzyma od tego z daleka


Jak programista może rzucić takim argumentem? Czyli nie można być początkującym w js?
xD #!$%@?
  • Odpowiedz
@szeryfe: Wrzuć pan troszkę na luz ;) Bo chyba żeś za poważnie podszedł do tego co napisałem ;)
Oczywiście, że można być początkującym - każdy kiedyś takim był. Natomiast co do słów:
"Jak się wie co się robi, to elastyczność javascriptu jest zaletą a nie wadą" - tutaj chyba nie ma nic niezgodnego ze stanem faktycznym.
"Jeżeli się nie wie to się trzyma od tego z daleka" - a tu nie
  • Odpowiedz
@Khaine: Bo w JS nie ma klas, są funkcje.

class Animal { constructor(name) { this.name = name; } };
to tylko syntactic sugar na

var Animal = (function () {
function Animal(name) {
this.name = name;
}
return Animal;
}());
  • Odpowiedz
@Khaine: z punktu widzenia 'true' oop js jest bardziej obiektowy niż Java czy c# bo np pozwala właśnie na luźniejsze tworzenie obiektow. Tak naprawdę to klasy w javie/c# powinny być traktowane jako właśnie funkcje tworzące obiekty i nic więcej. Najważniejsze jest żeby obiekt implementowal jakoś (nieważne jak) typ (interfejs) za pomocą którego jest potem używany. Będąc w zgodzie z oop dozwolone jest używanie nazwy klasy tylko podczas tworzenia obiektu z słówkiem
  • Odpowiedz