Ruby: Load vs. Require vs. Include
kezdőként bármiben, fontos, hogy ne csak gyakorolj, bármi is legyen, hanem tanulmányozd a területen fejlettebb emberek munkáját is. Mivel viszonylag új vagyok a programozásban, szeretek bármilyen szintű programozóktól kódot olvasni, csak azért, hogy felfedezzem a hasonló problémák különböző megközelítéseit.
az egyik szembetűnő különbség, amit észrevettem a kódom és a fejlettebb programozók kódja között, a fájlszerkezet és a fájlok száma, de ha címkét akarsz tenni rá, ők az aggodalmak szétválasztását gyakorolták, én pedig nem. tudtam, hogy ez egy fontos koncepció a számítógépes programozásban, de őszintén szólva, a SoC gyakorlásában a legjobban az zavar, hogy egyszerűen nem voltam kényelmes a Load, Require és Include — vagyis azokat a dolgokat használni, amelyek összekapcsolják a program fájljait, és így sokkal könnyebb megvalósítani a SoC-t.
nézzük meg a színfalak mögött ezt a három módszert, és hogyan tudják a programokat a következő szintre vinni.
Include
Ez meglehetősen egyszerű. Ha több osztályt írt, amelyek hasonló módszereket osztanak meg, akkor ezeket a módszereket kibonthatja egy modulba. Miután a metódusok be vannak írva a modulba, “beillesztheti” azt a modult bármelyik osztályba, amelynek esetleg meg kell hívnia ezeket a módszereket. Nem kell tartani ezeket a módszereket lógott. Az alábbiakban egy rövid példa arra, hogyan írná ki:
class Chocolate
include IceCream
endclass Vanilla
include IceCream
endmodule IceCream
def ice_cream
end
end
mostantól mindkét osztály hozzáfér aice_cream
metódushoz ainclude
használatával .
Load
míg ainclude
bemutatja, hogyan használhatjuk egy másik Ruby osztály Használati funkcióit, nézzük meg, hogy aload
hasonló funkcióval rendelkezik, csak az osztályok megadása helyett a projektkönyvtárunkból adunk meg fájlokat. Ez és a következő módszerünk, a require
lehetővé teszi a program számára , hogy a fájl(ok) tetején néhány extra sorral elkülönítse az aggályokat.
a SoC alapötlete az, hogy a program egy aspektusát úgy szűkítse le, hogy valójában csak egy dolgot csináljon. Ezt akkor tesszük, amikor újraírjuk a kódot, így a módszereink és a funkcióink csak egy dolgot tesznek. Ugyanez igaz a fájljainkra is.
a dolog, hogy emlékezzen a load
, hogy a fájl halad a ténylegesen betöltődik minden alkalommal, amikor hívják. Tehát, ha van egy függvénykönyvtár, amelyet használni szeretne, ne feledje, hogy minden alkalommal, amikor a függő fájlt hívják, a load
fájl is, nos, betöltött. Ha valamilyen oknál fogva az alkalmazás/program egy fájlja dinamikusan változik, és más fájloktól való függőségként használják, fontolja meg a load
használatát . Ellenkező esetben a load
a fájl betöltésének száma miatt káros hatással lehet az alkalmazás teljesítményére.
Require
a Require nagyon hasonlít load
, de a fő különbség az, hogy a require csak egyszer tölti be az átadott fájlt, majd ne feledje, hogy a fájl betöltődött. Ezért arequire
a népszerűbb lehetőség, ha harmadik féltől származó könyvtárakat használ a programban vagy alkalmazásban. Várjunk csak, harmadik fél könyvtárak? Úgy hangzik, mint…drágakövek! Így van! Miután telepített egy drágakövet a könyvtárába, vagy megadta azt a Gemfile-ben, csak azt a drágakövet kell “megkövetelnie” a fájl tetején, az adott drágakő funkcionalitásának felhasználásával. Gyerekjáték.
most már tudom, hogyrequire
talán úgy hangzik, mint egy kis Rubin varázslat, ezért tárjuk fel az el nem énekelt hősöt ebben az egészben:$LOAD_PATH
.
$LOAD_PATH
egy globális változó, hogy jön a Ruby. Ha betölti az IRB-t a terminálról , és beírja a $LOAD_PATH
parancsot, akkor valami ehhez hasonlót kap:
Ez csak egy sor abszolút útvonal. A gem telepítésekor a Ruby hozzáadja a gem könyvtárak abszolút elérési útjait a $LOAD_PATH
– hez. Ennek több értelme van, igaz? A Ruby egyszerűen felhívhatja a require
funkciót, mivel már rendelkezik az abszolút elérési úttal a $LOAD_PATH
tárolásához .
reméltem, hogy ezt a bejegyzést eszközként használhatom arra, hogy többet megtudjak arról, miért használjuk ezeket a módszereket, és hogyan segítenek nekünk jobb fejlesztőkké válni. Ha érdekli a “hogyan” ezek a módszerek működnek, további kutatásokra lehet szükség.