Nadużywanie operatora ===?

1
cerrato napisał(a):

Słabe to jest to, że zarówno do podstawiania jak i porównywania używa się znaków równości

I tutaj wbija na białym, bardzo leciwym (jakieś 50 lat) koniu Pascal ze swoim = sprawdzenie oraz := przypisanie. Ciężko to pomylić :P

:= jest już lepsze, ale jak wchodziłam w Pascal z Basica, to też mi się myliło.
To powinno być raczej coś zupełnie odmiennego, coś w stylu:
x << a + b

1
Freja Draco napisał(a):

To powinno być raczej coś zupełnie odmiennego, coś w stylu:
x << a + b

Rozwiązanie twoich problemów jest przypisanie nie zwracające wartości co często jest robione w nowszych językach programowania. Np. w Scali if (a = b) jest niepoprawne bo a = b zwraca Unit. Podobnie w Ruscie jest w dokumentacji

let x = (y = 6);  // x has the value `()`, not `6`
0
Freja Draco napisał(a):

:= jest już lepsze, ale jak wchodziłam w Pascal z Basica, to też mi się myliło.
To powinno być raczej coś zupełnie odmiennego, coś w stylu:
x << a + b

Ew. rozwiązaniem mogłoby być też podejście zupełnie odmienne:
x = 1 + 2;
if (x = 2) wystrzel_rakietę();
I parser, który zależnie od kontekstu odpowiednio interpretuje znak równości.
Chociaż możliwe, że to też mogłoby czasem generować jakieś nieoczywiste błędy.

0
Freja Draco napisał(a):

Ew. rozwiązaniem mogłoby być też podejście zupełnie odmienne:
x = 1 + 2;
if (x = 2) wystrzel_rakietę();
I parser, który zależnie od kontekstu odpowiednio interpretuje znak równości.
Chociaż możliwe, że to też mogłoby czasem generować jakieś nieoczywiste błędy.

Jeśli przypisanie zwraca zawsze unit/void, a porównanie zwraca zawsze boolean to nie powinno być to problemem. (Dalej problemem jest to że JS jest dynamicznie typowany) Tak jest przecież SQLu. Tak było w pascalopodobnym języku programowania w GameMakerze jak się tym bawiłem 10 lat temu

3
PerlMonk napisał(a):

No fajnie, ale tu też możesz zapomnieć jednego znaku i kod się skompiluje.

What?! Panie, kod w żadnym dialekcie Pascala nigdy nie zostanie skompilowany, jeśli zamiast operatora przypisania użyjesz porównania. Czemu takie fake newsy rozpuszczasz? :P


cerrato napisał(a):

Tak, ale ten brak dwukropka od razu widać gołym okiem. Jak masz same równasię w ilości 1 do 3, to potem można się zakręcić.

Myślę, że po jakimś czasie da się tego nauczyć i wstawiać te operatory odruchowo. Co w dalszym ciągu nie zmienia faktu, że trzy różne operatory porównania to trzy razy więcej miejsc do popełnienia błędów. I za to twórcy języka „powinni zapier****ć na galerze”.

A ten dwukropek jest tak wyróżniający, że uwierz mi - po jakimś czasie od razu się jego brak rzuca w oczy.

Rzuca się w oczy, a jeszcze bardziej błędy kompilacji wynikające z jego braku. ;)

Przez wieeeele lat pisania w Pascalu nie przypominam sobie ani razu sytuacji, w której zastosowałem zamiennie = lub :=.

A mi się zdarzało wielokrotnie — czasem się nie wpisał, bo albo za szybko pisałem i myślałem o dalszej części, albo źle stuknąłem w klawisz. No ale taka konstrukcja nie ma prawa się skompilować, bo rezultat każdego porównania musi być do czegoś użyty — przypisany do zmiennej lub puszczony jako argument funkcji.

To samo w drugą stronę — przypisanie jest możliwe tylko do zmiennej i nie ma możliwości wykorzystania go np. w nagłówku instrukcji warunkowej czy w wywołaniu funkcji (w argumencie). Pascal nie posiada patologii znanej z C, i bardzo dobrze, bo dzięki temu jest banalny do zrozumienia.

3
assembler napisał(a):

Nie uważacie że powinno się używać operatora domyślnego i krótszego ==?

Czemu konkretnie == miałby być "domyślny"?

W PHP jakoś == jest częściej używany

Nie jest.

0
TomRiddle napisał(a):

Nie jest.

Skąd wiesz?

2
PerlMonk napisał(a):
TomRiddle napisał(a):

Nie jest.

Skąd wiesz?

Sam piszę często w PHP prywatnie (libka) i w pracy (nie mam wyboru), i nie mam ani jednego == w projekcie.

I całe szczęście, bo '1000' == '10e3'.

1
jarekr000000 napisał(a):

Ja tam jestem za tym, żeby było więcej równości.
Im więcej równości tym lepiej.
===============================================

Chciałbym zwrócić uwagę, że ten przykład jest nierówny. Występuje 47 znaków równości czyli nieparzyste. Aby była klasyczna równość pasowałoby mieć jednak parzystą ilość równości.

1

@TomRiddle: nie tłumacz im. Oni wiedzą lepiej jak wygląda praca w PHP, bo przecież te 10 lat temu fajnie było się pośmiać :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0