Integerübergabe ByRef

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
TroaX
Beiträge: 661
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Integerübergabe ByRef

Beitrag von TroaX »

Kurzer hat geschrieben:Ich versuche die PHP Syntax gerade mit Macros zu imitieren ...
Wieso?
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Integerübergabe ByRef

Beitrag von Kurzer »

Weil ich es elegant finde und wissen wollte, ob man es mit vertretbarem Aufwand in PB irgendwie hinbekommt.

Mittlerweile (also schon nach ziemlich kurzer Zeit ;-) ) bin ich jedoch auch Josh's Meinung und habe es aufgegeben das mit Macros hinzuwursten. Ich mach es nun doch so wie von PB vorgesehen.

Allerdings stelle ich fest, je tiefer ich in PHP einsteige, desto verwöhnter wird man. Auf der anderen Seite finde ich diese Typenlosigkeit bei PHP (nennt man das so?) extrem gewöhnungsbedürftig. Aus Sicht eines PB Programmierers kommt mir das irgendwie gefährlich vor, wenn man $variable = "100" schreiben kann und in der nächsten Zeile dann schon wieder echo $variable + 20; und es kommt tatsächlich 120 bei raus.

Das hat zur Folge, das Vergleiche dort auch verschiedene "Tiefen" von Übereinstimmung kennen.
So gibt ein if ($variable == 100) ein TRUE zurück, weil irgendwie on the fly von String "100" nach integer gecastet wird. Ein if ($variable === 100) gibt jedoch ein FALSE zurück, weil dort auch die Typen beider Seiten identisch sein müssen (also der Typ der Stringvariablen $variable und der Integerkosntanten 100) - man beachte das dreifache Gleichheitszeichen.
Ich hab mich dran gewöhnt, aber den praktischen Vorteil sehe ich da noch überhaupt nicht. Aber ich bin ja auch erst seit 2,5 Wochen dabei, bei PHP. :)

Okay, ich schweife ab... zurück zum Thema.
Obwohl, für mich ist das (Thema) eigentlich schon gegessen. Ich lasse die Schuhe beim Schuster (oder wie ging der Spruch mit der Kirche nochmal? :lol:) und programmiere PB so, wie man PB programmieren sollte.

Gruß Kurzer
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Integerübergabe ByRef

Beitrag von GPI »

Man merkt halt, das PHP eine Scriptsprache ist. Da kann man halt viele lustige Sachen machen. Das hab ich auch schon bei der Programmiersprache LUA festgestellt.

Ist irgendwie auch eine Krankheit bei Scriptsprachen, das man "Typenlos" ist. Einerseits ist es schneller geschrieben. Anderseits halt ein Quell von Fehlern, die man in Zweifelsfall ewig sucht.

Wobei hier auch PureBasic ähnliche Probleme hat. Bspw. wenn ein Procedure als Parameter eine *adresse erwartet, um man versehentlich Variable (statt @Variable) schreibt. Toll wäre es, wenn Purebasic hier zumindest eine Warnung ausgibt.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Re: Integerübergabe ByRef

Beitrag von uweb »

... wenn per Macro syntaktischer Zucker verstreut wird. Das macht es nur mühsamer, wenn nach ein paar Jahren ein Code angepasst werden muss ...
OK, das überzeugt mich auch.
Trotzdem finde ich es schade, dass die Zugriffsmöglichkeiten auf Konstanten so eingeschränkt sind, es immer wieder zu so sinnvollen Fehlermeldungen kommt ...
Auf der anderen Seite haben wir ein einfaches prozedurales Basic das kleine schnelle Programme erzeugt und mit dem man auch nach monatelanger Pause noch halbwegs klar kommt.
Benutzeravatar
TroaX
Beiträge: 661
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Integerübergabe ByRef

Beitrag von TroaX »

Kurzer hat geschrieben:Weil ich es elegant finde und wissen wollte, ob man es mit vertretbarem Aufwand in PB irgendwie hinbekommt.

Mittlerweile (also schon nach ziemlich kurzer Zeit ;-) ) bin ich jedoch auch Josh's Meinung und habe es aufgegeben das mit Macros hinzuwursten. Ich mach es nun doch so wie von PB vorgesehen.
Keine gute Idee. Es ist auf Grund der Typsicherheit immer logischer, von einer strikt oder stark typisierte Sprache in eine weniger typisierte Sprache zu übersetzen. Nicht umgekehrt. Denn das Verhalten von PHP zu emulieren, macht recht wenig Sinn. Im übrigen kannst du ByRef theoretisch mit den Scope-Schlüsselwörtern emulieren. Stichwort "Shared".
Kurzer hat geschrieben:Allerdings stelle ich fest, je tiefer ich in PHP einsteige, desto verwöhnter wird man. Auf der anderen Seite finde ich diese Typenlosigkeit bei PHP (nennt man das so?) extrem gewöhnungsbedürftig. Aus Sicht eines PB Programmierers kommt mir das irgendwie gefährlich vor, wenn man $variable = "100" schreiben kann und in der nächsten Zeile dann schon wieder echo $variable + 20; und es kommt tatsächlich 120 bei raus.
Was soll denn sonst bei $variable + 20 herauskommen? Der arithmetische Operator sorgt dafür, das $variable automatisch in einen Integer gecastet wird. Würdest du statt + den . nehmen, dann würde da "10020" herauskommen, weil durch den Verkettungsoperator die 20 automatisch in einen String gecastet wird. Wenn du dieses verhalten unterbinden willst und dir eine gesteigerte Typsicherheit geben willst, dann arbeite strikt mit Type-Hinting und vor allem setze den STRICT-Mode. Denn dann werden Variablen und werte nicht mehr gecastet und "100" + 20 erzeugt einen Fehler.
Kurzer hat geschrieben:Das hat zur Folge, das Vergleiche dort auch verschiedene "Tiefen" von Übereinstimmung kennen.
So gibt ein if ($variable == 100) ein TRUE zurück, weil irgendwie on the fly von String "100" nach integer gecastet wird. Ein if ($variable === 100) gibt jedoch ein FALSE zurück, weil dort auch die Typen beider Seiten identisch sein müssen (also der Typ der Stringvariablen $variable und der Integerkosntanten 100) - man beachte das dreifache Gleichheitszeichen.
Ich hab mich dran gewöhnt, aber den praktischen Vorteil sehe ich da noch überhaupt nicht. Aber ich bin ja auch erst seit 2,5 Wochen dabei, bei PHP. :)
Auch hier hilft der STRICT-Mode. Ansonsten sehe ich da kein Problem.

Wenn du bzgl. PHP Fragen hast, dann kannste gerne fragen. Aber tue dir selbst einen Gefallen und versuche nicht, die PHP-Syntax nachzubauen. Das bringt nichts. ^^
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Antworten