Quelle est la différence entre `def` et` defp` dans le framework Phoenix?

Je passe en defp livre de Phoenix Programmation et je me demande quelle est la différence entre defp et defp .

Il y a plusieurs fonctions dans mon contrôleur – la plupart sont des actions comme ceci:

 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 typique du contrôleur 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 dans un contrôleur dans Phoenix Framework.

    De la documentation d’Elixir sur les fonctions des modules :

    A l’intérieur d’un module, on peut définir des fonctions avec def/2 et des fonctions privées avec defp/2 . Une fonction définie avec def/2 peut être appelée à partir d’autres modules alors qu’une fonction privée ne peut être appelé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 dans un contrôleur dans Phoenix Framework.

    def fonctions def d’un module peuvent être appelées depuis d’autres modules, alors que les fonctions defp sont privées ou ne peuvent pas être appelées par 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 def parente 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 cela avec un parsingur pour les repositorys auprès de la SEC: SEC Company Filings Parser . La méthode principale def englobe toutes les fonctions privées qu’aucun autre module n’a besoin de connaître.