You are not logged in.

Dear visitor, welcome to Jabaco - Community. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

iskakhan

Beginner

  • "iskakhan" started this thread

Posts: 3

Date of registration: Dec 19th 2009

  • Send private message

1

Saturday, December 19th 2009, 10:53pm

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. :thumbup:

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.

A1880

Intermediate

  • "A1880" is male

Posts: 500

Date of registration: Jan 1st 2009

Location: Hanover, Germany

Occupation: Software Engineer

Hobbies: Hilbert Curves

  • Send private message

2

Sunday, December 20th 2009, 7:17pm

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:

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

iskakhan

Beginner

  • "iskakhan" started this thread

Posts: 3

Date of registration: Dec 19th 2009

  • Send private message

3

Sunday, December 20th 2009, 8:06pm

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:

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

A1880

Intermediate

  • "A1880" is male

Posts: 500

Date of registration: Jan 1st 2009

Location: Hanover, Germany

Occupation: Software Engineer

Hobbies: Hilbert Curves

  • Send private message

4

Monday, December 21st 2009, 2:39pm

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

iskakhan

Beginner

  • "iskakhan" started this thread

Posts: 3

Date of registration: Dec 19th 2009

  • Send private message

5

Monday, December 21st 2009, 5:02pm

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

Rate this thread
WoltLab Burning Board