Declarație privind returnarea lecției

* Acest operator are două aplicații importante:

În primul rând. După cum sa menționat mai sus, aceasta oferă o ieșire imediată din funcție, adică determină mașina virtuală să transfere controlul la codul care a numit funcția.






În al doilea rând. acest operator poate fi folosit pentru a returna o valoare specifică codului (funcției) de la care a fost apelată funcția curentă, întreruptă.


* Returnați formatul operatorului

valoarea returnata; // În cazul în care "valoarea" este opțională

• Ce înseamnă această ieșire din funcție?

Mai întâi, cu ajutorul acestui operator, putem controla acțiunile mașinii virtuale la executarea codului. De exemplu, nu este necesar să executați un anumit cod de funcție dacă jucătorul nu are 5000 $ la îndemână. Atunci operatorul va veni la noi. Dar asta nu e tot.


Să presupunem că avem un sistem similar, nu cel mai calitativ în ceea ce privește structura, codul de comandă

public OnPlayerCommandText (playerid. cmdtext # 91; # 93;)
dacă (! strcmp ("/ command_1" .cmdtext. true))
SetPlayerHealth (playerid 98304);
SendClientMessage (numărul jucatorului 0xFF0000FF. "Acum sănătatea dvs. clipește: 3");
>
dacă (! strcmp ("/ command_2" .cmdtext. true))
printf ("Vânzarea unui garaj");
>
dacă (! strcmp ("/ command_3" .cmdtext.right))
Ban (jucator);
>
dacă (! strcmp ("/ command_4" .cmdtext.right))
Kick (jucător);
>
retur 1;
>

Iată cum ar trebui să arate codul

public OnPlayerCommandText (playerid. cmdtext # 91; # 93;)
dacă (! strcmp ("/ command_1" .cmdtext. true))
SetPlayerHealth (playerid 98304);
SendClientMessage (numărul jucatorului 0xFF0000FF. "Acum sănătatea dvs. clipește: 3");
retur 1;
>
altfel dacă (! strcmp ("/ command_2" .cmdtext.right))
printf ("Vânzarea unui garaj");
retur 1;
>
altfel dacă (! strcmp ("/ command_3" .cmdtext.right))
Ban (jucator);
retur 1;
>
altfel dacă (! strcmp ("/ command_4" .cmdtext.right))
Kick (jucător);
retur 1;
>
retur 0;
>

Dar aceste două opțiuni vor lucra practic la fel (în afară de faptul că, în primul caz, ne-am întors la unitatea de apel invers, în scopul de a scăpa de mesajul „Comandă necunoscută“ (despre reacția unor kolbekkov o restituire să fie discutată mai târziu), și asta e ceea ce voi scrie mai mult ). atunci care e diferența, întrebi?

Și diferența este că, în primul caz, găsirea de echipă și de executare codul său, nu semnal mașina virtuală (server) la care a găsit tot codul pe care trebuie să găsim (în acest caz, codul este situat în termeni de unitate (comandă)). Și dacă nu dau instrucțiuni clare cu privire la cazul în care aveți nevoie pentru a opri executarea de cod, mașina virtuală va continua pentru a sorta prin toate codul situat în apel invers (pentru a bloca unitatea de închidere de apel invers), deoarece aparatul nu este conștient de gândurile tale și de a efectua totul așa cum este indicat ai ei .

În al doilea caz, noi:
  1. Am făcut condițiile potrivite.

Ce nonsens este nebunul ăsta?

Aceleași comenzi nu pot fi, așadar este mai bine să specificați compilatorul pentru a verifica fiecare comandă unul câte unul, până când găsește cel corect. Aceasta este, dacă una dintre condiții este îndeplinită, condițiile ulterioare sunt eliminate, deoarece am folosit un alt operator - altfel (altfel). Deci, aproximativ, structura unei asemenea stări pare a fi:

măr verde?
da
>
nr. dar acum mărul este verde. // Dacă a funcționat, de exemplu, această condiție
da // Aceasta înseamnă verde măr
>
nr. dar acum mărul este verde. // Apple este deja verde și înseamnă că acest test nu are sens => poate fi abandonat
da
>
cerul este albastru. // Și acest test va funcționa deja dacă nu specificăm instrucțiunea else pentru acest lucru și nu vom folosi declarația returnată în condițiile superioare. În acest caz, dacă după îndeplinirea condițiilor de mai sus trebuie să îndeplinim aceste condiții, nu este nevoie să ne întoarcem mai sus, deoarece nu este necesar să oprim executarea codului dacă mărul este verde
da
>


  • Ea spune compilatorului „frontiera“ a fiecăreia dintre condițiile cu speranța că, după executarea comenzii, orice alt cod dorit în secțiunea de apel invers (mai jos echipa noastră) și că nu este nevoie să execute cod de până la acest lucru foarte „de frontieră“.






  • Toate acestea am eliberat mașina virtuală de acțiuni inutile (în primul caz, chiar și după găsirea comenzii necesare, mașina AMX va continua să îndeplinească condițiile, continuând să caute comanda deja găsită). de aceea, mașina AMX va sorta rapid codul de comandă și va începe să proceseze rapid un alt cod. Aceasta se numește optimizare;)


    Cu alte cuvinte, acest operator vă permite să creați cecuri într-o formă mai ușor de înțeles pentru scripter. Sunt de acord, este mult mai convenabil să înțelegeți semnificația unei astfel de condiții

    dacă (! IsPlayerConnected (playerid)) returnează printf ("Player cu ID offline." playerid);

    Această verificare poate arăta astfel:

    Toate celelalte evenimente nu au o obligație specială pentru valorile returnate, singura diferență fiind aceea că:
    1 - Evenimentul se încheie complet.
    0-eveniment este trecut și procesat de toate scripturile.

    Evenimente în care nu puteți face nimic (sunt posibile compilatoarele):

    • OnVehicleStreamIn
    • OnVehicleStreamOut
    • OnPlayerStreamIn
    • OnPlayerStreamOut
    • OnDialogResponse
    • OnPlayerClickPlayer
    • OnPlayerSelectedMenuRow
    • OnPlayerExitedMenu
    • OnRconLoginAttempt
    • OnVehicleDamageStatusUpdate
    • OnVehiclePaintjob
    • OnVehicleRespray
    • OnVehicleMod


    Astfel, cu întoarcerea în aceste apeluri, trebuie să luați în considerare aceste date pentru a obține rezultatul dorit.

    De asemenea, merită remarcat faptul că puteți reveni și la funcții ca valoare. Mai exact, valoarea funcției pe care o returnează.
    Vă voi arăta un exemplu:

    main ()
    printf ("Funcția 1 (25-18) ==." FuncOne ()); // În cele din urmă ajungem la 7
    printf ("Funcția 2 (20 + 5) ==." FuncTwo ()); // În a doua funcție, obținem 25
    printf ("Funcția 3 (20) ==." FuncThree ()); // A treia funcție returnează 20
    >
    stoc FuncOne ()
    returnează FuncTwo () - 18;
    >
    stoc FuncTwo ()
    retur 5 + FuncThree ();
    >
    stoc FuncThree ()
    return 20; // A treia funcție returnează 20
    >

    În paragraful anterior, am vorbit despre reacția apelurilor standard la anumite valori, iar atunci când ne întoarcem o funcție, trebuie să luăm în considerare valoarea ce revine această funcție.
    Chiar și funcțiile standard returnează anumite valori. Aceste valori sunt egale cu cele găsite pe site-ul wiki.sa-mp.com. căutând funcția dorită și uitându-se la descrierea acesteia.

    Declarație privind returnarea lecției

    Asta e =)
    Dacă există întrebări, dacă ceva nu este clar explicat sau există adăugiri / corecții pentru această lecție, vă rugăm să scrieți mai jos despre aceasta.
    Voi încerca să ajut pe toată lumea, voi lua în considerare toate opiniile.

    Versiunea lecției nu este definitivă și sunt posibile adăugări / corecții de timp.
    Cu tine erai DeimoS. Vă mulțumesc pentru atenție.

    Puteți să mă contactați în mesaje private ale acestui grup

    Este cunoscut faptul că ideile costă câte 0.8333 de cenți fiecare (pe baza unui preț de piață de 10 cenți per duzină).
    Ideile mari sunt pline, nu sunt cerute.
    Impletirea unei idei intr-un joc terminat necesita o multime de munca,
    talent, răbdare și creativitate, să nu mai vorbim de costurile banilor, timpului și resurselor.
    Pentru a sugera o idee este simplă, pentru a realiza - aceasta este problema

    S te P avlina

    Ea a fost scrisă într-o singură ședință și diferite părți ale lecției în ordine diferită, deci undeva s-ar putea să existe o greșeală sau un nonsens. Același lucru pare deja "spălat" și tot ceea ce am văzut a fost călătorit. Dacă găsiți neajunsuri - scrieți, nu fiți timizi: 3
    În planurile de a face o descriere a fiecăruia dintre operatori într-o formă similară, doar mai structurată

    Puteți să mă contactați în mesaje private ale acestui grup

    Este cunoscut faptul că ideile costă câte 0.8333 de cenți fiecare (pe baza unui preț de piață de 10 cenți per duzină).
    Ideile mari sunt pline, nu sunt cerute.
    Impletirea unei idei intr-un joc terminat necesita o multime de munca,
    talent, răbdare și creativitate, să nu mai vorbim de costurile banilor, timpului și resurselor.
    Pentru a sugera o idee este simplă, pentru a realiza - aceasta este problema

    S te P avlina







    Trimiteți-le prietenilor: