Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.lang.javascript > #8293

Re: programmazione funzionale

From son <son@mailnesia.com>
Newsgroups it.comp.lang.javascript
Subject Re: programmazione funzionale
Date 2019-01-06 10:48 +0100
Organization Aioe.org NNTP Server
Message-ID <q0sisk$19ll$1@gioia.aioe.org> (permalink)
References <q0rg98$rp7$1@gioia.aioe.org> <g9dtc4Fhg3qU1@mid.individual.net>

Show all headers | View raw


Il 06/01/2019 09:42, Alessandro Pellizzari ha scritto:
> Spero di non aver creato più confusione di prima. :D

No, anzi, ti ringrazio del tempo che mi hai dedicato.

Però c'è qualcosa che ancora non capisco.

Ho imparato (spero) a sostituire i miei cicli for... con i metodi .map, 
.reduce e .filter per passare dall'approccio imperativo a quello 
dichiarativo.

Ma non riesco a scrivere il mio codice assemblando delle funzioni pure.
Per esempio, in questo articolo
https://medium.com/the-renaissance-developer/concepts-of-functional-programming-in-javascript-6bc84220d2aa
si dice che le funzioni pure non dovrebbero usare oggetti globali.

Ebbene, io non ci riesco. Scrivo programmini di animazione usando la 
libreria D3, che più o meno sono formulati così:

var svg=d3.append("svg")...

var obj1=svg.append(...

var obj2=svg.append(...

function animaObj1() {
	obj1
	.transition()
	...
	.on("end",function() {
	// qualche altra funzione (*)
	}
	// (*) 	immagino che .on("end",...)
	// sia una qualche forma di premise
}

function animaObj2() {
	obj2
	.transition()
	...
	.on("end",function() {
	// qualche altra funzione
	}
}

// altre funzioni che definiscono delle transizioni

function ...

// e per finire (semplificando al massimo il discorso)

function main() {
	...
	animaobj1()
	...
	animaobj2()
}

main()

Cioè: dichiaro alcuni (pochi) oggetti globali che poi sono accessibili a 
tutte le funzioni. Tutto è strutturato affinché queste funzioni siano in 
grado di accedere agli oggetti obj1 e obj2, a loro volta definiti dentro 
l'oggetto svg.

Potrei dichiarare tali oggetti parametri delle funzioni che li usano, così:

function animaObj1(shape) {
	shape
	.transition()
	...
	.on("end",function() {
	// qualche altra funzione
	}
}

ma queste funzioni *modificano* tali oggetti, quindi violerei il 
principio di immutabilità... e d'altronde il programma deve modificare 
gli oggetti obj1 e obj2, per mostrare i cambiamenti dei corrispondenti 
elementi dom a video...

Sono riuscito a spiegare la mia difficoltà?

Back to it.comp.lang.javascript | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

programmazione funzionale son <son@mailnesia.com> - 2019-01-06 00:57 +0100
  Re: programmazione funzionale Alessandro Pellizzari <shuriken@amiran.it> - 2019-01-06 08:42 +0000
    Re: programmazione funzionale son <son@mailnesia.com> - 2019-01-06 10:48 +0100
      Re: programmazione funzionale Alessandro Pellizzari <shuriken@amiran.it> - 2019-01-06 10:36 +0000

csiph-web