[java-didattica] strutture collegate lineari : differenza side-effect e non

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
tux_errante
Prode Principiante
Messaggi: 210
Iscrizione: lunedì 25 febbraio 2008, 9:28
Località: Latina
Contatti:

[java-didattica] strutture collegate lineari : differenza side-effect e non

Messaggio da tux_errante »

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: Seleziona tutto

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;
    }
 }
}
Ultima modifica di tux_errante il giovedì 11 settembre 2008, 19:41, modificato 1 volta in totale.
Linux User:#502728     Rivista Debian Italiana
Ubuntu è Gnu/linux ... Gnu/linux non è Ubuntu.  -> blog <-
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 7 ospiti