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
@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
@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.
@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ć.
@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
@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 ( ͡°͜ʖ͡°)
@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
@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
@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
Dzisiaj mija 20 rocznica przystąpienia Polski do UE. Unia realnie zmieniła moje życie. Nie wyobrażam sobie Polski poza UE. Zaplusuj, jesli się za mną zgadzasz.
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
@miglanc102: Na razie to się bawię i sprawdzam czy w ogóle da się tutaj chociaż udawać obiektowość w pseudo-klasycznym wydaniu.
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.
Tak, można w Javascript tworzyć koszmarny kod. Co nie
Jak programista może rzucić takim argumentem? Czyli nie można być początkującym w js?
xD #!$%@?
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
class Animal { constructor(name) { this.name = name; } };
to tylko syntactic sugar na
var Animal = (function () {
function Animal(name) {
this.name = name;
}
return Animal;
}());