Imaginați-vă că am scrie un cod care poate fi utilizat ca proceduri și funcții. Codul conține secțiuni în care pot să apară erori, precum și zonele în care nu ne așteptăm la greșeli. Adăpostirea apelurile pot fi arbitrare. În același timp, vreau o modalitate ușoară de a obține un diagnostic de eroare este atât de detaliate încât toate lanțurile de apel au fost „dintr-o privire“.
Pe baza acestor considerente și dorința de a defini criterii clare, caz în care ar trebui să utilizeze procedurile și funcțiile, în orice caz.
Un mic sondaj printre colegii săi au identificat mai multe abordări diferite față de această problemă.
Dar, din cauza comentariilor pozitive au venit evidenția câteva idei.
1. Abordarea bazată pe determinarea procedurilor și funcțiilor
Aici totul este simplu, citiți documentația și, amintindu-ne că procedura este diferită de la doar valoarea returnată a funcției, decide - în cazul în care nu este necesară valoarea returnată, atunci procedura, dacă este necesar, funcția. Cu toate acestea, procedura se poate modifica valorile parametrilor trecut prin referință.
În contextul acestei abordări, există două ramificații privind modul în care ar trebui să revină fukntsii parametri:
Abordare 1.1 Funcția returnează un parametru prin întoarcere, restul variabilelor transmise prin referință. La procedura de ieșire, includem unele erori de manipulare, în funcție de valoarea de returnare.
Abordarea 1.2 Funcția nu poate returna o valoare prin parametrii săi, și ar trebui să facă acest lucru numai printr-o valoare returnată. Dacă doriți să se întoarcă mai mult de o valoare, aceste valori ar trebui să fie ambalate într-o matrice, o listă de valori, etc.
În cazul în care a apărut eroarea în timpul operației, acesta returnează valoarea nedefinită.
2. proceduri de apropiere - ei Macrocomenzi
În această procedură abordare este utilizată numai în scopul de a combina mai multe apeluri de același tip de acțiune.
În această abordare, utilizarea procedurii are un caracter local - pur și simplu pentru a scurta codul.
Abordarea 3. Orice altceva - caracteristici, dar fără imbecilitate
1. Utilizați întotdeauna funcțiile, nu sunt utilizate proceduri.
2. Funcția returnează fie „“ sau o descriere șir a erorii, toate modificările du-te la link-ul prin parametrii de ieșire
3. Pentru a elimina prostia în aplicarea regulii 2, pentru funcțiile care returnează o singură valoare este garantată, fără eroare în funcție, valoarea de transfer este utilizat de funcția de întoarcere. De exemplu, EtoKorrektnayaData (vhData)
Asta pana cand am ajuns. Și ce sunt abordările pe care le?
8. brix8x (brix8x) 469 21.01.08 9:46 Acum subiect
Eu folosesc în abordarea mea de lucru, „Toate lucrurile funcționează.“
Acest lucru este convenabil atunci când există funcția imbricate, și puteți obține întregul lanț al acestor provocări.
Dacă o eroare de a reveni apoi functionName + „: Descrierea erorii de testare normale“;
Return ""; // daca totul este bine
KonetsFunktsii
Funcția externă (vhPar1, vhPar2, vyhPar1) // extern, dar nu și funcția de interfață
//<Блок ошибок выполнения
Mutați bucății;
Mutați functionName;
Functionname = "externă";
//>
Res = superVnutr (vhPar1, vhPar2, vyhPar3);
În cazul în care nu PustayaStroka (res) apoi să se întoarcă + functionName „: Descrierea erorii pentru extern“;
Return ""; // daca totul este bine
KonetsFunktsii
Procedura ObrabotchkikSobytiya1S (Denial) // Procedura - un indicator al procesorului 1C
Mutare PAR1, PAR2, Par3;
Mutați bucății;
Res = VneshnyayaNoNeInterfeysnaya (par1, PAR2, Par3);
În cazul în care nu PustayaStroka (res) Atunci
SoobschitObOshibke (res, Failure); return;
ENDIF;
Dacă apare o eroare, obținem ceva de genul: „extern: Eroare Descriere extern: superVnutr: Descrierea erorii pentru superVnutr“
================================================== ========== ====
Protecția imbecilitate este că funcția returnează un boolean, și nu pot (teoretic) duce la o eroare, puteți utiliza modul obișnuit, de exemplu, EtoKorrektnayaData (vhData).
Cu un astfel de set de reguli pe care le pot crea un șablon și fac un standard și, în viitor, verificați aderarea la acest standard.
Această abordare funcționează bine în VB, și VBSctipt. Aș continua să utilizeze această abordare, dar el a dat un „eșec“ pe Jcript :-( limba. Funcțiile din JScript nu pot fi transferate la variabilele de legătură de tip convențional (număr, data), astfel încât, în cazul în care fukntsii interiorul schimba câteva variabile convenționale nu pot lucra în acel stil care tocmai descris.
Este din acest motiv și sa născut acest post. Pe măsură ce dorința de a vedea alte abordări proiectate suficient de adânc încât acestea, atunci pot fi afișate într-un set de reguli simple pentru studenți „verzi“.
Între timp, pe JScripte am scrie ca o maimuță complet - starea de spirit. F - (((
Eu tind să cred că trebuie fie să renunțe la JScript, sau pentru el să vină cu un stil diferit.
Există un stil care poate fi adaptat pentru a încerca:
1. Toate funcțiile lumii, dar valorile de retur numai prin revenirea
2. În cazul în care o mulțime de ei, că în matrice a revenit
3. În cazul în care există o eroare, primul element al șirului - este nedefinit, iar al doilea - o descriere text a erorii.
Dar, apoi, din nou, mă duc înapoi la „calea bătătorită vechi“, care nu se poate vedea?