Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    18

    Alternativa a centinaia di else-if annidati

    Ciao a tutti ,
    sto scrivendo del codice in cui sono necessari molteplici controlli su alcuni campi stringa, numerici ecc ecc. Al momento l'unica soluzione che mi viene in mente è una serie di if-else if consecutivi.
    Dato che i controlli sarebbero + di 100 e potrebbero cambiare nel tempo volevo chiedervi se qualcuno conosce un modo più elegante ed efficiente per gestirli.
    Esiste qualche framework in cui è possibile ad esempio scrivere un file XML di regole da applicare a specifiche variabili o costanti, in modo da separare la logica di controllo dalle regole.

    Spero di essermi spiegato..

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Dipende molto dal tipo di confronto che stai facendo.
    Se devi effettuare una serie di controlli su delle costanti stringa (da quello che mi è parso di capire), potresti usare una HashMap e facilitarti un po' la vita beneficiando del costrutto switch().
    Un esempio di uso combinato di questo tipo:

    codice:
    HashMap<String,Integer> costanti = new HashMap<String,Integer>();
    costanti.put("Prima costante stringa", 0);
    costanti.put("Seconda costante stringa", 1);
    costanti.put("Terza costante stringa", 2);
    costanti.put("Quarta costante stringa", 3);
    ...
    
    // Devo verificare se la stringa è una delle costanti da me definite
    String s = ...;
    if ( costanti.containsKey(s) ) {
    
       // La stringa è presente nell'elenco delle costanti.
       // Ora andiamo a capire esattamente QUALE stringa è
    
       switch( costanti.get(s).intValue() ) {
          case 0:   // E' la prima costante
             break;
    
          case 1:   // E' la seconda costante
             break;
          ...
       }
    
    } else {
       // La stringa non è nelle costanti
    }
    Al momento, infatti, il costrutto switch() funziona solo con costanti numeriche intere.
    Da Java 7 verrà introdotto anche l'uso delle costanti stringhe.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    18
    Ciao, grazie della risposta.
    Cmq i controlli che devo fare sono più complessi del semplice confronto fra stringhe e hanno anche una priorità, per questo uso "else if".
    Secondo voi potrebbe esistere qualche framework o pattern utile per risolvere il mio problema?
    L'unico che ho trovato in rete è questo: "if-then-else framework".. Qualcuno l'ha già utilizzato o ne conosce il funzionamento?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    che io sappia no, so solo che se il numero di controlli inizia ad aumentare, significa che quello che sto pensando può essere fatto in altri modi (più efficienti), quindi di base è errata l'architettura
    Non so cosa stai progettando, ma in generale prova ad organizzare meglio il tutto

  5. #5
    Originariamente inviato da valia
    che io sappia no, so solo che se il numero di controlli inizia ad aumentare, significa che quello che sto pensando può essere fatto in altri modi (più efficienti), quindi di base è errata l'architettura
    Non so cosa stai progettando, ma in generale prova ad organizzare meglio il tutto
    Io concordo. Perché non fai un esempio pratico di due o tre delle casistiche che devi distinguere così possiamo capirne di più
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    100
    Un mio prof. diceva che quando ci sono troppi if ed else, non è una buona programmazione ad oggetti

  7. #7
    Originariamente inviato da Otaking
    Un mio prof. diceva che quando ci sono troppi if ed else, non è una buona programmazione ad oggetti
    Parole sagge. Normalmente se l'impianto progettuale è buono non servono montagne di if-then-else e molto probabilmente il tuo problema è risolvibile applicando il design pattern giusto. Se riesci a fornire + dettagli di quello che devi fare forse qualcuno sarà in grado di aiutarti anche perché non esiste "l'alternativa a if-then-else" ma esistono varie alternative.

    Figurati che esiste un gruppo di personaggi che ha inventato l'anti if campaign, sul loro sito http://www.antiifcampaign.com/ ci sono molti esempi di cattivo uso di IF e di come rendere il tuo codice IF-FREE e in generale + pulito.



    Matteo
    Powered by MacOSX Lion

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.