termenii implicite și explicite să ia unele obtinerea utilizate pentru prima dată când le auzi. Când le auzi în termeni de programare ce înseamnă exact asta pentru tine? Este un mod mai bun decât altul? Aici vom trece peste fiecare dintre aceste idei și vom oferi exemple cu câteva beneficii ale modelului de design care pot proveni din ele.

Termenii

în programare, implicit este adesea folosit pentru a se referi la ceva care este făcut pentru tine de alt cod în spatele scenei., Explicit este abordarea manuală a realizării schimbării pe care doriți să o aveți prin scrierea instrucțiunilor care trebuie făcute în mod explicit. În imaginea mai mică, implicite și explicite sunt adesea termeni folosiți pentru tipurile de turnare în tipul pe care ar trebui să fie. În imaginea de ansamblu, este posibil să vorbiți despre convenție peste configurație, unde convenția este ceea ce se face implicit pentru dvs. printr-o bază de cod sau cadru, iar configurația este pur și simplu Setări explicite., există, de asemenea, diferențe de adecvare sau beneficii pentru fiecare utilizare, în funcție de limbajul de programare în cauză și dacă limba este tastată static sau tastată dinamic. De asemenea, depinde dacă lucrurile pot fi deduse dintr-un timp de rulare sau în timpul compilării. Din cauza acestor factori, a susține că o metodologie este mai bună decât alta nu poate fi adevărată decât în contexte înguste, deoarece trebuie să țineți cont de designul limbajelor de programare și al programelor în cauză.,

Un exemplu de implicite și explicite de tip turnare în C este după cum urmează:

int implicit;implicit = 4.5;int explicit;explicit = (int)4.5; 

Aici nume de variabile implicit și explicit s-au definit a fi de tip int. După ce a dat o valoare 4.5 implicite versiune a compilatorului converti ceea ce ar fi în mod normal un float sau double tip la un număr întreg întrucât versiune explicit explicit aruncat la un număr întreg cu utilizarea de (int) fiind ceea ce aruncă tip.,

Static-introduce limbi

În static-introduce limbi, cum ar fi Rugina o majoritate de crearea de valoare și de misiune va avea explicite de tip adnotare cerințele cu o excepție de oriunde compilatorul poate deduce tipul. Următorul este un exemplu care prezintă tipuri explicite și implicite în Rust.

fn add_one(input: u8) -> u8 { input + 1}let four = add_one(3);

aici metodaadd_one este explicită despre tipul de intrare și tipul de ieșire., Numărul 1 adăugate aici este, implicit, a făcut un u8 număr în timpul compilării, deoarece contextul ajută deduce tipul și plus pentru u8 este doar puse în aplicare pentru a lucra cu u8 numere. Ultima linie este implicit tastat pentru a fi un u8 deoarece metoda în sine definește tipul care va fi returnat.ceea ce se poate deduce în rugină este destul de impresionant prin utilizarea genericelor. Dar utilizarea inferenței este limitată la lucruri care pot fi cunoscute la momentul compilării., Dacă nu poate fi cunoscut la momentul compilării, atunci trebuie să definiți în mod explicit tipul în orice punct de atribuire. Ia următoarea metodă definiție:

use std::ops::Add;fn add_both<T: Add>(a: T, b: T) -> T::Output { a + b}

Aici T poate fi orice tip care implementează trăsătură Add. T::Output tip este definită atunci când se Adaugă trăsătură este definit pentru tipul specific și este, în general, același tip ca T se în acest caz. Acum, dacă vom oferi două numere ca parametri compilatorul va deduce tipul să-l.,

let x = add_both(3 , 4 ); // implicit typelet y: u8 = add_both(3u8 , 4u8 ); // explicit typelet z: u32 = add_both(3u32, 4u32); // explicit type

atunci Când am rula codul de mai sus x se deduce a fi de tip i32. y și z exemple nevoie de parametrul de intrare tipuri de a fi cunoscut atunci când condiția de a funcționa ca inferență pentru T::Output nu este neapărat la fel ca ceea ce T se poate deduce ca. Ar implicit i32 și apoi atribuirea unui i32 un u8 sau u32 este pur și simplu greșit.,

limbi tastate dinamic

acum, cu limbi tastate dinamic, trebuie să vă faceți griji mai puțin despre tipuri, în sine, și mai mult despre obiecte implicite sau explicite sau comportament. Modelarea codului în jurul obiectelor care au același comportament este ceea ce este cunoscut sub numele de dactilografiere rață, care este un domeniu superior de gândire în programarea orientată pe obiecte, unde manipularea acestor obiecte este implicită. Întrucât modelarea codul în jurul clase de obiecte specifice este mult ca folosind tastarea explicită sau implicită., Dar când acceptați orice fel de obiect ca intrare, atunci codul din acea secțiune trebuie fie să se ocupe de obiecte diferite în mod explicit, fie să predea această responsabilitate în altă parte.

pentru clarificare, atunci când scrieți cod pentru a gestiona diferite tipuri de lucruri, atunci scrieți cod explicit. Cu toate acestea, atunci când același cod a fost deja scris și îl reutilizați cu un simplu apel de metodă, atunci comportamentul în acest context nou este implicit. Implicit fiind lucrurile făcute ca și cum în mod automat și manipulate în afara domeniului de aplicare curent.,

în Ruby, cele mai multe tipuri au un design pentru conversie explicită sau implicită. Ideea este că metodele de conversie implicite sunt menite să fie utilizate în contexte implicite, iar conversiile explicite sunt destinate dezvoltatorilor să scrie inline în mult mai multe contexte. Permiteți-mi să demonstrez acest lucru prin exemplu.

# explicit"4".to_i + "5".to_i# => 9# implicitclass Seven def to_int 7 endendArray.new(Seven.new)# => 

Aici explicite exemplu, este foarte evident pentru cititor, care ne sunt de conversie String obiecte pentru un Integer obiect și efectuarea de adunare între cele două., Și implicit exemplu nu este atât de evident pentru cititor ca Array.new metoda implicit solicită to_int metoda pe orice parametru este dat. Clasa întreagă are metoda to_int definită pe fiecare instanță a acesteia, care pur și simplu returnează auto. Dacă scrieți 42.to_intpur și simplu primiți înapoi 42. Această utilizare a utilizării conversiei implicite ca gardă de intrare pentru apelurile de metodă este un design excelent pentru siguranța tipului prin proiectare. Iată ce se întâmplă dacă îi dați un obiect greșit ca intrare care nu definește to_int.,

Array.new("32")# TypeError (no implicit conversion of String into Integer)

Nu numai că nu ne dă un mesaj de ajutor pe care o conversie implicit a fost încercat și spune clasa de obiect dat și clasa de obiect se așteaptă. Metode de conversie implicite în Ruby este un mod de a spune acest obiect este într-adevăr ceea ce vă așteptați. Iar conversia explicită face pur și simplu Conversia la tipul așteptat.Ruby are opțiuni implicite și explicite pentru multe dintre obiectele sale de bază.,

Ruby are, de asemenea, câteva clase cu metode de clasă care fie vor face o conversie implicită, fie vor returna zero și numele metodei este try_convert.

putem urma exemplul lui Ruby cu Array.new și avem o bună pază pentru tipul de parametri de intrare care ni se dau prin proiectarea conversiilor implicite pentru propriile tipuri personalizate. Pentru acest exemplu, deoarece to_f este o conversie explicită la un Float număr în Ruby vom folosi as_ ca un prefix în loc de to_., Iată un exemplu de bază al implicității ca model pentru siguranță.acum, acest lucru va ajuta alți dezvoltatori care folosesc clasa Bar să nu o treacă ca parametru incompatibil. Urmează o convenție în limba Ruby și ar trebui să fie mult mai ușor pentru dezvoltatori să înțeleagă cu erori mai utile. Când aveți alte obiecte pe care doriți să le convertiți într-un obiect Foo, puteți defini o metodă as_f pentru o conversie explicită, iar dezvoltatorul care folosește acel obiect nou va fi explicit în utilizarea sa Bar.new(Baz.new.as_f)., Acest lucru asigură că codul va funcționa atât de mult încât Barși Foo funcționează deja.

rezumat

actul de codificare implicită și explicită și codul implicit și explicit este definit de contextul executării comportamentului suplimentar sau a setării / turnării tipului. În mod specific, metodele implicite sau explicite sunt definite de contextele în care sunt destinate a fi utilizate. Codul Implicit poate fi o experiență foarte frumoasă dacă lucrurile sunt bine numite, deoarece păstrează lucrurile simple.,

cu toate acestea, codul implicit, codul care face lucruri în spatele scenei pentru dvs., poate fi, de asemenea, o problemă dificil de rezolvat atunci când este făcut greșit. Codul Explicit face ca Codul să fie clar atunci când îl priviți, deoarece specificul a ceea ce se face este deja stabilit în fața dvs. și nu trebuie să urmăriți problemele în altă parte, dar, în general, înseamnă mult mai multă muncă scriind-o. Pe cont propriu, poate deveni copleșitoare, astfel încât găsirea unui echilibru adecvat între cele două este adesea cea mai bună soluție. Fii explicit când trebuie și implicit când conceptele de proiectare și denumire sunt ușor de înțeles., Aceasta va face pentru o experiență de dezvoltare mai convenabil.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *