むしろ英??、開発スピードを向上させる、読みやすいコードの書き方

1 :ノチラ ★:2017/10/07(土) 20:02:30.16 ID:CAP_USER

https://i1.wp.com/i.imgur.com/DYuIjPJ.png 良いコードとチーム開発

では、自分以外がコードを理解できているのはどんな状態でしょうか。単に「読めればいい」というわけではありません。

「コードを理解する」というのは、変更を加えたりバグを見つけたりできるという意味だ。他のコードと連携する方法も理解しておかなければいけない。
『リーダブルコード』p.3より

チーム開発では他人が書いたコードを改修することも多く、ソフトウェアは全体が連携して動作します。ですので、手を加えられる状態であることが重要と言えるでしょう。

事業の継続性に関わる
これは私の考えですが、コードの質と事業の継続性には深い関係があると思います。

開発が進むにつれてコード量は増大してきます。うまくコントロールしないと扱いづらくなり、プロダクトの開発スピードが低下します。ちょっとした機能追加に多くの時間がかかってしまい、実装する頃には競合サービスに追い抜かれてしまうかもしれません。

本書でも以下のように述べられています。

プロジェクトは巨大になって、すべてを把握できる人は誰もいなくなる。新しい機能を追加するのが苦痛になってくる。コードを扱うのが厄介になって楽しくなくなる。
(中略)
プロジェクトが成長しても、コードをできるだけ小さく軽量に維持するしかない。
『リーダブルコード』p.171より

事業を継続し、プロダクトの成長を持続させるためには、本書で言われているように、できるだけ小さく軽量な、良いコードが必要なのではないでしょうか。
ここからは本の中で取り上げられている理解しやすいコードを書くためのポイントと実際の例をいくつか紹介します。代表的なテクニックを見ていきましょう。

変数と理解しやすさ
まずは変数を取り上げます。すぐに取り組める内容なので、初めにやってみるといいでしょう。
変数名に具体的な情報を込める

変数名にどんな英単語を使うべきか悩むケースは少なくないはず。本書では使う単語を工夫し、分かりやすい名称にするコツを紹介しています。

例えば、「get」はあまり明確な単語ではない。
def GetPage(url);
「get」という単語からは何も伝わってこない。このメソッドはページをどこから取ってくるのだろう? ローカルキャッシュから? データベースから? インターネットから? インターネットから取ってくるのであれば、FetchPage()やDownloadPage()のほうが明確だ。
『リーダブルコード』p.10-11より

意味がはっきり通る単語を変数名に使うだけで、コードを読む人へのメッセージになるのです。
https://employment.en-japan.com/engineerhub/entry/2017/09/26/110000

  1. 2 :名刺は切らしておりまして:2017/10/07(土) 20:07:00.27 ID:9ZdVWWsp

    1つの関数、メソッド内を馬鹿みたいに200行以上書く奴から逆に金を取りたいわ

  2. 3 :名刺は切らしておりまして:2017/10/07(土) 20:10:54.77 ID:nc3LRr4X

    英語版買って積ん読状態w

  3. 5 :名刺は切らしておりまして:2017/10/07(土) 20:19:38.91 ID:ZhvFxEKP

    この記事、かんじんのコード部分が途中で切れてしまって読めない。
    適当に引用するとこうなる悪い例だな。

  4. 6 :名刺は切らしておりまして:2017/10/07(土) 20:22:09.86 ID:DuOtJb6H

    >>1
    英語圏の人間からしたら
    Getは超曖昧で便利な言葉だからだろ

    規約は案外どうでも良くて、
    端的に処理の内容や引数・戻値についてコメント入れておくほうが、
    後から見て解りやすい

  5. 7 :名刺は切らしておりまして:2017/10/07(土) 20:28:21.86 ID:hTvED3Jn

    英語版買って積ん読状態w

    現実には上司って肩書の人間が
    これからこの機能のコードを書けリリースは今日中ですとかアホなこと言うわけよ
    保守性高い綺麗なコード書きたいがさすがに無理

    >>3
    コードコンプリートと違ってさくっと読めるからこの連休使って嫁w

  6. 8 :名刺は切らしておりまして:2017/10/07(土) 20:31:05.87 ID:Zr5CZNEt

     ,;:⌒:;,
    8(・ω・)8 1つもモジュールは1画面に収まる行数にしなさい

  7. 9 :名刺は切らしておりまして:2017/10/07(土) 20:32:28.19 ID:MqCGUDQ8

    人は記憶型と思考型に大別できる

    チームでやる場合なら幹の部分だけしっかり抑えておけばいいと思うよ
    枝葉の部分はお前ら勝手にやれで十分
    どんなに長大なプログラムでも枝葉は1つの関数でしかない
    幹は、その関数に何を与えて何をやらせて何が返ってくるかを抑えておくだけで十分
    使えなくなったら枝葉があったらそこだけごっそり変えれば済む

  8. 10 :名刺は切らしておりまして:2017/10/07(土) 20:48:13.03 ID:LH4u82nX

    だから強い型付けとアクセス修飾子があるのにさ
    なんでも var や dm で宣言すりゃ良いってもんじゃないんだよ

  9. 11 :名刺は切らしておりまして:2017/10/07(土) 20:49:22.11 ID:nc3LRr4X

    だから強い型付けとアクセス修飾子があるのにさ
    なんでも var や dm で宣言すりゃ良いってもんじゃないんだよ

    >>10
    そこで型推論ですよ

  10. 12 :名刺は切らしておりまして:2017/10/07(土) 21:13:23.33 ID:7dCgmWyz

    インタフェースとテストコードさえ
    きちんとしていれば良い。
    中身読まなきゃいけないのは
    それが無いレガシーコードだけ

  11. 14 :名刺は切らしておりまして:2017/10/07(土) 21:44:43.91 ID:0Pj+mPGZ

    rubyはまず言語仕様の方向性とその意思決定方法が合っているかどうかを
    テストした方が良いと思うの。

  12. 15 :名刺は切らしておりまして:2017/10/07(土) 21:47:50.91 ID:HBMmaMaS

    インタフェースとテストコードさえ
    きちんとしていれば良い。
    中身読まなきゃいけないのは
    それが無いレガシーコードだけ

    >>12
    やな。今時の言語はアプリを書く限りにおいてはあまりコメント入らないと思う。

  13. 17 :名刺は切らしておりまして:2017/10/07(土) 23:00:17.43 ID:8Vfuqswx

    俺は変数名の頭に型名を入れる。
    変数名が長ったらしくなっても
    それが何を意味するか分かるから

  14. 19 :名刺は切らしておりまして:2017/10/07(土) 23:37:39.44 ID:ZkSQ2a9B

    1関数5000行とか見たけど、お前らの最高は?

  15. 21 :名刺は切らしておりまして:2017/10/08(日) 00:27:36.08 ID:2eNTRVlD

     
    クソコードを書くプログラマーは
    自分のコードの正当性すら説明できない
    論破されると不貞腐れる奴が多い

  16. 22 :名刺は切らしておりまして:2017/10/08(日) 00:31:36.87 ID:hzur1uF3

    1関数5000行とか見たけど、お前らの最高は?

    >>19
    1関数2000くらいだな
    それがたくさんあるポンコツシステムのリファクタさせられた

    そんな糞が役職上で給料も上
    マジで殺したいと思ったわ

  17. 24 :名刺は切らしておりまして:2017/10/08(日) 01:18:08.56 ID:TjnX9x3I

    1関数5000行とか見たけど、お前らの最高は?

    >>19
    530000。

    上から順に
    変数宣言領域
    データ定義領域
    データの切り出し領域
    最後にロジック領域と、
    大きく4つの領域がmainの中に詰まってた

    なお各領域内は完全に一枚岩で混沌の極み

  18. 25 :名刺は切らしておりまして:2017/10/08(日) 01:23:40.12 ID:TjnX9x3I

    余談だが、変数は26個のみの使い回しで
    a〜gはuint、h〜nはint、o〜zはvoid*だった

  19. 26 :名刺は切らしておりまして:2017/10/08(日) 01:54:30.90 ID:DrPMNTs+

    日本の現場だと、メソッド名に英語ではなく日本語を使うよう指導されるから無駄

  20. 29 :名刺は切らしておりまして:2017/10/08(日) 02:10:03.86 ID:yZ+53gyh

    日本の現場だと、メソッド名に英語ではなく日本語を使うよう指導されるから無駄

    >>26
    そんな糞現場は速攻やめるわ。今の時代、技術力があれば年齢性別なく仕事を
    選べるし。

  21. 32 :名刺は切らしておりまして:2017/10/08(日) 06:09:50.29 ID:H+DZOlmD

    人は記憶型と思考型に大別できる

    チームでやる場合なら幹の部分だけしっかり抑えておけばいいと思うよ
    枝葉の部分はお前ら勝手にやれで十分
    どんなに長大なプログラムでも枝葉は1つの関数でしかない
    幹は、その関数に何を与えて何をやらせて何が返ってくるかを抑えておくだけで十分
    使えなくなったら枝葉があったらそこだけごっそり変えれば済む

    >>9
    人を記憶型と指向型に大別する人を
    コンピュータープログラミングの話題で見るのはちょっと意外。

    政治とか国際関係のニュースでの発言が多いから
    そっちの人かと思ってたわ。

  22. 33 :名刺は切らしておりまして:2017/10/08(日) 06:35:39.64 ID:OgdDWJ1g

    >>1
    Knuth先生は数十年前にはるか先に到達している
    英語だから知らないだけ
    なおかつそれでも今でもコーディングが駄目だという事は問題はほかにある

  23. 34 :名刺は切らしておりまして:2017/10/08(日) 06:39:18.61 ID:OgdDWJ1g

    >>1
    最近の作法は知らんけど
    GetPage(url) の GetPage を 変数名 と呼ぶようになったのか?

  24. 35 :名刺は切らしておりまして:2017/10/08(日) 06:53:21.65 ID:WalGrv0H

    天才のコードは凡人には難解っつーのはあるな
    簡潔すぎて、なにがなにやら

  25. 38 :名刺は切らしておりまして:2017/10/08(日) 09:59:56.11 ID:cA3CCtCo

    たまに
    ジェネレータの出力コードに文句言ってる新人が居るので笑える
    1万行のif文手作業で書いてると思うほうがオカシイ。

  26. 39 :名刺は切らしておりまして:2017/10/08(日) 10:33:06.09 ID:cA3CCtCo

    日本の現場だと、メソッド名に英語ではなく日本語を使うよう指導されるから無駄

    >>26
    むしろ英語使えって言うけどな。
    日本語は付加価値が無い。

  27. 40 :名刺は切らしておりまして:2017/10/08(日) 11:05:04.79 ID:H056hn36

    >>1
    > インターネットから取ってくるのであれば、FetchPage()やDownloadPage()のほうが明確だ。
    インターネットもしくはDBからページを取得するように仕様が変わったら
    わざわざ関数名変えないといけないけど。

  28. 41 :名刺は切らしておりまして:2017/10/08(日) 11:17:09.87 ID:XGLvgtrG

    英語できないITドカタを怒らせる記事だなこれは

  29. 42 :名刺は切らしておりまして:2017/10/08(日) 11:45:15.12 ID:yZ+53gyh

    英語できないITドカタを怒らせる記事だなこれは

    >>41
    ペラペラになる必要はないけど、今時、英文ドキュメントすら読めないのなら
    やめてもらった方がみんなのためよ。

  30. 43 :名刺は切らしておりまして:2017/10/08(日) 11:59:53.20 ID:H056hn36

    10年位前までは英語できない奴らが結構いたし、
    英語読むことが必須の案件ではわざわざ「英語ドキュメント読む必要があるけど大丈夫か」
    みたいな確認があったけど、最近はそういう確認無くて普通に英語ドキュメント読まされるし、
    若い奴らはある程度英語できるのは当たり前になってる気がする。

  31. 44 :名刺は切らしておりまして:2017/10/08(日) 12:49:04.40 ID:bhDc7cDI

    すでに出来上がったコードにあとからあれこれ仕様をすぐに追加しろっていうもんだからアドホックなコードになってワケわからんことになるんだよ。

  32. 46 :名刺は切らしておりまして:2017/10/08(日) 14:18:02.74 ID:4XB2ZFrq

    余談だが、変数は26個のみの使い回しで
    a〜gはuint、h〜nはint、o〜zはvoid*だった

    >>25
    i〜nが整数型、残りが実数型というのがお約束。
    それがfortranの時代から続く暗黙のルルール。

  33. 48 :名刺は切らしておりまして:2017/10/08(日) 17:23:55.96 ID:ZJMuECua

    コメントは書かない。
    コードだけですべてを語れ。

  34. 49 :名刺は切らしておりまして:2017/10/08(日) 17:30:01.92 ID:H+DZOlmD

    コメントは書かない。
    コードだけですべてを語れ。

    >>48
    なんと文芸的な!

  35. 50 :名刺は切らしておりまして:2017/10/08(日) 18:29:46.34 ID:4XB2ZFrq

    以前、asahi.comの技術募集の条件欄に

    ・使用可能な言語: C言語
    ・習得レベル: 日常会話レベル

    と書いてあったのを思い出す様な話だな。

  36. 52 :名刺は切らしておりまして:2017/10/08(日) 23:27:40.22 ID:8SLBpwFd

    コメントは書かない。
    コードだけですべてを語れ。

    >>48
    やろうとは思ったが
    無理でした

  37. 53 :名刺は切らしておりまして:2017/10/09(月) 00:24:59.05 ID:Vyp81ejl

    10年位前までは英語できない奴らが結構いたし、
    英語読むことが必須の案件ではわざわざ「英語ドキュメント読む必要があるけど大丈夫か」
    みたいな確認があったけど、最近はそういう確認無くて普通に英語ドキュメント読まされるし、
    若い奴らはある程度英語できるのは当たり前になってる気がする。

    >>43
    逆に昔そんなんだったのが信じられない
    よくやっていけたなと

  38. 55 :名刺は切らしておりまして:2017/10/09(月) 01:09:31.84 ID:/7ht4PgF

    AjaxもIE5.5が最初にやり出したことだし、別に驚くほどのことでもない

  39. 59 :名刺は切らしておりまして:2017/10/09(月) 02:12:52.44 ID:S12t3lAe

    コメントは書かない。
    コードだけですべてを語れ。

    >>48
    こういうこと言うやつに限ってクソコード書くから困る

  40. 60 :名刺は切らしておりまして:2017/10/09(月) 02:17:53.45 ID:eqR0r79x

    AIがどーたらこーたらって話は大きいが
    開発言語についての進化は対して変わらないのが現状。

  41. 63 :名刺は切らしておりまして:2017/10/09(月) 05:18:08.66 ID:bDPzOKxg

    コメントは書かない。
    コードだけですべてを語れ。

    >>48
    DDD系の実装は、今のトレンドだと思うけど。

  42. 65 :名刺は切らしておりまして:2017/10/09(月) 06:10:45.29 ID:9Go1BnZF

    Objective-Cでは "get〜" は「返り値ではなく、メモリ領域にコピーして戻す」ことを
    意味するという指針になっていたはず。

  43. 68 :名刺は切らしておりまして:2017/10/09(月) 09:31:40.25 ID:Y9ITqV/w

    Objective-Cでは "get〜" は「返り値ではなく、メモリ領域にコピーして戻す」ことを
    意味するという指針になっていたはず。

    >>65
    それがわかる名前にしたらよくね?

  44. 69 :名刺は切らしておりまして:2017/10/09(月) 11:17:36.15 ID:j2RdSpoc

    以前、asahi.comの技術募集の条件欄に

    ・使用可能な言語: C言語
    ・習得レベル: 日常会話レベル

    と書いてあったのを思い出す様な話だな。

    >>50
    ある意味分かってる人の要求だな。本気でプロだと日常会話もC言語になるからな

  45. 73 :名刺は切らしておりまして:2017/10/09(月) 12:25:59.89 ID:vvVFDM50

    変数名も1024文字の時代だし
    コメント書くぐらいなら
    そのコメントを変数名にすればよいわ

  46. 74 :名刺は切らしておりまして:2017/10/09(月) 12:37:28.06 ID:pMIX5Mgm

    変数名も1024文字の時代だし
    コメント書くぐらいなら
    そのコメントを変数名にすればよいわ

    >>73
    変数は良いけど処理はどうするの?
    なぜこういう処理で正しいかと言うことを説明したいときにはどうしようもない

  47. 75 :名刺は切らしておりまして:2017/10/09(月) 13:15:45.42 ID:vvVFDM50

    変数と変数を処理するのは
    コードそのものじゃん
    それが正しい事を証明するのはテストコード
    それでも足りなきゃwikiのURLでも書いとけばオケ

    したがってコメントは無駄

  48. 76 :名刺は切らしておりまして:2017/10/09(月) 14:01:24.79 ID:LaU2MAkA

    変数と変数を処理するのは
    コードそのものじゃん
    それが正しい事を証明するのはテストコード
    それでも足りなきゃwikiのURLでも書いとけばオケ

    したがってコメントは無駄

    >>75
    めんどくさーーーーー

  49. 77 :名刺は切らしておりまして:2017/10/09(月) 16:03:36.55 ID:01cKK1rU

    別にコメント書かなくてもいいけどその脳みそ保守に必要だから体ごと置いていってもらおうか

  50. 81 :名刺は切らしておりまして:2017/10/10(火) 21:44:18.66 ID:jjiBez4a

    そもそも正しい方法はひとつじゃない
    そこそこに正しいかもしれない方法にすぎないでしょ

  51. 88 :名刺は切らしておりまして:2017/10/12(木) 16:47:35.60 ID:5r0VPaGI

    処理の隠蔽という意味では
    使う側からしたら欲しい値が取れればいいんだから
    データの元がフィールドだろうが DB だろうが URL だろうが
    全部 get〜 で OK

  52. 89 :名刺は切らしておりまして:2017/10/12(木) 16:57:55.73 ID:o726XiLl

    処理の隠蔽という意味では
    使う側からしたら欲しい値が取れればいいんだから
    データの元がフィールドだろうが DB だろうが URL だろうが
    全部 get〜 で OK

    >>88
    すでに、オーバーロードして名前を共通にできる言語が主流だからね

  53. 93 :名刺は切らしておりまして:2017/10/13(金) 00:02:04.04 ID:Uzjcuno5

    処理の隠蔽という意味では
    使う側からしたら欲しい値が取れればいいんだから
    データの元がフィールドだろうが DB だろうが URL だろうが
    全部 get〜 で OK

    >>88
    それもありだが、パフォーマンスを意識したコードを書きたいならやめた方がいい。

  54. 94 :名刺は切らしておりまして:2017/10/13(金) 00:07:20.94 ID:Uzjcuno5

    Objective-Cでは "get〜" は「返り値ではなく、メモリ領域にコピーして戻す」ことを
    意味するという指針になっていたはず。

    >>65
    Objective-C での getter は名詞で表現するのが基本ルールだからな

  55. 95 :名刺は切らしておりまして:2017/10/13(金) 00:09:59.30 ID:Y2Nh7ShL

    書いてから一ヶ月もすると自分で書いたのに分からなくなるからなあ
    ほんとめんどくさいわ

  56. 96 :名刺は切らしておりまして:2017/10/13(金) 00:21:15.01 ID:7dGT1P7Q

    コードを書く技術より、コードを読む技術を磨くべき

  57. 97 :名刺は切らしておりまして:2017/10/13(金) 00:32:39.50 ID:Uzjcuno5

    コードを書く技術より、コードを読む技術を磨くべき

    >>96
    きれいなコードを書く人ほど、汚いコードを読むスキルが磨かれないジレンマ…

  58. 98 :名刺は切らしておりまして:2017/10/13(金) 00:33:44.32 ID:89LtIKZ2

    getの反対はputだと新人に教えたら困惑してた

  59. 99 :名刺は切らしておりまして:2017/10/13(金) 00:38:18.66 ID:Uzjcuno5

    getの反対はputだと新人に教えたら困惑してた

    >>98
    そんなん誰でも困惑するわw
    よく耐えたなその新人…

  60. 100 :名刺は切らしておりまして:2017/10/13(金) 00:41:23.91 ID:DtyrUaPC

    日本語でコーディングするプログラミング言語がいいよ。
    日本語だからコメントがなくても見通しがいい。

  61. 104 :名刺は切らしておりまして:2017/10/13(金) 02:47:14.48 ID:N4rmd99i

    学生時代は書き終わったCのコードを短くしていくのが楽しかったな。

    他に、アセンブラ比率を高めて変態的なものを書いてみたり。

Related Post