Jabaco Gänsefüsschensyntax und Optional
Moin aus Hamburg,
ich finde, Jabaco ist 'ne feine Sache und hat ein ungeheueres Potential, die RAD-Simplizität von VB6 plattformunabhängig und up-to-date bereitzustellen.
Ich habe angefangen, kleinere VB6-Projekte zu konvertieren. Dabei bin ich auf zwei Probleme gestoßen (Jabaco 1.5.2).
1. Wie formuliere ich in der Jabaco - Sprache (das ist ja nicht VB6!) ein Gänsefüsschen im String? Folgender VB6-Kode fliegt aus dem Anzug:
2. Wie steht es mit dem Optional - Modyfier in Parameterlisten aus? Da gab es im November 2008 mal eine Diskussion drum. Ist da eine Lösung absehbar, oder ist Optional in Jabaco in absehbarer Zukunft nicht vorgesehen. Wäre auch OK, müßte man nur wissen. Obwohl es bei der Konvertierung vorhandenen VB6 - Kodes schon schön wäre.
Vielleicht wäre es auch eine Option, dem VB6-nach-Jabaco-Konverter beizubringen, an den Leerstellen in den Funktionsverwendungen einfach den Default - Wert einzutragen, und anschließend das "Optional" in den Funktionsdeklarationen einfach wegzuschmeissen. Oder diese Funktion, genau wie die Umwandlung von "Declare" nach "Winapi" (und sicher noch einiges, ich stehe erst am Anfang) in einem in der IDE explizit aufzurufenden Konvertierungsassistenten anzubieten.
Ich glaube: je simpler es ist, VB6 - Kode in Jabaco lauffähig zu machen, desto mehr User wird dieses Tolle System gewinnen.
ich finde, Jabaco ist 'ne feine Sache und hat ein ungeheueres Potential, die RAD-Simplizität von VB6 plattformunabhängig und up-to-date bereitzustellen.
Ich habe angefangen, kleinere VB6-Projekte zu konvertieren. Dabei bin ich auf zwei Probleme gestoßen (Jabaco 1.5.2).
1. Wie formuliere ich in der Jabaco - Sprache (das ist ja nicht VB6!) ein Gänsefüsschen im String? Folgender VB6-Kode fliegt aus dem Anzug:
|
|
Source code |
1 2 |
Dim sTest As String sTest = """" |
2. Wie steht es mit dem Optional - Modyfier in Parameterlisten aus? Da gab es im November 2008 mal eine Diskussion drum. Ist da eine Lösung absehbar, oder ist Optional in Jabaco in absehbarer Zukunft nicht vorgesehen. Wäre auch OK, müßte man nur wissen. Obwohl es bei der Konvertierung vorhandenen VB6 - Kodes schon schön wäre.
Vielleicht wäre es auch eine Option, dem VB6-nach-Jabaco-Konverter beizubringen, an den Leerstellen in den Funktionsverwendungen einfach den Default - Wert einzutragen, und anschließend das "Optional" in den Funktionsdeklarationen einfach wegzuschmeissen. Oder diese Funktion, genau wie die Umwandlung von "Declare" nach "Winapi" (und sicher noch einiges, ich stehe erst am Anfang) in einem in der IDE explizit aufzurufenden Konvertierungsassistenten anzubieten.
Ich glaube: je simpler es ist, VB6 - Kode in Jabaco lauffähig zu machen, desto mehr User wird dieses Tolle System gewinnen.
Hallo,
das mit den Gänsefüßchen ist eine der verbliebenen Macken in Jabaco.
Man kann die doppelten Anführungsstriche als "Chr(34)" formulieren oder z.B. folgende Hilfsfunktion nutzen:
Optionale Parameter funktionieren in Jabaco wie in VB6. Oder hast Du ein Gegenbeispiel?
Gruß!
A1880
das mit den Gänsefüßchen ist eine der verbliebenen Macken in Jabaco.
Man kann die doppelten Anführungsstriche als "Chr(34)" formulieren oder z.B. folgende Hilfsfunktion nutzen:
|
|
Jabaco Source |
1 2 3 4 5 6 7 8 9 10 |
Public Function quote(s As String) As String quote = Chr(34) & s & Chr(34) End Function .... .... s = "Hello " & quote("Sailor") & "!" .... |
Optionale Parameter funktionieren in Jabaco wie in VB6. Oder hast Du ein Gegenbeispiel?
|
|
Jabaco Source |
1 2 3 4 5 6 7 8 9 |
Public Function quote(s As String, Optional quoteChar As String = Chr(34)) As String quote = quoteChar & s & quoteChar End Function .... MsgBox "hello " & quote("sailor") & "! " & quote("Happy", "'") & " To see you!" .... |
Gruß!
A1880
Hallo A1880!
Zu Gänsefüßchen: Chr(34) hatte ich gar nicht probiert, weil das nämlich in VB6 bei Konstandeklarationen nicht geht (bei Variablenzuweisungen natürlich schon). Aber: In Jabaco geht Chr(34) auch für Konstandeklarationen, und auch in der Deklaration von Default - Werten von optionalen Parametern. - Fazit: im Denken wieder zu sehr an VB6 geklebt...
Zu Optional: 08/15-Optional geht in Jabaco. Was aber nicht geht ist dieses:
Der springende Punkt ist: In VB6 können optionale Parameter beim Aufruf uch dann leer gelassen werden, wenn dahinter noch Parameter übergeben werden, die NICHT leer gelassen wurden. Bei Jabaco geht das nicht: da darf nach dem ersten leer gelassenen optionalen Parametr nichts mehr übergeben werden.
Nun ist das aber - zumindest für mich - kein ganz akademisches Problem. Beispiel: Eine Funktion hat diesen Footprint:
Das ist eine willkürlich herausgegriffene Beispielfunktion, die eine Datei zeilenweise einliest und diese in einem Stringarray zurückliefert. Da kommt es häufig vor, daß man z.B. nur sFile und lTabSpaces übergibt, weil alles andere mit dem Default paßt. Und dann hat man genau obiges Problem in Jabaco.
Wenn es nur eine Funktion wäre, wärs ja egal. Wenn man sich seine Funktionsbibliotheken aber über Jahre in VB6 in diesem Stil aufgebaut hat, und diesen vielen gut getesteten Kode nun übernehmen möchte, dann fehlt einem doch die Fähigkeit von Jabaco, damit umgehen zu können. Sonst muß man Hunderte von Funktionsaufrufen ändern...
Beste Grüße
iskakhan
Zu Gänsefüßchen: Chr(34) hatte ich gar nicht probiert, weil das nämlich in VB6 bei Konstandeklarationen nicht geht (bei Variablenzuweisungen natürlich schon). Aber: In Jabaco geht Chr(34) auch für Konstandeklarationen, und auch in der Deklaration von Default - Werten von optionalen Parametern. - Fazit: im Denken wieder zu sehr an VB6 geklebt...
Zu Optional: 08/15-Optional geht in Jabaco. Was aber nicht geht ist dieses:
|
|
Source code |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Public Sub main(ByJava args() As String)
Dim sTest As String
MsgBox Fct() ' OK
MsgBox Fct("a") ' OK
MsgBox Fct("a", "b") ' OK
MsgBox Fct(, "w") ' FEHLER!
End Sub
Private Function Fct(Optional ByVal sArg1 As String = "x", Optional ByVal sArg2 As String = "y") As String
Fct = sArg1 & sArg2
End Function
|
Der springende Punkt ist: In VB6 können optionale Parameter beim Aufruf uch dann leer gelassen werden, wenn dahinter noch Parameter übergeben werden, die NICHT leer gelassen wurden. Bei Jabaco geht das nicht: da darf nach dem ersten leer gelassenen optionalen Parametr nichts mehr übergeben werden.
Nun ist das aber - zumindest für mich - kein ganz akademisches Problem. Beispiel: Eine Funktion hat diesen Footprint:
|
|
Source code |
1 2 3 4 5 6 7 8 9 |
Public Function FileReadLines( _
ByVal sFile As String, _
Optional ByVal bTrimLeft As Boolean = False, _
Optional ByVal bTrimRight As Boolean = False, _
Optional ByVal bRemoveEmptyLines As Boolean = False, _
Optional ByVal lTabSpaces As Long = 2, _
Optional ByVal sCutAt As String = vbNullString, _
Optional ByVal sLiteralDelimiter As String = "" _
) As String()
|
Das ist eine willkürlich herausgegriffene Beispielfunktion, die eine Datei zeilenweise einliest und diese in einem Stringarray zurückliefert. Da kommt es häufig vor, daß man z.B. nur sFile und lTabSpaces übergibt, weil alles andere mit dem Default paßt. Und dann hat man genau obiges Problem in Jabaco.
Wenn es nur eine Funktion wäre, wärs ja egal. Wenn man sich seine Funktionsbibliotheken aber über Jahre in VB6 in diesem Stil aufgebaut hat, und diesen vielen gut getesteten Kode nun übernehmen möchte, dann fehlt einem doch die Fähigkeit von Jabaco, damit umgehen zu können. Sonst muß man Hunderte von Funktionsaufrufen ändern...
Beste Grüße
iskakhan
Du bist offenbar auf eine Lücke gestoßen.
Aber:
Die multiplen "Optional" Parameter treiben einem Compiler-Bauer sicher den Schweiß auf die Stirn.
Als Leser des verwendenden Quellcodes finde ich das auch eher verwirrend.
Ich weiß ehrlich gesagt nicht, ob Jabaco die in VBA beliebten "named parameters" unterstützt, wo man beim Aufruf den Parameternamen explizit angibt.
Das lässt sich Code schon besser lesen und nachvollziehen.
Diverse boolean Parameter kann man natürlich auch als Summe von Einzelbitwerten realisieren, wie das z.B. die Stil-Attribute bei MsgBox() nutzen.
Fröhliches Umstellen der Bibliothek wünsche ich!
Gruß
A1880
Aber:
Die multiplen "Optional" Parameter treiben einem Compiler-Bauer sicher den Schweiß auf die Stirn.
Als Leser des verwendenden Quellcodes finde ich das auch eher verwirrend.
Ich weiß ehrlich gesagt nicht, ob Jabaco die in VBA beliebten "named parameters" unterstützt, wo man beim Aufruf den Parameternamen explizit angibt.
Das lässt sich Code schon besser lesen und nachvollziehen.
Diverse boolean Parameter kann man natürlich auch als Summe von Einzelbitwerten realisieren, wie das z.B. die Stil-Attribute bei MsgBox() nutzen.
Fröhliches Umstellen der Bibliothek wünsche ich!
Gruß
A1880
Moin A1880,
ja, das sieht schwer nach einem Tool aus, das den Sourcecode umstellt. Und da bin ich weder bei meiner Ausgangsidee für einen VB6-nach-Jabaco-Assistenten in der Jabaco-IDE...
Da müßte man aber erstmal zusammentragen, was der alles können müßte - und zur Gewinnung dieser Erkenntnisse müßte man es einmal händisch gemacht haben. Ich schreibe also mal mit. - Trotzdem: Jabaco ist schon Klasse!
Beste Grüße
iskakhan
ja, das sieht schwer nach einem Tool aus, das den Sourcecode umstellt. Und da bin ich weder bei meiner Ausgangsidee für einen VB6-nach-Jabaco-Assistenten in der Jabaco-IDE...
Da müßte man aber erstmal zusammentragen, was der alles können müßte - und zur Gewinnung dieser Erkenntnisse müßte man es einmal händisch gemacht haben. Ich schreibe also mal mit. - Trotzdem: Jabaco ist schon Klasse!Beste Grüße
iskakhan
Similar threads
-
Suggestions »-
Make XML-Parser installation optional
(Sep 13th 2009, 8:24pm)
-
Tips, Tricks, Samples & Tutorials »-
Extracting Enums out of COM, OCX, ActiveX-dll, Typelibrary
(Aug 5th 2009, 1:00pm)
-
General topics, questions and discussions »-
Dynamic Arrays in Structures possible?
(Jul 1st 2009, 1:34am)
