Articles

Ruby: Load vs. Require vs. Include

koska aloittelija missä tahansa, on tärkeää ei vain harjoitella mitä se on ehkä aloittaa, mutta myös tutkia työtä ihmisiä kehittyneempiä alalla. Koska joku suhteellisen uusi ohjelmointi, haluan lukea koodia ohjelmoijien millään tasolla, vain löytää erilaisia lähestymistapoja samanlaisia ongelmia.

yksi räikeä ero, jonka huomasin koodini ja kehittyneempien ohjelmoijien koodin välillä, on tiedostorakenne ja tiedostojen määrä, mutta jos haluat laittaa etiketin siihen, he harjoittelivat huolien erottamista, enkä minä ollut. tiesin, että tämä oli tärkeä käsite tietokoneohjelmoinnissa, mutta ollakseni rehellinen, se asia, joka kompastutti minut eniten harjoitellessani SoC: tä, on se, että en vain ollut mukava käyttää Load, Require, and Include — eli asioita, jotka linkittävät ohjelmasi tiedostoja yhteen ja tekevät SoC: stä niin paljon helpomman toteuttaa.

katsokaamme kulissien taakse näitä kolmea tapaa ja miten ne voivat viedä ohjelmasi seuraavalle tasolle.

sisältävät

Tämä on melko suoraviivainen. Jos olet kirjoittanut useita luokkia, jotka jakavat samanlaisia menetelmiä, voit poimia nämä menetelmät moduuliin. Kun menetelmät on kirjoitettu moduuliin, voit ”sisällyttää” että moduuli mihin tahansa luokkiin, jotka saattavat joutua kutsumaan näitä menetelmiä. Niitä menetelmiä ei tarvitse pitää esillä. Alla on lyhyt esimerkki siitä, miten kirjoittaisit sen ulos:

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

nyt molemmilla luokilla on käytössään ice_cream menetelmä include .

Load

vaikka include osoittaa, miten voimme käyttää toisen Ruby-luokan toimintoja, katsotaan, miten load on samanlainen toiminnallisuus, mutta luokkien määrittämisen sijaan määritämme tiedostoja projektihakemistostamme. Tämä, ja seuraava menetelmämme, require , mahdollistavat ohjelmalle huolien erottelun vain muutamalla ylimääräisellä rivillä tiedoston(tiedostojen) yläosassa.

SoC: n perusidea on tiivistää jokin osa ohjelmastasi niin, että se todella tekee vain yhden asian. Teemme tämän, kun refaktoroimme koodin niin, että menetelmämme ja toimintomme tekevät vain yhden asian. Sama pätee tiedostoihimme.

load on muistettava, että syötettävä tiedosto todella Ladataan joka kerta, kun sitä kutsutaan. Joten, jos sinulla on kirjasto toimintoja haluat käyttää, muista, että joka kerta riippuvainen tiedosto on nimeltään tiedosto siirretään load on myös, hyvin, ladattu. Jos jostain syystä sovelluksen/ohjelman Tiedosto muuttuu dynaamisesti ja sitä käytetään riippuvuutena muista tiedostoista, kannattaa harkita load . Muuten load saattaa vaikuttaa haitallisesti sovelluksen suorituskykyyn johtuen tiedoston latauskertojen määrästä.

vaativat

vaativat on paljon kuin load , mutta suurin ero on se, että vaatimus lataa läpäistyn tiedoston vain kerran, ja muista sitten, että tiedosto on ladattu. Tästä syystä require on suositumpi vaihtoehto, kun käytät kolmannen osapuolen kirjastoja ohjelmassasi tai sovelluksessasi. Hetkinen, kolmansien osapuolten kirjastot? Nuo kuulostavat jalokiviltä! Juuri niin! Kun olet asentanut jalokiven hakemistoosi tai määrittänyt sen Gemfileessäsi, sinun tarvitsee vain ”vaatia”, että jalokivi on tiedoston yläosassa, käyttäen jalokiven toimintoja. Helppo nakki.

nyt tiedän, että require saattaa kuulostaa vähän Rubiinitaikuudelta, joten kaivetaan unsung hero esiin kaikessa tässä: $LOAD_PATH.

$LOAD_PATH on Rubyn mukana tuleva globaali muuttuja. Jos lataat IRB: n päätteestäsi ja kirjoitat $LOAD_PATH , saat jotain, joka muistuttaa tätä:


se on vain joukko absoluuttisia polkuja. Ja kun asennat jalokiven, Ruby lisää kyseisten jalokivikirjastojen absoluuttiset polut $LOAD_PATH. Siinä on enemmän järkeä, eikö? Ruby voi yksinkertaisesti kutsua toiminnallisuutta require pyytää, koska sillä on jo absoluuttinen polku saada se tallennetuksi $LOAD_PATH .

toivoin voivani käyttää tätä viestiä keinona tutkia tarkemmin, miksi käyttäisimme näitä menetelmiä ja miten ne auttavat meitä tulemaan paremmiksi kehittäjiksi. Jos olet kiinnostunut enemmän ”miten” nämä menetelmät toimivat, lisätutkimuksia voidaan… tarvitaan.