 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 05.09.2007, 08:46 Titel: type function/sub |
|
|
etwas das mir immer haeufiger ueber dem weg lauft, sind type's die als function oder sub declariert sind.
Vorallem bei API Definitionen...
Wenn das also so haufig angewandt wird, muss es ja auch einen sinnvolle und praktischen nutzen haben
als Beispiel:
Code: | type irgendwas as function (byval as integer, byval as integer) as integer
dim test as irgendwas
|
Jetzt hab ich eine Variable die als Function Declariert ist ?
Nur was mache ich jetzt damit, immerhin gibt es hier ja noch nirgendwo eine funktion... _________________
 |
|
Nach oben |
|
 |
helium

Anmeldungsdatum: 10.09.2004 Beiträge: 397 Wohnort: Leverkusen
|
Verfasst am: 05.09.2007, 10:27 Titel: |
|
|
Jetzt habe ich eine Variable als Zahl deklariert. Nur was mache ich jetzt mit ihr? Immerhin gibt es ja noch nirgendwo einen Wert...
Man kann Variablen aber etwas zuweisen!
Genau das kannst du mit deiner Variable natürlich auch. _________________ Bevor Sie aufhören sich körperlich zu betätigen sollten Sie ihren Doktor befragen. Körperliche Inaktivität ist abnormal und gefährlich für Ihre Gesundheit. |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 05.09.2007, 10:44 Titel: |
|
|
das man der einen Wert zuweisen muss war mir schon irgendwie klar
konnte mir aber absolut nicht erklaeren wie ich diesen dann nuzten kann/soll
beim Abwasch ist mir dann eine Idee gekommen, die ich probiert habe...
Code: | type irgendwas as function (byval as integer, byval as integer) as integer
Sub test (byval adr as any ptr)
dim callback as irgendwas=adr
?callback (100,100)
End SUB
Function callbacktestfunction (byval abc as integer, byval def as integer) as integer
return (abc+def)
End Function
test (@callbacktestfunction)
sleep
|
Der Nutzen des Tests sei mal dahingestellt
Ein besseres Beispiel waere wohl die Put (Grafik) Anweisung der man eine 'Custom' Funktion uebergeben kann  _________________
 |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 05.09.2007, 15:00 Titel: |
|
|
Das ist eine Möglichkeit, übrigens kannst du die sub "test" auch so schreiben:
Code: | Sub test (Byval adr As irgendwas)
Print adr (100,100)
End Sub
|
Die "andere Möglichkeit":
Code: |
type irgendwas as sub (c as integer)
Sub test (c As Integer)
Print "Hallo, "; c
End SUB
Dim meine_sub As irgendwas
meine_sub = @test
meine_sub(123)
sleep |
Im Prinzip ist dieses Beispiel sinnlos.
Aber ich zeige dir mal einen kleinen Codeausschnitt, wo es sehr hilfreich sein könnte:
Code: |
#include "windows.bi"
type test As Function (a As Integer) As Integer
Dim ausgabe As test
#ifdef __FB_WIN32__
ausgabe = @funktion_die_in_windows_bi_ist
#else
Function eigene_funktion(a As Integer)
'.....
End Function
ausgabe = @eigene_funktion
#endif
Print ausgabe(123) 'die aufgerufene sub ist jetzt vom OS abhängig, unter Linux die eigene, unter Windows eine aus windows.bi
|
Ein anderes Beispiel, was mir gerade einfällt:
Wenn man ein Spiel hat, in dem man eine Optionale Soundausgabe hat, dann ist es hilfreich die sub zur soundausgabe (z.B. play_sound("explosion") ) wie im oberen Beispiel zu schreiben. Man braucht dann nur 2 Subs, eine die nichts macht, die andere spielt den sound tatsächlich.
Wenn die Soundausgabe deaktiviert ist, dann setzt man den Pointer auf die Sub, die nichts macht, anderfalls auf die sub, die den sound ausgibt. So muss man nicht bei jedem gespielten Sound(was bei manchen Spielen sehr viel ist) abfragen, ob der Sound aktiviert ist oder nicht. Man muss lediglich bei der (de)aktivierung des Sounds den Pointer neu zuweisen.
Ich hoffe du hast mich verstanden  _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 05.09.2007, 15:15 Titel: |
|
|
Dsa sind gelungene Beispiele und Ideen zur einsetzung, soweit ha ich noch gar nicht gedacht
danke Dir _________________
 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 05.09.2007, 15:23 Titel: |
|
|
Ich hatte da gerade eine Idee, z. B. einer Sortierfunktion das Sortierverfahren mit zu übergeben. Etwa so in der Art:
Code: | type TypFunktion as function (byval a as string, byval b as string) as byte
function SortNachAsc(byval a as string, byval b as string) as byte
if a > b then
return 1
elseif a < b then
return -1
end if
return 0
end function
function SortNachLen(byval a as string, byval b as string) as byte
if len(a) > len(b) then
return 1
elseif len(a) < len(b) then
return -1
end if
return 0
end function
function max(byval a as string, byval b as string, byval f as TypFunktion) as string
if f(a, b) = 1 then
return a
else
return b
end if
end function
dim as string a="Erstes Wort", b="Wort 2"
print max(a, b, @SortNachLen)
print max(a, b, @SortNachAsc) |
Ausgabe:
(ist natürlich keine Sortier-, sondern eine Maximalwertfunktion, aber sollte zum Sortieren auch klappen) _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|