48 votes

Devrais-je définir une méthode principale dans mes scripts ruby?

En python, un module de ne pas avoir avoir une fonction principale, mais il est de pratique courante d'utiliser la marche suivante:

def my_main_function():
    ... # some code

if __name__=="__main__":  # program's entry point
    my_main_function()

Je sais que Ruby n'a pas l' ai d'avoir un main méthode soit, mais est-il une sorte de meilleures pratiques à suivre? Dois-je le nom de ma méthode main ou quelque chose?

La page de Wikipédia sur les principales méthodes n'a pas vraiment m'aider.


Comme une note, j'ai également vu la suite de l'idiome en python:

def my_main_function(args=[]):
    ... # some code

if __name__=="__main__":  # program's entry point
    import sys
    sys.exit(my_main_function(sys.argv))

76voto

Allyn Points 6568

J'utilise habituellement

 if __FILE__ == $0
  x = SweetClass.new(ARGV)
  x.run # or go, or whatever
end
 

Alors oui, vous pouvez. Cela dépend de ce que vous faites.

9voto

Rein Henrichs Points 3592

Vous devez placer le code de bibliothèque dans lib / et les exécutables, qui nécessitent un code de bibliothèque, dans bin /. Cela présente l’avantage supplémentaire d’être compatible avec la méthode d’emballage de RubyGems.

Un modèle courant est lib / application.rb (ou de préférence un nom plus approprié pour votre domaine) et bin / application, qui contient:

 require 'application'
Application.run(ARGV)
 

3voto

Alex Lebedev Points 4273

Ma règle personnelle est: le moment

 if __FILE__ == $0
    <some code>
end
 

prend plus de 5 lignes, je l’extrais en fonction main . Cela est vrai pour les codes Python et Ruby. Sans ce code, tout semble mal structuré.

-1voto

Ian Terrell Points 6551

Non.

Pourquoi ajouter une couche supplémentaire de complexité sans aucun avantage réel? Aucune convention pour les Rubyists ne l'utilise.

J'attendrais la deuxième fois que vous deviez l'utiliser (ce qui se produirait probablement moins souvent que vous ne le pensez), puis le refactoriser afin qu'il soit réutilisable, ce qui impliquerait probablement une construction comme celle ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X