X



【IT】開発スピードを向上させる、読みやすいコードの書き方
■ このスレッドは過去ログ倉庫に格納されています
0001ノチラ ★
垢版 |
2017/10/07(土) 20:02:30.16ID:CAP_USER
良いコードとチーム開発

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

「コードを理解する」というのは、変更を加えたりバグを見つけたりできるという意味だ。他のコードと連携する方法も理解しておかなければいけない。
『リーダブルコード』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
0016名刺は切らしておりまして
垢版 |
2017/10/07(土) 23:00:17.43ID:8Vfuqswx
俺は変数名の頭に型名を入れる。
変数名が長ったらしくなっても
それが何を意味するか分かるから
0018名刺は切らしておりまして
垢版 |
2017/10/07(土) 23:37:39.44ID:ZkSQ2a9B
1関数5000行とか見たけど、お前らの最高は?
0019名刺は切らしておりまして
垢版 |
2017/10/07(土) 23:45:09.83ID:wDuJC1uj
getpageか批判承知で言えば英単語だから僅かだけど
英語圏の人より認識に遅れが出るよね。一つ一つは少しだけど
大量にあるときは英語が母国語の人にアドバンテージあるよね
0020名刺は切らしておりまして
垢版 |
2017/10/08(日) 00:27:36.08ID:2eNTRVlD
 
クソコードを書くプログラマーは
自分のコードの正当性すら説明できない
論破されると不貞腐れる奴が多い
0021名刺は切らしておりまして
垢版 |
2017/10/08(日) 00:31:36.87ID:hzur1uF3
>>18
1関数2000くらいだな
それがたくさんあるポンコツシステムのリファクタさせられた

そんな糞が役職上で給料も上
マジで殺したいと思ったわ
0022名刺は切らしておりまして
垢版 |
2017/10/08(日) 01:04:34.21ID:SGAL7WIQ
>>16
型が変わったら逆にミスリードを誘うゴミ
動的型付けのスクリプトはやってるから今は嫌われるスタイル

>>19
中の実装を呼び出し側に意識させる必要が有るかだな
ダウンロードだと呼び出し側は何かするからDownloadがいいけど
基本はゲットでいいと思ってる

コード短いと単体テストも簡単だから短くあるべき
保守要因がわかるように単純化して読みにくいコードは書かない
0023名刺は切らしておりまして
垢版 |
2017/10/08(日) 01:18:08.56ID:TjnX9x3I
>>18
530000。

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

なお各領域内は完全に一枚岩で混沌の極み
0025名刺は切らしておりまして
垢版 |
2017/10/08(日) 01:54:30.90ID:DrPMNTs+
日本の現場だと、メソッド名に英語ではなく日本語を使うよう指導されるから無駄
0026名刺は切らしておりまして
垢版 |
2017/10/08(日) 01:55:07.73ID:l+gZERxf
>>20
それわかる〜
何でこんなヤツが今まで生き残って来れたのか不思議に思うことがよくあった。
0027名刺は切らしておりまして
垢版 |
2017/10/08(日) 01:58:45.68ID:21B+8maP
>>23
桁が違うな。俺も似たようなの見たことあるが、せいぜい数千行だった

あとアセンブラをベタ移植したCコードも見たことある。変数がレジスタ名でgoto文多用だったけど、きちんと機能しててスゲーと思った
0029名刺は切らしておりまして
垢版 |
2017/10/08(日) 04:28:15.85ID:iDzuG1Hf
フローチャートの発展形のようなものを書いてからプログラムを書き下す事で
同じ仕事をする場合は絶対に一通りにしか書けない言語だかやり方が有ると
昔聞いた事が有る
本当にそんなすごい事出来るんだろうか?
0031名刺は切らしておりまして
垢版 |
2017/10/08(日) 06:09:50.29ID:H+DZOlmD
>>8
人を記憶型と指向型に大別する人を
コンピュータープログラミングの話題で見るのはちょっと意外。

政治とか国際関係のニュースでの発言が多いから
そっちの人かと思ってたわ。
0032名刺は切らしておりまして
垢版 |
2017/10/08(日) 06:35:39.64ID:OgdDWJ1g
>>1
Knuth先生は数十年前にはるか先に到達している
英語だから知らないだけ
なおかつそれでも今でもコーディングが駄目だという事は問題はほかにある
0033名刺は切らしておりまして
垢版 |
2017/10/08(日) 06:39:18.61ID:OgdDWJ1g
>>1
最近の作法は知らんけど
GetPage(url) の GetPage を 変数名 と呼ぶようになったのか?
0035名刺は切らしておりまして
垢版 |
2017/10/08(日) 07:30:58.32ID:+TxyZcvx
getがどうとか英語のニュアンスがとかどうでもいいし、
だいたいマイクロソフトの標準ライブラリー自体get何々って関数たくさん作ってるし、
この記事の内容書いた人ちょっとおかしいんだろう。
あと昔のケチって詰めた書き方してるやつは読みにくい。
0037名刺は切らしておりまして
垢版 |
2017/10/08(日) 09:59:56.11ID:cA3CCtCo
たまに
ジェネレータの出力コードに文句言ってる新人が居るので笑える
1万行のif文手作業で書いてると思うほうがオカシイ。
0039名刺は切らしておりまして
垢版 |
2017/10/08(日) 11:05:04.79ID:H056hn36
>>1
> インターネットから取ってくるのであれば、FetchPage()やDownloadPage()のほうが明確だ。
インターネットもしくはDBからページを取得するように仕様が変わったら
わざわざ関数名変えないといけないけど。
0041名刺は切らしておりまして
垢版 |
2017/10/08(日) 11:45:15.12ID:yZ+53gyh
>>40
ペラペラになる必要はないけど、今時、英文ドキュメントすら読めないのなら
やめてもらった方がみんなのためよ。
0042名刺は切らしておりまして
垢版 |
2017/10/08(日) 11:59:53.20ID:H056hn36
10年位前までは英語できない奴らが結構いたし、
英語読むことが必須の案件ではわざわざ「英語ドキュメント読む必要があるけど大丈夫か」
みたいな確認があったけど、最近はそういう確認無くて普通に英語ドキュメント読まされるし、
若い奴らはある程度英語できるのは当たり前になってる気がする。
0043名刺は切らしておりまして
垢版 |
2017/10/08(日) 12:49:04.40ID:bhDc7cDI
すでに出来上がったコードにあとからあれこれ仕様をすぐに追加しろっていうもんだからアドホックなコードになってワケわからんことになるんだよ。
0049名刺は切らしておりまして
垢版 |
2017/10/08(日) 18:29:46.34ID:4XB2ZFrq
以前、asahi.comの技術募集の条件欄に

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

と書いてあったのを思い出す様な話だな。
0053名刺は切らしておりまして
垢版 |
2017/10/09(月) 00:53:13.65ID:t9+LePa6
>>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なら動く。
0055名刺は切らしておりまして
垢版 |
2017/10/09(月) 01:58:50.96ID:UoW35Cxz
100人に「あなたのオーガズムの顔を見せて」と、お願いしてみた
http://www.kzzdd.shop/20172017.html
0057名刺は切らしておりまして
垢版 |
2017/10/09(月) 02:11:00.37ID:S12t3lAe
ビジネスニュースなのかこれ?w
0058名刺は切らしておりまして
垢版 |
2017/10/09(月) 02:12:52.44ID:S12t3lAe
>>47
こういうこと言うやつに限ってクソコード書くから困る
0059名刺は切らしておりまして
垢版 |
2017/10/09(月) 02:17:53.45ID:eqR0r79x
AIがどーたらこーたらって話は大きいが
開発言語についての進化は対して変わらないのが現状。
0061名刺は切らしておりまして
垢版 |
2017/10/09(月) 02:41:52.32ID:yikK4rbk
昔読んだけどまぁまぁ役に立った
0064名刺は切らしておりまして
垢版 |
2017/10/09(月) 06:10:45.29ID:9Go1BnZF
Objective-Cでは "get〜" は「返り値ではなく、メモリ領域にコピーして戻す」ことを
意味するという指針になっていたはず。
0069名刺は切らしておりまして
垢版 |
2017/10/09(月) 11:19:20.26ID:j2RdSpoc
>>52
昔は日本のITはそれなりに技術があった。一億総中流で普及率もあり、ガラパゴスとしてやっていける時代だった。一人当たりGDP世界一の時代。
0070名刺は切らしておりまして
垢版 |
2017/10/09(月) 11:43:00.14ID:MVqpUCN2
勢いで一気に書いて後から直すという事が多い
0071名刺は切らしておりまして
垢版 |
2017/10/09(月) 11:53:01.08ID:M7H3Rj7G
技術力が低いIT技術者 -> できなすぎて病んで退場
技術力が高いIT技術者 -> できないやつの仕事押し付けられすぎて病んで退場

日本でIT業界に就職するやつって頭おかしい
0072名刺は切らしておりまして
垢版 |
2017/10/09(月) 12:25:59.89ID:vvVFDM50
変数名も1024文字の時代だし
コメント書くぐらいなら
そのコメントを変数名にすればよいわ
0073名刺は切らしておりまして
垢版 |
2017/10/09(月) 12:37:28.06ID:pMIX5Mgm
>>72
変数は良いけど処理はどうするの?
なぜこういう処理で正しいかと言うことを説明したいときにはどうしようもない
0074名刺は切らしておりまして
垢版 |
2017/10/09(月) 13:15:45.42ID:vvVFDM50
変数と変数を処理するのは
コードそのものじゃん
それが正しい事を証明するのはテストコード
それでも足りなきゃwikiのURLでも書いとけばオケ

したがってコメントは無駄
0076名刺は切らしておりまして
垢版 |
2017/10/09(月) 16:03:36.55ID:01cKK1rU
別にコメント書かなくてもいいけどその脳みそ保守に必要だから体ごと置いていってもらおうか
0079名刺は切らしておりまして
垢版 |
2017/10/10(火) 12:37:53.31ID:AuCQmVhc
>>78
正しいかどうかは判定できるけど、なぜ正しいのかの説明は与えてくれない
0080名刺は切らしておりまして
垢版 |
2017/10/10(火) 21:44:18.66ID:jjiBez4a
そもそも正しい方法はひとつじゃない
そこそこに正しいかもしれない方法にすぎないでしょ
0083名刺は切らしておりまして
垢版 |
2017/10/11(水) 16:27:32.52ID:CS1YL3d0
よくわかりません。
0086名刺は切らしておりまして
垢版 |
2017/10/12(木) 16:33:28.84ID:QeJWYWrx
ほんとうだ。
0087名刺は切らしておりまして
垢版 |
2017/10/12(木) 16:47:35.60ID:5r0VPaGI
処理の隠蔽という意味では
使う側からしたら欲しい値が取れればいいんだから
データの元がフィールドだろうが DB だろうが URL だろうが
全部 get〜 で OK
0088名刺は切らしておりまして
垢版 |
2017/10/12(木) 16:57:55.73ID:o726XiLl
>>87
すでに、オーバーロードして名前を共通にできる言語が主流だからね
0090名刺は切らしておりまして
垢版 |
2017/10/12(木) 22:27:59.61ID:o726XiLl
そんな極端な例を言ってるつもりはない
0091名刺は切らしておりまして
垢版 |
2017/10/12(木) 23:51:03.31ID:vJc0mtnr
>>5
超だせーよw
呼び出し側のコードだけで内容理解できるように命名するのがイケてるんだよ。
わざわざメソッド定義見に行かなきゃならない名称は失敗だと思え!
0092名刺は切らしておりまして
垢版 |
2017/10/13(金) 00:02:04.04ID:Uzjcuno5
>>87
それもありだが、パフォーマンスを意識したコードを書きたいならやめた方がいい。
0093名刺は切らしておりまして
垢版 |
2017/10/13(金) 00:07:20.94ID:Uzjcuno5
>>64
Objective-C での getter は名詞で表現するのが基本ルールだからな
0094名刺は切らしておりまして
垢版 |
2017/10/13(金) 00:09:59.30ID:Y2Nh7ShL
書いてから一ヶ月もすると自分で書いたのに分からなくなるからなあ
ほんとめんどくさいわ
0095名刺は切らしておりまして
垢版 |
2017/10/13(金) 00:21:15.01ID:7dGT1P7Q
コードを書く技術より、コードを読む技術を磨くべき
0096名刺は切らしておりまして
垢版 |
2017/10/13(金) 00:32:39.50ID:Uzjcuno5
>>95
きれいなコードを書く人ほど、汚いコードを読むスキルが磨かれないジレンマ...
0097名刺は切らしておりまして
垢版 |
2017/10/13(金) 00:33:44.32ID:89LtIKZ2
getの反対はputだと新人に教えたら困惑してた
0098名刺は切らしておりまして
垢版 |
2017/10/13(金) 00:38:18.66ID:Uzjcuno5
>>97
そんなん誰でも困惑するわw
よく耐えたなその新人...
0099名刺は切らしておりまして
垢版 |
2017/10/13(金) 00:41:23.91ID:DtyrUaPC
日本語でコーディングするプログラミング言語がいいよ。
日本語だからコメントがなくても見通しがいい。
0100名刺は切らしておりまして
垢版 |
2017/10/13(金) 00:49:36.55ID:q00Kmy8k
いまさら感あるけど、コード綺麗に書く意識付けにはいいんじゃないか?
既存コードあるところで何でもかんでもこれされると困るのは次の課題だが。

コードコンプリートとかリファクタリング読むとまた感想変わるかもしれんけど。
現場のレベルに合わせてコードかけるようになると波風立たず色々楽になるよ。
0101名刺は切らしておりまして
垢版 |
2017/10/13(金) 01:16:57.60ID:UvZrr8vM
派遣先のお爺ちゃんで、何が何でもgoto使いたがる人がいて困った・・・
switchから抜けるのに何でわざわざgoto使うのさ

と言うか、何でそれでコンパイラーは通しちゃうのよ
0102名刺は切らしておりまして
垢版 |
2017/10/13(金) 01:50:00.64ID:Ln0OqJoR
>>52
最近は大卒が当たり前だから最低限は読めるだろう

>>99
なでしこ、ひまわり?
0103名刺は切らしておりまして
垢版 |
2017/10/13(金) 02:47:14.48ID:N4rmd99i
学生時代は書き終わったCのコードを短くしていくのが楽しかったな。

他に、アセンブラ比率を高めて変態的なものを書いてみたり。
0104名刺は切らしておりまして
垢版 |
2017/10/13(金) 06:57:11.73ID:hsO7eMI8
>>90
極端とか意味わからん
>>87が言ってることを書いてるだけなんだが w
そもそも論点はそこじゃなくてソースを切り替えるのにオーバーロードとかアホじゃね?
って話
0107名刺は切らしておりまして
垢版 |
2017/10/13(金) 08:51:12.19ID:S7O07/uu
変数名i,x,y,zは止めてくれ
0109名刺は切らしておりまして
垢版 |
2017/10/13(金) 09:26:12.52ID:DtyrUaPC
なるべくどの言語にも共通する構文や機能を使って書いてほしいね。
.eachメソッドを使わずにfor文を使うとかね。
0110名刺は切らしておりまして
垢版 |
2017/10/13(金) 09:27:36.01ID:oN6NSLax
>>35
これの重大性がわからないお前みたいな奴が大量にいるから
腐ったコードが量産されてんだよバカ死ね
0112名刺は切らしておりまして
垢版 |
2017/10/13(金) 09:49:57.54ID:DLAuUjG6
モデル駆動型でコードを書かずに
高速開発()
0113名刺は切らしておりまして
垢版 |
2017/10/13(金) 10:08:11.97ID:3pfDi9/W
>>98みたいなレベルがいたら現場は大混乱だな
0115名刺は切らしておりまして
垢版 |
2017/10/13(金) 11:10:15.33ID:tisvLFWq
>>92
パフォーマンス重視ならコンパイラによって静的に解決できなきゃエラーになるでしょ
0116名刺は切らしておりまして
垢版 |
2017/10/13(金) 11:16:15.34ID:tisvLFWq
>>102
SIerでコード書いてるプログラマは、最近はほとんど高卒だよ。
大卒は高卒派遣の管理からスタートする。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況