À l'origine, je l'ai écrit dans le commentaire de l'article suivant, mais je pensais que c'était trop agressif pour l'écrire dans le commentaire, alors je l'ai déplacé ici. Maîtriser les types avec Python [compatible Python 3.9]
C'est un article bien connu qu'il ne fera que provoquer une controverse religieuse.
Récemment, les avantages du typage statique (ou les inconvénients du typage dynamique?) Sont devenus populaires, et TypeScript est devenu populaire, et même Python peut effectuer une vérification de type statique. Cependant, je fais personnellement un "typage inutile" (dans certains cas, plutôt "un typage potentiellement dangereux") (en particulier dans la fonction de vérification de type statique qui a été ajoutée plus tard au langage de typage dynamique). J'ai l'impression que le code augmente.
Maîtriser les types avec Python [compatible Python 3.9] Dans l'article
def add(a, b):
"""Renvoie le résultat de l'ajout d'arguments"""
return a + b
Avec un moule
def add_type(a: int, b: int) -> int:
"""Renvoie le résultat de l'ajout d'arguments"""
return a + b
Un exemple apparaîtra.
Cependant, dans cet exemple, je pense que le type ne doit pas être écrit ***. Il n'est pas bon de spécifier le type inutilement. Dans ce cas, tout type qui a du sens pour l'opération ʻa + b` fera l'affaire, et je pense que c'est un "mauvais" style de programmation de spécifier int. Bien sûr, je comprends que ce qui précède n'est qu'un exemple, mais je pense toujours que cet exemple est "inapproprié comme exemple".
Dans quels cas est-il gênant de spécifier> int?
Après avoir compris que la réalité ne suffit pas avec la théorie idéale, si vous parlez de théorie idéale,
*** Doit être programmé pour les interfaces, pas pour les types de béton ***
C'est pourquoi.
Dans cet exemple, la fonction ʻadd est applicable à tout objet qui a la propriété (interface) qu'il peut être ajouté avec l'opérateur
+ ʻopérateur. Bien entendu, le traitement spécifique effectué par l'opérateur +
diffère selon chaque type spécifique (polymorphisme), mais la fonction ʻadd est programmée pour "l'interface" appelée l'opérateur
+ ʻopérateur. Par conséquent, je ne connais pas le contenu de traitement spécifique de l'opérateur «+» (ou plutôt, il ne devrait pas dépendre du contenu de traitement spécifique de l'opérateur «+» ***). C'est pourquoi.
Dans cet exemple, vous ne devez pas être lié au type concret ʻint. Ensuite, si vous voulez le changer en
float au lieu de ʻint
plus tard, vous devez remplacer tous les mots-clés ʻint du programme par
float`. Sera.
D'ailleurs, je ne pense pas qu'il soit nécessaire de restreindre les arguments de la fonction ʻadd à des valeurs numériques. L'argument de la fonction ʻadd
n'a besoin que d'avoir une interface appelée l'opérateur +
défini, donc la fonction ʻadd définit la
str,
list, et même la méthode spéciale
add. Il n'y a rien de mal à entrer dans votre propre classe. Pour être plus précis, en premier lieu, la fonction ʻadd
est *** should *** qui est écrite pour fonctionner avec n'importe quel objet qui a l'opérateur +
.
En fait, de nos jours, dans le monde des langages à typage statique (en particulier en C ++ et Rust), je ne tape pas autant que possible (laissez le compilateur déduire automatiquement le type), et même si j'ose taper, c'est aussi générique que possible. Le style de programmation de la création d'un type se répand.
D'un autre côté, récemment, je suis venu voir du code qui est tapé en Python, mais je me demande souvent pourquoi un tel "typage inutile" est fait. Pour être honnête, vous avez l'impression de regarder "du code C ++ vieux de 30 ans". Les programmeurs Python vont-ils recommencer les 30 dernières années d'essais et d'erreurs (et le changement de paradigme qui en résulte) dans le monde des langages statiquement typés? J'ai pensé.
Écrire ceci peut tout à fait conduire à une guerre religieuse, mais dans mon "parti pris", les gens qui veulent taper en Python sont ceux qui sont nouveaux sur Python (ou C ++ il y a 20-30 ans). Ceux qui se sont arrêtés à la connaissance de Java), mais plutôt ceux qui sont récemment passés des langages à typage statique à Python, ont l'impression qu'ils sont réticents à taper en Python.
Recommended Posts