Es ist eigentlich nur ein Spaß aus der SB, aber falls jemand interesse an sowas hat (und ggf daran weiterbasteln will) gibts dazu einen Thread.
Warnung: Der Code ist 100% Spaghetti (daher auch nicht im Skripte Forum, sondern in OffTopic). Nicht aufgeräumt, vollkommen verwirrend und ineffizient/falsch programmiert, und an verschiedenen Stellen die dasselbe machen wird "dasselbe" auf "verschiedene Art und Weise" erledigt (da ich einfach ein paar Methoden ausprobieren wollte). Alles in allem ist es nur ein Test wie ein paar Syntaxänderungen aussehen würden, wenn sie denn existieren würden.
Die eigentliche Idee dahinter ist einfach: Comfort.
AutoIt zwingt dem User gewisse Patterns auf: Es gibt keine One-Line Funktionen, Es gibt keine Initialisierungsmethode für Maps, es gibt kein #define, es gibt keine impliziten Arrays in einem Return (nur um 4 Beispiele zu nennen die auch im hier geposteten Code auftreten). Bei jedem dieser Teile fällt Boilerplate-Code an (trivialer Code der immer und immerwieder nahezu gleich ist und unmengen an Zeilen, oder ein Workaround braucht).
Ein Skript wie das folgende sollte mit dieser "UDF" nativ in Scite ausführbar sein, dieses Skript ist nur eine Demo die funkioniert. Es ist besser nicht zu erwarten, dass ein beliebiges großes Skript mit AutoItPlus laufen wird.
#AutoIt3Wrapper_Run_Au3Check=n
#include "AutoItPlus.au3"
; #Define - Compile Time Constants
; Diese Konstanten werden 1:1 im Code ersetzt.
#Define CaseSensitiveValue "CamelCase"
#Define casesensitivevalue "lowercase"
ConsoleWrite(CaseSensitiveValue & @CRLF)
ConsoleWrite(casesensitivevalue & @CRLF)
; #Define mit mehreren Zeilen (vorsicht, kein Support von #Define mit Variablen, also #Define something(x) x^2 wird nicht funktionieren.)
#Define MyFuncDefinition Func EuclideanLength($a, $b) \ Return Sqrt($a^2 + $b^2) \ EndFunc
MyFuncDefinition ; wird entpackt zu
; Func EuclideanLength($a, $b)
; Return Sqrt($a^2 + $b^2)
; EndFunc
ConsoleWrite('3^2 + 4^2 = ' & EuclideanLength(3, 4) & '^2' & @CRLF)
; #Define mit Strings
; Normalerweise werden Strings von #Define in Ruhe gelassen, es sei denn sie ergeben einen 100% match.
#Define 'test' 'erfolgreich'
ConsoleWrite('test ' & 'test' & @CRLF) ; das erste 'test ' enthält ein Leerzeichen und ist daher kein 100% match.
; #Enum - Compile Time Enum (verringert Overhead bei der Verwendung von Enums)
#Enum EINS, ZWEI, DREI
ConsoleWrite(EINS & ' ' & ZWEI & ' ' & DREI & @CRLF)
; Map als Nachschlagewerk, jeder Key wird mit dem leeren String initialisiert.
Global $List['a', 'b', 'c']
ConsoleWrite(MapExists($List, 'a') & ' ' & MapExists($List, 'x') & @CRLF)
; Map mit Initializer-List -> Da der Matcher nicht robust ist dürfen in der Initializerlist KEINE Operatoren verwendet werden. Nur Strings und Integer.
Global $Map['a', 'b', 'c', 1, 2, 3] = ['str a', 'str b', 'str c', 'int 1', 'int 2', 'int 3']
ConsoleWrite($Map['a'] & ' ' & $Map[1] & @CRLF)
; Implizites Array im Return
Func ReturnTest()
Return [1, 2, 3]
EndFunc
ConsoleWrite(ReturnTest()[0] & ' ' & ReturnTest()[1] & ' ' & ReturnTest()[2] & @CRLF)
; Single Line Function (aktuell nur Global-Scope)
Global Add($a, $b) Return $a + $b
ConsoleWrite('3 + 5 = ' & Add(3, 5) & @CRLF)
; Kombinationen von obigen Sachen funktionieren "manchmal"
Global Array($a, $b) Return [$a, $b]
ConsoleWrite(Array(1, 2)[0] & ' ' & Array('a', 'b')[1] & @CRLF)
Alles anzeigen
; Es stehen nur 40.000 Zeichen zur Verfügung...
Wenn weitere Ideen auftauchen, schreibt einen Kommentar
Gesucht sind keine "Verunstaltungen" der Syntax (Geschweifte Klammern, Semikolons, Syntax anderer Sprachen, etc), sondern "Vereinfachungen" von Stellen die beim Programmieren immer wieder nerven.
Und nicht vergessen: Immer schön "#define True False" verwenden, da kommt Freude auf
Andere Ansätze:
- synsug (von chesstiger)
lg
Mars