Newsgroup: it.comp.lang.javascript
Titolo: dubbio programmazione funzionale

Ciao a tutti.
Cercando documentazione a proposito di ajax ho trovato un metodo
helper per usare XHR in maniera un po' più comoda ed elegante. Qui
sotto posto solo una parte, quella che imho serve per la domanda che
devo fare.
/* Copyright(C) 2005,2006 Salvatore Sanfilippo
 * 
http://antirez.com/articoli/spaghettiajax.html
 * All Rights Reserved.
 * This code is releaed under the GPL license version 2.0 */
var ajax_req = null;
function ajaxGet(url,handler) {
    var a = new Array("placeholder");
    for (var j=2; j<arguments.length; j++) {
        a[a.length] = arguments[j];
    }
    var myhandler = function() {
        var content = ajaxOk();
        if (content != false) {
            a[0] = content;
            try {
                return handler.apply(this, a);
            } catch(e) {
                return myDummyApply(handler, a);
            }
        }
    }
    ajax_req = CreateXmlHttpReq(myhandler);
    ajax_req.open("GET",url);
    ajax_req.send(null);
}
Quello che vorrei fare è semplice, ovvero associare all'evento onClick
di un bottone un handler javascript che avvia una richiesta XHR e
visualizza in un div il testo restituito dal server.
La funzione associata al bottone è la seguente:
function on_btnProva_clicked(){
 	// div dove visualizzare il testo
	var elementid = "div_prova";
	// closure
	var realhandler = function(content){
		var e = document.getElementById(elementid);
		e.innerHTML = content;
	}
 	// avvio della comunicazione XHR, che usa come handler la closure
 	// creata prima
 	ajaxGet( "server.php", realhandler );
}
Quello che volevo evitare è di scrivere due funzioni distinte, del
tipo:
function realhandler( content, elementid  ) {
	var e = document.getElementById(elementid);
	e.innerHTML = content;
}
function on_btnProva_clicked(){
 	ajaxGet( "server.php", realhandler, "div_prova" );
}
Ho provato e sembra funzionare. Però non so se è un colpo di fortuna o
se ci sono metodi migliori. Non sono molto convinto della soluzione
adottata, e le mie basi di programmazione funzionale sono veramente
scarse (di fatto ho guardato solo oggi qualcosa).
Temo che questo sistema possa avere dei problemi di efficienza.
Una seconda richiesta è se c'è una tecnica migliore.
Grazie.
--
Ciao
Blue

 visualizza in un div il testo restituito dal server.
Ti consiglierei di "cancellare la lavagna" e ripartire da solo, 
scrivendo qui mano a mano che trovi problemi.
Comincia col dividere il tutto in vari passi:
1) creare l'oggetto XmlHttpRequest
2) impostare i parametri della richiesta
3) impostare l'handler che gestira' la risposta
4) associare l'esecuzione del tutto alla pressione di un pulsante
Se sei agli inizi, salta il punto uno, prendi un qualcosa di gia' fatto 
e cerca di capire i perche' e i percome studiando come e' stata scritta.
La migliore che puoi trovare dovrebbe essere proprio negli archivi di 
questo newsgroup (autore Zer0): se non sbaglio dovrebbe averla riportata 
anche Cristiano Larghi nel sito 
http://www.criosoftware.it/

 anche Cristiano Larghi nel sito 
http://www.criosoftware.it/
Beh... che Zer0 possa essere l'autore di uno dei metodi migliori non ne
avevo dubbi :) Ho potuto notare come gran parte delle risposte tecniche più
elevate siano sue. 
Grazie mille del link! Lo userò abbondantemente. Mi è già stato utile per
una cosa che non c'entra nulla con l'argomento di questo thread.
-- 
Ciao.
Blue

 elevate siano sue. 
Si', e ti assicuro che parla con cognizione di causa: altrimenti non sta 
zitto e si preoccupa di avere cognizione di causa.
Ahi, gli ho fatto due complimenti, ma le conseguenze sono mie.
Scherzi a parte il mio consiglio era serio: visto che stavi facendo una 
cosa "base" nel campo XmlHttpRequest, cancella davvero la lavagna e non 
usare cose gia' fatte.
Il codice che hai fatto vedere prima anche se l'ho letto in corsa (e non 
ho avuto proprio voglia di riguardarlo, scusa) sembrava davvero 
ingarbugliato e, paradigmi di programmazione a parte, vale la pena che 
tu ti riscriva a manina i processi base.
Poi, eventualmente, userai librerie.
Visto che sembri curioso ti inviterei a scontrarti con gli errori e a 
mettere in piedi le tue cose senza librerie di sorta.

 programmazione a oggetti o alla programmazione procedurale.
Allo stesso modo si presta alla programmazione funzionale. Va aggiunto
che anche linguaggi OOP come Java e C# paiono voler buttare un occhio,
nell'immediato futuro, ad alcuni approcci di quest'ultima.
-- 
~ "Il debito pubblico è abbastanza grande da badare a sé stesso."
(Ronald Regan)

 mettere in piedi le tue cose senza librerie di sorta.
Si, questo si. Ho imparato che usare subito librerie, o comunque sistemi che
tolgono al programmatore la responsabilità delle funzionalità base, è male.
Quando ho iniziato a sviluppare applicazioni web usavo ASP.Net e
praticamente facevo fare tutto al server. Orrore. Certo su di una rete
interna con server dedicato e poco traffico non si nota, però... 
Ora invece cerco di spostare il più possibile lato client. Nelle pagine non
inserisco più contenuto tramite PHP, il codice html è sempre lo stesso, ed
i vari oggetti li creo dinamicamente, ottenendo i dati necessari con una
richiesta asincrona. Imho è molto meglio.
-- 
Ciao.
Blue

 richiesta asincrona. Imho è molto meglio.
Se siamo in web application o in intranet, si', cerco di sfruttare tutte 
le possibilita' per dare il giusto lavoro a ognuna delle due parti.
In un sito web continuo a considerare xmlhttp come un'eventuale 
facilitazione all'interfaccia, ma mai una necessita'.

 esattamente la programmazione funzionale.
In parte sono già cose che conosci, e probabilmente hai usato. Quindi
si tratta solo di fare i dovuti collegamenti.
Inoltre: è normale che il "supporto" per la programmazione funzionale
si stia espandendo, visto che Javascript va ad assomigliare sempre di
più a Python; e che quest'ultimo può essere usato in modo funzionale.
Linguaggi di programmazione realmente funzionali, sono - ad esempio -
il già citato Haskell e OCaml (con cui, tra l'altro, hanno sviluppato
l'haXe di cui ti ho già parlato, se non ricordo male).
-- 
~ "Gesù ha avuto la sfortuna che su quello che ha detto ci hanno
costruito sopra una religione."
(Josè Saramago)

 l'haXe di cui ti ho già parlato, se non ricordo male).
Di haXe si' abbiamo parlato (e sembrava pure carina la questione), ma 
non relativamente alla programmazione funzionale.
Mi aggiornero'.

 Mi aggiornero'.
Ora che dovresti avere più tempo per fare certe cose, approfitta.
-- 
~ "L'arte non riproduce cio' che e' visibile,ma rende visibile cio'
che non  sempre lo e'" (Paul Klee)