SlideShare uma empresa Scribd logo
1 de 15
リーダブルコード
 より良いコードを書くための
シンプルで実践的なテクニック
• Amazonレビュー
http://www.amazon.co.jp/%E3%83
%AA%E3%83%BC%E3%83%80%E3
%83%96%E3%83%AB%E3%82%B3
%E3%83%BC%E3%83%89-
%E2%80%95%E3%82%88%E3%82
%8A%E8%89%AF%E3%81%84%E3
%82%B3%E3%83%BC%E3%83%89
%E3%82%92%E6%9B%B8%E3%81
%8F%E3%81%9F%E3%82%81%E3
%81%AE%E3%82%B7%E3%83%B3
%E3%83%97%E3%83%AB%E3%81
%A7%E5%AE%9F%E8%B7%B5%E7
%9A%84%E3%81%AA%E3%83%86
%E3%82%AF%E3%83%8B%E3%83
%83%E3%82%AF-Theory-practice-
Boswell/dp/4873115655


• Togetterまとめ
http://togetter.com/li/333397
"美しいコードを見ると感動する。
 優れたコードは見た瞬間に何を
  しているかが伝わってくる。

そういうコードは使うのが楽し
いし、自分のコードもそうある
 べきだと思わせてくれる。"

 (リーダブルコード「はじめに」より)
「自分が書いたコードってどのくら
い覚えているんですか?」
「ほとんど覚えていないですよ。」
「直すときどうするんですか?わか
らなくなってるじゃないですか。」
「忘れても見たら簡単にわかるよう
に書いておくんですよ。」


  (リーダブルコード「解説」より)
第
名前に
情報を
       二
詰め込む   章
明確な単語を選ぶ
• get~はあまり明確でない(一体何を取る
  の?)
• 「カラフル」な単語を探す

単語      代替案
Send    Deliver , dispatch ,announce ,distribute,route
Find    search,extract,locate,recover
Start   Launch,create,begin,open
Make    Crete ,setup,build,generate,compose,add,new
明確な単語を選ぶ
class People{
    string name =“”;
    int height = 0;
    public int getSize(){
         return name.length();
    }
}

Sizeって一体どこのサイズだよ(゚Д゚)!
汎用的な名前を避ける(あるいは
   使う状況を選ぶ)
• tempとかretとか。
• このような汎用的な名前は生存期間が短
  い場合に使用する。
    String A = “a”;
    String B = “b”;

    // aとbの値を入れ替える
    String temp = A;
    A = b;
    B = temp;
汎用的な名前を避ける(あるいは
   使う状況を選ぶ)
• ループインデックスの i,j                       とかはOK。
for(int i = 0 ; i < rowcount ; i++)
{
  for(int j = 0 ; j < columncount ; j++)
   {
      array[i,j] = “hogehoge”;
   }
for(int row = 0 ; row < rowcount ; row++)
{
  for(int col = 0 ; col < columncount ; col++)
  {
      array[row , col] = “hogehoge”;
   }
抽象的な名前より具体的な名前を使う
• build.bat
< 何をビルド?


• build_custom.bat
< カスタマイズソースのビルドはわかった。モードは?


• build_custom_debug.bat
< カスタマイズソースをデバッグモードでビルドするのか!
名前に情報を追加する
• 値の単位

int start = DateTime.Now.Hour;
int startHour = DateTime.Now.Hour;
名前の長さを決める
• スコープが小さければ短い名前でもいい
  長く使われる変数の名前は長くてもわか
りやすい

• 長い名前を入力するのは問題ではない
  (ほとんどのIDEには入力補完機能が付
いている)
名前のフォーマットで情報を伝え
        る
• クラス名は CamelCase
• 変数名は lower_separated
(小文字をアンダースコアで区切ったも
の)
• 定数は CONSTANT_NAME
第二章まとめ
• 明確な単語を選ぶ
• tmpやretなどの汎用的な名前を避ける
• 具体的な名前を使って、物事を詳細に説
  明する
• 変数名に大切な情報を追加する
• スコープの大きな変数には長い名前を付
  ける
• 大文字やアンダースコアなどに意味を含
  める
おまけ
• #ワイルドプログラマ

http://togetter.com/li/300565?f=re
co1

Mais conteúdo relacionado

Semelhante a リーダブルコード 第二章

blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べ
Masahiro Nagano
 
FRT Vol. 4 インサイド・クラウドプラットフォーム
FRT Vol. 4 インサイド・クラウドプラットフォームFRT Vol. 4 インサイド・クラウドプラットフォーム
FRT Vol. 4 インサイド・クラウドプラットフォーム
Yasunari Goto (iChain. Inc.)
 
GoogleWebsiteOptimizerの使い方:非同期タグバージョン
GoogleWebsiteOptimizerの使い方:非同期タグバージョンGoogleWebsiteOptimizerの使い方:非同期タグバージョン
GoogleWebsiteOptimizerの使い方:非同期タグバージョン
VOYAGE GROUP UIO strategies section
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテスト
Tomonori Yamada
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
mitamex4u
 

Semelhante a リーダブルコード 第二章 (20)

GWOの使い方~非同期タグVer~
GWOの使い方~非同期タグVer~GWOの使い方~非同期タグVer~
GWOの使い方~非同期タグVer~
 
フロント作業の効率化
フロント作業の効率化フロント作業の効率化
フロント作業の効率化
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
 
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
 
【第2回】デザイナーがコードから読み解く、Androidアプリのデザインの幅を広げるコツとTips
【第2回】デザイナーがコードから読み解く、Androidアプリのデザインの幅を広げるコツとTips【第2回】デザイナーがコードから読み解く、Androidアプリのデザインの幅を広げるコツとTips
【第2回】デザイナーがコードから読み解く、Androidアプリのデザインの幅を広げるコツとTips
 
2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング
 
RLアーキテクチャ勉強会 MERLIN
RLアーキテクチャ勉強会 MERLINRLアーキテクチャ勉強会 MERLIN
RLアーキテクチャ勉強会 MERLIN
 
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べ
 
FRT Vol. 4 インサイド・クラウドプラットフォーム
FRT Vol. 4 インサイド・クラウドプラットフォームFRT Vol. 4 インサイド・クラウドプラットフォーム
FRT Vol. 4 インサイド・クラウドプラットフォーム
 
Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例
 
GoogleWebsiteOptimizerの使い方:非同期タグバージョン
GoogleWebsiteOptimizerの使い方:非同期タグバージョンGoogleWebsiteOptimizerの使い方:非同期タグバージョン
GoogleWebsiteOptimizerの使い方:非同期タグバージョン
 
JAZUG12周年 俺の Azure Cosmos DB
JAZUG12周年 俺の Azure Cosmos DBJAZUG12周年 俺の Azure Cosmos DB
JAZUG12周年 俺の Azure Cosmos DB
 
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテスト
 
Lightning Experience 時代のプロセス開発
Lightning Experience 時代のプロセス開発Lightning Experience 時代のプロセス開発
Lightning Experience 時代のプロセス開発
 
Enumはデキる子 ~ case .Success(let value): ~
 Enumはデキる子 ~ case .Success(let value): ~ Enumはデキる子 ~ case .Success(let value): ~
Enumはデキる子 ~ case .Success(let value): ~
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
 
Effective python #5, #6
Effective python #5, #6Effective python #5, #6
Effective python #5, #6
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 

Mais de Yuto Ogi

Hamamatsurb#30
Hamamatsurb#30Hamamatsurb#30
Hamamatsurb#30
Yuto Ogi
 
Introducing aws ruby sdk
Introducing aws ruby sdkIntroducing aws ruby sdk
Introducing aws ruby sdk
Yuto Ogi
 
20130310 jaws tokai2013
20130310 jaws tokai201320130310 jaws tokai2013
20130310 jaws tokai2013
Yuto Ogi
 

Mais de Yuto Ogi (12)

Rails application template
Rails application templateRails application template
Rails application template
 
Ruby with AWS DynamoDB
Ruby with AWS DynamoDBRuby with AWS DynamoDB
Ruby with AWS DynamoDB
 
s3_website
s3_websites3_website
s3_website
 
OSC浜名湖2016 Hamamatsu.rbの歩みとITコミュニティとの上手な関わり方
OSC浜名湖2016 Hamamatsu.rbの歩みとITコミュニティとの上手な関わり方OSC浜名湖2016 Hamamatsu.rbの歩みとITコミュニティとの上手な関わり方
OSC浜名湖2016 Hamamatsu.rbの歩みとITコミュニティとの上手な関わり方
 
itamaeで一撃サーバーProvisioning
itamaeで一撃サーバーProvisioningitamaeで一撃サーバーProvisioning
itamaeで一撃サーバーProvisioning
 
浜松Ruby会議01
浜松Ruby会議01浜松Ruby会議01
浜松Ruby会議01
 
DMLを実行するrubyスクリプトをmigrationファイルのように管理するRailsプラグインを作った
DMLを実行するrubyスクリプトをmigrationファイルのように管理するRailsプラグインを作ったDMLを実行するrubyスクリプトをmigrationファイルのように管理するRailsプラグインを作った
DMLを実行するrubyスクリプトをmigrationファイルのように管理するRailsプラグインを作った
 
Web制作者のためのサーバー勉強会@沼津
Web制作者のためのサーバー勉強会@沼津Web制作者のためのサーバー勉強会@沼津
Web制作者のためのサーバー勉強会@沼津
 
Hamamatsurb#30
Hamamatsurb#30Hamamatsurb#30
Hamamatsurb#30
 
Introducing aws ruby sdk
Introducing aws ruby sdkIntroducing aws ruby sdk
Introducing aws ruby sdk
 
20130310 jaws tokai2013
20130310 jaws tokai201320130310 jaws tokai2013
20130310 jaws tokai2013
 
20130112_出張JAWSUG浜松_Androidの会浜松支部
20130112_出張JAWSUG浜松_Androidの会浜松支部20130112_出張JAWSUG浜松_Androidの会浜松支部
20130112_出張JAWSUG浜松_Androidの会浜松支部
 

Último

Último (11)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

リーダブルコード 第二章