Perché JavaScript? Quali sono i vantaggi? [chiuso]

7

Questa non è una domanda semplice, ma stavo pensando, quali vantaggi ci sono realmente nel linguaggio JavaScript?

Tutti utilizziamo JavaScript sul browser, ovviamente non c'è altra scelta (puoi usare transpilers, ma alla fine è ancora javascript), e so, è un linguaggio relativamente facile da imparare, ma, immaginiamo potrebbe usare qualsiasi linguaggio invece di JavaScript, in quale situazione JavaScript sarebbe ancora una scelta migliore? Non solo nel browser, ma anche in altri posti?

Non voglio considerare la comunità e le biblioteche attorno alla lingua, o la sua curva di apprendimento. Voglio considerare la lingua stessa. Che cosa può fare JavaScript che gli altri linguaggi non possono, o quale JavaScript fa meglio della maggior parte degli altri?

Non prendermi in errore, adoro javascript e lavorarci ogni giorno, ma non potrei rispondere a questa domanda.

Grazie!

    
posta Rogerio Chaves 12.03.2015 - 04:29
fonte

5 risposte

13

Nei primi giorni di Netscape, c'era una nuova tecnologia che era di gran moda. Giava. Questo non era il Java che conosciamo e amiamo (per alcune definizioni di 'amore') oggi, ma piuttosto Applet Java.

Le applet Java avevano però un difetto grave: non potevano interagire con la pagina che le racchiudeva. Questo ha limitato severamente la loro utilità. E così, i creatori del principale browser Web in quel momento si sono impegnati a scrivere un semplice linguaggio di scripting incorporato nel browser che sarebbe stato in grado di colmare il divario tra la pagina stessa e l'applet. E così è nato JavaScript.

Il ruolo chiave di JavaScript in quei giorni era quello di essere in grado di invocare metodi nel contenitore di applet e puoi anche essere richiamato dall'applet ... e alcuni DOM armeggiano per rendere utile quell'interazione. Era basato su un linguaggio funzionalistico molto semplice con una certa sintassi che non era estranea ai codificatori Java che stava sollecitando.

Leggi di nuovo quanto sopra. L'elemento JavaScript fornito era l'interazione con le applet Java nella pagina web. Nessun'altra lingua ha fatto questo.

Ed è per questo che JavaScript e non Python o Perl o TCL o uno dei suoi linguaggi di scripting contemporanei è nel browser. Quegli altri linguaggi di scripting non erano progettati pensando a questo ponte e innestando quel ponte nel linguaggio implicarono troppe modifiche a quelle lingue - e di più, erano fuori dal controllo di Netscape.

Quindi, per allora ...

  • Era un linguaggio piccolo che forniva un elemento chiave della tecnologia del browser in un momento critico
  • Un sacco di persone l'hanno imparato come parte dello stack del browser

Quindi cosa fa meglio ora? Essere di facile accesso e accessibile per i nuovi programmatori e fornire un feedback rapido per fare cose visibili (fare cose su una pagina web) che non è stato in giro dai tempi della grafica a bassa risoluzione in Basic nei primi anni '80. Certo, puoi fare cose belle con Python o Lua o Ruby ... ma non puoi semplicemente lanciarlo in una pagina web e dire "guarda cosa ho fatto" nel modo che puoi con JavaScript. Chiunque abbia un computer o uno smartphone può vederlo e apprezzare ciò che è stato fatto.

    
risposta data 12.03.2015 - 15:18
fonte
5

JavaScript assomiglia a un linguaggio simile a Scheme, con una sintassi diversa, una semantica di prototipo strano e regole brutte (come per la valutazione di {} + [] ecc ...). Probabilmente era (per ragioni economiche e sociali) sotto-specificato e sotto-progettato. Successivamente, l'implementazione comune (all'interno dei browser) divenne di fatto uno standard e ispirò le specifiche più ufficiali.

Una volta che Javascript è apparso nel panorama Web, è stato provato ed è cresciuto a causa di un'estensione - il rete aziendale di tutte le società che lo utilizzano. Una volta che molte persone lo usano, non c'è abbastanza incentivo per sostituirlo con qualcosa di meglio.

Scheme (e Common Lisp) e Python hanno i loro vantaggi (ma preferisco la sintassi Scheme su Javascript).

Ad esempio, DSSSL è stato strongmente ispirato da Scheme.

    
risposta data 12.03.2015 - 14:31
fonte
4

La domanda è in realtà composta da due domande:

  • Perché un linguaggio di scripting?
  • Di tutti i linguaggi di scripting, perché javascript?

Perché un linguaggio di scripting?

L'idea principale dietro l'uso dei linguaggi di scripting è questa:

Le applicazioni spesso richiedono la personalizzazione e alcune volte il livello di personalizzazione offerto da opzioni e stili non è sufficiente. Includendo un linguaggio di scripting nella tua applicazione, permetti ai tuoi utenti di personalizzare strongmente la tua applicazione, senza dover fornire loro il codice sorgente della tua applicazione e senza costringerli a imparare e utilizzare strumenti di sviluppo software come i compilatori.

Inoltre, i linguaggi di scripting hanno generalmente il vantaggio di essere altamente autosufficienti. Aggiungere un linguaggio di scripting a qualsiasi applicazione è relativamente semplice: si istanzia un po 'di motore di scripting all'interno del programma, gli si fornisce una serie di interfacce che saranno visibili dagli script e quindi gli si darà uno script da eseguire. Lo script è (per tutti gli scopi pratici) fisicamente incapace di accedere a qualsiasi funzionalità dell'ambiente di esecuzione diverso dalle interfacce fornite.

Inoltre, i linguaggi di scripting sono generalmente più di alto livello rispetto ai normali linguaggi di programmazione, il che significa che sono in qualche modo più lontani dalla macchina reale. (I programmatori di linguaggi di script non sono generalmente interessati al numero di bit lungo il loro int s.) Questo, in combinazione con il loro alto livello di contenimento, rende i linguaggi di scripting estremamente portabili: se si mantengono le interfacce disponibili al minimo, allora tutto quello che devi fare per rendere i tuoi script eseguibili su una moltitudine di ambienti operativi è quello di implementare quelle interfacce minime su ogni ambiente operativo mirato.

Tutto questo rende i linguaggi di scripting ideali per l'esecuzione sui browser, che sono nativi per tutti i tipi di sistemi diversi là fuori, e dove ovviamente non vuoi che il codice malevolo scaricato da qualsiasi luogo che visiti sul web abbia accesso a il tuo computer. Quindi, il javascript in esecuzione su un browser generalmente ha una visione molto piccola del mondo; in pratica, il suo intero mondo di solito consiste nel modello di documento della pagina corrente, oltre ad alcuni altri servizi per comunicare con l'interwebz, di solito con il server da cui ha origine lo script. Confrontalo con un linguaggio reale, che generalmente viene fornito con librerie ricche che (fortunatamente o sfortunatamente non è il posto giusto per questa discussione) permettono al codice di fare praticamente tutto ciò che gli piace sulla macchina su cui è in esecuzione.

Di tutti i linguaggi di scripting, perché javascript?

Detto questo, la domanda sul perché javascript in particolare rimane ancora. Suppongo che la risposta a questa domanda sia molto meno tecnica. Probabilmente ha solo a che fare con la storia e la politica.

Javascript è stato inventato da un americano, che all'epoca lavorava per Netscape, che all'epoca era l'unica azienda a fare l'unico browser che tutti usavano per accedere a quella nuova cosa conosciuta come Internet. Quindi, ha capito. Quando microsoft lanciò il proprio browser poco dopo, provarono a giocare lo stesso trucco con un linguaggio di scripting della propria invenzione: vbscript. Fortunatamente, è caduto.

Python era disponibile all'incirca nello stesso periodo di javascript, (se non leggermente prima), ma il suo creatore era olandese e non era affiliato con nessuna delle principali compagnie in quel momento, quindi è probabilmente l'unica ragione per cui i nostri browser sono (sfortunatamente) esegue javascript al posto di Python.

    
risposta data 12.03.2015 - 14:59
fonte
-2

I don't want to consider the community and the libraries around the language, or its learning curve. I want to consider the language itself. What can JavaScript do that other languages can't, or what JavaScript does better than most others?

Uno dei pregi di JS è che - rispetto a qualcosa come LUA o linguaggi di scripting "più semplici" - è piuttosto difficile trovare qualcosa che non è possibile fare in JS. Potrebbe (sarà?) Essere scomodo, complesso e molto difficile da usare, ma generalmente sarai in grado di creare una libreria che fa ciò che vuoi.

Oltre a ciò, Javascript è un abominio di una lingua. È molto difficile da padroneggiare e concetti di base come scoping, iteration o truthiness sono alquanto dubbiosi. Dal punto di vista del linguaggio, esso (imho) non regge il confronto con rubino, pitone o groovy - a qualsiasi livello tu voglia utilizzarlo.

Tuttavia, a causa di browser e HTML, gli sviluppatori di Javascript sono dappertutto. Quindi, se vuoi esporre un livello di scripting, è una soluzione più pragmatica che va con un linguaggio (probabilmente) migliore per il quale non puoi trovare sviluppatori.

Sfortunatamente, questa non è una risposta sul merito del linguaggio stesso ...

    
risposta data 12.03.2015 - 17:28
fonte
-2

What can JavaScript do that other languages can't, or what JavaScript does better than most others?

JavaScript ha funzioni di prima classe con chiusure lessicali. Questo lo rende piuttosto potente.

Puoi sfruttare il paradigma della programmazione funzionale. Ad esempio, piuttosto che fare:

var array = [1, 2, 3, 4, 5],
    results = [],
    index,
    iteree;

for (index = 0; index < array.length; index += 1) {
    iteree = array[index];
    if (iteree % 2 === 0) {
        results.push(iteree);
    }
}

Puoi fare:

var array = [1, 2, 3, 4, 5],
    results = array.filter(function (iteree) {
        return iteree % 2 === 0;
    });

Puoi scrivere sistemi basati su eventi:

element.addEventListener('click', function (event) {
    console.log('You clicked me! That tickles!');
}, false);

È possibile scrivere codice di rete non bloccante, in quanto le richieste in sospeso sono posizionate su una coda:

var request = new XMLHttpRequest();
request.onload = function () {
    console.log(this.responseText);
};
request.open('get', 'yourFile.txt', true);
request.send();

Gli sviluppatori di Node.js hanno scoperto quanto fossero utili le chiusure e le code di eventi per eseguire attività relative all'IO. Da qui :

Javascript's support for closures allows you to use variables you've defined in the outer (calling) function inside the body of the callback - this allows to keep state between different functions that will be invoked by the node runtime independently.

. . . node allows your code to handle requests from hundreds of thousands open socket with a single thread concurrently by multiplexing and sequencing all your js logic in a single stream of execution . . .

This works pretty well for webapp servers as most of the time is actually spent on waiting for network or disk (database / sockets) and the logic is not really CPU intensive - that is to say: this works well for IO-bound workloads.

Bonus: come nelle lingue con membri privati, puoi nascondere i dati, grazie alle chiusure:

var makePerson = function (options) {
    var locale = options.locale,
        age = options.age;
    return {
        isOldEnoughToDrink: function () {
            if (locale === 'en_US' && age >= 21) {
                return true;
            } else {
                return true;
            }
        }
    };
};

Le cose che portano JavaScript giù sono le sue parti cattive: ambito globale, ambito delle funzioni, nessun modulo, inserimento del punto e virgola, operatori interrotti, varargs danneggiati,% rottothis, with ,% non sicuro% co_de, sintassi Java ( eval ), sintassi C, API DOM, prototipi e in ES6, new . Saremmo stati meglio con Scheme, ma invece abbiamo ottenuto Scheme in una delle T-shirt con le maschere dipinte a mano di Java.

Per fortuna, hai il potere di decidere di non usare le parti cattive della lingua. Se hai la disciplina per usare solo le parti buone della lingua, non è così male. E nel mondo delle applicazioni web, dove la programmazione asincrona è necessaria per creare un'esperienza reattiva per gli utenti, disporre di funzioni di prima classe rende il linguaggio ben adattato all'attività in corso.

Modifica

Altri vantaggi:

  • Sembra Java / C. Anche se (IMO) Scheme sarebbe stata una scelta migliore (e meno ingannevole), penso che i programmatori nuovi di Lisp siano scartati dalla sua sintassi "strana". La sintassi familiare di JavaScript facilita l'ambientazione. Anche se una lingua è "tecnicamente" superiore, se è troppo superficiale, la gente potrebbe decidere di non apprenderla o usarla per ragioni emotive.
  • Letterali di espressioni regolari. In alcune lingue, devi scrivere espressioni regolari come stringhe, che possono portare a errori se non si esegue correttamente la fuga dei caratteri. In questa lingua è un po 'più facile scriverli.
  • JSON è un sottoinsieme di JavaScript. Se stai costruendo messaggi JSON, gli oggetti nel tuo codice sembrano esattamente come gli oggetti che vengono consegnati.
  • L'assenza di lezioni. Alcune lingue impongono la filosofia classica a te. Ma questo può ritorcersi contro, come quando la tua genealogia risulta insufficiente o mancante di un membro. Creare oggetti in JavaScript è semplice e dinamico: basta scrivere un oggetto letterale e applicare alcune proprietà su di esso. Fatto.
risposta data 12.03.2015 - 17:06
fonte

Leggi altre domande sui tag