Nadużywanie operatora ===?

Nadużywanie operatora ===?
Freja Draco
Freja Draco
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
1
purrll napisał(a):
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.

A skąd ty wiesz, że powyższy zapis nie jest informacją o tym, że 23 równości jest równie 23 równościom?


jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4708
5
purrll napisał(a):

===============================================

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.

W tym przypadku będziemy mieć do czynienia z tzw. paradą równości. Nie chciałem poruszać tego tematu.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 17 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10086
2
bearek napisał(a):

Co? Przecież '1000' == '10e3' to false, bez przesady :) Jak już to '1000' == 1e3, ale to wiadomo.

Mówisz?

screenshot-20201024135924.png

Co do PHP, to:

Kopiuj
'6' == ' 6'
'4.2' == '4.20'
'133' == '0133'
'0x10' == '16'

@PerlMonk Więc nie. Nie używa się == w PHP.

edytowany 1x, ostatnio: Riddle
bearek
Ostatni przykład tutaj to też false.
Riddle
@bearek: Tak, masz racje. Od PHP 7.0 już jest false. Ale pozostałe nadal są zwalone.
PerlMonk
  • Rejestracja:około 6 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Warszawa 🐪
  • Postów:1719
1
TomRiddle napisał(a):

@PerlMonk Więc nie. Nie używa się == w PHP.

Ja nie używam całego PHP, wiec luz 🤣


Nie sztuka uciec gdy w dupie sztuciec. 🐪🐪🐪
Spearhead
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 5 godzin
  • Postów:1002
2

W Perlu 6 jest sześć operatorów porównania (==, ===, ~~, =:=, eq, eqv) i jakoś żyją.

edytowany 3x, ostatnio: Spearhead
Freja Draco
Freja Draco
Jeżżżu! =(-’O_O’-)=
PerlMonk
  • Rejestracja:około 6 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Warszawa 🐪
  • Postów:1719
1
Spearhead napisał(a):

W Perlu jest sześć operatorów porównania (==, ===, ~~, =:=, eq, eqv) i jakoś żyją.

Jest ich kilka, ale na pewno nie takie jak === czy =:=. A operator =~ nie jest operatorem porównania tylko dopasowania.


Nie sztuka uciec gdy w dupie sztuciec. 🐪🐪🐪
edytowany 2x, ostatnio: PerlMonk
Zobacz pozostały 1 komentarz
PerlMonk
Perl 6? Masz nieaktualne dane. Perl nie będzie tak wyglądał a projekt Perl 6 został przemianowany na nowy język Raku https://en.wikipedia.org/wiki/Raku_(programming_language)
Spearhead
Z tego co widzę, to wszystkie są w dokumentacji Raku: https://docs.raku.org/language/operators Znając tych szaleńców, może nawet doszło kilka nowych :D
PerlMonk
Były plany, żeby Perl tak wyglądał, ale ludzie stwierdzili, że kogoś tu nieźle pogięło. I to delikatnie mówiąc. Szkoda było nie użyć takiego śmiesznego kodu i tak powstał Raku. Wszyscy są zadowoleni :)
Spearhead
Toż to piękne, 20 lat projektowali język, po czym musieli zrezygnować, bo powstała abominacja zniechęciła nawet ich - użytkowników Perla xD
PerlMonk
No i bardzo dobrze. Perl jest na tyle dojrzałym językiem, że nie trzeba tam zmieniać za wiele. To nie jakiś C#, Java czy C++, żeby dodawać pierdyliard nowych fjuterów, bo ludzie cisną na OOP. Perl robi swoje a popularne zlewają się w obiektową lepioszkę.
Pipes
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 3 lata
  • Postów:459
2

Jak dla mnie == z założenia powinno sprawdzać czy a jest identyczne z b. Skoro tak nie działa w PHP, JS i czymś tam jeszcze powstało ===. Wolę mieć 100% pewność, że dostałem to co chcę tj. 1 to nie "1" itp.

Zobacz pozostałe 25 komentarzy
PerlMonk
Pytanie jest ogólne, więc odpowiem: ogólnie nie. Kwestia dopasowania i porównania jest dla mnie jasna: masz swoją wizję na ten temat, jest ona inna od mojej i ogólnie przyjętej - spoko. A to, czy się zgadzamy, w tym konkretnym momencie nie ma większego znaczenia.
Silv
Czyli masz na myśli, że ogólnie nie miałoby znaczenia, bo Ty i tak miałbyś swoje zdanie? Jeśli tak, to Cię rozumiem. Jeśli Ty też mnie rozumiesz, to w porządku. :)
PerlMonk
Co znaczy "mieć swoje zdanie"? Jeśli w dokumentacji jest napisane, że coś działa w dany sposób, to mogę mieć swoje zdanie czy muszę mieć? Albo czy nie wolno mi go mieć?
Silv
No… ja się nie odnoszę do dokumentacji. Zgadzam się, że obiektywnie/według Ciebie/według dokumentacji/według kogoś innego Bash działa tak, a nie inaczej. Według mnie to, co ja mówię, zgadza się z tym, co robi Bash, i z tym, co Ty mówisz. (Wchodzę tu trochę w buty @cerrato, mam wrażenie ;) ). Według Ciebie nie. — Teraz: pisząc "mieć swoje zdanie" miałem na myśli, że uznajesz określony stan; że nie przyjmujesz dla każdej dyskusji odmiennego poglądu (zgodnie z własnymi emocjami, z oponentem itp.), tylko posługujesz się tym jednym "swoim zdaniem". cd.
Silv
cd. Teraz Twoje pytanie: czy możesz/musić/nie wolno Ci mieć swoje zdanie. Problem pojawia się w momencie, kiedy obaj czytamy tę samą dokumentację, zgadzamy się, że to, co w niej jest napisane, jest prawdą, że tak rzeczywiście jest, ale jeden z nas mówi, że parafraza tej dokumentacji oznacza to samo, co dokumentacja. Ty możesz zarówno tego nie uznać, jak i uznać, prawda?
mechanix
  • Rejestracja:około 9 lat
  • Ostatnio:6 dni
  • Postów:501
0
Freja Draco napisał(a):
Kopiuj
var x=1;
if (x=2) alert(2);

Nie wiem, jak innym, ale mi się raz na jakiś czas zdarza taki błąd i szukanie go zawsze rozwija poziom kwiecistości mego języka.

Od tego jest linter i reguła no-constant-condition

ME
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:638
1
phanc napisał(a):

po co używać dwóch? można się pomylić, nie lepiej wszędzie używać ===.

Gdzie === sprawdza dodatkowo typ danych

Ja bym spytał po co istnieje == w takim razie. Albo czemu == nie sprawdza typów. Czy komuś jest do czegoś potrzebne porównywanie bez sprawdzania typów? Bo według mnie to raczej prowadzi do trudnych do znalezienia błędów. No chyba że JS, nie szukajmy tu logiki

edytowany 1x, ostatnio: Meini
UR
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 3 lata
  • Postów:360
2

== jest przydatne jak wiemy co robimy i zwisa nam to, czy wartość przekazana z inputa to string, czy liczba, czasem można zapomnieć przekonwertować stringa na liczbę i === nie zadziała.

Jak chcemy sobie ułatwić sprawę i wiemy, co dokładnie się dzieje w danym obszarze kodu i wiemy jakie wartości będziemy otrzymywać, to dla ułatwienia można uzywać ==, w każdym innym wypadku należy używać === (czyli prawie zawsze)

I tak prawie każdy developer używa koercji, czy tego chce czy nie, bo widzę często i gęsto negacje na stringach i obiektach.

edytowany 2x, ostatnio: urke
KamilAdam
I tak prawie każdy developer używa koercji ja nie używam. Pracuję tylko w prawilnych językach z statycznym typowaniem
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 6 godzin
1

A to nie tak, ze kiedys po prostu === nie bylo?

Ergo == istnieje jako osobny byt dla kompatybilnosci wstecznej. Czy zle mowie?


λλλ
edytowany 2x, ostatnio: stivens
obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:około 13 godzin
1
Meini napisał(a):

Ja bym spytał po co istnieje == w takim razie. Albo czemu == nie sprawdza typów. Czy komuś jest do czegoś potrzebne porównywanie bez sprawdzania typów? Bo według mnie to raczej prowadzi do trudnych do znalezienia błędów. No chyba że JS, nie szukajmy tu logiki

bo kiedyś jak wyżej wspomniano === w ogóle nie było. Poza tym javascript był do prostej interakcji z formularzami na stronie i standardowy skrypt wyglądał w stylu

Kopiuj
  <input id="mojInput">
  <input onclick="if (mojInput.value == 5) mojInput.value = 7; else mojInput.value ++;" type="button">

tu nie trzeba było się martwić że mojInput.value to string i że próbujemy go inkrementować, w założeniu w ogóle osoba pisząca skrypty miała się nie martwić o typy


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
edytowany 3x, ostatnio: obscurity

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.