Arrays als Rückgabewerte von Funktionen
Übersicht

![]() |
FlushBetreff: Arrays als Rückgabewerte von Funktionen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo zusammen,
ich weiß dass Blitzarray standardmäßig Global sind. Nun habe ich versucht der Kapselung die ich seit Jahren aus anderen Programmiersprachen (Java, C++, C#) kenne Rechnung zu tragen. Ich habe ein Lokale TestArray erstellt in dem ich ein Array das ich in einer Funktion erstellt habe speichern möchte. Dann lasse ich mir den Inhalt anzeigen. Ich bekomme zwar keine Fehlermeldung aber der Inhalt des Arrays ist immer leer. Heißt das nun, daß Blitzarrays als Rückgabewert völlig unmöglich sind und ich Globale Arrays ändern muß und somit die Vorteile der Kapselung verloren gehen oder mache ich syntaktisch etwas falsch? Hier mein Source: BlitzBasic: [AUSKLAPPEN]
Gruß, Flush |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Du hast dein Return innerhalb des For, was heisst, dass nur das erste Element abgefüllt werden würde und er dann das Array zurückgibt. Da du Return arrSin[361] geschrieben hast, würde er auch nur die letzte Zahl zurückgeben, nicht das Array selbst. Schreibt man es um zu Return arrSin, so gibt es direkt einen Compiler-Fehler. Man darf mich gerne korrigieren, aber ich glaube in BlitzBasic/3D geht das noch nicht, mit Arrays zurückgeben. Dort ist BlitzMax schon etwas fortschrittlicher und Monkey sowie Monkey 2 kommen den modernen Sprachen wohl am nächsten ![]() Eine Möglichkeit ist jedoch: BlitzBasic: [AUSKLAPPEN] Type Array |
||
![]() |
Flush |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Jolinah
Stimmt, das Return in der Schleife ist natürlich ein Fehler aber auch nachdem ich das Return aus der Schleife nehme bleibt die Sache mit der ersten Zahl. Ich glaube auch daß Blitz3D ein Array als Rückgabetyp nicht erlaubt. Über den Umweg eines Types führt die Sache zum Erfolg ![]() Vielen Dank Jolinah! Gruß, Flush |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
So viel ich weiss, können BlitzArrays nicht von Funktionen zurückgegeben werden. Habe hier grad kein BB installiert, sonst könnte ich das prüfen.
Was aber geht, ist einfach das "original"-Array in die Funktion zu geben. Denn BlitzArrays werden als Referenz und nicht als Kopie übergeben, BlitzBasic: [AUSKLAPPEN] Local testArr%[361] |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Fürs Protokoll: mit Dim![]() Mit der richtigen Signatur, sollten auch Blitzarrays als Funktionsrückgabewerte möglich sein. BlitzBasic: [AUSKLAPPEN] Function Test%[361]() ; Könnte klappen (nicht getestet) |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Flush |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Xeres
Klappt leider nicht, ich bekomme einen Error: Expecting '(' . Soweit ich weiß kennt Blitz3D nur $, # und % als Identifier für Rückgabewerte, die eckigen Klammern funktionieren nicht! Danke und Grüße, Flush |
||
![]() |
Flush |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Holzchopf
Deine Version funktioniert auch ![]() Grüße und Danke für die schnelle Hilfe, Flush |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Blitzarrays werden per Referenz übergeben?! Najagut, etwas random diese Designentscheidung aber hat mich die letzten 15 Jahre auch nicht aufgehalten. Das Blitzarrays Konstant sein müssen war Abschreckung genug.
Ich dachte alle Datentypen ließen sich auch als Funktionsrückgabewerte einsetzen. Types kann man ja auch benutzen BlitzBasic: [AUSKLAPPEN] Function CreateTest.Ttest() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Flush |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Xeres
Ja dass Blitzarrays eine feste Größe brauchen ist sehr nachteilig, der große Vorteil liegt in der Geschwindigkeit Ihrer Nutzung! Leider klappt die Rückgabe eines mit Dim erstellten Arrays nicht egal wie ich es drehe. Aber die Kapselung ist mir sehr wichtig! Die Möglichkeiten die Jolinah und Holzchopf genannt haben sind glaube ich das beste was Blitz3D hergibt. Grüße, Flush |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Natürlich gibt es keine Rückgabe bei Dim Arrays - macht ja bei Globalen auch keinen Sinn.
BlitzBasic ist generell nicht gut mit Kapselung vereinbar... Bei tatsächlich Konstanten Werten wie 360° sind Blitzarrays eine Option. Von einem "Geschwindigkeitsvorteil" würde ich nichts behaupten wollen. Wie groß soll der denn sein? Macht das einen messbaren Unterschied bei einem realen Anwendungsfall? Bei variablen Mengen sind Types sicher besser. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group