Forum Linux.pl

Programowanie => Języki skryptowe => Wątek zaczęty przez: w 2024-02-01, 20:16:03

Tytuł: [Javascript] Operator "||=" (object, object)
Wiadomość wysłana przez: w 2024-02-01, 20:16:03
Kompiluję kod w emscripten i mam problem. WebView androida wyrzuca mi, że nie zna operatora ||= . Postanowiłem dodać kod JavaScript, co w prototypie object sprawdza, czy taki operator został zdefiniowany. Jeżeli nie, to definiuje moją implementację. Problem tylko taki, że nie mogę znaleźć dokumentacji tego operatora. Znalazłem jedynie, że jest to logiczne OR na lewej i prawej stronie wyrażenia, a wynik jest zapisywany do lewej. Czy dla obiektu, to dodaje pola z wartościami z prawej strony wyrażenia do obiektu z lewej, jednocześnie nadpisując pojawiające się w obu obiektach?
Tytuł: Odp: [Javascript] Operator "||=" (object, object)
Wiadomość wysłana przez: 1709 w 2024-02-02, 00:02:54
Z internetu
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_OR_assignment
Tytuł: Odp: [Javascript] Operator "||=" (object, object)
Wiadomość wysłana przez: w 2024-02-02, 19:33:27
Z internetu
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_OR_assignment
Czytałem te źródło, ale nie ma opisu, co robi Obiekt1 ||= Obiekt2 . Przynajmniej ja nie zauważyłem.
Tytuł: Odp: [Javascript] Operator "||=" (object, object)
Wiadomość wysłana przez: Paweł Kraszewski w 2024-02-02, 20:20:13
Cytuj
Czytałem te źródło, ale nie ma opisu, co robi Obiekt1 ||= Obiekt2 . Przynajmniej ja nie zauważyłem.

Jest WSZYSTKO napisane.

Cytuj
x ||= y is equivalent to x || (x = y)
Trochę z du*y opis, bo w każdym normalnym języku (a jak powszechnie wiadomo, JS nie jest normalny) x ||= y rozwija się na x = (x||y), ale efekt końcowy jest ten sam.

Z kolei w definicji ||:
Cytuj
x || y -- If x can be converted to true, returns x; else, returns y.

Jeżeli x jest truthy, nic się nie dzieje. Jeżeli x nie jest truthy (w opisie || masz pełną listę rzeczy nie-truthy), to jest ustawiane na y. JS ma w pompce, jakie typy danych są w x i y. Albo robi przypisanie (zwykłe, bez magicznego łączenia zawartości) albo nie.

Trochę na około napisane

if (!x){
 x = y
}
Tytuł: Odp: [Javascript] Operator "||=" (object, object)
Wiadomość wysłana przez: w 2024-02-03, 12:36:45
Cytuj
Czytałem te źródło, ale nie ma opisu, co robi Obiekt1 ||= Obiekt2 . Przynajmniej ja nie zauważyłem.

Jest WSZYSTKO napisane.

if (!x){
 x = y
}

Dzięki! Szukałem jawnego odwołania do obiektów, a z moją znajomością języka angielskiego, jest kiepsko.

if (!x){
 x = y
}
Czyli już rozumiem. Zaimplementuję to.
Tytuł: Odp: [Javascript] Operator "||=" (object, object)
Wiadomość wysłana przez: Paweł Kraszewski w 2024-02-03, 15:06:31
Ummm. Jakby ci zapomnieli powiedzieć, JS nie ma obiektów w podręcznikowym znaczeniu (jak w Javie albo C++)...

To co uważasz za "obiekty" to są mapy (aka. tablice asocjacyjne). JS-owe "pola" to po prostu elementy tej tablicy, zaś "metody" korzystają z tego samego mechanizmu - lambdy (funkcji anonimowej, domknięcia - w różnych językach różnie to się nazywa) trzymanej w tej tablicy. Kilka "magicznych" indeksów tablicy umożliwia np. tworzenie prototypów. 

JS wychodzi z założenia, że jeżeli coś wygląda jak kaczka i kwacze jak kaczka... Zresztą podobnie jest w większości języków skryptowych. Z jednej strony tak prymitywne metody ma Lua. Z drugiej prawdziwą obiektowość (z dziedziczeniem i całym ceremoniałem) mają Ruby czy Python.