Super erklärt und für jeden Anfänger ein muss es zu lesen.
Der Mythos "stock"
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Die Frage ist doch könnte ich "Kaliber()" über einen Timer aufrufen lassen: Ja, weil diese Funktion ein Callback ist
Da irrst du, Kaliber() wäre eine einfache, simple Funktion, mehr nicht. Die aufgerufen wird, sobald du es befiehlst.
Callbacks sind, wie der Name schon sagt Funktionen/Klassen die (wörtlich übersetzt) "zurückrufen" heißt, wenn etwas geschieht, agieren sie.
Deine Funktion kannst du nicht agieren lassen, wenn etwas (im Normalfall serverseitiges) geschieht, du kannst ihr lediglich befehlen "agiere, sobald das Script an deiner Zeile angekommen ist!" mehr kannst du bei einer Funktion nicht beeinflussen.Einen Callback dagegen, kannst du in genau die andere Richtung NICHT beeinflussen. Der Callback wird zwar immer agieren, sobald das für ihn vorgesehene Event eintritt, du kannst ihm aber keinesfalls sagen "agiere ausgerechnet JETZT nicht" - Er wird immer reagieren, wenn sein Event eintritt, egal unter welchen Umständen.
@ Topic, sehr schön geschrieben. Was mich allerdings persönlich interessiert (hat es egtl schon immer, mir war der Thread nur nicht wert geöffnet zu werden): Wozu nun ein Stock? Wie du selber schon sagst, Funktionen, die ich selber schreibe, werde ich ohnehin benutzen und je nachdem ob ich sie Dateiübergreifend brauche oder nicht, wird sie public oder nicht.
Doch wann genau macht denn nun eine stock-Deklaration Sinn?
-
Wikipedia sagt, dass einige hier ihr Halbwissen umherwerfen. Das macht Wikipedia zwar auch, aber dadurch, dass Wikipedia Wikipedia ist, werden die falschen Informationen auf Wikipedia nach einiger Zeit zur neuen Wahrheit. Ihr seid aber nicht Wikipedia.
Laut: http://de.wikipedia.org/wiki/Rückruffunktion definiert sich eine Callback funktion lediglich dadurch, dass eine Referenz (uebergeben als Parameter) zu einer beliebigen Funktion aufgerufen wird, anstatt, dass die Funktion direkt aufgerufen wird.
Kaliber() wird somit zu dem Zeitpunkt zu einer Callback funktion, zu dem eine Referenz der Timer funktion uebergeben wird. Das hat mit der Auslastung, die das Pawnskript verursacht nichts zu tun.
Kaliber hat also mit seiner ersten Aussage bezueglich Timern in SAMP vollkommen recht. Timer koennen nur Callbacks aufrufen, da die Timer funktion eine Funktionsreferenz haben moechte.PS.: War mein letzter Beitrag zu dem Thema in diesem Thread, da Leute im Internet meist keine Bemuehungen verfolgen sich zu informieren (auch wenn es nur ein paar Sekunden dauern wuerde), wenn sie sich nicht sicher sind, sondern sich viel mehr Bemuehen andere von ihrem schlecht informierten Standpunkt zu ueberzeugen. Kaum jemand will sich informieren, aber alle wollen recht haben.
Letztlich sind mir die Begrifflichkeiten vollkommen egal, solange man weiss, was man tut koennen Callbacks auch Elefant heissen. Mir egal, schliesslich kann man beim Programmieren/Skripten etwas ganz bequem per Quelltext veranschaulichen, da Bedarf es keiner Sprachkenntnisse. -
Kaliber hat also mit seiner ersten Aussage bezueglich Timern in SAMP vollkommen recht. Timer koennen nur Callbacks aufrufen, da die Timer funktion eine Funktionsreferenz haben moechte.
Das ist immer noch nicht richtig.wenn ich eine einfache Funktion erstelle, die nichts kann außer einen Wert zurückgeben, und sie public setze, macht sie das nicht zu einem Callback.
Callbacks sind Funktionen die durch bestimmte nicht im Script/eigentlichen Programm aufgerufen werden.
Beispiel OnPlayerConnect.
Es steht zwar im Script, wird aber nicht im Script aufgerufen. sondern extern durch den (SA:MP) Server.Ich kann auch eine Funktion erstellen, die Kaliber heißt, die ebenso public ist, aber nicht extern durch den (SA:MP Server) aufgerufen wird, ergo sie ist kein Callback.
Trotzdem kann ich sie mit einem Timer aufrufenMan könnte also sagen:
public: lässt eine Funktion von "überall" zugänglich machen und compiliert den Code ohne "Function ist never used"
stock: lässt bei compilieren die Funktion "weg", sofern sie nie aufgerufen wird. Ist daher auch nicht von "außen" aufrufbar.
ohne Keyword: eine einfache Funktion, ohne Zugirff von "außen" aber mit dem Fehler "Function is never used" -
Ich wollte ja eigentlich nichts mehr dazu sagen, aber: Was habe ich gesagt?
Danke fuer die super Veranschaulichung von dem was ich gesagt habe. Der Wikipedia Artikel war wohl nicht interessant genug, um sich zumindest den ersten Satz durch zu lesen.Callbacks sind Funktionen die durch bestimmte nicht im Script/eigentlichen Programm aufgerufen werden.
Beispiel OnPlayerConnect.Lies dir einfach den Wikipedia Artikel durch, anstatt, dass du weiterhin inkorrekte Informationen, die du aus deinen eigenen Vermutungen und Informationen von "Ich-hab-voll-Ahnung"-Leuten aufbaust, verbreitest.
Die SA-MP callbacks sind nichtmals callbacks, wenn man es auf das Skript reduziert. Sie werden nur zu callbacks, sobald der SAMP Server sie aufruft. Der SAMP Server macht naemlich inetwa folgendes: Call(FindFunction("OnPlayerConnect")). Der Call() funktion wird also eine Referenz zu OnPlayerConnect uebergeben, darum sind die Funktionen bei einem SAMP Server Callback funktionen und bei einem anderen Programm, dass OnPlayerConnect nicht aufruft einfach nur nutzlose Funktionen.Das sollte es dann auch von meiner Seite gewesen sein. Du kannst nun einen weiteren Post machen, in dem du mir Bildhaft veranschaulichst, dass du Recht hast. Ich verspreche ich werde auch nicht antworten. Dann sieht es so aus, als ob du mich ueberzeugt haettest.
-
Die SA-MP callbacks sind nichtmals callbacks, wenn man es auf das Skript reduziert. Sie werden nur zu callbacks, sobald der SAMP Server sie aufruft. Der SAMP Server macht naemlich inetwa folgendes: Call(FindFunction("OnPlayerConnect")). Der Call() funktion wird also eine Referenz zu OnPlayerConnect uebergeben, darum sind die Funktionen bei einem SAMP Server Callback funktionen und bei einem anderen Programm, dass OnPlayerConnect nicht aufruft einfach nur nutzlose Funktionen.
Hast du meinen Beitrag überhaupt vollständig gelesen oder nur bis zu dem Satz, den du zitiert hast?Mir scheint das nämlich so. Du gibst das wieder was ich geschrieben habe, nur in einem anderen Wort laut
-
Warum ist die AMX größe eigentlich mit Stock größer ?
Aber gutes Tutorial
MFG Arendium
-
Die Diskussion hab ich hier ja gar nicht mitbekommen ... .
Warum ist die AMX größe eigentlich mit Stock größer ?
Aber gutes Tutorial
MFG Arendium
Nein ?
Für mich ist #1 " *.AMX Größe ( 582 Bytes (582 Bytes) ) " kleiner als #2 " *.AMX Größe ( 588 Bytes (588 Bytes) ) ".
Im Beispiel #3 und #4 sind die Größen identisch, denn dort wird in Beiden Fällen die Funktion nicht eingebunden in das Endprodukt.