Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

O Javascriptowych zamiennikach słów kilka

Witajcie, wpis, jak zwykle z lekka emocjonalny. Na starcie pragnę podkreślić iż dopiero co swą karierę z programowanie lub jak kto woli skryptowaniem zaczynam i w wielu kwestiach jestem zielony, jak szczypiorek na wiosnę (lub Irlandia w/g pana Tuska). Ale nie o polityce ten wpis ma być, a raczej o osobistych gustach, kilku błędach, kilku rozwiązaniach i o marzeniach, które może się ziszczą. Może jednak od początku.

Javascripcie, Brzydactwo moje

Javascript, jako język powstał dobre kilka latek temu Dokładniej w roku 1996 (data wydania wersji 1.0). Jest to mały (zależy z jakiej strony patrzeć), lekki (jeśli kilka MB to mało, jak na plik tekstowy) i szybki (no nie bardzo. Ale to zostawmy na później), a już z pewnością wieloplatformowy (za wyjątkiem przeglądarki do ściągania przeglądarek, która wymyśla swoje standardy do wszystkiego). Przynajmniej tak go opisują goście z MDN. Treść w nawiasach to efekt obserwacji i subiektywnych opinii, ale do nawiasów wrócę później.

Język ten wyrósł na podobieństwo języków z rodziny C/C++. Ma składnię do nich dosyć w podstawach przynajmniej podobną. Gdzie jest stosowany? Wszędzie tam, gdzie istnieje web. Nawet tutaj każdy przycisk i bzdet jest połączony z jakimś wszędobylskim skryptem.

Język ten powstał w czasach, gdy megaaplikacją był Doom, Pacman, czy inne stwory z epoki głębokiego średniowiecza i gdy nikt nie myślą o pisaniu edytora tekstu w przeglądarce, ba nikt nie myślał, że na stronie znajdzie się więcej niż jeden skrypt i będą rodziły się biblioteki do tego języka. I tak te kaczątko webu (może nie najśliczniejsze) dojrzewało. Zyskiwało kolejne piórka, gadżety, bzdety.

Nawet zyskało pokaźną liczbę cudeniek, które w innych językach są nie do pomyślenia. Chociażby pierwszy z brzegu

return { id : 1234, title : 'Tony the Pony' }; Zwraca błąd. Całkiem porawnie, ale już to return { id : 1234, title : 'Tony the Pony' };
Przejdzie bez zająknięcia. A już o takich cudach jak te '5' + 3 gives '53' // i '5' - 3 gives 2 nie wspomnę. Za późno, wspomniałem, a co tam.

Do tego powstawały biblioteki w stylu jQuery (które dorobiło się już wersji 1.8.2 ), które
pozwalają wszystkim fanom włoskiej kuchni robić taki o to kod a la spaghetti bolognese jQuery("div.test").append(jQuery('<p class="quote"/>').addClass('blue').slideDown('slow'));

Jak człowiek na to patrzy, to coraz mniej rozumie. Już lepiej, jakby językiem webu był Lisp lub Perl. Jednak, są sposoby na poprawę tego stanu rzeczy. Ale o tym za moment. Wytrzymacie?

Nie macie wyjścia :)

Tak sobie myślę, jak patrzę na to, czy JS musiał stać się językiem Webu. Żałuje, że językiem webu nie jest python lub ruby, lub inny język o human readable syntax. Żałuje, że tak nie jest. Te dziesiątki średników i nawiasów mogą być (przynajmniej dla mnie) obrzydzające. Kod przestaje być czytelny. To trochę tak, jakby porównywać dramat Szekspira, z tym co wpisuje normalny użytkownik, gdy posadzić go przy vim-ie i poprosić o zamknięcie programu. I czy pętla w stylu for(a = 1; i<1000;i++){ // zrób coś naprzykłąd napisz hello world albo wyświetl alert }nie może wygladać tak for i in range(1000): alert("Będę dobrym człowiekiem")

Alleluja. Jest wyjście

Ale o nim w części drugiej.

PS. Wpis ten nie jest motywatorem do gigaflejma między fanami Pythona (like me), a fanami C++ (like, somebody on this site), czy JavaScript. Więc błagam. Nie chcę tutaj miliarda komentarzy w stylu "Twoja matka powinna wstydzić się, że cię urodziła ty nędzny script-kiddie od X" za X podstaw każdy język, który przez jego Hejterów nazywany jest niczym.
Wpis pokazuje parę bzdetów, dziwactw i problemów.

Co będzie w częście drugiej? O alternatywach, paru słowach o Googlu, paru o nowinkach.

PPS: Ale jako, że mały flejm nie jest zły, proszę o komentowanie i ocenianie, konstruktywne opinie, wasze pomysły co można zmienić.
PPPS: Wpis zrobił się nieco przy długi, ale za jego popełnienie przepraszać nie zamierzam.  

internet programowanie inne

Komentarze

0 nowych
alucosoftware   7 #1 22.09.2012 18:01

A widzisz, składnia JS jest dla mnie bardzo czytelna. Każdy ma własne upodobania :)

AdrianSasquatch   9 #2 22.09.2012 18:12

A ja tam lubie "te dziesiatki nawiasow i srednikow". Jest to logiczne do bolu, bez zadnych skrotow- i taki wedlug mnie powinien byc kod programu :)

kamil_w   11 #3 22.09.2012 18:14

Cóż... języki programowania tworzone są przez inżynierów dla inżynierów. Powinny być więc logiczne. Czasem mam jednak wrażenie, że w niektórych elementach ich logika była dyktowana przez humanistkę w 8 miesiącu ciąży.

Frankfurterium   10 #4 22.09.2012 19:02

Zakładam, że panowie, którzy bez średników żyć nie mogą, mieli bliższy kontakt z językami ich niewymagającymi. W przeciwnym wypadku ich opinia byłaby niezbyt wiele warta, bo żeby coś porównać, trzeba zaznać obu stron.

Demagog   4 #5 22.09.2012 19:34

Są gusta i guściki. Jeden woli Fiołki inny, jak mu nogi śmierdzą.
Po to jest wybór, by z niego skorzystać.

@kamil_w

To co pod maską powinni tworzyć inżynierowi, ale samą składnię, lepiej, by jednak tworzyli humaniści.

Autor edytował komentarz.
przemo_li   11 #6 22.09.2012 21:25

@kamil_w @AdrianSasquatch
Szczyt logiki ;) Kiedy kompilator dokładnie wie kiedy się skończyła instrukcja, ale jej nie wykona, bo mu brakuje średnika. A gdzie go brakuje też dokładnie wie. W zasadzie sam by go mógł tam dodać, (z odpowiednim ostrzeżeniem w kodzie i w logu), ale przecież to było by nielogiczne. Odmowa skompilowania 300k linii kodu z braku jednego kompletnie redundantnego (dla kompilatora, w końcu on wie że instrukcja się skończyła), średnika, to czysta logika. :P :P :P :P :P :P :P

przemo_li   11 #7 22.09.2012 21:27

Demagog, będzie o Go i Coffee, GWT? Coś pominąłem?

Frankfurterium   10 #8 22.09.2012 22:48

GWT (i siedzący na jego plecach Vaadin) mimo wszystko bazuje na JS-ie, więc nie wiem, czy się liczy.

dominikc   5 #9 24.09.2012 10:16

Hmm, CoffeeScript?

  #10 24.09.2012 10:16

To sobie bez klamerek zgzipuj kod strony i na pewno zadziała...

Pirx   4 #11 24.09.2012 17:47

@przemo_li

Właśnie z ciekawości przetestowałem Pythona pod tym względem. Dostałem taki oto komunikat: "IndentationError: expected an indented block". Szczyt logiki! Interpreter wie, że powinno być tam wcięcie, ale go nie doda, bo by było to nielogicznie. No i oczywiście kodu nie wykona. ;)

Jako programista amator, który zaczynał od asemblera na Commodore 64 (najprzyjemniejszy sposób, aby załapać o co w tym wszystkim chodzi), powiem szczerze, że składnia C-podobna jest o wiele przyjemniejsza niż Pythonowa czy Pascalowa. Nowe wersje BASICa są bardzo fajne, ale się nie przyjęły, bo co niektórzy od razu wiedzą, że tam na pewno są numery linii i GOTO. :)

A tak w ogóle, to trzeba się cieszyć, że językiem webowym nie zostal np. Tcl, bo ta pętla by wyglądała tak:

for {set a 1} {$a < 1000} {incr a} {
//instrukcje
}

  #12 24.09.2012 18:07

Ja piszę naprzemiennie w Python, JS i C++ i mi to zwisa. Wszędzie są jakieś myki i wszędzie się czuje dobrze. To tylko narzędzia, a jak ktoś z lenistwa stara się wmówić innym jak powinno wyglądac programowanie to wypada mu współczuć. JS mimo większego ograniczenia jest kilkaset procent wydajniejsze od Pythona i w nodejs ma wygodniejsze API (nie trzeba używać wątków do obsługi pętli kilku niezależnych frameworków).

wszerad   6 #13 24.09.2012 18:26

Siedzę w JS od około 3lat i zapewniam, że język ten zmierza w dobrą stronę, oglądałem przykłady z JS.next i zauważyć można iż nawiasy będzie można pomijać i w pętlach i w deklaracjach funkcji, w instrukcjach warunkowych już można.

Demagog   4 #14 24.09.2012 18:47

Będzie troszkę inaczej. Będzie kilka języków i modyfikacji co prawda na JS bazujących, lecz o bardziej pythonicznej prostocie.

mikolaj_s   14 #15 24.09.2012 19:14

"Javascripcie, Brzydactwo moje "

Podtytuł trafiony w sedno! Jest tez inna prawda, można narzekać na składnię JS, ale to długo będzie standard.

"jQuery("div.test").append(jQuery('').addClass('blue').slideDown('slow'));"

To akurat jest czytelne. Wymaga nieco wprawy. Czytanie jednej linii jest łatwiejsze bo nie trzeba tak skakać. Jeszcze lepiej gdy dana linia zwraca jakiś obiekt, można ją traktować prawie jak funkcję wykonującą określoną czynność.

"Co będzie w częście drugiej?"

Czyżbyś chciał pisać o Darcie?

  #16 24.09.2012 20:25

Zainteresowałeś mnie tą drugą częścią.

Odnośnie tej części - co do czytelności JS - wszystko zależy od ludzia. Jeżeli ktoś programował wcześniej w języku o składni C-pochodnej to nie powinien mieć problemów. No oprócz pewnych osobliwych dziwactw.

Co do jQuery to akuratnie jest świetne narzędzie, zwłaszcza jeżeli ktoś nie che się mocno rypać z IE i DOM.
Ale 'makaron' jest nie dość, że bardzo czytelny, to jeszcze bardzo logiczny - z punktu widzenia programowania obiektowego, to raczej standard.

Demagog   4 #17 24.09.2012 21:19

Sami zobaczcie. :)

budda86   9 #18 24.09.2012 22:05

Moje skromne zdanie jest takie, że czytelność kodu zależy w 20% od języka, a w 80% od programisty :)

A tak poza tym - być może jQuery jest dla Ciebie nieczytelne właśnie ze względu na Twoje niewielkie doświadczenie programistyczne? Pisałem w jQuery i ExtJS (a także w czystym JS) w kilku komercyjnych projektach na początku swojej kariery zawodowej, i do dziś bardzo lubię ten język, przede wszystkim za funkcyjny styl programowania i elastyczność, której czasem brakuje mi w Javie.

Nawiasy i średniki - jak dla mnie, to *polepszają* czytelność kodu, bo grupują i oddzielają instrukcje, ale może to kwestia gustu/przyzwyczajenia.

PS. "Żałuje, że językiem webu nie jest python lub ruby, lub inny język o human readable syntax"

O Matko Boska Pythonowska, Ruby jest językiem o human readable syntax? W którym miejscu?

badziewmax   4 #19 24.09.2012 22:25

Próbowałem zacząć C++, PHP, Javę... na nic moje próby. Wziąłem się ostatkiem motywacji za JS i co? W ciągu 3 dni wiem więcej niż po wszystkich próbach z innymi.

Chyba, że w ogóle od d*** strony się wziąłem ;)

Pablo_Wawa   9 #20 24.09.2012 22:57

Marudzisz! Każdy jeżyk ma jakieś swoje wady (patrz język polski). A JavaScript bazuje na C/C++, więc nie ma co marudzić - to trzeba polubić. Ja się wychowałem programując w C (pod Linuksem) dziesiątki lat temu, więc mi taka składnia nie przeszkadza a JS jest podstawowym w tworzeniu aplikacji internetowych.

Parę uwag do wpisu:
Po pierwsze nie musisz stawiać średnika na końcu wiersza. Są one wymagane jak dajesz kilka instrukcji w linii (pomiędzy nimi), poza tym te średniki jednak (według mnie) poprawiają czytelność i zmniejsza szansę popełnieni błędu.

Po drugie, w swoim przykładzie
for(a = 1; i<1000;i++){
// zrób coś naprzykłąd napisz hello world albo wyświetl alert
}

masz literówkę - powinno być raczej
for(i = 1; i<1000;i++)

Po trzecie zaś, jeśli już bardzo chcesz, to możesz użyć takiej konstrukcji:
for (i in range(1000))
alert('A jednak JavaScript jest bardzo elastyczny');

Oczywiście musisz samemu zdefiniować funkcję range, np. tak:
function range(max)
{
var arr=[];
for (i=0;i<max;i++)
arr.push(i);
return arr;
}

I po czwarte - prawdziwy programista indeksuje od zera (a nie od 1). :P ;)

  #21 25.09.2012 00:11

Jakiś takiś nijakiś ten wpis. Krytykujesz JS za składnie? Chyba najgorsze i najprostsze co można napisać - wynika to głównie z preferencji każdego, styczności czy dłuższej pracy z danym językiem. Bardziej na miejscu byłby wytykanie czegoś problematycznego, jak domyślna globalna przestrzeń nazw. A tego brzydkiego fora to można zapisać jeszcze prościej.

Ta sama uwaga do jQuery. Jest to bardzo dobra biblioteka, prosta w użyciu, która rozwiązuje wiele problemów z DOM, a to już nie jest wina JavaScriptu. To spaghetti jednolinijkowe mozesz zapisać w wielu wierszach jeśli w oczy kole xd.

Wbrew pozorom, przy dłuższej pracy w JS okazuje się, że jest to język bardzo elastyczny, trzeba go po prostu dobrze poznać. Z drugiej strony jest bardzo łatwy w użyciu, pewnie dlatego stał się językiem Webu. Sporo osób nie jest w stanie wystartować od Javy, odmian C lub innego "klocka", a z JS nie mają problemów. Każdy amator może pisać w JS, ale nie każdy będzie dobrym programistą JS. Ale przecież dotyczy to każdego języka.

Ktoś już napomknął o tym, w kolejnych wydaniach wprowadzi się trochę uproszczenia do składni, np. pomijanie nawiasów w pewnych złożeniach. Ogólnie rzecz biorąc dopiero teraz język zaczyna naprawdę się rozwijać - bardzo długo trwała stagnacja po zdominowaniu WWW przez IE.

Język idealny nie jest, żaden nie jest. Ale ogólnie rzecz biorąc minęły czasy, kiedy był obarczany za całe zło na stronach WWW, a zaczęto w nim pisać konkretne rzeczy. Co istotne, jeśli komuś składnia nie leży, może poszukać jakiś kompilatorów z jednego języka do JS - powstało kilka tego typu projektów. Zanosi się na to, że JS jeszcze długo będzie dominantem na WWW, zaczął doraźnie wkradać się na serwery, ciekawe co z tego jeszcze wyniknie.

Draqun   9 #22 25.09.2012 14:07

Akurat JQuery to fajna biblioteka. Można bez większej znajomości JS zrobić fajne bajery na stronie.

@Demagog
"jQuery("div.test").append(jQuery('').addClass('blue').slideDown('slow'));"

Jak człowiek, który mnie uczył zobaczył w moim skrypcie takie coś to spytał czy ja programuje czy tylko udaje

jQuery("div.test").append(
jQuery(
''
).addClass(
'blue'
).slideDown(
'slow'
)
);

Czyż nie czytelniej?

Ja jestem fanem C++, nie lubię PHP a mimo wszystko mogę w nim programować. Po prostu traktuje język jako narzędzie. Liczy się możliwość pracy i komfort jaki dany język.

Mifczu   12 #23 25.09.2012 14:54

Strasznie przesadzasz z tym narzekaniem na javascript, a odnośnie ostatniego przykładu to zupełnie poprawna konstrukcją by było:

[Tu był kod i kawałek tekstu ale DB go strasznie obcięło]

Co ja bym zrobił jeszcze inaczej i raczej prawdziwy kod nigdy tak nie wygląda. W każdym języku można pisać i pisać. Do pythona listę zażaleń też można wypisać strasznie długą bo to język w którym się w miarę fajnie pisze ale już analizuje momentami tragicznie. Nie ma języka idealnego i takiego nie będzie. Więc piszmy piszmy i nie narzekajmy bo szkoda czasu który można wykorzystać na napisanie czegoś pięknego.

Autor edytował komentarz.
Comandeer   1 #24 25.09.2012 22:35

"Jest to mały (zależy z jakiej strony patrzeć), lekki (jeśli kilka MB to mało, jak na plik tekstowy) i szybki (no nie bardzo. Ale to zostawmy na później), a już z pewnością wieloplatformowy (za wyjątkiem przeglądarki do ściągania przeglądarek, która wymyśla swoje standardy do wszystkiego)."
Mały? jak dla mnie to dość rozbudowany język. Lekki jest. Nie wiem skąd wytrzasnąłeś te kilka MB. jQuery waży 250kb nieskompresowane. Mało co w JS osiąga 1 MB i więcej (chyba, że piszesz Mapy Google ;)) - jeśli mówimy oczywiście o czystym JS. Bo dane binarne mogą mieć więcej (tak, można obsługiwać binarki w JS). Wieloplatformowy jest, ale nie z powodu przeglądarek! JS to nie język browserowy. Ba, jego najbardziej browserowa część nie jest jego... częścią (tak, DOM to API. nie wierzysz, to patrz w specki na W3C). O node.js słyszał? Jak nie, to nie wiesz co to prawdziwy JS ;)
"I tak te kaczątko webu (może nie najśliczniejsze) dojrzewało. Zyskiwało kolejne piórka, gadżety, bzdety."
jeszcze raz - patrz co jest API, a co JS-em. Zdziwisz się ile "bzdetów" ma JS (a raczej poprawnie mówiąc: ECMAScript).
co do przykładu z return - czytałeś speckę? Wiesz co to JSON? Gdybyś miał jakiekolwiek pojęcie o JS, wiedziałbyś czemu się tak dzieje. Owszem, może i automatyczne wstawianie średników nie jest pomysłem pierwsza klasa, ale JSON jest cholernie użyteczne. Porównaj sobie XML i JSON.
Kolejny przykład (ten z liczbami) to po prostu konwersja typów. W PHP też jest. Owszem, ciut inna, ale jest. I znowu - kłania się po prostu nieznajomość JS.
Co do pętli - marudzisz i tyle.
Przechodząc do jQuery - można w nim zrobić makaron, ale można też napisać ładny kod, ładnie rozplanowany i wgl. Jeśli masz nieczytelny jQ, to znaczy, że ty zawiniłeś, a nie biblioteka ;) Poza tym - jQ właśnie nie jest JS-owy na zewnątrz...
To, że JS jest inny nie znaczy, że jest gorszy! Bo nie jest.

soanvig   10 #25 25.09.2012 22:38

@up
Czekam na komentarze odnośnie twojego postu :D

Autor edytował komentarz.
djfoxer   18 #26 25.09.2012 23:13

Przykład z jQ jest mega czytelny, poza tym jedną z cech jQ jest łańcuchowość. Dzięki niej można znacząco skrócić kod i zwiększyć jego czytelność.

  #27 05.08.2013 02:11

Zgadzam się z @djfoxer
Przykład z jQ to nie jest żaden spagetti kod. Jest to wykorzystanie wzorca łancuchowości, który sprawia, że kod jest bardzo CZYTELNY - jedna z większych zalet jQuery.

Kod spaghetti jest wtedy, gdy zdefiniowanych lub ukrytych jest zbyt wiele zależności między modułami, obiektami.

Szczerze - kiepski artykuł. Do wielu rzeczy można się przyczepić :/