none
creare metodo con eccezioni nel risultato RRS feed

  • Domanda

  • spero esista qualcosa che risponda a questo mio quesito...

    -riuscire a restituire tramite un unico metodo o una stringa o un doble-

    ma iniziamo con ordine:

    supponiamo di creare una funzione per il calcolo degli interessi. i quali interessi possono essere sia positivi che negativi (negativi ovviamente se è un operazione che porterà una perdita)

    Quindi il mio ritorno è un double che puo assumere valori sia positivi che negativi.

    Il metodo con cui vengono calcolati questi interessi non è lineare, cioè attraverso una formula ma piu che altro attraverso a delle ipotesi che il mio stesso metodo crea per avicinarsi il piu possibile a una risoluzione.

    il mio problema è che se l'algoritmo non riesce a trovare un valore accettabile entro 20 tentativi deve restituire ERRORE

    io di solito avrei restituito un valore negativo, che avrebbe significato appunto l'errore o eccezione in quanto fuori dal dominio dei risultati del mio metodo, ma in questo caso qualunque numero fa parte dei possibili risultati che potrei ottenere..

    quindi dire a  priori che -10 equivale alla mia mancata individuazione del interesse è sbagliato perché potrebbe succedere che il risultato sia -10 (trovandolo anche come primo tentativo)

    da qui la necessita di riuscire a restituire una stringa, dato che sarebbe comodo anche per dare direttamente il print

    Attendo comunque pareri e consigli!

    grazie come al solito

    martedì 11 giugno 2013 21:10

Risposte

  • Il suggerimento di rfusè è corretto. Puoi usare un approccio come quello usato dai metodi TryParse di .NET, ovvero definisci un tuo metodo che ha due parametri out, uno con il valore calcolato e l'altro con l'eventuale messaggio. Questo metodo restituisce true se il calcolo è andato a buon fine, false in caso contrario.

    Così facendo, se ottieni true, sai che nel parametro out double avrai l'interesse, se invece è false, puoi leggere il valore out string per conoscere l'errore che si è verificato.


    Marco Minerva [MCPD]
    Blog: http://marcominerva.wordpress.com
    Twitter: @marcominerva

    • Proposto come risposta Carmelo La Monica mercoledì 12 giugno 2013 11:04
    • Contrassegnato come risposta maxyz venerdì 14 giugno 2013 10:23
    mercoledì 12 giugno 2013 07:40
    Moderatore
  • Ciao maxyz,

    Personalmente, in un contesto come il tuo, più che aspettarmi un risultato di tipo stringa dalla funzione userei o una eccezione custom che mi restituisca l'informazione di errore/situazione o un parametro ref che restituisca il testo errore/informazione mantenendo come risultato del metodo il tipo corretto dell'operazione.

    ciao

    Rob

    • Proposto come risposta Carmelo La Monica mercoledì 12 giugno 2013 11:04
    • Contrassegnato come risposta maxyz venerdì 14 giugno 2013 10:23
    mercoledì 12 giugno 2013 07:23

Tutte le risposte

  • Ciao maxyz,

    Personalmente, in un contesto come il tuo, più che aspettarmi un risultato di tipo stringa dalla funzione userei o una eccezione custom che mi restituisca l'informazione di errore/situazione o un parametro ref che restituisca il testo errore/informazione mantenendo come risultato del metodo il tipo corretto dell'operazione.

    ciao

    Rob

    • Proposto come risposta Carmelo La Monica mercoledì 12 giugno 2013 11:04
    • Contrassegnato come risposta maxyz venerdì 14 giugno 2013 10:23
    mercoledì 12 giugno 2013 07:23
  • Il suggerimento di rfusè è corretto. Puoi usare un approccio come quello usato dai metodi TryParse di .NET, ovvero definisci un tuo metodo che ha due parametri out, uno con il valore calcolato e l'altro con l'eventuale messaggio. Questo metodo restituisce true se il calcolo è andato a buon fine, false in caso contrario.

    Così facendo, se ottieni true, sai che nel parametro out double avrai l'interesse, se invece è false, puoi leggere il valore out string per conoscere l'errore che si è verificato.


    Marco Minerva [MCPD]
    Blog: http://marcominerva.wordpress.com
    Twitter: @marcominerva

    • Proposto come risposta Carmelo La Monica mercoledì 12 giugno 2013 11:04
    • Contrassegnato come risposta maxyz venerdì 14 giugno 2013 10:23
    mercoledì 12 giugno 2013 07:40
    Moderatore
  • ok inizio a capire il senso dei vostri consigli.. esiste qualche esempio? in modo tale da poter approfittare anche di qualche codice per meglio capire anche la messa in opera di tale metodo!
    mercoledì 12 giugno 2013 09:52
  • Puoi dare un'occhiata alla documentazione di MSDN, ad esempio quella del metodo int.TryParse: http://msdn.microsoft.com/it-it/library/f02979c7.aspx.

    Marco Minerva [MCPD]
    Blog: http://marcominerva.wordpress.com
    Twitter: @marcominerva

    mercoledì 12 giugno 2013 09:57
    Moderatore
  • ti ringrazio e quella pagina l'ho guardato anche prima di chiedere aventuale codice aggiuntivo, proprio perche il mio dubbio era la sintassi essenziale per creare un metodo che possa comportarsi come il TryParse

    esempio:

    public int doppio(int numero)

    {

    int risultato=0;

    risultato=numero*2;

    return risultato;

    }

    modifiche: (ovviamente non penso che cio che ho scritto funzioni)

    public int doppio(int numero)

    {

    int risultato=0;

    if(numero>0)

    {risultato=numero*2;return risultato;}

    else

    {return "ERRORE";}

    }

    venerdì 14 giugno 2013 12:54
  • Ciao maxyz,

    ti ringrazio e quella pagina l'ho guardato anche prima di chiedere aventuale codice aggiuntivo, proprio perche il mio dubbio era la sintassi essenziale per creare un metodo che possa comportarsi come il TryParse

    esempio:

    public int doppio(int numero)

    {

    int risultato=0;

    risultato=numero*2;

    return risultato;

    }

    modifiche: (ovviamente non penso che cio che ho scritto funzioni)

    public int doppio(int numero)

    {

    int risultato=0;

    if(numero>0)

    {risultato=numero*2;return risultato;}

    else

    {return "ERRORE";}

    }

    se ho ben compreso il tuo scenario , vuoi ottenere il risultato della funzione se numero e maggiore di zero , o  di conseguenza un errore se e e minore visto il blocco else , puoi realizzare il tutto in questo modo nel blocco else

    else{
    
    return (int)MessageBox.Show("ERRORE");
    
    
    }

    puio anche omettere il costrutto else perchè se la condzione if risulterà true non sarà eseguita la riga di codice che ho postato.

    Diventerebbe così

       private void button1_Click(object sender, EventArgs e)
            {
                Text = Doppio(1).ToString();
            }
    
    
            public int Doppio(int numero)
            {
                if (numero > 0)
    
                {
                    var risultato = numero * 2;
                    return risultato;
                }
    
                return (int) MessageBox.Show("errore.");
            }

    L'ultima riga di codice richide la conversione int , diversamente avresti un errore in fase di compilazione , perchè il metodo e di tipo int e lasceresti un valore di tipo string.

    Ciao.



    venerdì 14 giugno 2013 13:17