Articles

Ruby: Load vs. Require vs. Include

como um iniciante em qualquer coisa, é importante não apenas praticar o que quer que seja que você possa estar começando, mas também estudar o trabalho de pessoas mais avançadas no campo. Como alguém relativamente novo na programação, eu gosto de ler código de programadores em qualquer nível, apenas para descobrir diferentes abordagens para problemas semelhantes.

Uma gritante diferença que notei entre o meu e o código dos mais avançados, programadores é a estrutura do arquivo e o número de arquivos, mas se você quiser colocar um rótulo, eles estavam praticando a Separação de Preocupações, e eu não estava. Eu sabia que este era um conceito muito importante em programação de computadores, mas, para ser honesto, a coisa tropeçar-me mais na prática do SoC é que eu não estava confortável usando de Carga, Exigir, e Incluem — aka, as coisas que o link dos arquivos em seu programa juntos, e fazer SoC muito mais fácil de implementar.

vamos dar uma olhada nos bastidores destes três métodos e como eles podem levar seus programas para o próximo nível.

incluem

Este é bastante simples. Se você escreveu várias classes que compartilham métodos semelhantes, você pode extrair esses métodos em um módulo. Uma vez que os métodos são escritos no módulo, você pode “incluir” esse módulo em qualquer uma das classes que possam precisar recorrer a esses métodos. Não há necessidade de manter esses métodos por perto. Abaixo está um pequeno exemplo de como você iria escrevê-lo:

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

Now both classes have access to the ice_cream method through use ofinclude .

Carregar

Enquanto include demonstra como podemos usar a funcionalidade de outra classe Ruby, vamos ver como load tem uma funcionalidade semelhante, só que em vez de especificação de classes, estamos especificando arquivos do nosso diretório de projeto. Este, e nosso próximo método, require , permite que um programa tenha uma separação de preocupações com apenas algumas linhas extras no topo de seu(s) Arquivo (s).

A ideia básica com SoC é resumir um aspecto do seu programa de modo que ele realmente só faz uma coisa. Fazemos isto quando modificamos o código para que os nossos métodos e funções façam apenas uma coisa. O mesmo se aplica aos nossos ficheiros.

a coisa a lembrar com load é que o arquivo que você está passando será realmente carregado cada vez que é chamado. Então, se você tem uma biblioteca de funcionalidade que você está esperando usar, Lembre-se que cada vez que o arquivo dependente é chamado de arquivo passado para load também está, bem, carregado. Se, por qualquer razão, um ficheiro no seu app/programa estiver a mudar dinamicamente, e for usado como dependência de outros ficheiros, deverá considerar a utilização de load . Caso contrário, load pode ter efeitos adversos no desempenho do seu aplicativo devido ao número de vezes que o arquivo é carregado.

Require

Require é um pouco como o load , mas a principal diferença é que exigem somente irá carregar o passado no arquivo uma vez e, em seguida, lembre-se de que o arquivo tenha sido carregado. Por esta razão, require é a opção mais popular quando você está usando bibliotecas de terceiros em seu programa ou aplicação. Espera, bibliotecas de terceiros? Parecem pedras preciosas! Isso mesmo! Uma vez que você instala uma gema em seu diretório ou especificá-lo em seu Gemfile, você só precisa “exigir” que gema no topo do arquivo usando a funcionalidade dessa gema. É canja.

Agora, eu sei require pode soar como um pouco de magia de Ruby, por isso vamos desenterrar o herói não enterrado em tudo isto: $LOAD_PATH.

$LOAD_PATH é uma variável global que vem com Ruby. Se carregar IRB do seu terminal e digitar em $LOAD_PATH , irá obter algo que se assemelhe a isto:


é apenas um conjunto de caminhos absolutos. E quando você instala uma gema, Ruby adiciona os caminhos absolutos dessas bibliotecas de gema ao seu $LOAD_PATH. Isso faz mais sentido, certo? Ruby pode simplesmente chamar a funcionalidade require está solicitando uma vez que já tem o caminho absoluto para armazená-lo em $LOAD_PATH .

eu estava esperando para usar este post como um meio de explorar mais de por que iríamos usar esses métodos e como eles nos ajudam a nos tornar melhores desenvolvedores. Se você está interessado em mais do” como ” estes métodos funcionam, a pesquisa adicional pode ser … necessária.