Je passe en revue le livre Programming Phoenix et je me demande quelle est la différence entre def
et defp
.
Il y a plusieurs fonctions dans mon contrôleur - la plupart sont des actions comme celle-ci:
def new (conn, _params) do
...
end
Le livre m'a fait créer une autre fonction dans ce contrôleur qui n'est pas une action de contrôleur typique comme celle-ci:
defp user_videos(user) do
...
end
Donc, ma question est de savoir comment savoir quand utiliser defp
et quand utiliser def
lors de la définition d'une fonction à l'intérieur d'un contrôleur dans le Phoenix Framework.
De documentation d'Elixir sur les fonctions des modules :
À l'intérieur d'un module, nous pouvons définir des fonctions avec
def/2
et fonctions privées avecdefp/2
. Une fonction définie avecdef/2
peut être invoqué à partir d'autres modules alors qu'une fonction privée ne peut être invoquée que localement.
Si vous avez d'autres questions, n'hésitez pas à lire cette documentation.
Donc, ma question est de savoir comment savoir quand utiliser defp et quand utiliser def lors de la définition d'une fonction à l'intérieur d'un contrôleur dans le Phoenix Framework.
Les fonctions def
d'un module peuvent être appelées à partir d'autres modules, tandis que les fonctions defp
sont privées ou ne peuvent pas être appelées à partir d'autres modules. Comment savoir quand utiliser def
et quand utiliser defp
? Cela dépend de ce que les autres modules peuvent ou non avoir besoin de savoir. Un modèle de conception courant consiste pour un module à fournir une fonction parent def
qui encapsule tout le comportement de ses fonctions defp
:
defmodule MyModule do
def function do
# call all the defp functions below to do something
end
defp function2 do
# do something that no other module cares about or needs to know about
end
defp function3 do
# do something that no other module cares about or needs to know about
end
defp function4 do
# do something that no other module cares about or needs to know about
end
end
Voici un exemple de ceci avec un analyseur pour les dépôts SEC: Analyseur de dépôts SEC . La méthode principale def
enveloppe toutes les fonctions privées qu'aucun autre module n'a vraiment besoin de connaître.