[PYTHON] Découvrez les fonctions les plus yabe sur github

introduction

L'autre jour, au travail, je me suis enthousiasmé par l'histoire de "la fonction la plus yabe que j'ai réparée ou écrite". Tout le monde a beaucoup parlé, mais après tout c'était une victoire écrasante pour la "fonction de boucle principale du modèle de commande (1500 lignes)" que j'ai écrit. Pourquoi avez-vous écrit un tel code?

Donc, aujourd'hui je vais découvrir "la meilleure fonction au monde" de github pour guérir ma fierté blessée. En d'autres termes, "je vais voir une fonction Yabe plutôt qu'une fonction que j'ai écrite."

Conclusion

Méthode

Qu'est-ce qu'une fonction yabe?

Ici, la fonction Yabe est identifiée par la procédure suivante.

  1. Identifier les «fonctions à complexité cyclique élevée». La complexité circulaire a été calculée à l'aide de lizard.
  2. Vraiment restreindre aux fonctions Yabe Regardez à l'intérieur et excluez le code de test ou le code généré automatiquement.

Déterminer le référentiel cible

Utilisation de github-trending-api Extrayez les projets les plus populaires dans les langues suivantes pour le mois dernier et recherchez la fonction Yabe.

code

Je ne fais aucun test cycro

résultat

1. Identifier les "fonctions à complexité cyclique élevée"

Les 10 principales fonctions avec une complexité élevée sans tenir compte du contenu du code sont les suivantes.

No Complexité Nom de la fonction Nom du projet Nom de la langue
1 5505 jo node javascript
2 2013 matchIcon edex-ui javascript
3 2001 foo llvm-project cpp
4 1947 *global* node javascript
5 1868 cv::agast_cornerScore<AgastFeatureDetector::AGAST_7_12s> opencv cpp
6 1647 int kubernetes go
7 1532 foo llvm-project cpp
8 1509 OpenTag SuiteCRM php
9 1504 foo llvm-project cpp
10 1453 iT node javascript

2. Vraiment restreindre aux fonctions Yabe

Si vous regardez réellement le contenu du code ...

No Complexité Nom de la fonction Nom du projet Nom de la langue Remarques
1 5505 jo node javascript Parce qu'il est obscurci
2 2013 matchIcon edex-ui javascript Alignez simplement 2000 déclarations if
3 2001 foo llvm-project cpp Pour tester&&Alignez simplement 2000
4 1947 *global* node javascript Parce qu'il est obscurci
5 1868 cv::agast_cornerScore<AgastFeatureDetector::AGAST_7_12s> opencv cpp Ce mec est mauvais
6 1647 int kubernetes go Code généré automatiquement par le générateur d'analyseur
7 1532 foo llvm-project cpp Code de test
8 1509 OpenTag SuiteCRM php Ce mec est mauvais
9 1504 foo llvm-project cpp Code de test
10 1453 iT node javascript Parce qu'il est obscurci

Conclusion

Comme décrit dans la colonne des remarques, les deux suivantes sont vraiment des fonctions yabe. Voir le code réel de vos propres yeux! (Trop long pour s'étirer)

No Complexité Nom de la fonction Nom du projet Nom de la langue Remarques
5 1868 cv::agast_cornerScore<AgastFeatureDetector::AGAST_7_12s> opencv cpp Ce mec est mauvais
8 1509 OpenTag SuiteCRM php Ce mec est mauvais

Comparaison de la complexité entre les langues

J'ai tracé la distribution de la complexité pour chaque langue.

Terrain de violon avec valeurs aberrantes

alt

Parcelle de violon sans valeurs aberrantes

En excluant les valeurs en dehors de la plage de moyenne ± 2 * écart type pour chaque langue, il se présente comme suit. alt

finalement

Pardonne-moi si je fais une erreur ...

Recommended Posts

Découvrez les fonctions les plus yabe sur github
Cloner le référentiel github sur le notebook Jupyter
Essayez CI le code python poussé sur GitHub.
Jusqu'à ce que la documentation Sphinx soit publiée sur GitHub
Remarques sur les fonctions de la famille SciPy.linalg
Suivez le mystère du pédant orthographique apparu soudainement sur GitHub !!
Trouvez le commit le plus F-word sur Linux (git et versions ultérieures)