Ruby: Load vs. Require vs. Include
jako začátečník v čemkoli je důležité nejen praktikovat cokoli, na čem byste mohli začít, ale také studovat práci lidí pokročilejších v oboru. Jako někdo relativně nový v programování, rád čtu kód od programátorů na jakékoli úrovni, jen abych objevil různé přístupy k podobným problémům.
Jeden do očí bijící rozdíl jsem si všiml, mezi svůj kód a kód pro pokročilejší programátory je struktura souboru a počet souborů, ale pokud chcete dát štítek na to, že byli cvičit Oddělení Obav, a já jsem nebyl. Věděl jsem, že to byl důležitý koncept v programování, ale, abych byl upřímný, ta věc zakopnutí mě nejvíce v praxi SoC je, že jsem prostě nebylo pohodlné použití Zatížení, Vyžadují, a Patří — aka, věci, které odkaz na soubory ve vašem programu spolu, a se SoC mnohem jednodušší implementovat.
pojďme se podívat do zákulisí těchto tří metod a jak mohou posunout vaše programy na další úroveň.
Include
Tento je poměrně přímočarý. Pokud jste napsali několik tříd, které sdílejí podobné metody, můžete tyto metody extrahovat do modulu. Jakmile jsou metody zapsány do modulu, můžete tento modul „zahrnout“ do kterékoli třídy, která by mohla potřebovat tyto metody vyvolat. Není třeba, aby tyto metody visí kolem. Níže je uveden krátký příklad toho, jak byste to napsali:
class Chocolate
include IceCream
endclass Vanilla
include IceCream
endmodule IceCream
def ice_cream
end
end
nyní mají obě třídy přístup k metodě ice_cream
pomocí include
.
Load
Zatímco include
ukazuje, jak můžeme použít použít funkci z jiného Ruby třídy, podívejme se, jak load
má podobné funkce, jen místo určení třídy, můžeme určit soubory z našich projektů. Tato a naše další metoda, require
, umožňují programu oddělit obavy jen několika řádky v horní části souborů.
základní myšlenkou SOC je snížit aspekt vašeho programu tak, aby skutečně dělal jen jednu věc. Děláme to, když refaktorujeme kód, takže naše metody a funkce dělají jen jednu věc. Totéž platí pro naše soubory.
věc, kterou si pamatujete s load
je, že soubor, který předáváte, bude skutečně načten pokaždé, když je vyvolán. Pokud tedy máte knihovnu funkcí, kterou chcete použít, nezapomeňte, že pokaždé, když se závislý soubor nazývá soubor předaný load
je také dobře načten. Pokud se z jakéhokoli důvodu soubor ve vaší aplikaci/programu dynamicky mění a používá se jako závislost na jiných souborech, měli byste zvážit použití load
. V opačném případě může mít load
nepříznivé účinky na výkon aplikace vzhledem k tomu, kolikrát je soubor načten.
Vyžaduje
Požadovat, je hodně jako load
, ale hlavní rozdíl je, že vyžadují pouze načíst prošel v souboru jednou, a pak si uvědomit, že soubor byl načten. Z tohoto důvodu je require
populárnější volbou, pokud ve svém programu nebo aplikaci používáte knihovny třetích stran. Počkat, knihovny třetích stran? Zní to jako … drahokamy! Přesně tak! Jakmile nainstalujete drahokam do svého adresáře nebo jej zadáte do svého Gemfile, stačí „vyžadovat“tento drahokam v horní části souboru pomocí funkce tohoto drahokamu. Je to hračka.
Teď, vím, že require
může to znít jako trochu Ruby kouzla, takže pojďme odhalit neopěvovaný hrdina ve všech takto: $LOAD_PATH
.
$LOAD_PATH
je globální proměnná dodávaná s Ruby. Pokud jste zatížení IRB z vašeho terminálu a typ v $LOAD_PATH
, dostanete něco, co se podobá tomuto:
je To jen pole absolutní cesty. A když nainstalujete drahokam, Ruby přidá absolutní cesty těchto knihoven drahokamů do vašeho $LOAD_PATH
. To dává větší smysl, že? Ruby může jednoduše volání funkce require
je požadovat od již má absolutní cestu, aby si to uložené v $LOAD_PATH
.
doufal jsem, že tento příspěvek použiji jako prostředek k prozkoumání toho, proč bychom tyto metody používali a jak nám pomáhají stát se lepšími vývojáři. Pokud vás zajímá více “ jak “ tyto metody fungují, může být vyžadován další výzkum.