Rabbids Coding!

Ile to nie zarabiają programiści? No ja się tego tyle nasłuchałem, że aż żałuję iż takim nie jestem. Ale dość o mnie. Wielu owe opowieści inspirują one do zaszczepienia umiejętności kodowania u swoich dzieci. I tu jest ważne pytanie: jak uczyć programowania najmłodszych? Dziś pochylimy się nad odpowiedzią jakiej udzieliła nam firma Ubisoft. Czytaj dalej „Rabbids Coding!”

JavaScript: Undefined vs. null

Znajomy zapytał mnie dzisiaj czy to dobry kod:

W pierwszym odruchu utwierdziłem go (pytał by się upewnić), że nie, że lepiej byłoby użyć słowa kluczowego null. Argumentowałem nawet, że undefined można sobie swobodnie nadpisać. Wyczytałem to zdaje się na Stackoverflow.

Jednak kiedy, spróbowałem sprawdzić moje własne słowa, znalazłem tą oto małą notkę:

JavaScript 1.8.5 note

Starting in JavaScript 1.8.5 (Firefox 4), undefined is non-writable, as per the ECMAScript 5 specification.

W skrócie: nie można (przynajmniej w nowszych przeglądarkach) nadpisać undefined. Operator === też działa prawidłowo z użyciem undefined. Nie ma więc nie bezpieczeństwa? Czyżbym wpuścił kolegę niechcący w maliny?

Ale dalej mi się to wszystko nie podobało. Należy pamiętać, że:

  • undefined nie jest stałą
  • nie jest też słowem kluczowym języka JavaScript (sprawdźcie sami)
  • nie jest nawet słowem zastrzeżonym pod przyszłe użycie
  • otrzymamy wyjątek jeśli napiszemy coś takiego: if (zmienna_niezadeklarowana_wcześniej === undefined) (trzeba więc użyć operatora typeof)

Czym więc jest undefined? Jest zmienną globalną (choć tylko do odczytu od jakiegoś czasu). Lokalnie (wewnątrz funkcji) możemy ją sobie swobodnie nadpisać. Więc, jeśli nawet nie widać niczego złego przy wywołaniu kodu:

{geshi lang=javascript}var a; var undefined = 42; console.log(a); // undefined console.log(undefined); // undefined console.log(a == undefined); // true

To wystarczy wstawić go do wewnątrz funkcji:

)();

Podsumowanie

Morał jest więc prosty: jeśli cenicie sobie jakość swojego dzieła, nie chcecie, aby się z was koledzy śmiali: używajcie null do inicjacji zmiennych, nie polegajcie na tych małym potworku jakim jest undefined. Jego używamy tylko do analizy np. zmiennych globalnych. Ja widzę też jeszcze powód dla którego lepiej jest użyć null: jeśli chcemy przywrócić pierwotną wartość zmiennej, bardziej naturalne jest przypisanie do niej właśnie null.

Taka jest moja opinia. Bardzo chętnie zapoznam się z jakąś dobrą argumentacją (jeśli jest takowa) przeciw.

Linki

Bash – wybredne kopiowanie

Domyślnym katalogiem na pobieranie plików w moich przeglądarkach, jest pulpit. Stamtąd rozdzielam pliki wedle własnego widzi mi się, jednak pewną klasę plików, życzę sobie mieć zawsze w pewnym specyficznym katalogu. Do tej pory, przenosiłem je tam ręcznie, ale uświadomiłem sobie, że przecież nie jest trudno proces ten zautomatyzować. Po pięciu minutach powstała ta oto linijka:

" = "" ] && cp "$1" ""

Ten skrypt oczywiście wykorzystuje do otwierania pliku z poziomu przeglądarki. Najwięcej problemu było ze sprawdzeniem poprawności zadanego parametru ($1). Należało jednak upewnić się, czy parametr jest plikiem (to z pomocą: -f) i czy ma zadane rozszerzenie. Zamieszczam, aby mi się nie zgubiło. Na co warto zwrócić uwagę:

  • ${1##*.} – to wyrażenie zwraca rozszerzenie pliku (tutaj dla zmiennej $1). Dla nazwy np. „nazwa.z.kropkami.txt”, zwróci „txt”. Po sieci można znaleźć wersje z jednym płotkiem (#), ale wtedy wynikiem są wszystkie znaki po pierwszej kropce (szczegóły w załączonych linkach)
  • [ (...) -a (...) ] – I (ang. AND) w składni programu test, używanego przy warunkach w Bashu

Z pomocą: bash String Manipulations i Linux tip: Bash test and comparison functions.

O JPanel w stałym rozmiarze na JFrame

Jakiś czas temu poszukiwałem sposobu, aby zmodyfikowany przeze mnie JPanel zachowywał swój rozmiar niezależnie od wielkości okienka (obiekt JFrame), na którym bezpośrednio leżał. Kosztowało mnie to nieco nerwów. Nie wystarczyły metody setSize, setPreferredSize, setMaximumSize, setMinimumSize, użyte jak w poniższym przykładzie: Czytaj dalej „O JPanel w stałym rozmiarze na JFrame”