2010-09-20 6 views
2

Ceci est une simple question de style. Quel est le moyen préféré pour déclarer les contrôles d'accès en code Ruby?préféré façon Ruby-ist de déclarer les contrôles d'accès

Exemple A:


#!/usr/bin/env ruby 

class MyClass 
    def method1 # this is public by default 
     #... 
    end 
    protected  # subsequent methods will be protected 
     def method2 
      #... 
     end 
    private  # subsequent methods will be private 
     def method3 
      #... 
     end 
    public   # subsequent methods will be public 
     def method4 
      #... 
     end 
end 

ou Exemple B:


#!/usr/bin/env ruby 

class MyClass 
    def method1 
     #... 
    end 
    def method2 
     #... 
    end 
    def method3 
     #... 
    end 
    def method4 
     #... 
    end 
    public :method1, :method4 
    protected :method2 
    private :method3 
end 

Syntaxiquement, I 'exemple B. A introduit une ambiguïté entre public méthodes déclarées après protected/private méthodes, bien que je vois aucune raison pourquoi vous ne devriez pas simplement appeler method1 après l'avoir spécifié comme public.

Ce n'est cependant pas à ce que je l'aime. Quelle est la norme définie par l'industrie pour cela?

Répondre

2

Le seul endroit que j'ai jamais vu la deuxième méthode utilisée est dans les livres Ruby, et seulement en tant que « Vous pouvez aussi le faire » par exemple.

Et vous voyez très rarement l'utilisation de « public » comme dans la première méthode, car il est la valeur par défaut et les gens définissent simplement leurs méthodes publiques avant les déclarations protégées/privées.

+0

Merci. Cet exemple provient en effet du livre Programming Ruby 2nd Edition. –

1

Je pense que cela dépend vraiment de votre style de codage. Si vous lisez « Clean Code » par l'oncle Bob, vous (que j'ai personnellement aimé), vous êtes encouragés à écrire des méthodes ou des fonctions qui sont appelées par l'autre étroitement ensemble. Dans ce cas, en utilisant la visibilité d'une méthode comme dans l'exemple B serait logique:

class Foo 
    def method1 
    method2 
    end 

    def method2 
    .. 
    end 
    private :method2 
end 

Oncle Bob fait en fait un bon exemple pour avoir des méthodes proches, car cela empêche le défilement dans votre code.

+0

Merci pour le lien. Je passe d'outils d'automatisation de codage pour mes serveurs et utilitaires pour Nagios et moi-même à programmeur à temps plein, donc je suis en train de combler les lacunes dans mes connaissances. Chaque idée est précieuse pour le moment. –

Questions connexes