最も todo と fix meが多いプログラミング言語は Python かもしれない
プログラムを書いていると todo としてコメントを入れることがあります。
- 現時点ではこのコードは書けない
- 余裕のある時にやろう
- 汚いコードを書いていることに対する言い訳
など理由は様々。
todo コメントの例としては
// todo check hogehoge
hoge();
のようなものが挙げられます。
ふと思いついて「最も多くソースコードのコメント中に todo と書かれている言語は何か?」をGoogle Code Searchを利用して調べてみました。
行コメント限定ですが結果は以下の通りです。
lang | todo % | todo/all |
---|---|---|
scheme | 1.4% | 1000/71000 |
c++ | 0.2% | 12300/6280000 |
c# | 0.2% | 13600/6280000 |
fortran | 0.0% | 100/233000 |
perl | 2.1% | 28600/1370000 |
php | 1.7% | 29300/1740000 |
python | 5.8% | 39200/671000 |
javascript | 3.4% | 7000/203000 |
haskell | 0.9% | 500/53300 |
java | 5.1% | 197000/3850000 |
actionscript | 0.8% | 300/37700 |
ruby | 4.5% | 6000/134000 |
ということで Python, Java, Ruby あたりが多いですかね。
PHP, Fortran は行コメントの定義間違えたかな?異常に todo が少ない。(PHPの間違いを修正しました。)
自分の好きな言語が結果に含まれていないよという方は Gauche で動く書き捨てのソースコード貼っておきますのでご自由に(無保証ですが)お使いください。
おまけ
todo じゃなくて bug だったらどうだろう?
lang | bug % | bug/all |
---|---|---|
scheme | 0.3% | 200/71000 |
c++ | 0.0% | 50/6280000 |
c# | 0.0% | 50/6280000 |
fortran | 0.2% | 500/233000 |
perl | 0.4% | 6000/1370000 |
php | 0.0% | 400/1740000 |
python | 1.0% | 7000/671000 |
javascript | 0.2% | 500/203000 |
haskell | 0.2% | 100/53300 |
java | 0.2% | 9000/3850000 |
ruby | 0.3% | 400/134000 |
fix\s*meではどうだろう?
scheme | 4.2% | 3000/71000 |
---|---|---|
c++ | 0.3% | 17200/6280000 |
c# | 0.3% | 17200/6280000 |
fortran | 0.0% | 50/233000 |
perl | 1.0% | 13200/1370000 |
php | 0.5% | 9000/1740000 |
python | 4.7% | 31600/671000 |
javascript | 1.5% | 3000/203000 |
haskell | 0.8% | 400/53300 |
java | 1.7% | 69200/4090000 |
ruby | 3.0% | 4000/134000 |
コード
行コメントを正規表現で指定してください。
#!/usr/bin/env gosh (use rfc.http) (use rfc.uri) (use gauche.charconv) (use srfi-1) (define search-set '( (scheme . #/;/) (c++ . #/\/\//) (c# . #/\/\//) (fortran . #/^[C\*]/) (perl . #/#/) (php . #/#/) (python . #/#/) (javascript . #/\/\//) (haskell . #/\-\-/) (java . #/\/\//) (actionscript . #/\/\//) (ruby . #/#/))) (define (search-gsc lang line-comment-reg) (string->number (regexp-replace-all #/,/ (rxmatch-substring (#/約<b>([\d,\s]+)<\/b>件中/ (ces-convert (call-with-output-string (cut http-get "www.google.co.jp" #`"/codesearch?as_q=,(uri-encode-string line-comment-reg)&hl=ja&as_lang=,lang" :sink <>)) "*jp" "utf-8")) 1) ""))) (define (flonum num n) (quotient&remainder (inexact->exact (round (* num (expt 10 n)))) (expt 10 n))) (print "|*lang|todo %|todo/all|") (for-each (lambda (r) (receive (m n) (flonum (* (/. (second r) (third r)) 100) 1) (format #t "|*~a|~d.~d%|~d/~d|\n" (first r) m n (second r) (third r)))) (map (lambda (s) `(,(car s) ,(search-gsc (car s) (string-append (regexp->string (cdr s)) "\\s+todo")) ,(search-gsc (car s) "."))) search-set))