Eigener Datentyp definierbar ?
- CodeCommander
- Beiträge: 213
- Registriert: 02.03.2014 16:06
Eigener Datentyp definierbar ?
Kann man einen eigenen Datentyp definieren und einen Wert in der mit dem Datentyp definierten Variable schreiben? Dabei geht es auch darum zu definieren wie groß der Speicherbereich eines Datentyps ist und was für Werte zulässig sind. Geht das irgendwie wenn ja wie?
Zuletzt geändert von CodeCommander am 18.01.2015 14:23, insgesamt 1-mal geändert.
~ DELETE ~
Re: Eigener Datentyp definierbar ?
Mit Strukturen.
Wenn du mit "zulässigen Werte" sowas meinst wie: 0-100
Dann geht das nicht direkt zu definieren.
Das musst du beim Setzen selbst prüfen.
Wenn du mit "zulässigen Werte" sowas meinst wie: 0-100
Dann geht das nicht direkt zu definieren.
Das musst du beim Setzen selbst prüfen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- CodeCommander
- Beiträge: 213
- Registriert: 02.03.2014 16:06
Ach so cool. Kann man auch einen Getter und Setter definieren? Kann man irgendwie festlegen das jedesmal automatisch eine bestimmte Prozedure aufgerufen wird wenn ich den Wert einer Variable meines Datentyps ändern möchte?
Zuletzt geändert von CodeCommander am 18.01.2015 14:23, insgesamt 1-mal geändert.
~ DELETE ~
Re: Eigener Datentyp definierbar ?
Definiere dir doch gleich eine Prozedure, zum setzen deiner Variable:
Dort kannst du dann gleich prüfen.
Code: Alles auswählen
Structure Sound
Volume.i
Balance.i
EndStructure
Procedure SetSound(*Sound.Sound, Volume.i, Balance.i)
If Volume < 0
*Sound\Volume = 0
ElseIf Volume > 100
*Sound\Volume = 100
Else
*Sound\Volume = Volume
EndIf
If Balance < -100
*Sound\Balance = -100
ElseIf Balance > 100
*Sound\Balance = 100
Else
*Sound\Balance = Balance
EndIf
EndProcedure
Define MySound.Sound
SetSound(MySound, 65, 10)
Debug MySound\Balance
SetSound(MySound, -50, -50)
Debug MySound\Volume
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- NicTheQuick
- Ein Admin
- Beiträge: 8837
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Eigener Datentyp definierbar ?
Wenn du so schöne Sachen benutzen willst, dann musst du C/C++ programmieren. Dann kannst du den =-Operator überschreiben und fertig. 
Nee, mal im Ernst. In Purebasic geht das nicht so ohne weiteres. Man kann das ganze relativ schön mit Interfaces lösen, aber das ist teilweise auch ein Krampf und man muss sich damit auskennen, damit man keinen Unsinn treibt.
Nee, mal im Ernst. In Purebasic geht das nicht so ohne weiteres. Man kann das ganze relativ schön mit Interfaces lösen, aber das ist teilweise auch ein Krampf und man muss sich damit auskennen, damit man keinen Unsinn treibt.
- CodeCommander
- Beiträge: 213
- Registriert: 02.03.2014 16:06
Das geht schon mal in die richtige Richtung. Danke 
Ich kenn mich mit Macros nicht so gut aus aber könnte man es auch zusätzlich mit Macros so machen das am Ende so aussieht?
Das wäre schön wenn das ginge aber ich glaube nicht dass das geht oder?
Es wär allgemein toll wenn man mehr Freiheiten bez. Macros hätte, dann man auch andere Dinge im Code ersetzen und modifizieren könnte.
Ich kenn mich mit Macros nicht so gut aus aber könnte man es auch zusätzlich mit Macros so machen das am Ende so aussieht?
Code: Alles auswählen
MySound = 5Es wär allgemein toll wenn man mehr Freiheiten bez. Macros hätte, dann man auch andere Dinge im Code ersetzen und modifizieren könnte.
Zuletzt geändert von CodeCommander am 18.01.2015 14:22, insgesamt 1-mal geändert.
~ DELETE ~
- Sauer-RAM
- Beiträge: 326
- Registriert: 13.04.2009 16:22
- Computerausstattung: Lenovo ThinkPad X230t Convertible
- Wohnort: Haslach i. K.
Re: Eigener Datentyp definierbar ?
Da kommt wohl jemand aus der Objektorientierten Programmierung mh? ^^
Aber auch in PB, kann man gets und sets Programmieren. Ist halt nur einfach relativ unsinnig :P
Aber auch in PB, kann man gets und sets Programmieren. Ist halt nur einfach relativ unsinnig :P
"Bildung kommt vom Bildschirm und nicht vom Buch, sonst hieße es ja Buchung."
Dieter Hildebrandt
"Bildung ist Das, was übrig bleibt, wenn man alles was man in der Schule gelernt hat, vergisst. "
Albert Einstein
Dieter Hildebrandt
"Bildung ist Das, was übrig bleibt, wenn man alles was man in der Schule gelernt hat, vergisst. "
Albert Einstein
Re: Eigener Datentyp definierbar ?
Finde ich nicht. Bringt zwar keine Vorteile, ist vielleicht sogar langsamer, aber die Lesbarkeit des Codes (vor allem, wenn man es so gewohnt ist) kann damit verbessert werden.Sauer-RAM hat geschrieben:Ist halt nur einfach relativ unsinnig :P
Ich bin z.B. inzwischen dazu übergegangen Variablen in Modulen zu kapseln und dann mit myModule::var zu arbeiten. Nachdem man Modulen eine extra Farbe zuweisen kann, stechen die Variablen, bzw der "Namespace" besser hervor als bei "Kategorie_Variable".
Zum Thema Getter, Setter und Konstruktor (Funktion, die beim Definieren einer Variable (eigtl. beim Erstellen eines Objekts) automatisch ausgeführt wird):
Das hier ist natürlich totaler Overkill, aber wenn er es denn so will, bitte sehr
Code: Alles auswählen
Macro Define(variable)
DeclareModule variable
Define var.s = "Default"
Declare.s Get()
Declare Set(value.s)
EndDeclareModule
Module variable
Procedure.s Get()
Shared var
ProcedureReturn var
EndProcedure
Procedure Set(value.s)
Shared var
var = value
EndProcedure
EndModule
EndMacro
Define(mySound)
Debug mySound::Get()
mySound::Set("OK. Changed it now")
Debug mySound::Get()Oder hier, sogar mit "magischer Funktion" __construct()
Code: Alles auswählen
Macro Define(variable)
DeclareModule variable
Define var.s
Declare.s Get()
Declare Set(value.s)
Declare __construct()
EndDeclareModule
Module variable
Procedure __construct()
Shared var
var = "Default (set by Constructor function)"
EndProcedure
Procedure.s Get()
Shared var
ProcedureReturn var
EndProcedure
Procedure Set(value.s)
Shared var
var = value
EndProcedure
EndModule
variable#::__construct() ;Beim "Erstellen" einer Variable wird automatisch die __construct() Funktion aufgerufen
EndMacro
Define(mySound)
Debug mySound::Get()
;mySound::Set("OK. Changed it now")
;Debug mySound::Get()Signatur und so