Beste Möglichkeit Argumente/Kommandos zu behandeln?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von lucifeey.

    Beste Möglichkeit Argumente/Kommandos zu behandeln?

    Hey. Ich programmiere etwas worin ein Teil Kommandozeilen ähnlich aufgebaut ist. Das erste Argument ist das Kommando,
    der Rest sind die dazugehörigen Argumente.
    Bisher behandle ich das wie folgt:

    VB.NET-Quellcode

    1. Sub Test(ByVal nachricht As String)
    2. Dim argumente As String() = nachricht.Split(" ")
    3. Select Case argumente(0)
    4. Case "Kommando1"
    5. 'zeug
    6. Case "Kommando2"
    7. 'zeug mit argumenten
    8. Case "Kommando3"
    9. 'zeug mit und ohne argumente
    10. End Select
    11. End Sub


    Allerdings ist es meiner Meinung nach einwenig unübersichtlich, gerade wenn es mehrere werden...

    Gibt es eine übersichtlichere Lösung das zu behandeln als meine jetzige (und wenn ja, welche) ?
    Wo kommt die Nachricht her, und wo geht die Nachricht hin?
    Sind in der Nachricht immer die selben Argumente?
    Lassen sich diese zu gewissen Kategorien zuordnen?
    Hast du für jede Kombination aus Kommando und Argument eine eigene Funktion?
    Erwartest du bestimmte Argumente?

    Je nachdem was dein genauer Use-Case ist, könnte man vllt. mit Generika etwas anfangen, vielleicht auch mit Reflection, vielleicht aber auch ganz anders, jedoch brauch es für alles etwas mehr Informationen.
    @lucifeey Willkommen im Forum. :thumbup:
    Wenn Du beide Seiten der Kommunikation programmierst, nimm eine gemeinsame Klasse für beide, in denen den Strings Konstanten zugeordnet sind:

    VB.NET-Quellcode

    1. Public Const Cmd1 As String = "Kommando1"

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @EaranMaleasi
    Um genauer zu machen wofür das ganze: Ich versuche mich an einem Discord-Bot mit Command-System.

    Die Nachrichten kommen von einem beliebigem Benutzer. Die Nachricht wird in einen Array zerteilt. Der Code erwartet, dass die Nachricht mit einem Kommando beginnt.
    z.B. "Kommando2 Argument1 Argument2" -> "Kommando2", "Argument1", "Argument2"

    Bei einem Kommando werden z.B. Statisiken über etw./jmd. ausgegeben.
    z.B. nachricht = "Kommando2 <Benutzername/Bezeichnung für etw.>"
    -> Gibt an den Autor der Nachricht z.B "Hier die Statistiken" & vbNewLine & "[...]" zurück.

    Das mit den eigenen Funktionen würde sich einrichten lassen.
    Hallo

    Ich empfehle dir Remoting. Da kannst du auch ganze Klassen/Objekte übergeben.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Das über Remoting ist glaube ich etwas Overkill zumal mir jetzt eine andere Lösung eingefallen ist. <...>

    Performance-Technisch ist das ganze aber viel langsamer als die unübersichtlichere Lösung.
    Spoiler anzeigen

    Bei den Tests wurden jeweils 5mio. Aufrufe auf die behandelnde Methode ausgeführt. [nicht multi-threaded]

    - Via Select Case -
    bei 20 möglichen Kommandos
    > 1,9mio. Kommandos pro Sekunde
    bei 500 möglichen Kommandos
    > 1,5mio. Kommandos pro Sekunde


    - Via anderem System [kein Remoting] -
    bei 20 möglichen Kommandos
    > 1,5mio. Kommandos pro Sekunde
    bei 500 möglichen Kommandos
    > 298-tausend Kommandos pro Sekunde



    Trotzdem danke ich euch für eure Antworten! :)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „lucifeey“ ()