Eigene Funktionen eines Tools in UDF ausgliedern?

  • Hallöchen zusammen,

    ich habe schon viele verschiedene Arbeitsweisen hier im Forum gesehen und wollte aber nochmal hier fragen wie ihr eure Skripte organisiert.

    Man kennt es aus anderen Programmiersprachen und besonders aus dem Bereich OOP, dass man üblicherweise nicht alle Variablen von überall verfügbar macht. Nun dachte ich bei einem Projekt an dem ich aktuell bin, ich gliedere alle Funktionen die ich schreibe mal in eine "UDF" aus - Hinweis: Ich arbeite in AutoIt nicht objektorientiert. So habe ich die Skripte sauber. Nun fängt es aber mit den Controls an. Ich habe ein ungutes Gefühl dabei alle Variablen Global zu deklarieren. Ich arbeite i.d.R. fast ausschließlich mit "Lokalen Variablen". Nun lese ich jedoch in den Funktionen viele Controls auf. Dann habe ich stellenweise 7 und mehr Parameter nur für die Controls.

    Habt ihr bestimmte Arbeitsweisen die Ihr teilen mögt und die ihr als gut epfindet? Dann könnt ihr die gerne preisgeben. Ich würde mir zu Antworten wie "so ist das am besten" gerne einige Details erfahren, wieso ihr glaubt/wisst, was "besser" und "schlechter" ist.

    Bislang habe ich in AutoIt immer alles in einem Skript. Die Funktionen sortiere ich mir logisch für das jeweilige Projekt und ich bin bislang immer super zufrieden gewesen. Aber ich finde bei nem neuen Projekt aktuell wäre es aktuell möglich mal andere Arbeitsweisen auszuprobieren.

    Update:
    Meine Arbeitsweise in anderen prozedualen Sprachen ist auch schwankend. Ich arbeite viel mit Perl und habe dort Projekte verschiedener Arten auch auf unterschiedlichen Weisen entwickelt. Ein großes Projekt von mir hat z.B. in Perl ein eigenes Package bekommen mit allen Funktionen. Dort habe ich keine Controls, und die Arbeitesweise ist in dem besagten Projekt manchmal (nicht immer) eher Last als gut strukturiert. Einzig allein im Umfeld Webdesign habe ich meine fixe Art gefunden wie ich programmiere.

    Grüße Yaerox

    Grüne Hölle

    2 Mal editiert, zuletzt von Yaerox (31. März 2016 um 13:50) aus folgendem Grund: Typo #1, Update #1, Typos #2

  • Du wirst feststellen, dass GUI-Funktionen (die von AutoIt selbst jedenfalls) die GUI auch von Funktionen finden, selbst wenn du die GUI-Variablen explizit auf Local setzt. ;)

    Demnach ist die GUI definitiv kein Problem. Die Frage ist: Wo könntest du dadurch ein Problem bekommen? Dann kann ich dir auch sagen, was ich persönlich als "best practice" empfinde und warum. Ich persönlich betreibe gerne Refactoring in allen meinen Scripts - und ich glaube nicht, dass ich daran was ändern sollte oder werde.

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

  • Korrekt, aber nicht wenn die Funktion in einer "UDF" steht:

    Test2.au

    AutoIt
    Func _Testfunc()
    	MsgBox(0, "", GUICtrlRead($Input1))
    EndFunc


    Funktioniert zwar, aber nicht schön:

    warning: $Input1: possibly used before declaration.
    MsgBox(0, "", GUICtrlRead($Input1)

    Grüße Yaerox

    Grüne Hölle

  • Ich übergebe dann das als Funktionsparameter:

    AutoIt: Test2.au3
    Func _Testfunc($hInput)
    	MsgBox(0, "", GUICtrlRead($hInput))
    EndFunc

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Dann mach es schön:

    #AutoIt3Wrapper_Run_AU3Check=n

    Dann sieht es schön aus, ist aber trotzdem nicht ordentlich programmiert.

    Ich übergebe dann das als Funktionsparameter:

    So mache ich das aktuell auch, aber wenn ich nun in meinem Hauptprogramm eine GUI mit 100 Controls habe, und ich nun eine Funktion aufrufen möchte die 10 Controls ausliest, muss ich der Funktion ja 10 Parameter mitgeben. Ich empfinde das als suboptimal.

    Ich versuche die Frage nochmal anders zu formulieren:

    - Wie strukturiert ihr Anwendungen mit grafischer Oberfläche?
    - Schreibt ihr alles in ein Skript?
    - Gliedert ihr Funktionen in andere Dateien aus? Wenn ja warum und wie greift ihr dann auf die Controls zu? Call by value, call by referenz oder ganz anders?

    Mein Ziel ist es möglichst optimiert und "qualitativ" zu programmieren.
    Mit qualitativ meine ich jegliche Fehler und Warnungen wirklich zu beheben und nur weil das Program trotzdem läuft zu sagen "Was ich nicht sehe existiert nicht.".

    Grüße Yaerox

    Grüne Hölle

  • "Dann sieht es schön aus, ist aber trotzdem nicht ordentlich programmiert."

    Lass mich mal mit einer Metapher ausdrücken, wie unsinnig die Aussage ist:

    "Du hast einen Stapel Zettel, die sauber gestapelt auf deinem Schreibtisch liegen. Du sortierst diese Zettel in einzelne Fächer auf dem Schreibtisch, damit du die entsprechenden Teile schneller findest. Einen Teil davon lässt du direkt auf dem Schreibtisch liegen. Als Deckblatt des Stapels direkt auf den Schreibtisch verwendest du ein Blatt, auf dem du mit roter Schrift in Schriftgröße 72 schreibst: 'REST IST IN DEN FÄCHERN!!!' Aus welchem Grund auch immer hast du dir einen grenzdebilen Hilfsarbeiter geholt, der dir nun einen dieser Zettel holen soll. Du sagst ihm, dass der Zettel auf dem Schreibtisch liegt. Er guckt nur den Stapel direkt auf dem Schreibtisch durch. Er kommt zu dir und sagt, dass der Zettel nicht da ist. Du weißt aber, dass er da ist, dass er nur in einem Fach liegt. Also ignorierst du den Hilfsarbeiter, denn obwohl er dir in vielen Fällen helfen kann, ist er einfach nicht intelligent genug, um logische Zusammenhänge zu kapieren."

    Genau das ist das Vorgehen der AU3-Check. Sie kapiert logische Zusammenhänge zwischen den Includes nicht. Sie kapiert nicht, dass GUI-Variablen immer im globalen Scope sind und zeigt diese als Fehler an.


    Wie strukturiert ihr Anwendungen mit grafischer Oberfläche?

    Ich bin ein C#-Kindchen. Ich habe für jeden eindeutigen Teilbereich ein eigenes Script:
    Eine für die GUI, eine für die Optionen und globale Variablen, eine für die Verschlüsselung, eine für GUI Funktionen, eine für Fremdfunktionen, ..., und eine, in der die Hauptschleife (ohne eigene Funktionen) liegt, zusätzlich zu den Includes.

    Das Minimalbeispiel bedeutet, dass ich dann folgende Scripts minimum habe:

    • Includes und Hauptschleife
    • Optionen und Globale Variablen
    • GUI
    • GUI Funktionen

    Schreibt ihr alles in ein Skript?

    Bei mir ist das letzte Mal über 2 Jahre her, dass ich so einen Unfug gemacht habe. Finde da mal den Fehler in angemessener Zeit...

    Gliedert ihr Funktionen in andere Dateien aus?

    Ja.

    Wenn ja warum?

    • Übersichtlicher
    • leichter zu warten
    • allgemeiner
    • professioneller
    • Code wird schlanker
    • Mehrere können gleichzeitig am Programm arbeiten
    • Script ist schneller in den Arbeitsspeicher geladen (wichtig bei sehr großen Projekten)

    Wie greift ihr dann auf die Controls zu?

    Die Controls sind bereits im Global Scope. Ich verwende sie also einfach, wie ich sie verwenden würde, wenn sie im Hauptscript wären. Dabei verwende ich AU3-Check nicht, weil die zu fehleranfällig ist und ohnehin meist nur unnütze Fehler- und Warnmeldungen bringt. Ich weiß in der Regel auch ohne diese "tollen" Fehlermeldungen, wo das Problem liegt, wenn eines auftaucht. Sollte das mal nicht der Fall sein, kann ich das Ding immer noch einschalten.


    Du sagst, du willst möglichst optimiert und "qualitativ" programmieren. In dem Fall solltest du

    • die AU3-Check als das verwenden, was sie ist: Ein einfaches Hilfsprogramm, dass dir potentielle Fehler anzeigt - mehr nicht
    • dir Refactoring angewöhnen
    • sauber programmieren
    • wiederkehrende Programmteile wieder in einzelne Funktionen ablegen
    • Den Quellcode "schlank" halten

    Solltest du an Punkt 1 weiterhin scheitern, so hast du mehrere Möglichkeiten:

    • Programmiere unoptimiert in einer einzigen AU3 und vermeide damit alle AU3-Check - Fehlinterpretationen
    • Programmiere schlampig in dem du durch Redundanzen die AU3-Check-Fehler beseitigst (BSP: Variablen in allen Includes erneut definieren)
    • Beachte die Fehler bloß während der Programmierung. Im Regelfall sollte das keine all zu lange Zeit in Anspruch nehmen. Für die Produktion gibt es die Exe. Die hat keine AU3-Check
    • Programmiere eine eigene AU3-Check, die solche Fehler eben nicht macht

    Das Übergeben von derart vielen Variablen ist keineswegs "optimal" oder "qualitativ" - nicht einmal annähernd. Von den zwei Werten entfernst du dich dann noch weiter von dem Punkt, an dem du warst, bevor du angefangen hast, Dinge auszulagern: Deine Scripts werden deutlich größer aufgrund massenhaft redundanter Daten und der Mehrwert durch die Auslagerung der Funktionen geht komplett verloren. Dann solltest du es besser in einem Script lassen. Denn wenn jemand deinen Source sieht, und feststellt "Oh Refactoring!" um dann im nächsten Augenblick festzustellen, dass es kein Refactoring ist, sondern nur ein Redundanting, wird er bitter enttäuscht sein, und alleine das Bild, was er von dir als Programmierer hat, würde in dem Augenblick in den Keller sinken - ganz gleich, was du sonst in dem Code machst: Denn Redundanzen sind in 99,99% der Fälle ein eindeutiges Zeichen für schlampige Programmierung - und das nicht nur in AutoIt.

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

  • Dann mach es schön:

    #AutoIt3Wrapper_Run_AU3Check=n

    Exakt für so etwas gibt es #forcedef.

    Also die Funktion folgendermaßen definieren und man hat weiterhin Au3Check und keine Fehlermeldung:

    AutoIt
    Func _Testfunc()
    	#forcedef $Input1
    	MsgBox(0, "", GUICtrlRead($Input1))
    EndFunc   ;==>_Testfunc

    Einmal editiert, zuletzt von AspirinJunkie (31. März 2016 um 19:26)

  • über dieses Thema haben sich schon viele Gedanken gemacht.

    Für mich hat sich folgendes als praktikabel und sinnvoll etabliert.
    Link: https://www.autoitscript.com/wiki/Best_coding_practices

    Über die Thematik Global und Local Variablen gab es auch schon ewige Diskussionen.

    Ich glaube mich zu erinnern, dass es mal ein Problem mit Globalen Variablen gab und es besser war
    im gesamten Script nur Local Variablen zu verwenden.

    Ich finde aber auf die Schnelle den Thread nicht...

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Du wirst feststellen, dass GUI-Funktionen (die von AutoIt selbst jedenfalls) die GUI auch von Funktionen finden, selbst wenn du die GUI-Variablen explizit auf Local setzt.

    Aber nur weil die Gui nicht innerhalb einer Func erzeugt und die Variablen daher im Globalen Gültigkeitsbereich deklariert wurden. Versuch mal dieses Script:

    kannstb du obige Aussage immer noch bestätigen?

    Yaerox: ich versuche mittlerweile soviele Variablen wie möglich Lokal zu deklarieren und nehme Übergabeparameter in Kauf. Sicher ist es nervig 15 Parameter zu übergeben (wie in [Beispiel] FTP-Downloader (rekursive Download's ) möglich) aber dafür ist die Func (im Beispiel _getAllFTPFilesRekursiv) sehr universell und erspart viel Arbeit bei zukünftigen Projekten ist daher auch in einer UDF ausgelagert.

    UDF's erstelle ich nur für Funktionssammlungen die auch in anderen Projekten wieder verwertbar sind.

    In https://www.autoitscript.com/wiki/Best_coding_practices sind einige Anhaltspunkte die man beachten sollte und zumindest einmal gelesen haben. Hilft beim Verwenden fremder UDF's ungemein und sollte daher beim erstellen von UDF's die weitergegeben werden sollen auch eingehalten werden.

    Wenn du nur für dich selbst und zum Spaß programmierst ist es natürlich nur wichtig, daß du dein Skript nach X Jahren noch verstehst. Es soll sogar Leute geben die ihre Skripts vor dem Kompilieren noch unleserlich machen (obfuskatieren?), aber das ist ein anderes Thema.

    In einer Firma/Projektgruppe ist es natürlich wichtig, daß die Skripte/Funktionen von Maier ohne große Probleme auch von Müller weiterentwickelt werden können, alles andere nennt man zwar Kündigugsschutzprogrammierstil ist aber ein Grund zur Kündigung wenn man Vorgaben bezüglich Namenskonventionen etc. widerholt mißachtet.

    PS.: bei groben (Rest-) Typos Micha_he fragen, der hat anscheinend ein Dictionary zum übersetzen solcher.

    2 Mal editiert, zuletzt von autoBert (1. April 2016 um 00:04)

  • Ich habe mir auch schon viele Gedanken über Strukturen usw. gemacht, seit ich im Bereich der Softwareentwicklung gelandet bin. Grundsätzlich gibt es fast so viele Stile wie Programmierer und in jeder Programmiersprache dominiert eine ungefähre Richtlinie. Bioshade hat ja auch schon einen Verweis auf C# platziert, aus dem in diesem Fall solche Richtlinien für AutoIt übernommen worden sind.

    Ich habe in vielen Projekten schon viele Dinge ausprobiert und bin für mich persönlich zu dem Schluss gekommen, dass es keinen einheitlichen Stil geben muss. So schmerzhaft das auch klingen mag. :D
    Ich finde, man muss Aufwand und Nutzen immer in Relation sehen. Strikter Stil schön und gut, aber wenn ich ein einfaches Tool schreibe, dessen Quellcode in einer Datei um die 200 Zeilen lang ist, dann muss ich das nicht in mehrere Dateien aufteilen, um den Überblick zu behalten. Hier ein Kommentar, da ein paar sinnvolle Bezeichnungen und ich kann das alles auch noch in einem Jahr lesen und verändern, ohne alles durch eine strikte Struktur aufzublähen. Wenn ich jetzt allerdings bspw. ein Warenwirtschaftssystem programmiere, dann funktioniert das natürlich nicht mehr. Da braucht es dann eine im Idealfall komplett modulare Struktur. Ich habe da meinen persönlichen Weg für so große Sachen; das zu erklären, führt aber imho zu weit.

    Was die Übergabe von Variablen angeht, ist das meiner Meinung nach auch inhaltsabhängig. Ich gliedere meine Skripte immer ungefähr in universelle und spezielle Funktionen, mal am Beispiel eines ROT13-Verschlüsselers. Universelle Funktionen sind dabei Funktionen, die auch außerhalb dieses Skriptes eine Verwendung haben können, also hier z.B. die eigentliche Verschlüsselung. Diese universellen Funktionen arbeiten dann strikt ohne globale Variablen, damit sie auch universell bleiben. Die speziellen Funktionen hingegen können nur im derzeitigen Skript Anwendung finden, beispielhaft das Auslesen des Textes und die Übergabe an die universelle Verschlüsselungsfunktion. Hier greife ich dann auf globale Variablen wie GUI-Controls zurück. Das ermöglicht flexibles und nicht-redundantes Programmieren gleichzeitig.

  • Hi zusammen,
    einige haben es mitbekommen, ein AutoIt-Team (UEZ,Xorinator,Lottich und ich) waren am Osterwochenende auf der Revision 2016.
    Ich behaupte jetzt einfach mal, daß dort einige der kreativsten "Programmierer" im Grafikbereich anwesend waren.
    Schaut man sich die Entwicklung in den letzten Jahren an, drängen sich mir zumindest frappierende Vergleich zu anderen "Technik"-Bereichen auf.
    Genauso, wie es heutzutage kaum noch Automechaniker gibt, sondern Teiletauscher, gibt es auch kaum noch Programmierer, sondern Funktions-Copypaster!

    Die Frage dabei ist, was das im Bereich der Programmierung bedeutet!? Wenn Kreativität dadurch eingeschränkt wird, dass man sich "künstlich" an von irgendwem postulierten Vorgaben orientieren MUSS, dann ist das Ergebnis bestenfalls mittelmäßig! Und das ist in den allermeisten Programmen das Problem...
    Ein "Künstler" kommt nur dann zu einem sehr guten Ergebnis, wenn er seine volle Kreativität am Produkt kompromisslos ausleben kann. Jetzt kann man natürlich sagen, nicht jeder ist ein Künstler und KANN somit überhaupt nicht kreativ arbeiten! Stimmt, und genau DAS ist das Problem beim Programmieren!
    Ohne Kreativität kein optimales Ergebnis!

    Mal etwas krass gesagt, ein als compilierte EXE vorliegendes Programm ist das Ergebnis, und eben genau NICHT der zugrundeliegende Code. Und genau diese EXE wird verkauft und von Kunden/Anwendern benutzt! Diese interessiert es ehrlich gesagt kein Stück, ob sich der "Programmierer" im Code selbstverwirklicht, oder aber an eng gesteckte Software-Erstellungs-Konventionen gehalten hat!
    Mir jedenfalls ist es als Anwender/Nutzer lieber, ich habe gegenüber einem Wettbewerbsprodukt möglichst viele Vorteile. Ob der "Programmierer", wenn er sich an strikte Vorgaben hält, dieses Ergebnis vorlegen kann, ist fraglich.
    Und da bin ich immer mehr der Meinung, daß, wenn man sich viel zu vielen Einschränkungen im Schaffensprozess hingeben muss, das Ergebnis auch bestenfalls eingeschränkt ist...

    Zusammengefasst: Mir ist das kreative/bessere Programm lieber als der "schön geschriebene" Code!
    Das eine schließt das andere zwar nicht aus, allerdings schaffen es die meisten nicht. Aus o.g. Gründen!

  • autoBert: Brauch ich nicht testen weil ich so einen Unfug nie machen würde.

    Letztendlich muss es jeder für sich selbst entscheiden. Ich selbst programmiere auf einem sehr professionellen Level weil ich persönlich für kleine Änderungen nicht erst 90 Zeilen Code umwälzen möchte. Und ich unterscheide nicht zwischen "einmaligen" und universellen Code: für mich ist jede Funktion universell. Ihr glaubt nicht wie oft ich Funktionen in anderem Kontext noch einmal "aufwärmen" konnte schlicht weil die Vorraussetzungen sehr ähnlich waren. Drei Änderungen im Code und die Funktion ist fertig.

    Ich selbst schreibe am Arbeitsplatz fast täglich Individualsoftware für Kunden die ich aufgrund meiner Arbeitsweise schnell und sicher erstellen kann. Das ist mir persönlich wichtig.

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

    • Offizieller Beitrag

    autoBert: Brauch ich nicht testen weil ich so einen Unfug nie machen würde.

    @Bioshade: Und schon ist man mal wieder im schönsten Krieg der Paradigmen. Was du so leichthin als Unfug bezeichnest, ist für andere der heilige Gral der Programmierung (Vermeidung Globaler Variablen). Die Diskussion dazu führt zu keinem (sinnvollen) Ergebnis, da die Vertreter beider Seiten keinen Jota von ihrer Meinung abrücken werden (sonst würdest du solch ein Vorgehen ja kaum als Unfug bezeichnen).
    Ich tendiere da auch in Richtung @Andy - Das Ergebnis sollte vor allem zählen. Vorgaben sind auch immer ein Stück weit Restriktionen. Warum soll man sich zu etwas zwingen, was man selbst als nicht sinnvoll erachtet und ohne dessen man auch zum Ziel kommt?
    Natürlich ist ein Skript, dass schön strukturiert, modular aufgebaut und so für evtl. spätere Änderungen bereit ist eine Augenweide. Aber wie @Andy bereits anmerkte, wird das außer auf der Programmierebene niemand zur Kenntnis nehmen (können) und dem Anwender ist es eh schnuppe und egal.

    Fazit:
    Ich persönlich erachte saubere Strukturen als prima, verdamme aber niemanden, der es nicht gebacken bekommt, wenn am Ende ein gutes Produkt steht.

  • autoBert: Brauch ich nicht testen weil ich so einen Unfug nie machen würde.

    Ich hoffe du weißt auch ohne diesen Test, daß deine (von mir zitierte) Aussage falsch ist:

    Aber nur weil die Gui nicht innerhalb einer Func erzeugt und die Variablen daher im Globalen Gültigkeitsbereich deklariert wurden. Versuch mal dieses Script
    ....
    kannstb du obige Aussage immer noch bestätigen?

    und nichts anderes wollte ich mit dem Skript zeigen, daß Test Skript sollte nur dazu dienen, daß:

    • du deine Aussage überdenkst
    • die falsche Aussage nicht unwidersprochen bleibt.

    Ich warte übrigens immer noch auf das Dementi.

    Einmal editiert, zuletzt von autoBert (1. April 2016 um 11:23)

  • Bei mir ist das letzte Mal über 2 Jahre her, dass ich so einen Unfug gemacht habe. Finde da mal den Fehler in angemessener Zeit...

    Das kommt aber u.a. auch auf deinen Schreibstil an. Ich habe ein Tool aus meiner Anfangszeit mit AutoIt das umfasst rund 5000 Zeilen. Gut strukturiert mit Regionen und Funktionen habe ich keinerlei Problem damit fehler zu finden. Keine Redundanten Vorgänge im Skript. Klar kann das auch irgendwann mal zum Problem werden, aber sich strikt nach theoretischen Vorgängen halten ist ebenfalls nicht korrekt.

    Stichwort: mit Kanonen auf Spatzen schießen.

    Zu dem Au3-Check: Ich werde mich da mal einlesen müssen, wie das Ding arbeitet. Um ehrlich zu sein kann ich mir kaum vorstellen das es so "blind" arbeitet wie du es geschrieben hast. Aber ich werde den Tipp mal nachgehen.

    @AspirinJunkie Danke für den Tipp mit forcedef, das werde ich dann ggf. gut gebrauchen können.

    @4ern MVC hab ich total gerne. Aber bislang habe ich es nur in anderen Umfeldern genutzt. In AutoIt könnte ich mir vorstellen, dass das auch mit Kanonen auf Spatzen schießen ist. Werd ich mir mal durch den Kopf gehen lassen und ggf. an einem Projekt ausprobieren.

    @Schnuffel Ich werd mir den Link mal anschauen. Beim überfliegen war jetzt erstmal nichts neues dabei. Ich lege sehr viel Wert auf meinen Quellcode, ebend weil ich ihn immer und zu jeder Zeit wieder verstehen können will, ohne imensen Zeitaufwand. Also Formatieren, kommentieren und entsprechend auch ordentliche Variablen/Funktions-Namen etc.

    @autoBert Nein ich programmiere nicht nur aus Spaß, ich bin beruflich Anwendungsentwickler und arbeite in vielen verschiedenen Sprachen und an unterschiedlich großen Projekten. In Sprachen wie C++, C# oder Java habe ich meine festen Arbeitsweisen, nicht zuletzt durch Kurse aus dem Studium sowie großen Teamprojekten mit entsprechenden Vorgaben.

    Ich habe diese arbeitsweise mit den vielen Parametern schon einige male genutzt ebenfalls in AutoIt Projekten, klar kommen tu ich damit. Aber ich mag es gern mich von anderen möglicherweise effizienteren Arbeitsweisen überzeugen zu lassen. Daher auch der Thread und die Frage wie das andere i.d.R. tun.

    @chesstiger "Ich habe in vielen Projekten schon viele Dinge ausprobiert und bin für mich persönlich zu dem Schluss gekommen, dass es keinen einheitlichen Stil geben muss. So schmerzhaft das auch klingen mag."
    Das bleibt glaube ich auch nicht aus, da mit den Jahren die Erfahrung steigt :D Aber das Thema abhacken kommt für mich in AutoIt aktuell noch nicht in Frage :P

    zu deinem Beispiel mit dem ROT13-Verschlüsseler: Du schreibst im letzten Satz: "Hier greife ich dann auf globale Variablen wie GUI-Controls zurück. Das ermöglicht flexibles und nicht-redundantes Programmieren gleichzeitig." So hatte ich das prinzipiell diesmal auch vor, nur war dann das "Problem" mit dem Au3Check aufgetaucht, dass Variablen in den anderen Skripten explizit übergeben werden müssen. Hast du vll. ein Projekt im Forum wo du so gearbeitet hast. Mich würde hier z.B. genau das interessieren, Au3Check ja/nein, und wie definierst du deine Variablen "global" (Local im Hauptskript, Global im Hauptskript ...)?

    @Andy "Mal etwas krass gesagt, ein als compilierte EXE vorliegendes Programm ist das Ergebnis, und eben genau NICHT der zugrundeliegende Code. Und genau diese EXE wird verkauft und von Kunden/Anwendern benutzt! Diese interessiert es ehrlich gesagt kein Stück, ob sich der "Programmierer" im Code selbstverwirklicht, oder aber an eng gesteckte Software-Erstellungs-Konventionen gehalten hat!"

    Guter Punkt, darüber habe ich mich mal stundenlang mit meinem damaligen Professor unterhalten. Ich bin der Programmiertyp der aber auch nicht jedes seiner Tools/Projekte aus den Augen verliert. Ich nimm mir auch gern mal ein Tool aus der Anfangszeit und optimiere das mit dem Wissen der Jahre. Daher ist es für mich irgendwo trotzdem ein Punkt wo ich sage, ich würde mir das schon für meine Arbeitsweise wünschen, meinen Code möglichst an Konventionen zu halten, auch wenn das dem Kunden wurst ist. Mögliche Ursache: In der Schule, Ausbildung und während der Studienzeit haben meine Lehrpersonen immer sehr penibel auf sowas geachtet. An der Uni gab es sogar fixe Vorschriften, wobei dort auch einiges nicht meiner Vorstellung entsprach :D

    @Bioshade "Ich selbst programmiere auf einem sehr professionellen Level"
    Das mag sein, jedoch ist es auch eine Ansichtssache. Wenn du zufrieden bist, und mögliche Kollegen die mit dir zusammen arbeiten müssen auch ist alles gut. Aber nun kommt ein Programmierer der an viel größeren Projekten teilgenommen hat mit 20 Jahren mehr Berufserfahrung und sagt dir dass das nicht so ist, was dann? Ich setze mich gerne damit auseinander weil ich der Meinung bin man kann nie gut/intelligent genug programmieren.

    Ob universelle Funktionen oder nicht ist unanhängig davon wie professionell das sein soll oder kann, sondern eine Frage des Umfeldes. Im Bereich Kundenanpassungen ERP, bei Systemen die teilweise in jeder Sub-Version anders aufgebaut sind wirst du damit nicht immer glücklich werden.

    Soweit schon mal danke für die Rege Diskussion, werde mir für meinen Teil nochmal die ein oder andere Idee durch den Kopf gehen lassen.

    Grüße Yaerox

    Grüne Hölle

  • Du könntest doch auch mit wenigen Funktionen die Parameter umgehen ich hatte da mal sowas wie:
    (ich glaube das hab ich mal bei @BugFix gesehen :P)