Seite 1 von 2

Datentypen von (PB-)Funktionsrückgaben / EnableExplizit

Verfasst: 17.12.2011 15:03
von pcfreak1201
Hallo!

Ich habe noch nicht viel in PureBasic programmiert, komme aber von anderen Dialekten (VB6, RealBasic).
Dabei verwende ich mittlerweile aus Prinzip "EnableExplizit" und habe immer wieder Schwierigkeiten den
korrekten Variablentyp für die Definition zu finden.
In anderen Sprachen steht der Typ in der Hilfe, doch bei PB finde ich meist nur Beschreibungen, aber keinen Typ.
Bisher probiere ich wie bei VB6 und API-Aufrufen, einfach "long" aus - ohne zu wissen, was passiert, wenn der Typ nicht passt.
(x64 verwende ich noch nicht, sehe da aber noch so manche Probleme auf mich zukommen)

Gibt es irgendwo eine verlässliche Quelle?

Danke,

Stefan

Re: Datentypen von (PB-)Funktionsrückgaben / EnableExplizit

Verfasst: 17.12.2011 15:07
von RSBasic
Herzlich Willkommen im Forum, pcfreak1201.

Informationen zu den Variablentypen findest du in der PB-Hilfe unter "Variablen, Typen und Operatoren".

Rückgabewerte von PB-Funktionen sind auch in der PB-Hilfe beschrieben. Das kann z.B. Ganzzahl sein oder String.

Beispiel für die Verwendung eines Befehls mit einem Rückgabewert:

Code: Alles auswählen

EnableExplicit

Define WordLength

WordLength = Len("Hallo")

Debug WordLength
In der Hilfe steht:
Laenge = Len(String$)
Die Länge wird als Ganzzahl zurückgegeben.

Bei "Mid()" kannst du sehen, dass stattdessen ein String zurückgegeben wird:
Ergebnis$ = Mid(String$, StartPosition [, Länge])

Re: Datentypen von (PB-)Funktionsrückgaben / EnableExplizit

Verfasst: 17.12.2011 17:00
von pcfreak1201
Hallo!

Danke, aber "so einfach" ist es dann doch nicht :D

Es ist mir zuletzt z.B. bei

Code: Alles auswählen

Ergebnis = GetFileDate(Dateiname$, DatumsTyp)
aufgefallen. Ich hätte jetzt bei anderen Sprachen/Dialekten einen Double-Wert erwartet. In der Hilfe steht:
Gibt das gewünschte Datum im Format der PureBasic Date Bibliothek zurück.
Und dort steht dann:
Die 'Date' (Datums) Bibliothek ermöglicht den Umgang mit Datums- und Zeitangaben zwischen 1970 und 2038. Benutzt wird dabei die Unix-Methode (d.h. die Anzahl der seit dem 1. Januar 1970 vergangenen Sekunden).
Hinweis: Unterstützte Datums-/Zeit-Werte sind 01.01.1970, 00:00:00 als Minimum und 19.01.2038, 03:14:07 als Maximum.
... kein Wort von dem verwendeten Datentyp.

Re: Datentypen von (PB-)Funktionsrückgaben / EnableExplizit

Verfasst: 17.12.2011 17:33
von NicTheQuick
Hi pcfreak1201,

die PB-Hilfe hält sich da in der Tat etwas zurück bei der Sache mit den Datentypen. Da ich auch ein Freund von sauber getypter Programmierung bin, finde ich das auch sehr schade. Eine Ganzzahl kann auch alles mögliche sein. Am sichersten fährt man für Ganzzahlen natürlich mit Integer, aber leider gibt es z.B. auch kein unsigned Integer.
In deinem Beispiel mit der Date-Library findest du die Antwort nur versteckt. Mit der "Unix-Methode" ist der Unix Time Stamp gemeint, der üblicherweise in einer 32-Bit vorzeichenbehafteten Ganzzahl gespeichert wird. Bei PB entspricht das also dem Datentyp Long (.l).

Re: Datentypen von (PB-)Funktionsrückgaben / EnableExplizit

Verfasst: 17.12.2011 17:53
von PMV
Ist kein Datentyp angegeben, solte der Datentyp der Defaultdatentyp
sein, was seit einigen Versionen Integer (.i) entspricht. Ist das nicht
der Fall, so ist das ein Fehler in der Hilfe und sollte umgehend entsprechend
gemeldet werden. :wink:

MFG PMV

Re: Datentypen von (PB-)Funktionsrückgaben / EnableExplizit

Verfasst: 17.12.2011 18:30
von pcfreak1201
Ahh!

Mit Integer habe ich dann auch den Unterschied x86/x64 berücksichtigt.
D.h. auch, daß es ausreicht wenn "genug Platz" im Datentyp vorhanden ist?!
(Also z.B. bei einem Wert von nur einem Byte Integer mit 4 bzw. 8 bytes verwenden ist OK?)
Ich frage wegen evtl. Pointern und dem möglichen Problem Little/Big Endian?

Aber sonst werde ich PMVs Tip beherzigen. Da macht die Sache dann tatsächlich einfacher.
Danke! :allright:

Stefan

Re: Datentypen von (PB-)Funktionsrückgaben / EnableExplizit

Verfasst: 17.12.2011 18:45
von ts-soft
Für Pointer sollte man Pointer verwenden, das passt dann immer :wink: ,
ansonsten passen Pointer immer in Integer.

Bei Ganzzahlvariablen ist immer dem Integer vorzug zu geben, es sei denn ein anderer Typ wird
unbedingt benötigt. Dies gilt auch für die Rückgabe von Proceduren. Procedure.b nutzen weil
nur #True oder #False zurückgegeben wird ist nicht unbedingt sinnvoll.

Die anderen Ganzzahltypen sind meist nur in Strukturen, Interfaces und bei Speichermanipulation
sinnvoll (ausnahme das Quad, welches natürlich auch oftmals wegen des Zahlenbereichs benötigt wird).

Gruß
Thomas

Re: Datentypen von (PB-)Funktionsrückgaben / EnableExplizit

Verfasst: 17.12.2011 19:17
von H.Brill
In der Tat ist es bei den Datumsfunktionen
zusammen mit der File-Library auf den ersten
Blick nicht direkt ersichtlich. Hatte da auch
etwas länger gebraucht, um das Gewünschte
zu bekommen.
So bekommt man jedenfalls das Erstellungsdatum einer
Datei mit Punkten getrennt :

Code: Alles auswählen

Debug FormatDate("%dd.%mm.%yyyy", GetFileDate(Datei$, #PB_Date_Created))

Re: Datentypen von (PB-)Funktionsrückgaben / EnableExplizit

Verfasst: 30.12.2011 14:12
von pcfreak1201
Hallo!
Ich habe gerade noch einen nicht dokumentierten "Problemfall" gefunden:

Code: Alles auswählen

NewList lstFolders.s()
Wie definiere ich denn eine Liste - und auch wenn ich sie nicht brauche - eine Map?
Define, Dim und Pointer funktionieren schon mal nicht :-)

Grüße und einen guten Rutsch,

Stefan

Re: Datentypen von (PB-)Funktionsrückgaben / EnableExplizit

Verfasst: 30.12.2011 14:15
von RSBasic
Schau in der PB-Hilfe z.B. unter "MapKey()". Da gibt es ein Beispielcode.