Wpis z mikrobloga

#javascript #webdev #programowanie

Zastanawia mnie czy przeglądanie kodu JS na jakiejś stronie ma w ogóle sens? Bo tak sobie spojrzałem w bebechy jakiejś strony z ciekawości, ale to co zobaczyłem, choć niewątpliwie coś robi - to za cholerę nie idzie się doczytać o co chodzi. Wszystkie nazwy zamienione na a, b, c i inne krótkie aliasy, co chwila redefiniowane na coś innego. No ogólnie jest over 20k linijek w czytelnej dla człowieka formie i wygląda to jakby ktoś zmielił g---o w maszynce do mięsa.

Jak rozumiem to są głównie jakieś biblioteczne funkcje (chyba jQuery tutaj widzę)? To jest w ogóle oryginalny kod tylko z przerobionymi nazwami zmiennych na krótsze i usuniętymi białymi znakami, czy został w jakiś sposób skompilowany do takiej niezbyt ładnej postaci? Wygląda to dosyć makabrycznie szczerze powiedziawszy, jeszcze gorzej od C++ hieroglifów jakie mam na co dzień przed oczami.
Khaine - #javascript #webdev #programowanie

Zastanawia mnie czy przeglądanie kodu ...

źródło: comment_zstdab8O5xGzP85jdAQVZ35wsspQtyp9.jpg

Pobierz
  • 24
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Khaine: To się nazywa zaciemnianie kodu. Usuwane są nazwy, zastępowane krótkimi symbolami, żeby mniej zajmowały i trudniej było odczytać.

Robi się to progamami typu uglify-es
  • Odpowiedz
@ghostface: Tyle to ja się domyśliłem. Ewidentnie nazwy funkcji i zmiennych są zmienione na pojedyncze literki, bo interpreter ma to w dupie. Tak samo były wywalone białe znaki.

Mnie zastanawia przede wszystkim treść tego, która jest mało czytelna z natury - czy ona była modyfikowana przez jakieś kompilowanie.

Widzę jeszcze jakieś straszne operatory typu === i masę innych odpychających rzeczy (ale to chyba akurat cecha języka). Może faktycznie ten kod
  • Odpowiedz
czy ona była modyfikowana przez jakieś kompilowanie


@Khaine: Zapewne Babel - transpiler - który modifykuje kod ES6 tak żeby działał poprawnie w starszych przeglądarkach.

Do tego Webpack - bundler - który to łączy pojedyncze pliki js w jeden pakiet, w wielkim skrócie oczywiście.
  • Odpowiedz
@Khaine:

straszne operatory typu ===

witam w webdevie

i masę innych odpychających rzeczy (ale to chyba akurat cecha języka)

kod wyglada w miare (jak na ES5, w ktorum juz malo kto pisze) i jest calkiem niezle sformatowany, gdyby nie podmienione nazwy funkcji i zmiennych to mysle, ze daloby sie to po ludzku przeczytac
  • Odpowiedz
@grap32: @paziu: naprawdę ludzie są w stanie takie luźno typowane g---o mające 20k linijek czytać i nie zwariować przy tym? xD Ja nawet nie wiem co tam jest co i czego funkcje miałyby się spodziewać.

@Veni: Już zgooglowałem, bodaj porównuje typy razem z zawartością bodaj a nie samą zawartość. My w silnie typowanych językach takich problemów nie mamy xD
  • Odpowiedz
@Khaine: Co kto lubi, ja osobiście nie uważam tego za problem :) Duck typing nie jest niczym złym, jeżeli myśli się nad tym co się robi.
  • Odpowiedz
@Veni: Ten co pisze wie co pisze. Ale zapewne musi być świetnie czytać cudzy kod nie mając wiedzy autora na temat tego co wepchnął gdzie i dlaczego ( ͡° ͜ʖ ͡°) To już w silnie typowanych językach często jest trudne aby ogarnąć co autor miał na myśli.
  • Odpowiedz
@Khaine: Dlatego tworząc kod nazywa się rozsądnie zmienne, a w razie wątpliwości dodaje komentarze. Beznadziejny kod można stworzyć w każdej technologii i to czy ma ona silne typowanie nie ma znaczenia.
  • Odpowiedz
silne typowanie nie ma znaczenia.


@Veni: Trochę ma, sama nazwa typu pozwala się pewnych rzeczy domyślać bez komentarzy. Ponadto kompilator pilnuje czy nie robisz jakichś oczywistych idiotyzmów typu porównanie inta do stringa bez jawnego rzutowania, a tutaj może się łatwo wymsknąć ( ͡º ͜ʖ͡º) Kaczka ci gdzieś zamiauczy, nie zauważysz i będą jaja.
  • Odpowiedz
@paziu: Toż to jakaś bzdura. Nie ma żadnego przymusu stosowania operatora identyczności, czy też nie jest to jakieś bardziej zalecane postępowanie. Jest to operator, który ma konkretne zadanie, sprawdzić zarówno typ zmiennej jak i jej wartość. Jeżeli natomiast wystarczy Ci zgodność między samymi wartościami to wcale nie musisz tego stosować. Co do tego mema to już tyle razy tu się przewijał, że nawet już się nie odniosę do tego. Większość
  • Odpowiedz
@Khaine: zdajesz sobie sprawę, że nie piszę się tego w jednym pliku? W ES5 osobny moduły wg. wzorca Revealing Module Pattern na przykład. To jest tylko wynikowy plik, możliwe, że nawet zewnętrzne liby wrzucili to jednego pliku stąd długość.
  • Odpowiedz