LOC-Zähler für C++



  • hustbaer schrieb:

    Aber wird wohl vermutlich Kommentare und Leerzeilen ignorieren, evtl. auch Zeilen die nur aus ner öffnenden Klammer bestehen etc.
    Dafür könnte man Zeilen die mehr als eine Anweisung enthalten als mehrere logische Zeilen zählen.

    das habe ich auch vermutet. Aber Sinnvoll finde ich das trotzdem nicht. Besonders in C++, wo 70% aus Boilerplate besteht. Das ist trotzdem wichtiger Code der zum Projekt gehört. Genau wie Makefiles und andere Scripte.

    Da erscheint mir wc -l das einzige zu sein, um einen echten groben Eindruck zu bekommen.



  • DrGreenthumb schrieb:

    was sind denn die logischen Code-Zeilen?

    Vielleicht Code-Zeilen mit einem logischen Ausdruck wie if(...)? 😕 Hätte auch gerne gewusst, wozu das gut sein soll! Soll der Programmierer nur nach der Anzahl 'inhaltsvoller' Zeilen bezahlt werden? Also: Kommentare, Leerzeilen und { } zählen nicht? 😕 😃



  • berniebutt schrieb:

    DrGreenthumb schrieb:

    was sind denn die logischen Code-Zeilen?

    Vielleicht Code-Zeilen mit einem logischen Ausdruck wie if(...)? 😕 Hätte auch gerne gewusst, wozu das gut sein soll! Soll der Programmierer nur nach der Anzahl 'inhaltsvoller' Zeilen bezahlt werden? Also: Kommentare, Leerzeilen und { } zählen nicht? 😕 😃

    Schätzomativ handelt es sich dabei um Code, der tatsächlich übersetzt wird. Also kein Kommentarzeilen, Leerzeilen o.ä.

    Ich glaube aber kaum das Programmierer nach den Codezeilen bezahlt werden.
    Denn gute Programmierer erzeugen einen kompakteren Code als schlechte, und würden dafür aber dann schlechter entlohnt!? Mhh...das wäre ja echt blöd von der Geschäftsführung. Vor allem ist es den Kunden ja ziemlich egal, wie das Programm intern ausschaut, so lange es seine Aufgabe erfüllt.



  • Glutamat schrieb:

    Denn gute Programmierer erzeugen einen kompakteren Code als schlechte.

    Schlechter Programmierer: (LOC=7)

    unsigned long fibonacci(unsigned long on) {
        if(on <= 1) {
            return on;
        } else {
            fibonacci(on-1) + fibonacci(on-2);
        }
    }
    

    Guter Programmierer: (LOC=12)

    unsigned long fibonnaci(unsigned long on) {
        if(on <= 1) {
            return on;
        } else {
            unsigned long result, f1 = 0, f2 = 1;
            for(unsigned long i = 2; i < on; ++i) {
                result = f1 + f2;
                f1 = f2;
                f2 = result;
            }
        return result;
    }
    

    ERGO: Gute Programmierer schreiben verlässlichen Code.



  • Ausnahmen bestätigen die Regel.
    Insgesamt ist der Code von erfahrenen Programmieren kürzer als der von Anfängern.
    Das ist mir bei so ziemlich allen Projekten bis jetzt aufgefallen.

    Und ein Zusammenhang mehr Zeilen = mehr erbrachte Leistung stimmt schon mal garnicht.



  • AmITrolling? schrieb:

    Guter Programmierer: (LOC=12)

    unsigned long fibonnaci(unsigned long on) {
        if(on <= 1) {
            return on;
        } else {
            unsigned long result, f1 = 0, f2 = 1;
            for(unsigned long i = 2; i < on; ++i) {
                result = f1 + f2;
                f1 = f2;
                f2 = result;
            }
        return result;
    }
    

    Und nach dem "Guten Programmierer" muß dann wieder ein Externer kommen zum Aufräumen, hihi.

    Falscher Name.
    fibonacci statt fibonnaci.

    Falsche Rechnung. Zum Beispiel repariert mit.

    unsigned long result=0, f1 = 0, f2 = 1;
    		for(unsigned long i = 1; i < on; ++i) {
    

    Wenn man Pech hat, bleibt sowas übrig:

    unsigned long fibonacci(unsigned long on) {
        unsigned long result = on, f1 = 1, f2 = 0;
        for(unsigned long i = 0; i < on; ++i) {
            result = f1 + f2;
            f1 = f2;
            f2 = result;
        }
        return result;
    }
    

    Und dann kommt Glutamat und schreibt einfach

    unsigned long fibonacci(unsigned long on) {
        double w5=std::sqrt(5);
        return (pow((1+w5)/2,on)-pow((1-w5)/2,on))/w5;
    }
    

    LOC sind ohne weitere Angaben zum Code ein extrem unsinniges Maß.

    Man darf sich auch nicht dazu verleiten lassen, von der Kürze auf irgendwelche Codequalität schließen zu lassen. Das wird nichts.

    unsigned long fibonacci(unsigned long on) {
        return on>1?fibonacci(on-1)+fibonacci(on-2):on;
    }
    


  • 👍

    volkard, bin erstaunt:

    volkard schrieb:

    unsigned long fibonacci(unsigned long on) {
        double w5=std::sqrt(5);
        return (pow((1+w5)/2,on)-pow((1-w5)/2,on))/w5;
    }
    


  • [quote="volkard"]

    AmITrolling? schrieb:

    unsigned long fibonacci(unsigned long on) {
        double w5=std::sqrt(5);
        return (pow((1+w5)/2,on)-pow((1-w5)/2,on))/w5;
    }
    

    Sowas hab ich bisher aber nur für die fibonacci reihe gesehen, gibts das öfter/immer? Und gibts nen ausdruck dafür?



  • imbanacci schrieb:

    Sowas hab ich bisher aber nur für die fibonacci reihe gesehen, gibts das öfter/immer? Und gibts nen ausdruck dafür?

    Formel von Moivre-Binet

    Außerdem gibt es noch einen schnelleren anderen Weg mit Ringen über sqrt(5).
    http://news.ycombinator.com/item?id=2538724



  • @volkard: Welcher gute Programmierer schreibt in einer Zeile std::sqrt, um dann in der nächsten Zeile pow ohne std:: zu verwenden? 😃


Anmelden zum Antworten