[PYTHON] Entdecken Sie die meisten Yabe-Funktionen auf Github

Einführung

Neulich bei der Arbeit war ich begeistert von der Geschichte "der yabe Funktion, die ich repariert oder geschrieben habe". Alle redeten viel, aber es war immerhin ein überwältigender Sieg für die "Hauptschleifenfunktion des Befehlsmusters (1500 Zeilen)", die ich schrieb. Warum hast du solchen Code geschrieben?

Also werde ich heute "die beste Funktion der Welt" von Github entdecken, um meinen verletzten Stolz zu heilen. Mit anderen Worten: "Ich werde eher eine Yabe-Funktion als eine Funktion sehen, die ich geschrieben habe."

Fazit

Methode

Was ist eine Yabe-Funktion?

Hier wird die Yabe-Funktion durch das folgende Verfahren identifiziert.

  1. Identifizieren Sie "Funktionen mit hoher zyklischer Komplexität". Die zirkuläre Komplexität wurde mit lizard berechnet.
  2. Beschränken Sie sich wirklich auf Yabe-Funktionen Schauen Sie hinein und schließen Sie Testcode oder automatisch generierten Code aus.

Bestimmen des Ziel-Repositorys

Verwenden von github-trending-api Suchen Sie nach Yabe-Funktionen, indem Sie im letzten Monat beliebte Projekte aus den folgenden Sprachen auswählen.

Code

Ich mache keine Tests cycro

Ergebnis

1. Identifizieren Sie "Funktionen mit hoher zyklischer Komplexität"

Die Top 10 Funktionen mit hoher Komplexität ohne Berücksichtigung des Inhalts des Codes sind wie folgt.

No Komplexität Funktionsname Projektname Sprache Name
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. Beschränken Sie sich wirklich auf Yabe-Funktionen

Wenn Sie sich tatsächlich den Inhalt des Codes ansehen ...

No Komplexität Funktionsname Projektname Sprache Name Bemerkungen
1 5505 jo node javascript Weil es verschleiert ist
2 2013 matchIcon edex-ui javascript Richten Sie einfach 2000 if-Anweisungen aus
3 2001 foo llvm-project cpp Zum Prüfen&&Stellen Sie einfach 2000 auf
4 1947 *global* node javascript Weil es verschleiert ist
5 1868 cv::agast_cornerScore<AgastFeatureDetector::AGAST_7_12s> opencv cpp Dieser Typ ist schlecht
6 1647 int kubernetes go Vom Parsergenerator automatisch generierter Code
7 1532 foo llvm-project cpp Testcode
8 1509 OpenTag SuiteCRM php Dieser Typ ist schlecht
9 1504 foo llvm-project cpp Testcode
10 1453 iT node javascript Weil es verschleiert ist

Fazit

Wie in der Bemerkungsspalte beschrieben, sind die folgenden zwei wirklich Yabe-Funktionen. Sehen Sie den aktuellen Code mit eigenen Augen! (Zu lang zum Strecken)

No Komplexität Funktionsname Projektname Sprache Name Bemerkungen
5 1868 cv::agast_cornerScore<AgastFeatureDetector::AGAST_7_12s> opencv cpp Dieser Typ ist schlecht
8 1509 OpenTag SuiteCRM php Dieser Typ ist schlecht

Vergleich der Komplexität zwischen Sprachen

Ich habe die Verteilung der Komplexität für jede Sprache aufgezeichnet.

Geigenplot mit Ausreißern

alt

Geigenplot ohne Ausreißer

Ohne Werte außerhalb des Bereichs von Mittelwert ± 2 * Standardabweichung für jede Sprache ist dies wie folgt. alt

Schließlich

Vergib mir, wenn ich einen Fehler mache ...

Recommended Posts

Entdecken Sie die meisten Yabe-Funktionen auf Github
Klonen Sie das Github-Repository auf dem Jupyter-Notizbuch
Probieren Sie CI den Push-Python-Code auf GitHub aus.
Bis die Sphinx-Dokumentation auf GitHub veröffentlicht wird
Hinweise zu Funktionen der SciPy.linalg-Familie
Folgen Sie dem Geheimnis des orthografischen Pedanten, das plötzlich auf GitHub auftauchte !!
Finden Sie das meiste F-Wort-Commit unter Linux (Git und höher)