Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102

    Eseguire comandi in Stringhe

    E' possibile eseguire dei comandi memorizzati dentro stringhe?

    Esempio:


    String prova = "System.out.println(\"Ciao\");";


    come si può far eseguire ciò che sta dentro prova?



    Grazie Ciao

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Eseguire comandi in Stringhe

    Originariamente inviato da Pegasys
    E' possibile eseguire dei comandi memorizzati dentro stringhe?

    Esempio:


    String prova = "System.out.println(\"Ciao\");";
    No, così su due piedi non si può. Il codice Java va prima compilato.

    Se spieghi meglio cosa vuoi fare, si può vedere. A partire da Java 6 è stata introdotta la Java Compiler API e la Java Scripting API.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102
    In pratica dopo aver analizzato un testo viene chiamato un metodo a seconda da cosa c'è scritto nel testo. E il nome del metodo da chiamare dovrebbe essere ritornato in una stringa

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Pegasys
    In pratica dopo aver analizzato un testo viene chiamato un metodo a seconda da cosa c'è scritto nel testo. E il nome del metodo da chiamare dovrebbe essere ritornato in una stringa
    Sorry, spiega meglio ... fai un esempio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102
    mmm ad esempio

    String testo = "prova del testo";
    String risultato prova.analizzatesto(testo);
    esegui ciò che è dentro risultato
    in base a ciò che ci sarà dentro in risultato eseguirà vaiavanti() o fermailprogramma()


    String analizzatesto(String testo)
    {
    if (testo.equals("prova del testo"))
    return "vaiavanti()";
    else
    return "fermailprogramma()";

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Visto così, la cosa più simile che mi viene in mente è il "functor pattern". In pratica si crea una interfaccia per definire la funzione e poi si creano delle implementazioni di questa interfaccia.

    codice:
    public class Prova
    {
        public static void main (String[] args)
        {
            Funzione f = analizza (args[0]);
            f.func ();
        }
    
        public static Funzione analizza (String str)
        {
            if (str.equals ("hello"))
            {
                return new Funzione () {
                    public void func () {
                        System.out.println ("hello");
                    }
                };
            }
            else
            {
                return new Funzione () {
                    public void func () {
                        System.out.println ("blabla");
                    }
                };
            }
        }
    }
    
    interface Funzione
    {
        void func ();
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Perchè complicarsi così inutilmente la vita?

    codice:
    int valore = analizzaStringa( stringa );
    switch( valore ) {
       case 1: eseguiMetodo1(); break;
       case 2: eseguiMetodo2(); break;
       case 3: eseguiMetodo3(); break;
       ...
    }
    Più semplice, più chiaro, più utile.

    Se il metodo da eseguire è noto a priori (ovvero, è dentro al file .java) allora anche l'elaborazione di analizzaStringa() porterà all'esecuzione di tale metodo solamente in caso di esisto positivo di una data condizione nota a priori. Questo si traduce con l'esempio che ho postato sopra.


    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

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102
    Diciamo che così è più semplice ma bisogna analizzare tutti i casi. Se invece ci fosse un metodo che esegue i comandi dentro stringhe sarebbe più utile. Perchè la costruzione del comando avviene in più fasi.

    Ad esempio:
    String comando = "";

    if (a > 2)
    comando += "1"
    else
    comando += "2"

    comando+= "-"

    if (b < 3)
    comando += "8"
    else
    comando += "6"

    in questo modo potrebbe esserci scritto:
    1-8
    1-6
    2-8
    2-6

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    E ritorni sempre e comunque al punto di partenza... nessuno ti vieta di far tornare alla funzione un numero univoco... sempre e solo una sarà la funzione eseguita e sarà contraddistinta sempre dallo stesso numero.

    codice:
    f (a > 2)
    comando += 1;
    else
    comando += 2;
    
    if (b < 3)
    comando += 10;
    else
    comando += 20;
    e ottieni
    codice:
    11
    12
    21
    22
    Sempre lo stesso numero di risultati...

    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

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da LeleFT
    Perchè complicarsi così inutilmente la vita?
    Hai ragione. La questione in questi casi è se si vuole offrire una "astrazione" delle operazioni da eseguire o se si vuole banalmente fare una ramificazione con if/switch.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.