[LINUX] Schlechter Code

Codierungssinn

Haben Sie ein Gespür für Codierung? Wirst du die beste Architektur wählen? Schreiben Sie Code, der sehr gut testbar und leicht zu ändern ist? Ist es nur, um Code schnell zu schreiben?

Ich denke, es variiert von Person zu Person, Wer hat einen Sinn für Linus Tobals? Es scheint eine Person zu sein, die den richtigen Code intuitiv verstehen kann, wenn sie groß aussieht. image.png

Zum Beispiel jemand, der sieht, dass ein Sonderfall einer if-Anweisung verallgemeinert werden kann. Das folgende Beispiel ist ein Codefragment, das im obigen Video eingeführt wurde und in einen Arbeitscode konvertiert wurde.

 #include "common.h"

 typedef struct linked_list
 {
     int value;
     struct linked_list* nextp;
 } linkedlist;

 linkedlist* firstlistp = NULL;

 void initList(int value);
 void addList(int value);
 linkedlist* findList(int value);
 void deleteList(linkedlist* entry);
 void printList();

 int main()
 {
     initList(11);
     addList(12);
     addList(13);
     addList(14);
     addList(15);
     addList(16);
     addList(17);
     printList();

     puts("TEST A");

     linkedlist* lp = findList(14);
     deleteList(lp);
     printList();

     puts("TEST B");

     lp = findList(12);
     deleteList(lp);
     printList();

     puts("TEST C");

     lp = findList(16);
     deleteList(lp);
     printList();

     puts("TEST D");

     return 0;
 }

 void initList(int value)
 {
     linkedlist* newp;
     newp = malloc(sizeof(linkedlist));
     newp->value = value;
     newp->nextp = NULL;
     firstlistp = newp;
 }

 void addList(int value)
 {
     linkedlist* newp;
     newp = malloc(sizeof(linkedlist));
     newp->value = value;
     newp->nextp = firstlistp;

     firstlistp = newp;
 }

 linkedlist* findList(int value)
 {
     linkedlist* currentp;
     currentp = firstlistp;

     while((currentp != NULL) && (currentp->value != value))
     {
         currentp = currentp->nextp;
     }

     return currentp;
 }

 #define BAD

 void deleteList(linkedlist* entryp)
 {
 #ifdef BAD
     linkedlist* prevp = NULL;
     linkedlist* walkp = firstlistp;

     while(walkp != entryp)
     {
         prevp = walkp;
         walkp = walkp->nextp;
     }

     if(!prevp)
     {
         firstlistp = entryp->nextp;
     }
     else
     {
         prevp->nextp = entryp->nextp;
     }
 #else
     linkedlist** indirectpp = &firstlistp;

     while((*indirectpp) != entryp)
         indirectpp = &(*indirectpp)->nextp;
     *indirectpp = entryp->nextp;
 #endif

     free(entryp);
 }

 void printList()
 {
     linkedlist* currentp = firstlistp;
     while(currentp != NULL)
     {
         printf("%d\n", currentp->value);
         currentp = currentp->nextp;
     }
 }

Die Funktion deleteList wurde eingeführt. Der Unterschied zwischen der BAD-Route und der else-Route besteht darin, dass es keine if-Anweisung gibt. Die spezielle Route verschwand und wurde verallgemeinert.

Wenn es um Codequalität geht, wird das Thema Lesbarkeit angesprochen. Ist der schlechte Code leicht zu lesen? Wenn Sie diesen Code in Ihrer Überprüfung sehen, können Sie den BAD-Code auswählen. Das denke ich zumindest an meinem Arbeitsplatz.

Schlechter Code

Ich denke, es gibt viele Möglichkeiten, eine Funktion zu erreichen. Die Themen, die in der Diskussion auftauchen, sind Ausführungsgeschwindigkeit, Lesbarkeit und Erweiterbarkeit. Da die Ausführungsgeschwindigkeit gemessen werden kann, kann objektiv beurteilt werden, dass sie schneller oder langsamer ist. Die Lesbarkeit ist von Person zu Person unterschiedlich, und die Erweiterbarkeit ist begrenzt, solange wir nicht wissen, wo sie sich ändern wird. Es hängt auch davon ab, wie stark es von der Einstellungsdatei abhängt. Guter oder schlechter Geschmack kann von der Situation abhängen. Es gibt jedoch für jede Situation einen guten Code. Was Linus sagt, ist, dass es gute und schlechte Codes gibt und es Menschen gibt, die sie intuitiv verstehen können. schwer.

Beiseite

Als ich anfing zu schreiben, ohne darüber nachzudenken, was ich sagen wollte, verstand ich es bis zum Ende nicht und es wurde ein nicht schlüssiger Artikel. Es scheint, dass ich weder einen Sinn für Codierung noch einen Sinn für Schreiben habe. Ich habe seit der Einführung in die C-Sprache eine Linkliste geschrieben. Bis jetzt habe ich es selbst nie in meiner Arbeit geschrieben. Also habe ich es nach langer Zeit geschrieben, aber ich denke, die Linkliste ist ziemlich schwierig. Es gibt einige Dinge, die in Bezug auf die Verarbeitung schwieriger sind, aber ich dachte, es wäre eine große Hürde für Anfänger, zu schreiben. Das Konzept des Hinzufügens nach vorne beim Hinzufügen, Verarbeiten der Löschfunktion Diese beiden Hürden sind hoch. Sie können dies tun, und wenn Sie einen Fehler machen, wird SEGV sofort ausgeführt, sodass das Debuggen einfach ist und möglicherweise als gutes Verhalten fungiert.

Als ich zum Anfang zurückkehrte und beim Zeichnen eines Bildes codierte, wurde es zu einem Bild, das niemand verstehen konnte. Habe ich keinen Sinn für Malerei? .. ..

image.png

Recommended Posts

Schlechter Code
Zeichencode
Schreiben Sie Python-ähnlichen Code
FFT-Pseudocode
VS-Code-Einstellungen
Python-Zeichencode
[Python] Code, der Algorithmen kennt
QR-Code-Anzeige
Geokodierung der Postleitzahl
PyCharm-Code-Interpolation
Guter und schlechter Code zum Vergleich mit Minikarten