パスワードを忘れた? アカウント作成
5815756 story
プログラミング

ソースコードで最もよく使われる単語が明らかに 93

ストーリー by headless
単語 部門より
あるAnonymous Coward 曰く、

英文で最も多く使われるアルファベットが「e」だというのはよく知られていますが、最も多く使われる単語は「the」だそうです。プログラミング言語ではどうなのか、GitHubで公開されているソースコードを解析した結果が発表されました(The Most Frequent Word in Source Code on GitHub: PDF)。

調査ではソースコードからコメント行を除外し、アルファベットと数字のみが連続する部分を単語として検出しています。調査対象となった10種類のプログラミング言語全体で、ソースコードに最も多く登場する単語はなんと「0」で、次に「if」が続くという結果になっています。

「if」のように良く使われそうな予約語が1位というのなら解りやすいのですが、「0」が圧倒的多数で1位の座を獲得したことに素直に驚きました。マジックナンバーは使用厳禁と言いながらも、考えてみれば初期化等に使う「0」だけは、ひとつの意味をもった定数であるかのごとく無意識のうちにそこら中で使っていることに気付いた次第です。その他にもプログラミング言語が自然言語の特性を持つかジップの法則を使って検証しており、どの言語がより自然言語に近いか検証していて面白いですよ。

プログラミング言語別にみると、「0」が1位なのはC、C++、JavaScriptのみ。5言語では5位以下となっている。JavaScriptでは上位20個のうち14個が1文字の単語だ。一方、「if」はRubyを除く9言語で5位以内に入っている。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • Rubyの上位 (スコア:4, 参考になる)

    by zawazawa (34297) on 2012年07月29日 19時19分 (#2202339)

    >一方、「if」はRubyを除く9言語で5位以内に入っている。
    Rubyの上位はなんなんだ、とソースを見てみたら、

    1 739641 end
    2 263685 do
    3 260162 def
    4 228260 assert
    5 206872 should
    6 174484 1
    7 147050 new
    8 141169 equal
    9 136831 a
    10 133595 to
    11 132846 0
    12 130953 name
    13 126375 if

    という結果。たしかにRubyらしいという気がする。
    class-end, def-end, begin-end, といろんなブロック構文の終了にendを使うので、終わらせる方が始めさせる方より多いというちょっと不思議な結果に。
    それ以外の結果からは、なんかRubyistはテストばっかり書いてるんじゃないかという気がしてきます。
    (たぶんRSpecみたいな、テスト記述用の「単語」が使える仕組みがあるからでしょうかね?)

    • by greentea (17971) on 2012年07月29日 22時01分 (#2202430) 日記

      0より1の方が多いのって、なんか理由あんの?

      --
      1を聞いて0を知れ!
      親コメント
      • Re:Rubyの上位 (スコア:4, 参考になる)

        by ruto (17678) on 2012年07月29日 23時29分 (#2202461) 日記

        ++が無くて+=1と書くとか、配列の最後の要素がa[-1]だったりとか、範囲オブジェクトを作る場合1..nと書く場合が多いとか、$1を多用するとかが考えられます。

        特にPythonとの違いは$1が効いているようです。
        例えばRuby 1.9.1の標準ライブラリにおいて、"$1"は613ファイル中428回出現します。
        一方、Python 2.7.3においては、/[[::]]/は1444ファイル中147回しか出現しません。

        Pythonでは正規表現のグループに名前を付けて参照する形式が使われるらしく、/[[::]]group(/は349回出現します(ちなみに/[[::]]group()/は22回出現します)。
        どちらにしろ、正規表現を使う頻度自体もRubyの方が多いようです。

        # というか標準ライブラリだとPythonも0より1の方が多い。コメントを除外していないとか語の定義が違うとかで数え方が違うというのもあるけど。

        親コメント
      • by Anonymous Coward on 2012年07月29日 23時15分 (#2202456)

        他の言語とは違って、0がfalse扱いにならないからかも。間違いの元になるから。
        何でもいいから適当に初期化する場合、Rubyでは通常nilを使う。
        あと、ゼロテストに関しては専用メソッドzero?, nonzero?を使えるのもあるかな。

        親コメント
    • by Anonymous Coward

      endを使う言語としたらVBかな。
      今の.net系は知らないけど6までだと
      End If
      End Sub
      なんかあった。
      ifや関数/メソッドの終了部分を「}」で閉めないで単語で閉めている言語にはendはそこそこ使う気がする。

  • by guicho2.71828 (38877) on 2012年07月29日 19時17分 (#2202338)

    javascriptは、配布時のファイルサイズを減らすために各種minificationが行われますし、
    httpリクエストを減らすためにファイルも結合するので、そういうことではないでしょうか?

    --
    新人。プログラマレベルをポケモンで言うと、コラッタぐらい
  • by Anonymous Coward on 2012年07月29日 18時47分 (#2202315)

    テキストエディタの設定を変えて、リテラル部分の背景色を目立つ色にしたら、
    どのソースのどの部分を表示しても 0 が目に付く位、あちこちにあった。
    かなり古いCのソースとはいえ、自分の印象より更に多かった。

    定数にしてシンボル情報埋めたいなー
    nullptrとかも使いたいなー(せめてNULLマクロくらい使えばいいのに)

    • by Anonymous Coward

      Pascalにすれば1が増えますヨ

  • ファイル数や総バイト数ではC言語、次いでJavaとC++が多いのに、
    何故か一ファイルあたりのバイト数ではJavaScriptがダントツ
    …なんでもかんでも一個のファイルに書き込んでしまう文化的な何かなんでしょうか(^_^;

    # 最近、Facebookで使用言語の欄にC言語とか使えなくなりましたね、本筋とは全く関係ないですが。

    --
    --暮らしの中に修行あり。
    新しいblogはじめました。 [hateblo.jp]
    • ソースコードのような比較的サイズの小さいデータに対しては
      ファイル数を少なくした方が,ネットワーク,サーバ,ファイルシステムのオーバヘッドが減ります.

      cとかc++が登場した頃は,コンパイラ,開発環境,エディタが貧弱だったので,
      機能単位,モジュール単位で兎に角ファイルを分割する方針をとってましたが,これはもう昔の話かと.

      実際最近のc/c++の開発環境はプリコンパイルヘッダのような仕組みで,
      ヘッダファイルが細かく分割されていても,内部的にはできるだけ一個のファイルに情報(シンボル情報とか)をまとめて保存することで
      余計なオーバヘッドを回避するようになっています.

      親コメント
    • それよりも、Javascriptで第16位の 4294967295 って、なんでこんなのが16位に出てくんの?

      --
      1を聞いて0を知れ!
      親コメント
    • by Anonymous Coward

      Webサイト作るときは、極力統合しますね。
      その分リクエストを減らせますので。

      まぁ本当は製作時はちゃんと分けて、公開時に統合すればいいのですが
      めんどくさいので、よほどでなければ、統合した状態で書いちゃいますね。

    • by Anonymous Coward

      # 酔ったら饒舌にしゃべれるようになるくらいには立派な言語ですのに。

      基本的にメソッド名が長いのなんの document.getElementsByClassName() とか平気で登場するからだとおもいます! たしかに説明不要なくらいに体を表してる名前だけど、長いよ。

  • by Anonymous Coward on 2012年07月29日 18時54分 (#2202317)

    初期化にゼロを代入する記述が多いのは確かですし、続くif文でも、
    その条件判断として、ゼロと比較することも多いはずです。
    二番目に記述頻度が高いif文の中で、一緒にゼロも記述されているのであれば、
    代入文も合わせて、ゼロの記述頻度がより高くなるのも納得できますね。

    • by Anonymous Coward on 2012年07月29日 19時01分 (#2202327)

      ループするとき、何回ループするかは変数だったり定義された定数を使ったりしますが、カウントしはじめの値は0なり1なりを使いますね。
      #define COUNTSTARTVALUE 0
      とかやってもいいかもしれませんが、0や1を直接使ったとしても構文から言って意味が自明ですし、あまり御利益がないような。

      「初期化にゼロを代入する」のうちに含まれるかも知れませんが。

      親コメント
      • Re:ifとゼロ (スコア:2, おもしろおかしい)

        by Anonymous Coward on 2012年07月30日 18時08分 (#2202927)

        そんな #define すること自体が目的化したような定義やめてくださいホントお願いしますそのうち
        int two = 5 ; // 3を代入
        みたいになります。

        親コメント
      • by Anonymous Coward

        foreachとか、while(shift @ar)とかばっかで特殊なことやらないとfor文は使わないperl屋な私。

        • by SteppingWind (2654) on 2012年07月29日 20時43分 (#2202388)

          実際, 配列相手みたいな「空間的」繰り返しと, 計算結果を次の処理の入力とするような「時間的」繰り返しを区別できない計算機言語が前時代的なんでしょうね.

          なもんだから, コンパイラがコードの意図を推論して並列化しないといけないはめに.

          親コメント
  • by Anonymous Coward on 2012年07月29日 19時19分 (#2202340)
    rank      num word
    ---- -------- -------
       1 12536894 0
       2  9174613 if
       3  7211215 1
       4  6344625 return
       5  5777769 int
       6  5284984 0x00
       7  5210612 define
       8  5084560 struct
       9  3769638 void
      10  3714602 i
      11  3284344 const
      12  3077231 static
      13  2882689 2
      14  2667224 t
      15  2661897 this
      16  2595296 type
      17  2403928 n
      18  2374491 dev
      19  2206270 typename
      20  2118588 public
    ---- -------- -------
  • by minet (45149) on 2012年07月29日 21時41分 (#2202418) 日記

    スネークケースだと語が分離されるが、
    キャメルケースでは分離されないですね。
    この辺り、キャメルケースが主流な言語だと統計結果に差が出そう。
    しかし、キャメルケースを分離すると今度はシステムハンガリアンのuやらszやらが多くなりそう?
    それとも今時はもうシステムハンガリアンは少ないのかな。
    興味深いです。

  • by Anonymous Coward on 2012年07月29日 18時32分 (#2202310)

    intが5位に入っていてなんとなく安心した

  • by Anonymous Coward on 2012年07月29日 19時02分 (#2202328)

    スペースとTabのどっちが多く使われるんだろう。

  • by Anonymous Coward on 2012年07月29日 19時25分 (#2202344)

    ifフラグ判定する前に初期化
    forループする前に初期化

    確かに考えてみればってところだね

  • by Anonymous Coward on 2012年07月29日 19時28分 (#2202348)

    14位のtってなんでしょうか?
    一瞬lispかと思いましたが、C, C++でよく使われているようです。

    変数名にしても、iとかnとかは分かりやすいけど。

    Javascriptだと、a,b,c,d,eがこの順でランクインしているし、数字もランクインしています。
    変数名は適当にaから順番に使って、数字もハードコーディングしまくり、
    ということでしょうか。

    • Re:tってなに? (スコア:5, すばらしい洞察)

      by yasu (7) on 2012年07月29日 20時04分 (#2202364) ホームページ

      構造体などの定義で hogehoge_t としているからだと思う。

      --
      HIRATA Yasuyuki
      親コメント
      • by Anonymous Coward
        「あ~」って声でた
        言われてみれば、そうとしか思えない
    • by Egtra (38265) on 2012年07月29日 19時58分 (#2202360)

      私は、“temporary”の頭文字ということで、大した用のない一時的な変数にtという名前を付けることがあります(同じ理由でtmpやtempも使う)。同様の考えの人が多いのかなと思いました。

      親コメント
    • by Anonymous Coward on 2012年07月29日 20時13分 (#2202367)

      別コメントでもありましたが、JavaScriptでminifyスクリプトを使うと、
      元の変数名が何であってもaとかbとかに変換されます
      (名前が短い方が転送量が減るので)。
      だから、「a,b,c,d,eがこの順でランクインしている」んでしょうね。

      親コメント
    • by Anonymous Coward

      時間関連の変数でtを使うことがありますね。
      time関数のマンページとか「time_t time(time_t *t)」になってますし。

      # ループ変数のlより多い気がしないですけど

  • by Anonymous Coward on 2012年07月29日 19時31分 (#2202349)

    空白の方が多いぞ。

    でなきゃWhitespaceなんて参加もできないじゃないか?

  • by Anonymous Coward on 2012年07月29日 19時42分 (#2202353)

    #どうどうめぐりとよむ

  • by Anonymous Coward on 2012年07月29日 20時36分 (#2202381)

    #if 0 //とりあえず
    #endif
    こんなのが大量に埋まっているのを想像しました。orz

  • by Anonymous Coward on 2012年07月29日 20時40分 (#2202384)

    return 0;

    をちゃんと書いたあるってことじゃ

typodupeerror

アレゲは一日にしてならず -- アレゲ見習い

読み込み中...