Nadużywanie operatora ===?

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?

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.

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:

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

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

1
TomRiddle napisał(a):

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

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

2

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

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.

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.

0
Freja Draco napisał(a):
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

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

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.

1

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

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

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

  <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

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