◊ Vulcan.NET Training
• Portierung
 |
Training zu Vulcan.NET
|
dcSE-Schulungen
Vulcan.NET |
Visual Objects |
Clipper
Vulcan.NET Anfängerkurs - Portierung
Das Kapitel 2 widmet (fast) jedem der in Visual Objects vorkommenden Datentypen einen Abschnitt. Dazu gehören
unter anderem Array, Codeblock, Date, Float, Klassen, String, Symbol und Usual. Aber auch auf nicht mehr unterstützte Leistungen wie Publics und Privates wird eingegangen.
Der folgende längere Abschnitt wurde aus der aktuellen Fassung des Kursmaterials übernommen.
Unterstützte Leistungen von Visual Objects
In diesem Abschnitt geht es vor allem um spezielle Leistungen von Visual Objects, die in anderen Sprachen nicht vorkommen, und
wie weit diese in Vulcan.NET nachempfunden wurden. Da Vulcan.NET vor allem den Anforderungen der CLS für die .NET-Welt
entsprechen will, ist hier bei der Implementierung in manchen Fällen eine Kompromisslösung notwendig. Die Grundaussage ist
jedoch immer: Ja, es gibt auch in Vulcan.NET die VO-spezifischen Arrays, Codeblocks usw. Aber es sind teilweise (meist unbedeutende) Einschränkungen
hinzunehmen. Auch auf die entsprechenden Erweiterungen wird hingewiesen.
Arrays
In der .NET-Welt sind Arrays 0-basiert implementiert, d.h. das erste Array-Element hat den Index 0 und nicht 1 wie in
Visual Objects. Vulcan.NET ist auch hier kompatibel mit VO, muss aber "unter der Haube" den Index 0 verwenden, damit die
Zusammenarbeit (Interoperabilität) mit anderen .NET-Sprachen gewährleistet ist. Das wird nur dann für den Vulcan.NET-Programmierer
offensichtlich, wenn er Vulcan.NET-Quelltext im Debugger sieht oder wenn er Quelltext von anderen .NET-Sprachen nach Vulcan.NET
portiert. Mit einem Compiler-Schalter /az kann man auch in Vulcan.NET 0-basierte Arrays erzwingen (standardmäßig ist dieser
Schalter natürlich nicht gesetzt!). Dies würde jedoch für die ganze Anwendung gelten, d.h. es empfiehlt sich, diesen nur für
komplett neu geschriebene Anwendungen zu setzen.
In Vulcan.NET kann auch weiterhin die vertrautere Notation für die Deklaration von DIM-Arrays verwendet werden:
LOCAL DIM aItems[2] AS STRING
In diesem Fall wird jedoch kein Array-Objekt (System.Array) erzeugt. VO meint in diesem Fall lediglich
einen zusammenhängenden Bereich auf dem Stack, der fortlaufend adressierbar ist.
In Vulcan.NET wird empfohlen, wenn immer möglich, streng typisierte (.NET-)Arrays zu verwenden, da diese sehr viel
effizienter sind als dynamische Arrays, die in Visual Objects vorzugsweise eingesetzt werden.
Eine Besprechung der .NET-Arrays finden Sie im Kapitel 9.
Datum
Der Datentyp DATE ist in Vulcan.NET kompatibel zu VO implementiert. Diese Implementierung basiert auf der .NET Framework-Struktur
DateTime . DateTime ist sehr viel leistungsfähiger als der VO-Datentyp DATE und sollte deshalb in neu geschriebenem Quelltext
vorgezogen werden. DateTime-Angaben müssen in Feldern vom Typ String in DBFs gespeichert werden. SQL-Systeme haben oft auch
einen DateTime-Datentyp. Das .NET-Framework 2.0 unterscheidet jetzt auch zwischen UTC-Zeitangaben (UtcNow) und lokalen
Zeitangaben (Now). Diese kann über die Kind-Property abgefragt werden und über die Methoden
ToUniversalTime() bzw. ToLocalTime() umgewandelt werden.. Zum Speichern von Zeitangaben wird UTC
empfohlen, für die Anzeige auf dem Bildschirm lokale Zeit.
Das folgende Vulcan.NET-Programm zeigt die unterschiedliche Verwendung:
1 FUNCTION Start() AS VOID
2 LOCAL dt AS DateTime
3 LOCAL d AS DATE // kompatibel zu VO
4 d := Today() // wie in VO
5 ? d // 1.Zeile in flg. Abb.
6 d := d+1 // wie in VO
7 ? d // 2.Zeile in flg. Abb.
8 dt := d // sichere Konvertierung, kein Cast notwendig
9 ? dt // 3.Zeile in flg. Abb.
10 dt := system.DateTime.Now // mit Zeitangabe
11 ? dt, dt:kind // 4.Zeile in flg. Abb.
12 //dt := dt+1 // Compiler-Fehlermeldung:
13 // + is not defined for Types 'System.DateTime' and
14 // System.Int32
15 dt:= dt:AddDays(1) // einen Tag hinzufügen
16 ? dt // 5.Zeile in flg. Abb.
17 d := (DATE) dt // explicit cast required
18 // die Zeitangabe geht verloren
19 ? d // 6.Zeile in flg. Abb.
20 RETURN VOID

(Anm.: der obige Quelltext enthält neue Casting-Syntax - z.B. in Zeile 17 -, die im Kurs ausführlich erläutert wird!)
Fließkommazahlen (FLOATs)
Im Gegensatz zu Visual Objects sind Fließkommazahlen in Vulcan.NET keine Verweistypen sondern Werttypen. In den allermeisten
Fällen ist dieser Unterschied für den Entwickler jedoch bedeutungslos, da die Art der Verwendung identisch mit der in
Visual Objects ist......
(Ende des Textauszugs)