Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

type function/sub

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 05.09.2007, 08:46    Titel: type function/sub Antworten mit Zitat

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 grinsen

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
helium



Anmeldungsdatum: 10.09.2004
Beiträge: 397
Wohnort: Leverkusen

BeitragVerfasst am: 05.09.2007, 10:27    Titel: Antworten mit Zitat

Code:

dim foo as Integer


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!

Code:

foo = 42


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
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 05.09.2007, 10:44    Titel: Antworten mit Zitat

das man der einen Wert zuweisen muss war mir schon irgendwie klar happy
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... grinsen
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 zwinkern

Ein besseres Beispiel waere wohl die Put (Grafik) Anweisung der man eine 'Custom' Funktion uebergeben kann happy
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 05.09.2007, 15:00    Titel: Antworten mit Zitat

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 durchgeknallt
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 05.09.2007, 15:15    Titel: Antworten mit Zitat

Dsa sind gelungene Beispiele und Ideen zur einsetzung, soweit ha ich noch gar nicht gedacht zwinkern
danke Dir
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 05.09.2007, 15:23    Titel: Antworten mit Zitat

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:
Code:
Erstes Wort
Wort 2


(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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz