Quale mentalità di programmazione avere nei confronti di JavaScript? [duplicare]

3

Ho usato per programmare in Java. Come risultato di ciò, sono diventato esperto del paradigma Object Oriented. Secondo me è un ottimo approccio alla programmazione perché è facile testare l'unità, utilizzare schemi di progettazione e così via.

Ora sto programmando in JavaScript. Dovrei avvicinarmi anche a JavaScript con una mentalità orientata agli oggetti? Mi sembra che la risposta dovrebbe essere "sì", ma voglio sentire l'opinione di altre persone.

    
posta SBel 19.12.2014 - 16:40
fonte

4 risposte

7

JavaScript è un linguaggio multiparamigmo che può avvicinarsi da un puro punto di vista OOP, ma la maggior parte delle persone non lo fa, per varie ragioni che descriverò tra un po '. Nella mia esperienza, JavaScript idiomatico tende ad essere al 50% circa funzionale, al 30% OOP e al 20% procedurale. Tuttavia, quel mix varia un lotto a seconda di cosa stai facendo e con chi lavori.

Alcuni motivi per cui OOP non è usato in modo pesante in JavaScript come ci si potrebbe aspettare:

  • Il puntatore this ha strane regole di scoping che complicano le cose.
  • I programmatori delle scuole Java / C # / C ++ non sono abituati agli oggetti in stile prototipo.
  • I programmi tendono ad essere molto asincroni e callback-pesanti, il che si presta molto bene a uno stile funzionale.
  • Le funzionalità funzionali del linguaggio evitano la necessità di molti modelli di progettazione OOP.
  • Gli script per un singolo scopo più piccoli, più autonomi, si prestano bene a uno stile procedurale.
risposta data 19.12.2014 - 17:33
fonte
1

Javascript è più diverso da Java di quanto potrebbe suggerire un confronto di superficie. Un approccio orientato agli oggetti può farti molto, ma non è di per sé sufficiente per diventare un buon programmatore javascript, perché alcuni dei modelli critici di javascript non sono realmente orientati agli oggetti. Scoprirai che l'uso giudizioso delle chiusure è tanto importante quanto qualsiasi modello di progettazione OO e che una solida comprensione del modello della "funzione di continuazione" è quasi altrettanto critica.

    
risposta data 19.12.2014 - 17:07
fonte
1

Avrei raccomandato un ottimo libro JavaScript: The Good Parts di Douglas Crockford come buona guida. JavaScript AFAIK non ha (in pratica) un unico approccio all'orientamento agli oggetti. Come menzionato nelle risposte precedenti, probabilmente è più utile imparare la mentalità paradigmatica funzionale, a meno che non si abbia intenzione di progettare framework di grandi dimensioni come OpenLayers, jQuery o Node.js.

Un altro fattore da decidere è se lavorerai da solo o in una squadra più numerosa. In quest'ultimo caso è probabilmente consigliabile avere uno stile di programmazione comune.

    
risposta data 19.12.2014 - 21:42
fonte
0

Assolutamente! Quando scrivo javascript, scrivo principalmente oggetti. Javascript ha un meraviglioso, sottile, modello di oggetto elegante IMHO che identifica istanze di funzioni, mappe e oggetti. Quindi puoi approfittare di ognuna di quelle semantiche. In pratica, finisco per avvolgere tutto il mio codice in oggetti, non a causa della mia esperienza in Java, ma solo perché consente una buona modularizzazione.

Inoltre, a causa delle equivalenze interessanti tra funzioni, mappe e oggetti, potrebbe essere un sacco di persone che utilizzano la progettazione di oggetti senza rendersene conto.

Ad esempio, specialmente con le moderne librerie javascript disponibili, vedo un sacco di codice simile a questo:

{ 'thing1': 'blah',
  'thing2': function() { ... }
}

Questo è un approccio orientato agli oggetti, poiché definisce una mappa (o array associativo) che in javascript è uguale a un oggetto. (o visa-versa, dimentico). Il punto importante è che raggruppa i dati con la funzionalità, che è una preoccupazione principale di OO.

In caso contrario, vedo un sacco di codice arrotolato in oggetti ai fini della modularizzazione. jquery è strongmente orientato agli oggetti e si vedono molte estensioni come:

$.zoom = new function() {
  var privateValue = 0;
  this.visibleFunction = function() { ... };
}();

Che fissa un oggetto sopra quello che fornisce jquery.

Quindi, nella mia esperienza, sempre più negli ultimi anni quando le strutture javascript assumono un aspetto OO, è che la pratica OO in javascript è quasi la metodologia predominante. E, dalla mia esperienza, nessun serio sviluppatore di javascript mi ha dato dolore per far ruotare il mio codice in oggetti - semmai esattamente il contrario.

(In confronto, non è così vero con il mondo Python, dove in Python l'atteggiamento più naturale è cadere nelle funzioni a livello di modulo.)

Ma la gioia che trovo con OO in javascript è che puoi sfruttare i buoni meccanismi di visibilità / visibilità che fornisce per creare veramente una semantica degli oggetti pulita in un modo che può essere davvero ingombrante in java. E poi ottieni i vantaggi di un linguaggio dinamico, come l'associazione tardiva di funzioni agli oggetti. Inoltre, in Java, la riflessione è un grande insieme di utilità, ma l'ho sempre trovato davvero ingombrante. Ma in javascript, la riflessione è solo un aspetto naturale della lingua.

Quindi mi piace prendere una pausa e fare OO in javascript di tanto in tanto, perché mi sembra liberatorio dopo aver faticato con Java per un po '.

Penso che la differenza principale con OO in java e javacript sia che javascript non è così odioso a riguardo.

    
risposta data 19.12.2014 - 18:18
fonte

Leggi altre domande sui tag