[Scala|Java] Pattern recognition di condizioni booleane

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2830
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

[Scala|Java] Pattern recognition di condizioni booleane

Messaggio da DoctorStrange »

Buongiorno a tutti,
Vorrei chiedere quale potrebbe essere la "best practice", per concatenare una serie di condizioni booleane.

In pratica, ho una funzione di validazione che esegue diversi controlli di conformità sulla stessa stringa. Se tutti i controlli restituiscono esito positivo, allora l'intera funzione di validazione restituirà true, e la procedura chiamante potrà proseguire. Se, anche uno solo dei controlli di conformità fallisce, e restituisce false, allora l'intera procedura di validazione restituirà false, e la procedura chiamante si ferma. Solleverà quindi un errore, che devo gestire.

La domanda è: quale potrebbe essere, in un linguaggio statically typed, come scala, oppure java, il modo piu corretto di confrontare una serie di booleani? In scala non ho il "ternary operator", volevo quindi provare ad usare un pattern matching, ma non sono sicuro di come io lo possa implementare, per questo scopo.

Vorrei evitare di fare una serie infinita di if-else annidati, sia perchè mi sembra "poco elegante", sia perche rischia di vanificare il paradigna di sviluppo funzionale al quale stò cercando di attenermi.

Sarei tentato di usare le "state-monad", ma non le so ancora usare. Voi come risolvete questi problemi?

Un'infinita serie di if-else e vi togliete il problema?

Grazie
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2830
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: [Scala|Java] Pattern recognition di condizioni booleane

Messaggio da DoctorStrange »

Credo che alla fine userò una funzione di riduzione classica: reduce()
Prima di mettere il "risolto", voglio vedere se funziona come io spero.
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1619
Iscrizione: giovedì 12 ottobre 2006, 11:34

Re: [Scala|Java] Pattern recognition di condizioni booleane

Messaggio da nuzzopippo »

Ciao @DoctorStrange, confesso che ho esitato molto prima di scrivere, non conosco scala e sono talmente arrugginito su java da non essere più "operativo" ma ...
Vorrei chiedere quale potrebbe essere la "best practice", per concatenare una serie di condizioni booleane.
Il metodo più efficare che mi viene in mente è un "and" (&&) tra le le condizioni, se tutte sono vere restituisce vero altrimenti falso ... ma c'è quella indicazione
In pratica, ho una funzione di validazione che esegue diversi controlli di conformità sulla stessa stringa. Se tutti i controlli restituiscono esito positivo, allora l'intera funzione di validazione restituirà true, e la procedura chiamante potrà proseguire. Se, anche uno solo dei controlli di conformità fallisce, e restituisce false, allora l'intera procedura di validazione restituirà false, e la procedura chiamante si ferma. Solleverà quindi un errore, che devo gestire.
Che mi lascia un po' perplesso ... non ho idea di quali siano i controlli di conformità da eseguirsi ma non potresti organizzarli in un'unica funzione java che restituisce falso al primo test che non viene passato altrimenti restituisce vero?

Per chiarire la domanda, supponendo di voler verificare se una serie di argomenti sono tutti presenti in un testo si potrebbe

Codice: Seleziona tutto

public class TestExample {
    public static void main(String[] args) {
        String text;
        Boolean response;
        text = args[0];
        System.out.println("Nel testo : " + text);
        response = esito(text, args);
        if (response) {
            System.out.println("Esito positivo");
        } else {
            System.out.println("Esito negativo");
        };
    };
    
    private static Boolean esito(String text, String[] args) {
        int size = args.length;
        String item;
        for(int i=1; i<size; i++) {
            item = args[i];
            System.out.println("\t Valuto : " + item);
            if (! text.contains(item)) {
                return false;
            };
        };
        return true;
    };
};
Che mi darebbe, in una shell

Codice: Seleziona tutto

NzP:~$ javac TestExample.java
NzP:~$ java TestExample "Apelle figlio di Apollo fece una palla di pelle di pollo" Apelle Apollo palla
Nel testo : Apelle figlio di Apollo fece una palla di pelle di pollo
	 Valuto : Apelle
	 Valuto : Apollo
	 Valuto : palla
Esito positivo
NzP:~$ java TestExample "Apelle figlio di Apollo fece una palla di pelle di pollo" Apelle apollo palla
Nel testo : Apelle figlio di Apollo fece una palla di pelle di pollo
	 Valuto : Apelle
	 Valuto : apollo
Esito negativo
NzP:~$ 
ove è il metodo "esito" a decidere se la condizione di verifica è vera o falsa ... ora, il mio esempio è certo semplicistico (ed è probabile che non abbia capito per niente la natura del problema) ma da quanto ho letto mi sembra sia il tipo di logica che occorra per il problema, bastando la prima verifica falsa per invalidare l'intera serie
Fatti non foste a viver come bruti ...
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 1 ospite