Dlaczego JavaScript jest tak popularny?

0

Może mało techniczne pytanie, bardziej bazujące na opiniach - niemniej jednak zachodzę w głowę dlaczego tak się dzieje.
Ogólnie poznając składnię, strukturę javascriptu jestem co najmniej zaskoczony, żeby nie powiedzieć: przerażony. Jest ona dokładnym przeciwieństwem języka C. Zmienna może przechowywać.. cokolwiek, funkcja może zwracać wartość - ale nie musi (ale nawet jeśli zwraca, to można się spodziewać zarówno true, jak 1 czy "1"). Obiekty są tworzone w locie, można do nich w każdym momencie dodać nową właściwość czy metodę (czyli błąd-literówka jest stosunkowo trudny do wykrycia). Zresztą - obiekty nie mają nawet typów, jedyne co je określa to funkcja konstruktora. Podczas gdy w C nie ma nawet typu string - tutaj wszystko można tak naprawdę traktować jako ciąg znakowy (vide dostęp do pól klasy za pomocą prostokątnych nawiasów). Do dyspozycji jest tak naprawdę jeden wątek (chociaż z tego co czytałem są jednak jakieś triki, żeby nie blokować UI wykonując dłuższe operacje).
W Internecie często spotykam się z opiniami, że PHP jest bałaganiarskim językiem... gdzie w takim wypadku plasuje się JS? ;)
Rozumiem jeszcze użycie tego języka do animowania jakiegoś tam przycisku na stronie internetowej u klienta. Ale server-side (nie dość, że node.js istnieje to jeszcze ma się dobrze)? Co przemawia za użyciem tak niedoskonałego narzędzia do implementowania logiki biznesowej po stronie serwera?
Fakt - pierwszy raz stykam się z tym językiem, w ogromnym stopniu brak mi wiedzy, ale takie są moje pierwsze wrażenia. Więc pytam Was - dlaczego JS? Co zadecydowało o jego popularności (jest przecież obecny w każdej dostępnej na rynku przeglądarce internetowej)? Jakie te język ma zalety? A może to co na pierwszy rzut oka uważam za wadę - właśnie przemawia na jego korzyść (no ale dlaczego?)?

0

Zmienna może przechowywać.. cokolwiek

Gratulację, odkryłeś języki słabo typowane :p Jest ich wiele. W tym też mocno popularne. Javascript, Python, PHP, zdaje się Perl i Ruby. Jak widać - słabe typowanie nie wpływa na popularność.

PHP jest bałaganiarskim językiem... gdzie w takim wypadku plasuje się JS?

Pracuję z dwoma tymi językami na codzień od 6 lat i uważam, że PHP jest bardziej bałaganiarski. Oba też da się utrzymać w ryzach, choć wolałbym tego nie robić.

Co przemawia za użyciem tak niedoskonałego narzędzia do implementowania logiki biznesowej po stronie serwera?

Node.js nie byłoby tak popularne, gdyby nie był popularny JS. A JS jest popularny, bo to jest i był jedyny język client-side działający out-of-the-box w każdej przeglądarce. Choć zrodziło się to z JScriptu od Microsoftu (który bodaj nie jest 100% kompatybilny z Javascriptem), a wcześniej ponoć od LiveScriptu Netscape'a - wtedy to ta dwójka ustalała reguły. A, że web to bardzo ważny element informatycznego biznesu (od 10 lat ludzie nawet nie zamykają przeglądarki, bo nie ma po co, rola komputera często ogranicza się do otwartej przeglądarki) - to JS urósł w siłę. Gdyby ktoś dobrze próbował przeforsować inny język client-side, to może byśmy mieli coś innego, ale zostało na JS.
Jak ktoś długo robił w JS, faktycznie zna i umie ten język, to robienie w tym samym języku strony serwerowej nie wymaga za dużo przyswajania nowej wiedzy.

Ja lubię fakt, że w JS wszystko jest obiektem, ale ja marny programista jestem. Nie każdy też polubi każdy język.

0

C też jest słabo typowane i tam potrafią się dziać jeszcze bardziej dzikie rzeczy. Co prawda JS nie jest idealny, ale po włączeniu trybu strict działa znacznie lepiej. Poza tym Google ma już plany na "zwężenie" JSa tak by np. wywalić słabe typy.

Co do korzyści płynących z JSa to to, że Node jest Event Driven co pozwala znacznie bardziej wydajnie pracować w przypadku aplikacji webowych. Dodatkową zaletą jest szybkość platformy, przy jednoczesnym zapewnieniu w miarę szybkiego rozwoju oprogramowania.

Co do tego, że JS jest "do animacji po stronie przeglądarki" to chyba nie używałeś GMaila. Aktualnie na zdecydowanej większości aplikacji internetowych (nie stron) jest użyte SPA i zdecydowana większość logiki takich aplikacji jest w JSie (via Angular, React, etc.)

Gratulację, odkryłeś języki słabo typowane :p Jest ich wiele. W tym też mocno popularne. Javascript, Python, PHP, zdaje się Perl i Ruby. Jak widać - słabe typowanie nie wpływa na popularność.

Tak się składa, że ani Python ani Ruby nie są słabo typowane. Są dynamicznie, ale silnie typowane. Nie wiem czemu, ale dużo osób myli te dwa pojęcia. Jedno mówi o tym, że zadziała '1' + 1 a drugie o tym, że a = 1; b = "a" zadziała. BTW typowanie dynamiczne ląduje w coraz większej ilości języków silnie typowanych (C#, C++, Go czy D).

0

Z kolejnych zaskoczeń świeżaka - funkcje równie lekko podchodzą do przekazywanych doń wartości, sygnatura to raczej wskazówka niż wymóg, bo i tak wszystko siedzi w tablicy arguments... brrr... No ale przede wszystkim, co zauważyłem zupełnie przypadkiem - ruszył mi kod w którym zgubiłem średnik. Jakie jeszcze błędy js puszcza płazem - i jak w takim razie zachowywany jest w ogóle porządek w programach napisanych w javascripcie?
Ponad to po przeczytaniu czym jest TypeScript naszło mnie pytanie: co stoi na przeszkodzie, żeby do przeglądarki wysyłać kod skompilowany - wiadomo, nie do końca, bo różne architektury itd., ale coś w rodzaju CLI. Nie ważyłoby to mniej niż wersje minified bibliotek, które z tego co czytałem - jedyne co zmieniają to wycinają białe znaki, komentarze i nadają krótsze nazwy zmiennym? Wiem, że w tej chwili to rozważania czysto teoretyczne, bo wygrał js, jest w każdej przeglądarce, więc każdy go używa - ale zastanawiam się czy i jak można by to zrobić lepiej.

0

A masz możliwość zrobienia tego lepiej? :p

O automatycznym wstawianiu średników i wszystkim innym masz tu: http://www.ecma-international.org/ecma-262/5.1/#sec-7.9

0

Na codzien programuje w JS i node. I jednym z powodów dla czego JS jest bardziej bałaganiarski od php jest brak klas. Oczywiscie są domknięcia, ale to jednak nie to samo co klasa.
I ogólnie JS to jeden wielki syf.

Dlaczego go tak lubie?

EDIT:

W sumie to już wiem. Elastyczność, NodeJs, AngularJs, MongoDb, jQuery. To biblioteki robią z JS potwora o niezbadanych rozmiarach.
NodeJs 200,000,000 połączeń w black friday.
Two way data binding w Angulararze.
Brak przymusu tworzenia struktury kolekcji w Mongo
Wszechobecne jQuery.
Elastyczność obiektów w JS.
Socket.io !

0

@Stiffler, sa pseudoklasy. Mozesz zrobic function MojaKlasa i potem normalnie stworzyc obiekt.

Ja tam lubie JS, bo we wszystkim mozna rzezbic bez ograniczen oraz efekty pisania sa bardzo szybko widoczne. Nie trzeba sie przejmowac jakimis dziwnymi const correctnes czy innymi rzeczami na ktore ludzie marnuja (bezsensowanie) mnostwo czasu. Mozna napisac funkcje szablonowa bez wiedzy o tym co to jest szablon.

Ma swoje wariactwa ktore czasem denerwuja (patrze na was automatycznie dodane sredniki), ale z reguly inne jezyki sumarycznie denerwuja mnie bardziej

0

Jest też ES6 i prawdziwe klasy:

http://www.2ality.com/2015/02/es6-classes-final.html

Póki co wsparcie słabe: https://kangax.github.io/compat-table/es6/

0

W JS szybko klepie się prosty kod. Dopiero od jakiegoś czasu stosuje się SPA, czy inne fikuśne aplikacje zawierające masę kodu js. W wielu przypadkach ograniczało się do do obsługi karuzeli czy innych pierdółek. Dlatego nikt nie przejmował się wadami JS i nieprzystosowaniem do ogromu kodu, a zalety szybkiego tworzenia były jak najbardziej za.

Wraz z rozwojem i potrzebą tworzenia dużych aplikacji zrodziło się wiele narzędzi ułatwiających, jak chociażby CoffieScript czyli lepsza składnia która jest potem tłumaczona do JS.

0
dzek69 napisał(a):

Jest też ES6 i prawdziwe klasy:

http://www.2ality.com/2015/02/es6-classes-final.html

Póki co wsparcie słabe: https://kangax.github.io/compat-table/es6/

Ale przecież są translatory ES6 -> ES5, jak chociażby Babel :)

0
emfałsi napisał(a):

Ale przecież są translatory ES6 -> ES5, jak chociażby Babel :)

Polyfille (czy jak to nazywasz - translatory) nie są w stanie zastąpić wszystkich cech ES6. Babel jest wyszczególniony na tabelce kompatybilności, którą zalinkowałem i sam zobacz - są braki.

0
dzek69 napisał(a):

Polyfille (czy jak to nazywasz - translatory) nie są w stanie zastąpić wszystkich cech ES6

Babel to nie polyfill tylko "kompilator" (dwie różne rzeczy).
Tak samo jak na przykład TypeScript który podobno ma całkiem dobre wsparcie w visual studio i jeżeli komuś przeszkadza słabe typowanie (choć jest to raczej zaleta, jedynymi minusami słabego typowania jest podatność na błędy / literówki i utrudniona refaktoryzacja) to polecam

0

(czyli błąd-literówka jest stosunkowo trudny do wykrycia).

Jeszcze lintery się przydają - te narzędzia potrafią wykryć wiele błędów JS, albo code smells (czasami aż za dużo wykrywają, ale to można skonfigurować).

Poza linterami, to czasem i edytory wykrywają tego typu błędy.

Was - dlaczego JS? Co zadecydowało o jego popularności (jest przecież obecny w każdej dostępnej na rynku przeglądarce internetowej)?

właśnie to. sam sobie odpowiedziałeś.

Jakie te język ma zalety?

Obiektowość. większość rzeczy to obiekty - string to obiekt, funkcja to obiekt, tablica to obiekt etc.

Elastyczność. Może nie aż taka jak w Pythonie, ale jednak - mnóstwo rzeczy można nadpisać, zmodyfikować.

Domknięcia(closures). To jest dopiero killer feature.

Prostota języka, a co za tym idzie łatwość implementacji różnych wzorców.

Solidne braki w bibliotece standardowej, jak w i samym języku (tak, to niby straszna wada, ale właśnie dzięki temu, że JS jest tak kijowy, to powstało mnóstwo bibliotek i frameworków, które pozwalają na ominięcie wad czystego JS (paradoks?). Nie mówiąc już o innych językach, jak CoffeScript, które też się jakoś przyczyniają do rozwoju samego JS - patrz: skrótowy zapis funkcji jako strzałka => zostało to wymyślone w CoffeScripcie, a teraz ma być w JS).

Więc: niedopracowanie samego języka i brak biblioteki standardowej pozwoliło paradoksalnie na szybki rozwój bibliotek i ekosystemu.

0

Nie mówiąc już o innych językach, jak CoffeScript, które też się jakoś przyczyniają do rozwoju samego JS - patrz: skrótowy zapis funkcji jako strzałka => zostało to wymyślone w CoffeScripcie, a teraz ma być w JS).

:D Na pewno nie przyszło to z jakiegoś "CoffeScriptu" :) W wielu innych językach coś takiego było już całe wieki temu

2

Słabe typowanie jest jak podrywanie w Tajlandii. Teoretycznie wszystko wygląda tak samo, ale podczas runtime'u możesz się nadziać :)

Kiedyś podczas dyskusji na ten temat ktoś powiedział (programista firmy Base z Krakowa), że w każdym języku słabo nacisk na testy powinien być dużo większy. Zgadzam się, a z drugiej strony nie mam zielonego pojęcia jak dobrze testować kod JSowy, ale to może moja wada.

Osobiście nie lubię JSa jako języka, ale doceniam to co można w nim zrobić. Ani flashowi, ani żadnej innej tego typu client-side technologii się nie udało zbudować takiego ekosystemu. Mimo tylu wad języka, jestem szczerze pod wrażeniem.

0

Nie wiem czemu, ale wszyscy ludzie, którzy twierdzili przy mnie, że JS to prosty język, dziwnie milknęli na prostym pytaniu, czemu to:

{} + {};

daje inny output niż to:

var x = {} + {};

i czemu właśnie taki.

Niestety tak to już jest na tym świecie, że zawsze największą popularność zdobywa największe g**no.

0

przecież daje dokładnie taki sam:

> {} + {}
'[object Object][object Object]'
> var x = {} + {};
undefined
> x
'[object Object][object Object]'
> 

dokonuje niejawnej konwersji obiektu do stringa ({}.toString() daje [object Object]) i dodaje jako stringi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1