|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Dec 2007
Città: latina
Messaggi: 52
|
[java] strutture collegate lineari : side effect
salve
vorrei capire meglio la differenza tra algoritmi con side effect e gli altri. In particolare sto studiando come concatenare due liste (uno dei tanti esempi) e ovviamente ci sono diversi modi, il libro presenta l'esempio con SE, senza e ricorsivo con SE, mentre nella classe di prova poi userà soltanto quelli senza side effect. La mia domanda è questa : posso usare indifferentemente uno dei due tipi di algoritmo con la stessa classe ? Anche se non credo dato che quelli con SE hanno un tipo restituito mentre gli altri sono void. scrivo i due algoritmi per maggiore chiarezza : Codice:
class Nodolista{
String info;
Nodolista next;
}
public class SequenzaStringhe{
....
// concatena alla lista this la lista l
public void append(SequenzaStringhe l) {
// 1.crea un nodo ausiliario per trattare uniformemente
// il caso in cui l'oggetto di invocazione sia la
// lista vuota
NodoLista a = new NodoLista(null, nodoinit);
// 2.vai fino all'ultimo elemento della lista
NodoLista p = a;
while (p.next != null)
p = p.next;
// 3.copia gli elementi di l in coda a p
NodoLista q = l.nodoinit;
while (q != null) {
p.next = new NodoLista(q.info, null);
p = p.next;
q = q.next;
}
// 4.elimina il nodo ausiliario
nodoinit = a.next;
}
// con side effect
public static Nodolista append(Nodolista p1, Nodolista p2){
if (p1==null) return p2;
else {
Nodolista q=p1;
while (q.next!=null) q=q.next;
q.next=p2;
return p1;
}
}
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Ad uno di latina non può che rispondere uno di frosinone......
I metodi che fanno side effect in sostanza modificano lo stato dell'oggetto di invocazione, mentre i metodi "funzionali" no. Nell'esempio del metodo append con le liste.... il primo (SE) aggiunge in coda alla lista su cui invochi il metodo Codice:
miaLista.append(nuovaLista); il secondo invece semplicemente costruisce una nuova lista (una terza) a partire dalle prime due, e restituisce quella.
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Dec 2007
Città: latina
Messaggi: 52
|
grazie per la risposta quasi-compaesano
non ho ben capito una cosa, a partire dalla stessa classe cliente, posso usare indifferentemente uno dei due algoritmi ? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
A partire da una classe cliente, puoi usare entrambi i metodi, certo!
Ovviamente in modo diverso e ottieni risultati diversi (ricordi??? una lista modificata oppure una lista nuova di zecca) PS: scusa la domanda, ma mica stai studiando sulle dispense di calvanese, iocchi, demetrescu, nardi????
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" Ultima modifica di Oceans11 : 12-09-2008 alle 17:07. Motivo: aggiunta PS |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Dec 2007
Città: latina
Messaggi: 52
|
huahhaha
si! quelle comunque non era niente di difficile bastava qualche esercizio studi anche te a roma ? |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
che soggetti quei quattro!!!
a te chi fa lezione? beh in effetti devo la mia seppur modesta conoscenza di java a calvanese! cmq no non sto più a roma, mi sono trasferito a siena.
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Dec 2007
Città: latina
Messaggi: 52
|
il corso di fondamenti me lo ha fatto il mitico Demetrescu, mentre Tecniche di programmazione il noioso Iocchi
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:38.



















