Articles

Ruby: Load vs. Require vs. Include

ca începător în orice, este important nu doar să exersezi orice ai putea începe, ci și să studiezi munca oamenilor mai avansați în domeniu. Ca cineva relativ nou la programare, îmi place să citesc codul de la programatori la orice nivel, doar pentru a descoperi abordări diferite la probleme similare.

o diferență evidentă pe care am observat — o între codul meu și Codul programatorilor mai avansați este structura fișierelor și numărul de fișiere, dar dacă doriți să puneți o etichetă pe ea, ei practicau separarea preocupărilor, iar eu nu. știam că acesta este un concept important în programarea computerului, dar, ca să fiu sincer, lucrul care mă împiedică cel mai mult în practicarea SoC este că pur și simplu nu eram confortabil să folosesc Load, Require și includ-aka, lucrurile care leagă fișierele din programul dvs. și fac SoC mult mai ușor de implementat.

Să aruncăm o privire în culise la aceste trei metode și cum pot duce programele dvs. la nivelul următor.

Include

acesta este destul de simplu. Dacă ați scris mai multe clase care împărtășesc metode similare, puteți extrage aceste metode într-un modul. Odată ce metodele sunt scrise în modul, ai putea „include” acel modul în oricare dintre clasele care ar putea avea nevoie pentru a apela la aceste metode. Nu este nevoie să păstrați aceste metode agățate. Mai jos este un scurt exemplu despre cum l-ați scrie:

class Chocolate
include IceCream
endclass Vanilla
include IceCream
endmodule IceCream
def ice_cream
end
end

acum ambele clase au acces laice_cream metoda prin utilizareainclude .

Load

în timp ceinclude demonstrează modul în care putem folosi funcționalitatea de utilizare dintr-o altă clasă Ruby, să vedem cumload are o funcționalitate similară, doar că în loc să specificăm clase, specificăm fișiere din directorul nostru de proiect. Aceasta și următoarea noastră metodă, require, permit unui program să aibă o separare a preocupărilor cu doar câteva linii suplimentare în partea de sus a fișierelor dvs.

ideea de bază cu SoC este de a reduce un aspect al programului dvs., astfel încât într-adevăr să facă un singur lucru. Facem acest lucru atunci când refactorăm codul, astfel încât metodele și funcțiile noastre să facă un singur lucru. Același lucru este valabil și pentru fișierele noastre.

lucrul de reținut cuload este că fișierul pe care îl transmiteți va fi de fapt încărcat de fiecare dată când este apelat. Deci, dacă aveți o bibliotecă de funcționalități pe care sperați să o utilizați, amintiți-vă că de fiecare dată când fișierul dependent este numit fișierul trecut la load este, de asemenea, încărcat. Dacă, din orice motiv, un fișier din aplicația/programul dvs. se schimbă dinamic și este utilizat ca dependență de alte fișiere, ar trebui să luați în considerare utilizarea load . În caz contrar, load poate avea efecte adverse asupra performanței aplicației dvs. din cauza numărului de încărcări ale fișierului.

Require

Require seamănă mult cuload , dar principala diferență este că require va încărca doar fișierul trecut o singură dată și apoi amintiți-vă că fișierul a fost încărcat. Din acest motiv, require este opțiunea mai populară atunci când utilizați biblioteci terțe în programul sau aplicația dvs. Stai puțin, biblioteci terțe? Sună ca niște … pietre prețioase! Așa e! După ce instalați o bijuterie în directorul dvs. sau o specificați în fișierul Gemfile, trebuie doar să „solicitați” acea bijuterie din partea de sus a fișierului folosind funcționalitatea acelei bijuterii. E floare la ureche.

acum, știurequire s-ar putea suna ca un pic de magie Rubin, așa că haideți să descoperi eroul necunoscut în toate acestea:$LOAD_PATH.

$LOAD_PATH este o variabilă globală care vine cu Ruby. Dacă încărcați IRB de la terminalul dvs. și tastați $LOAD_PATH , veți obține ceva care seamănă cu acesta:


este doar o serie de căi absolute. Și când instalați o bijuterie, Ruby adaugă căile absolute ale acestor biblioteci gem la $LOAD_PATH. Asta are mai mult sens, nu? Ruby poate apela pur și simplu funcționalitatea require solicită, deoarece are deja calea absolută pentru ao stoca în $LOAD_PATH .

speram să folosesc această postare ca mijloc de a explora mai mult de ce am folosi aceste metode și cum ne ajută să devenim Dezvoltatori mai buni. Dacă sunteți interesat de mai multe” cum ” funcționează aceste metode, pot fi necesare cercetări suplimentare.