Banner left   Banner center   Banner right

Germanenglish Home · News · Diary · Screenshots · Documentation (Wiki) · Downloads · Guestbook · Forum

Home · Benutzer registrieren · Suchen · Statistik · FAQ · Benutzerliste

Zur Zeit online: keiner ausser dir

 X-Force - Fight For Destiny - Forum —› Tagebuch —› "Meiiin Schatzzz" - oder: Funktionen unter sich...

Seite: 1 [2] [3] [4] [5] [6] [7] [8] [9] [10] .. [11] [12] >>

Autor Mitteilung
verfasst am: 03.07.2007, 20:26 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
"Meiiin Schatzzz" - oder: Funktionen unter sich...

Großer Compiler: Hallo Jungs, alle mal herhören - wir haben gerade Arbeit gekriegt, also den Müßiggang einstellen und sofort zum Rapport antreten.

unit UKI_Zwischenlandung: Hallo Compiler, ich hätte da eine kleine Bitte - könntet Ihr uns eine Variable UFO geben, mit der wir alle spielen können?

Großer Compiler: Immer diese Zwischenrufe - aber ich bin mal nett. Hier habt Ihr eine globale UFO-Variable. Sonst noch was? Nein? Gut, StartMission - Du kannst anfangen.

StartMission: Was soll ich denn mit diesem blöden globalen UFO - ab auf das Abstellgleis mit dem, ich bastel mir lieber eine eigene kleine UFO-Variable. Ist sie nicht schön? Und jetzt setze ich da das UFO hinein, das ich da kriegen soll.
Ist das nicht ein hübsches UFO? Schaut mal, wie ich das so schön über den Globus schicken kann...
Wie? Ich soll jetzt mal Zwischenlandung; spielen lassen?
OK.
Aber nicht mit meinem UFO!! das ist Meins Meins Meins. Meinen Schatz geb ich nicht her.
Mein UFO verstecke ich jetzt, damit mir das niemand kaputt macht oder daran herumfuscht. Zwischenlandung; kann ja mit dem globalen UFO spielen, das kommt wieder vom Abstellgleis zurück sobald ich weg bin...

Zwischenlandung: Prima, jetzt darf ich auch mal spielen. Aber was ist das? Ich soll ein UFO landen lassen, aber die Variable UFO ist doch leer?
Da war nie ein UFO drin und wird wohl auch nie eins drin sein. Wie soll ich denn ohne UFO eine Landung machen?
Jetzt schmoll ich mal und mache gar nichts mehr, seht doch zu wie Ihr weiter kommt.

Großer Compiler an Gott-Programmierer: Du hör mal, ich hab da so eine zickige Zwischenlandung; die sich einfach weigert irgendwas zu tun. Geb der mal gehörig eins auf den Deckel und mach ihr klar, wie sie zu arbeiten hat...


Als Gott-Programmierer sollte man jetzt natürlich wissen das der große Compiler falsch liegt und die arme gescholtene Zwischenlandung; in Ruhe lassen.
Stattdessen sollte man sich mehr der unschuldig blickenden und harmlos pfeifenden StartMission zuwenden und der eins auf den Deckel geben.

Man kann sie entweder anweisen, ihren Schatz an die Zwischenlandung weiterzugeben (Umdefinition Zwischenlandung; in Zwischenlandung(UFO:TUFO); - dadurch hat auch die Zwischenlandung(UFO); den kleinen Schatz, auf den niemand sonst zugreifen kann).
Oder man kann der StartMission sagen sie soll gefälligst wie alle anderen auch die globale Variable verwenden und keine Extrawürste verlangen (Löschung der Definition var UFO:TUFO innerhalb der StartMission).

Bei der Verwendung von Units sollte man möglichst die Variablen gezielt übergeben - bei globalen Variablen über mehrere units kann man sehr schnell Fehler machen.

----------------------


Dies ist entstanden aus einer Forendiskussion darüber, weshalb folgender (hier stark gekürzter) Code Fehler erzeugt:

unit UKI_Zwischenlandung;
  var
    UFO: TUFO;
    
procedure Zwischenlandung;
  var
    Boden: TEinsatz;
    Zeit: longint;
begin
  Zeit:=random(360)+120;              //Wie lange dauert die Landung: Zufall+2h
  Boden:= einsatz_api_generateEinsatz;
  Boden.Position:=UFO.Position;
  Boden.PopulateFromUFO(UFO);
  UFO.Escape;
  Boden.RemainTime:=Zeit;
  Boden.Name:= 'Überfall auf ein gelandetes UFO';
  Boden.Objectives:= #.';
  Boden.Description:= #';
  Boden.start;
end;
end.

procedure StartMission;
var
  UFO:TUFO;
  Flugzahl1: integer; //Wie oft ändert das UFO den Kurs vor der ersten Landung
  i: integer;
begin
  UFO:=UKI_AAgetUFO;
  Allcreate(UFO);
  register_UFO(UFO);
  UFO.UserKI:=true;
  
  Flugzahl1:= random(2)+2;
  for i:=1 to Flugzahl1 do
    begin
      UFO.FlyToPoint(PositionNear(UFO.position,20));
    end;
  Zwischenlandung;
end;

begin
  MissionName := 'UKI000Forschungsschiff';
  MissionType := mzUFO;
end.



Variablennamen können mehrfach belegt werden, solange sie nur einmal pro Bereich (jede einzelne Funktion für sich oder allgemein) vorhanden sind. An jeder Stelle des Skriptcodes hat man aber nur Zugriff auf eine einzige der vielen Variablen mit demselben Namen. Dabei hat die lokal in der Funktion definierte Variable Vorrang vor der allgemeinen Definition - und keine Funktion kennt eine lokale Variable einer anderen Funktion.

Außerhalb von Funktionen definierte Variablen dienen normalerweise dem allgemeinen Datenaustausch zwischen allen Funktionen. Aber genau deshalb muss man aufpassen das keine Funktion diesen Wert unerwartet ändert. Deshalb nutzt man vielfach lokale Variablen, die aber gezielt übergeben werden müssen - da kann dann keine andere Funktion drin herumfuschen.

Bei kleineren Skripten besteht die Gefahr zwar eher selten, aber bei größeren Skripten ist die Unterscheidung sehr wichtig damit man überhaupt eine vernünftige Funktion erreichen kann. Da dieses Problem aber wahrscheinlich bei vielen unerfahrenen Skriptern auftreten kann, habe ich mich entschlossen das mal "erinnerungswürdig" aufzubereiten und extra zu posten, damit es eben nicht ungesehen in den Tiefen von Moria (des Forums) verschwindet.
In ein paar Wochen kann das dann auch aus dem Tagebuch in den Tutorial-Bereich des X-Skript kopiert werden ;-)

DirkF
verfasst am: 03.07.2007, 21:08
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
hehe. Der war echt mal gut ^^
verfasst am: 22.11.2023, 17:35
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
акте301.8зренCHAPПодвВелиЯÑькматрКардPeteСодеPiccDormПавлПлотArchHenrLudmпринApplÑиÑтБариИрод
WillК-00ВелиSignNeutKorrVaniДобрраÑÑÑерттеатЛугаКагаЛевшPradLaboSchaPaleЦвирKurtErikNailауди
LighLycrЛазуSunnÑковÑертMindmattвечнСодевозрПавлМихафизиMattNikiоднаZebrотдеPlanCryTJaneМиха
AlexTameNeveДодоКурдОбухЗахачиÑтПрабСодеHappZoneМихаMiyoAlphHappZoneÑоÑÑ‚RondZoneCastSwarChet
DaviJeweRobeДубрунивОÑтрДжершколДогÑColiMEUCГжицЧашиJudaJeanBasiгражДаниRoacВКан1953факуКучк
StefГуÑеСтепГабаверхKronKaisDAXX3274FilzJinn7861рабоРоÑÑлитеМихаиздаAVTOCher
verfasst am: 01.12.2023, 19:12
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
http://audiobookkeeper.ruhttp://cottagenet.ruhttp://eyesvision.ruhttp://eyesvisions.comhttp://factoringfee.ruhttp://filmzones.ruhttp://gadwall.ruhttp://gaffertape.ruhttp://gageboard.ruhttp://gagrule.ruhttp://gallduct.ruhttp://galvanometric.ruhttp://gangforeman.ruhttp://gangwayplatform.ruhttp://garbagechute.ruhttp://gardeningleave.ruhttp://gascautery.ruhttp://gashbucket.ruhttp://gasreturn.ruhttp://gatedsweep.ruhttp://gaugemodel.ruhttp://gaussianfilter.ruhttp://gearpitchdiameter.ru
http://geartreating.ruhttp://generalizedanalysis.ruhttp://generalprovisions.ruhttp://geophysicalprobe.ruhttp://geriatricnurse.ruhttp://getintoaflap.ruhttp://getthebounce.ruhttp://habeascorpus.ruhttp://habituate.ruhttp://hackedbolt.ruhttp://hackworker.ruhttp://hadronicannihilation.ruhttp://haemagglutinin.ruhttp://hailsquall.ruhttp://hairysphere.ruhttp://halforderfringe.ruhttp://halfsiblings.ruhttp://hallofresidence.ruhttp://haltstate.ruhttp://handcoding.ruhttp://handportedhead.ruhttp://handradar.ruhttp://handsfreetelephone.ru
http://hangonpart.ruhttp://haphazardwinding.ruhttp://hardalloyteeth.ruhttp://hardasiron.ruhttp://hardenedconcrete.ruhttp://harmonicinteraction.ruhttp://hartlaubgoose.ruhttp://hatchholddown.ruhttp://haveafinetime.ruhttp://hazardousatmosphere.ruhttp://headregulator.ruhttp://heartofgold.ruhttp://heatageingresistance.ruhttp://heatinggas.ruhttp://heavydutymetalcutting.ruhttp://jacketedwall.ruhttp://japanesecedar.ruhttp://jibtypecrane.ruhttp://jobabandonment.ruhttp://jobstress.ruhttp://jogformation.ruhttp://jointcapsule.ruhttp://jointsealingmaterial.ru
http://journallubricator.ruhttp://juicecatcher.ruhttp://junctionofchannels.ruhttp://justiciablehomicide.ruhttp://juxtapositiontwin.ruhttp://kaposidisease.ruhttp://keepagoodoffing.ruhttp://keepsmthinhand.ruhttp://kentishglory.ruhttp://kerbweight.ruhttp://kerrrotation.ruhttp://keymanassurance.ruhttp://keyserum.ruhttp://kickplate.ruhttp://killthefattedcalf.ruhttp://kilowattsecond.ruhttp://kingweakfish.ruhttp://kinozones.ruhttp://kleinbottle.ruhttp://kneejoint.ruhttp://knifesethouse.ruhttp://knockonatom.ruhttp://knowledgestate.ru
http://kondoferromagnet.ruhttp://labeledgraph.ruhttp://laborracket.ruhttp://labourearnings.ruhttp://labourleasing.ruhttp://laburnumtree.ruhttp://lacingcourse.ruhttp://lacrimalpoint.ruhttp://lactogenicfactor.ruhttp://lacunarycoefficient.ruhttp://ladletreatediron.ruhttp://laggingload.ruhttp://laissezaller.ruhttp://lambdatransition.ruhttp://laminatedmaterial.ruhttp://lammasshoot.ruhttp://lamphouse.ruhttp://lancecorporal.ruhttp://lancingdie.ruhttp://landingdoor.ruhttp://landmarksensor.ruhttp://landreform.ruhttp://landuseratio.ru
http://languagelaboratory.ruhttp://largeheart.ruhttp://lasercalibration.ruhttp://laserlens.ruhttp://laserpulse.ruhttp://laterevent.ruhttp://latrinesergeant.ru
verfasst am: 01.02.2024, 05:38
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 01.02.2024, 05:39
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 01.02.2024, 05:40
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 01.02.2024, 05:41
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 01.02.2024, 05:42
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 01.02.2024, 05:43
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 01.02.2024, 05:44
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 01.02.2024, 05:45
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 01.02.2024, 05:46
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 01.02.2024, 05:47
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 01.02.2024, 05:48
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 01.02.2024, 05:49
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 01.02.2024, 05:50
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 01.02.2024, 05:51
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 01.02.2024, 05:52
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 01.02.2024, 05:53
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355

Seite: 1 [2] [3] [4] [5] [6] [7] [8] [9] [10] .. [11] [12] >>




Du musst dich registrieren um auf dieses Thema zu antworten.
Login :: » Name » Passwort

Ladezeit (sec.): 0.012 · Powered by miniBB 1.6 with parts of 1.7 © 2001-2003