Równy czy nierówny - oto jest pytanie
Ktoś kiedyś powiedział "mnie język w programowaniu nie przeszkadza"? Co mnie więcej oznacza, iż doświadczony programista, który miał do czynienia z kilkoma językami (np. C, Java) bez problemu powinien poradzić sobie z programowaniem w kolejnym języku (np. w C#). Jest w tym wiele prawdy, ale czy bez kompleksowej wiedzy z danego języka kod owego programisty będzie na pewno niezawodny?
Rozważmy prosty przykład napisany w języku Java: Czy jest coś w tym przykładzie co mogłoby nas skłonić do refleksji - raczej nie. Oczywiste wydaje się, iż w pierwszym warunku zostanie wyświetlone na konsoli
Zmodyfikujmy ten przykład: Co się okazuje? Pierwszy warunek jest spełniony w efekcie na konsoli zostanie wyświetlone
Wniosek z tego jest jeden, iż bez dogłębnej znajomości języka, konstrukcje, które mogłyby się wydawać oczywiste mogą nas zaskoczyć w najmniej oczekiwanym momencie. Jest na to jednak rada: jeżeli jesteś czegoś pewien sprawdź to, a jeżeli jesteś czegoś bardzo pewien sprawdź to dwa razy...
Rozważmy prosty przykład napisany w języku Java: Czy jest coś w tym przykładzie co mogłoby nas skłonić do refleksji - raczej nie. Oczywiste wydaje się, iż w pierwszym warunku zostanie wyświetlone na konsoli
"rozne obiekty"
, natomiast w drugim warunku "rowne obiekty"
. Pierwszy warunek będzie spełniony tylko wtedy gdy będziemy mieli do czynienia ze zmiennymi, które wskazują dokładnie na ten sam obiekt. Drugi warunek to już porównanie wartości tych obiektów więc sprawa jest dość oczywista.Zmodyfikujmy ten przykład: Co się okazuje? Pierwszy warunek jest spełniony w efekcie na konsoli zostanie wyświetlone
"ten sam obiekt"
. Dlaczego? Odpowiedź jest prosta, chociaż nie oczywista: w języku Java w celu zaoszczędzenia pamięci instancje klas Short
and Integer
o wartościach od -128
do 127
wskazują na ten sam obiekt (obszar pamięci). Inaczej się ma sytuacja jeżeli jawnie użyjemy operatora new
:
Wówczas zostanie wyświetlone "rozne obiekty"
.Wniosek z tego jest jeden, iż bez dogłębnej znajomości języka, konstrukcje, które mogłyby się wydawać oczywiste mogą nas zaskoczyć w najmniej oczekiwanym momencie. Jest na to jednak rada: jeżeli jesteś czegoś pewien sprawdź to, a jeżeli jesteś czegoś bardzo pewien sprawdź to dwa razy...
Komentarze
Co ciekawe w publikacji SCJP Sun Certified Programmer for Java 5 Study Guide (Exam 310-055) by Kathy Sierra and Bert Bates (McGraw-Hill/Osborne 2006) również można o tym przeczytać w rozdziale Certification Objective — Using Wrapper Classes and Boxing (Exam Objective 3.1). Oznacza to, iż na egazminie SCJP wymagana jest znajomości tego zagadnienia, ale w końcu to S(un)CJP :)
Wiekszej glupoty nie slyszalem - niech ktos sprobuje nauczyc sie Lispa, Haskella znajac C,Java,C++ itp. Jak dla mnie to zdanie moze byc prawdziwe dodajac zwrot "jezyka takiego samego typu".