【IT】開発スピードを向上させる、読みやすいコードの書き方
■ このスレッドは過去ログ倉庫に格納されています
良いコードとチーム開発
では、自分以外がコードを理解できているのはどんな状態でしょうか。単に「読めればいい」というわけではありません。
「コードを理解する」というのは、変更を加えたりバグを見つけたりできるという意味だ。他のコードと連携する方法も理解しておかなければいけない。
『リーダブルコード』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 俺は変数名の頭に型名を入れる。
変数名が長ったらしくなっても
それが何を意味するか分かるから getpageか批判承知で言えば英単語だから僅かだけど
英語圏の人より認識に遅れが出るよね。一つ一つは少しだけど
大量にあるときは英語が母国語の人にアドバンテージあるよね
クソコードを書くプログラマーは
自分のコードの正当性すら説明できない
論破されると不貞腐れる奴が多い >>18
1関数2000くらいだな
それがたくさんあるポンコツシステムのリファクタさせられた
そんな糞が役職上で給料も上
マジで殺したいと思ったわ >>16
型が変わったら逆にミスリードを誘うゴミ
動的型付けのスクリプトはやってるから今は嫌われるスタイル
>>19
中の実装を呼び出し側に意識させる必要が有るかだな
ダウンロードだと呼び出し側は何かするからDownloadがいいけど
基本はゲットでいいと思ってる
コード短いと単体テストも簡単だから短くあるべき
保守要因がわかるように単純化して読みにくいコードは書かない >>18
530000。
上から順に
変数宣言領域
データ定義領域
データの切り出し領域
最後にロジック領域と、
大きく4つの領域がmainの中に詰まってた
なお各領域内は完全に一枚岩で混沌の極み 余談だが、変数は26個のみの使い回しで
a〜gはuint、h〜nはint、o〜zはvoid*だった 日本の現場だと、メソッド名に英語ではなく日本語を使うよう指導されるから無駄 >>20
それわかる〜
何でこんなヤツが今まで生き残って来れたのか不思議に思うことがよくあった。 >>23
桁が違うな。俺も似たようなの見たことあるが、せいぜい数千行だった
あとアセンブラをベタ移植したCコードも見たことある。変数がレジスタ名でgoto文多用だったけど、きちんと機能しててスゲーと思った >>25
そんな糞現場は速攻やめるわ。今の時代、技術力があれば年齢性別なく仕事を
選べるし。 フローチャートの発展形のようなものを書いてからプログラムを書き下す事で
同じ仕事をする場合は絶対に一通りにしか書けない言語だかやり方が有ると
昔聞いた事が有る
本当にそんなすごい事出来るんだろうか? >>5
そんなコメントを読まねばならない名前をつけるな >>8
人を記憶型と指向型に大別する人を
コンピュータープログラミングの話題で見るのはちょっと意外。
政治とか国際関係のニュースでの発言が多いから
そっちの人かと思ってたわ。 >>1
Knuth先生は数十年前にはるか先に到達している
英語だから知らないだけ
なおかつそれでも今でもコーディングが駄目だという事は問題はほかにある >>1
最近の作法は知らんけど
GetPage(url) の GetPage を 変数名 と呼ぶようになったのか? 天才のコードは凡人には難解っつーのはあるな
簡潔すぎて、なにがなにやら getがどうとか英語のニュアンスがとかどうでもいいし、
だいたいマイクロソフトの標準ライブラリー自体get何々って関数たくさん作ってるし、
この記事の内容書いた人ちょっとおかしいんだろう。
あと昔のケチって詰めた書き方してるやつは読みにくい。 たまに
ジェネレータの出力コードに文句言ってる新人が居るので笑える
1万行のif文手作業で書いてると思うほうがオカシイ。 >>25
むしろ英語使えって言うけどな。
日本語は付加価値が無い。 >>1
> インターネットから取ってくるのであれば、FetchPage()やDownloadPage()のほうが明確だ。
インターネットもしくはDBからページを取得するように仕様が変わったら
わざわざ関数名変えないといけないけど。 >>40
ペラペラになる必要はないけど、今時、英文ドキュメントすら読めないのなら
やめてもらった方がみんなのためよ。 10年位前までは英語できない奴らが結構いたし、
英語読むことが必須の案件ではわざわざ「英語ドキュメント読む必要があるけど大丈夫か」
みたいな確認があったけど、最近はそういう確認無くて普通に英語ドキュメント読まされるし、
若い奴らはある程度英語できるのは当たり前になってる気がする。 すでに出来上がったコードにあとからあれこれ仕様をすぐに追加しろっていうもんだからアドホックなコードになってワケわからんことになるんだよ。 >>24
i〜nが整数型、残りが実数型というのがお約束。
それがfortranの時代から続く暗黙のルルール。 以前、asahi.comの技術募集の条件欄に
・使用可能な言語: C言語
・習得レベル: 日常会話レベル
と書いてあったのを思い出す様な話だな。 コードコンプリート読んでみようと思うけど高くてな… >>42
逆に昔そんなんだったのが信じられない
よくやっていけたなと >>1
Windows (Internet Explorerのライブラリに含まれる関数)だと、ずいぶん昔から
URLDownloadToCacheFile や URLDownloadToFile というAPIがあってだな。
ttps://msdn.microsoft.com/en-us/library/ms775122(v=vs.85).aspx
ttps://msdn.microsoft.com/us-en/library/ms775123(v=vs.85).aspx
Minimum supported client
(対象クライアントOS) Windows XP(以降)
Minimum supported server
(対象サーバーOS) Windows 2000 Server(以降)
Product(製品) Internet Explorer 3.0(以降)
Windows 10はEdgeが標準だけど、実はInternet Explorerも入ってる。
つまり、URLDownloadToCacheFile や URLDownloadToFile を使えば、XPや2000 Server
以降のWindowsなら動く。 AjaxもIE5.5が最初にやり出したことだし、別に驚くほどのことでもない >>47
こういうこと言うやつに限ってクソコード書くから困る AIがどーたらこーたらって話は大きいが
開発言語についての進化は対して変わらないのが現状。 >>47
DDD系の実装は、今のトレンドだと思うけど。 Objective-Cでは "get〜" は「返り値ではなく、メモリ領域にコピーして戻す」ことを
意味するという指針になっていたはず。 >>53
inetコントロールは、バージョンの影響受けやすいからxpから動くけど注意が必要だわ >>49
ある意味分かってる人の要求だな。本気でプロだと日常会話もC言語になるからな >>52
昔は日本のITはそれなりに技術があった。一億総中流で普及率もあり、ガラパゴスとしてやっていける時代だった。一人当たりGDP世界一の時代。 技術力が低いIT技術者 -> できなすぎて病んで退場
技術力が高いIT技術者 -> できないやつの仕事押し付けられすぎて病んで退場
日本でIT業界に就職するやつって頭おかしい 変数名も1024文字の時代だし
コメント書くぐらいなら
そのコメントを変数名にすればよいわ >>72
変数は良いけど処理はどうするの?
なぜこういう処理で正しいかと言うことを説明したいときにはどうしようもない 変数と変数を処理するのは
コードそのものじゃん
それが正しい事を証明するのはテストコード
それでも足りなきゃwikiのURLでも書いとけばオケ
したがってコメントは無駄 別にコメント書かなくてもいいけどその脳みそ保守に必要だから体ごと置いていってもらおうか >>78
正しいかどうかは判定できるけど、なぜ正しいのかの説明は与えてくれない そもそも正しい方法はひとつじゃない
そこそこに正しいかもしれない方法にすぎないでしょ 処理の隠蔽という意味では
使う側からしたら欲しい値が取れればいいんだから
データの元がフィールドだろうが DB だろうが URL だろうが
全部 get〜 で OK >>87
すでに、オーバーロードして名前を共通にできる言語が主流だからね >>88
フィールド、データベース、URL(ネットワーク) でオーバーロード? >>5
超だせーよw
呼び出し側のコードだけで内容理解できるように命名するのがイケてるんだよ。
わざわざメソッド定義見に行かなきゃならない名称は失敗だと思え! >>87
それもありだが、パフォーマンスを意識したコードを書きたいならやめた方がいい。 >>64
Objective-C での getter は名詞で表現するのが基本ルールだからな 書いてから一ヶ月もすると自分で書いたのに分からなくなるからなあ
ほんとめんどくさいわ >>95
きれいなコードを書く人ほど、汚いコードを読むスキルが磨かれないジレンマ... >>97
そんなん誰でも困惑するわw
よく耐えたなその新人... 日本語でコーディングするプログラミング言語がいいよ。
日本語だからコメントがなくても見通しがいい。 いまさら感あるけど、コード綺麗に書く意識付けにはいいんじゃないか?
既存コードあるところで何でもかんでもこれされると困るのは次の課題だが。
コードコンプリートとかリファクタリング読むとまた感想変わるかもしれんけど。
現場のレベルに合わせてコードかけるようになると波風立たず色々楽になるよ。 派遣先のお爺ちゃんで、何が何でもgoto使いたがる人がいて困った・・・
switchから抜けるのに何でわざわざgoto使うのさ
と言うか、何でそれでコンパイラーは通しちゃうのよ >>52
最近は大卒が当たり前だから最低限は読めるだろう
>>99
なでしこ、ひまわり? 学生時代は書き終わったCのコードを短くしていくのが楽しかったな。
他に、アセンブラ比率を高めて変態的なものを書いてみたり。 >>90
極端とか意味わからん
>>87が言ってることを書いてるだけなんだが w
そもそも論点はそこじゃなくてソースを切り替えるのにオーバーロードとかアホじゃね?
って話 C言語は try ないから goto 使いたがるのわからんでもない。 なるべくどの言語にも共通する構文や機能を使って書いてほしいね。
.eachメソッドを使わずにfor文を使うとかね。 >>35
これの重大性がわからないお前みたいな奴が大量にいるから
腐ったコードが量産されてんだよバカ死ね >>92
パフォーマンス重視ならコンパイラによって静的に解決できなきゃエラーになるでしょ >>102
SIerでコード書いてるプログラマは、最近はほとんど高卒だよ。
大卒は高卒派遣の管理からスタートする。 ■ このスレッドは過去ログ倉庫に格納されています