W związku z tym, że jestem #programista15k - znaczy się będę - to przeglądam #stackoverflow i natrafiam na różne perełki, którymi chciałbym się z Wami podzielić.
Mam tego trochę przygotowanego. Chyba ze dwa lata zbierałem xD
@WyjmijKija: hm, to wygląda jakby w pierwszym przypadku kompilator wiedział jaki to będzie typ i użył przeładowanego operatora. A w drugim domyślnego tzn. po referencji. Ciekawe ( ͡°͜ʖ͡°)
Tutaj easy, przynajmniej tak mi się wydaje.. Boolean jest value typem - castując go na object wymuszamy porównywalnie za pomocą referencji. String jest ref typem - podczas kompilacji następuje optymalizacja do jednego stringa wiec referencja jest ta sama.
@przekliniak: @harakiri888: "Yoda conditionals" są głównie używane po to, żeby przypadkiem nie napisać "if (var = 1)" zamiast "if (var == 1)".
Jak ktoś przeciąża operator porównania w taki sposób, że działa inaczej w zależności od tego, który obiekt jest po której stronie, to nic go nie uratuje ( ͡°͜ʖ͡°)
W związku z tym, że jestem #programista15k - znaczy się będę - to przeglądam #stackoverflow i natrafiam na różne perełki, którymi chciałbym się z Wami podzielić.
Mam tego trochę przygotowanego. Chyba ze dwa lata zbierałem xD
Jedziemy.
https://dotnetfiddle.net/Widget/O9QupY
Nie pytaj czemu, nie programuję w C#. Natomiast w każdym języku z przeciążeniem operatorów oraz w JS to może mieć znaczenie.
hehe is null
i wtedy zachowuje się jak należy :)
https://dotnetfiddle.net/Widget/jN0Xh2
Clue tego to tylko czytelność kodu nie uwzględniając przeciążeń, ale FAKT - powinieneś mieć z tyłu głowy to o czym piszesz.
@harakiri888: no może jak #!$%@? crudy całe życie to wtedy ci nie potrzebne
P.S. Ja przeważnie przeciążam Equals, bo jest to dla mnie bardziej "explicite", jeżeli już muszę.
@object: jak będę miał jutro więcej czasu to poszukam, bo w sumie kolega wyżej mnie zaciekawił.
Console.WriteLine((object)true == (object)true);
Console.WriteLine((object)"A" == (object)"A");
Console.WriteLine(object.ReferenceEquals("B", "B"));
Komentarz usunięty przez autora
Tutaj easy, przynajmniej tak mi się wydaje..
Boolean jest value typem - castując go na object wymuszamy porównywalnie za pomocą referencji.
String jest ref typem - podczas kompilacji następuje optymalizacja do jednego stringa wiec referencja jest ta sama.
Jak ktoś przeciąża operator porównania w taki sposób, że działa inaczej w zależności od tego, który obiekt jest po której stronie, to nic go nie uratuje ( ͡° ͜ʖ ͡°)
https://dotnetfiddle.net/Widget/xi58A6
Oczywiście nikt nigdy nie napisze tego w ten sposób ( ͡° ͜ʖ ͡°)