Mehr als ein Return-Wert in Function
Übersicht

![]() |
NightPhoenixBetreff: Mehr als ein Return-Wert in Function |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie würdet ihr es machen um 3 Werte, die eine Function berechnet zurückzugeben? Per Return![]() Und globalisieren möchte ich die Variablen nicht. Sowas wie ein vielfaches Return ![]() Hat jemand einen Vorschlag für mich? NightPhoenix |
||
da_poller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
return a+":"+b+""+c
in einer string funktion.. |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oder wenns um kleine Zahlen geht, in Größenordnung eines Bytes schau dir das Prinzip der Farbwerte in BB an ![]() ![]() Edit: Oder du nimmst eine Bank. (Wieso bin ich nicht gleich drauf gekommen...) |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
- Zuletzt bearbeitet von Eingeproggt am Do, März 19, 2009 22:48, insgesamt einmal bearbeitet
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
ein array erstellen mit rückgabewerten deiner funktion und die jeweils am anfang deiner funktion resetten(Dim![]() einfachste und schnelle lösung Mfg CGamer |
||
Warbseite |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
ansonsten blieben da noch globale variablen | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
maximilian |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Type Tupel Field value1, value2, value3 End Type Leider unterstützt BB keine richtigen Tupel. Bei BMax würde ich es wohl über Call by Reference machen. |
||
Variety is the spice of life. One day ignore people, next day annoy them. |
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oder wie es sonst in BB gemacht ist, einfach für jede Rückgabe eine eigene Funktion benutzen. Siehe z.B. Transform*- und Transformed*-Befehle
Das Zwischenspeichern der Werte kann ja dann in "temporären" globalen Variablen erfolgen. |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich benutze niemals Functions.
Ich habe keine Lust schon wieder eine Diskussion über Sinn und Unsinn von Funktionen zu beginnen. Nimmt meine Meinung einfach so hin wie sie ist, ich werde sie nicht ändern und komme so schon seit Jahren sehr gut klar. Mein Ratschlag : Mach einfach stat einer Function eine Subrutine. Du springst hin mit Gosub, machst alles was du willst und kehrst mit Return zurück. Du scheibst, du möchtest die Variablen nicht globalisieren. Warum nicht, weiß ich nicht, ist aber egal. Wenn ich in meinen Programmen hin und wieder mal eine Variable nur kurzfristig für irgendwelche Zwischenberechnungen brauche, wie das sonst bei anderen Leuten oft in Funktionen der Fall ist, dann nenne ich die Variablen dort entweder sehr kurz wie "a" und "b" was sie deutlich von allen anderen wichtigen Variablen unterscheidet, weil denen gebe ich immer aussagekräftige Namen wie "EquippedShield_ID" oder, ich setze an dem Variablen Namen mit Großbuchstaben die Erweiterung "_TMP", für temporär, was gut erkennbar ist und signalisiert, daß der Wert dieser Variable nur temporär aussagekräftig ist, also nicht "echt" global zu gebrauchen ist. (Und selbstverständlich kann es unmöglich passieren, daß ich eine wichtige globale Variable zufällig mit _TMP enden lasse.) Diese Vorgehensweise hat sich bei mir auch in sehr großen Projekten voll bewährt. |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du willst keine Diskussion auslösen? Gut. Deine Meinung will ich dir auch nicht ausreden. Aber bitte, bitte: Behalt sie für dich!
Deine Vorgehensweise führt sämtliche Prinzipien der strukturierten Programmierung ad absurdum. Wir sind hier im Beginner-Bereich und du solltest nicht zulassen, dass sich Anfänger so einen Schmarrn ebenfalls angewöhnen. Mein Hinweise an die Anfänger:
Danke für die Aufmerksamkeit. EDIT: Ich hatte ja auch noch ne Idee. Ne Bank erstellen, mehrere Werte reinschmeißen und die Bank zurückgeben. |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Funktionen helfen Fehler vermeiden, da sie ihren eigenen Datenraum haben.
Klar kann man ohne Funktionen programmieren, früher musste man das ja auch. Aber sie sind praktisch und ich möchte nicht ohne sein. Gleiches gilt für Types. Sie bieten jede Menge Möglichkeiten wenn man sie zu nutzen weiß. Man kann ein Auto auch ohne Servo fahren, mit ist es jedoch ein vielfaches leichter. Warum sollte man also den gegebenen Fortschritt nicht zu seinem Vorteil nutzen? Von daher pflichte ich D2006 vollkommen zu: Mach weiter wie Du es gewohnt bist, aber bitte präg die Neuen nicht mit dem archaischen Krempel, weil sowas wieder rauszukriegen ist schwer. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
am besten nen Type erstellen und dann den Type zurückgeben. | ||
between angels and insects |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich stimme D2006 voll zu, bis auf
D2006 hat Folgendes geschrieben: [*] Goto niemals benutzen! Es gibt (seltene) Ausnahmesituationen, in denen sich GOTO anbietet, weil die Alternativen in diesen Situationen entweder extrem umständlich sind oder unsauber. Beispiel Spiel: Code: [AUSKLAPPEN] .SPIELMENÜ
Repeat Spielmenü darstellen Spiel gestartet? Goto GAME Forever .GAME Repeat If pause = False Spiel darstellen Else Pausenbildschirm anzeigen Until gameover = True Goto SPIELMENÜ Ansonsten vermeide ich GOTO und GOSUB auch wie die Pest. Funktionen sind schön sauber, Variablen die man nur für die Funktionen benötigt sind lokal und "verseuchen" nicht das Hauptprogramm. Funktionen kann man Werte übergeben und zurückliefern lassen, und sogar optionale Parameter (falls nicht übergeben) festlegen, was extrem hilfreich sein kann. Ansonsten bin ich auch für Types, um mehrere Variablen zu übergeben. Einfach, sauber, kompakt. L8er, PSY |
||
PSY LABS Games
Coders don't die, they just gosub without return |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich danke für die vielseitigen Vorschläge ![]() Oh und ich werde Functions trotzdem verwenden Omenaton_2, sind einfach praktisch... ich teile die Meinung deiner Kritiker ![]() *edit* Ich benutze eigentlich nur bei Pick-Abfragen ein Goto ![]() Liebe Anfänger, Function ist für ein strukturiertes Programm nunmal das Beste ![]() |
||
- Zuletzt bearbeitet von NightPhoenix am Fr, März 20, 2009 16:32, insgesamt einmal bearbeitet
![]() |
maximilian |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Repeat
Spielmenü darstellen Spiel gestartet? GAME() Forever Function GAME() Repeat If pause = False Spiel darstellen Else Pausenbildschirm anzeigen Until gameover = True End Function So ist es besser. GOTO ist _NIE_ besser (gibt zwar Leute die das behaupten, ist aber ehrlich gesagt Blödsinn). Im Zweifelsfalle lohnt sich immer ne kleine Funktion. @NightPhoenix: Schonmal an "Exit" gedacht? |
||
Variety is the spice of life. One day ignore people, next day annoy them. |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
@PSY:
Code: [AUSKLAPPEN] Const STATE_GAME = 1
Exakt 42 mal eleganter. :p
Const STATE_PAUSED = 2 Const STATE_MENU = 3 Local gameState = STATE_MENU While Not KeyHit(1) Select gameState Case STATE_GAME: updateGame() drawGame() Case STATE_MENU: drawMenu() .. End select Wend End |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
@LORD Jap, kann man drüber diskutieren.
Ich habe allerdings die Hauptgamelogik nicht gern in einer (grossen) Funktion, deswegen benutz ich lieber meine Alternative. Der eine Goto-Befehl stört da nicht wirklich. Aber egal, ich denke Firephoenix hat die Antwort auf seine Frage ![]() L8er, PSY (edit) sorry D2006, während ich meinen Beitrag schrieb hast Du wohl geposted ![]() OK ich stimme zu, Deine Lösung ist natürlich extrem sauber und sollte vllt sogar irgendwo gepinned werden ![]() Allerdings glaub ich, sie ist ca. 23x eleganter hehe ![]() Grüsse, PSY |
||
PSY LABS Games
Coders don't die, they just gosub without return |
Gast |
![]() Antworten mit Zitat |
|
---|---|---|
Ich stimme PSY zu.
Allerdings nicht mehr so dolle, seit ich C# benutze (Das besteht theoretisch nur aus funktionen, den main() ist auch ene funktion.) |
||
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gosub und Goto wird hier anscheindend zwar gerne mal in einen Topf geworfen, es sind aber zwei verschiedene Paar Schuhe. Gosub kann durchaus mal praktisch sein und da ja auch immer ein Rücksprung erfolgen muss, verhält es sich tatsächlich ähnlich wie eine Funktion, ohne die Codestruktur wie Goto zu zerstören.
PSYs Rahmenstruktur mit Gosub anstatt Goto wäre durchaus o.k. und ist in den meisten Fällen auch übersichtlicher und weniger Bug-Anfällig als Ds Lösung. |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
peacemaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ flitztuete95: C# ist ein ganz anderes Level, da gibt es nichtmal Funktionen, sondern nur Methoden.
Ansonsten, was das Thema betrifft: Globale Variabeln sind da ganz gefährlich. Wenn du eine Funktion rekursiv aufrufst, können da komische Werte kommen, weil jeder Funktionsaufruf auf den gleichen Bereich, bzw. Variable zugreifen. |
||
~Tehadon~
www.tehadon.de http://www.blitzforum.de/worklogs/14/ |
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe das Problem immer anders gelöst:
Code: [AUSKLAPPEN] Function bla(returnwert)
;Code Select returnwert Case 0 Return wert1 Case 1 Return wert2 ;.... End Select End Function |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group