SlideShare a Scribd company logo
1 of 26
Download to read offline
リーダブルコード
が良書だったのでまとめました
リーダブルコードとは?
リーダーぶる行動?
寄り目のバイトリーダーの
マネジメント術とかそんなの
リーダブルコードとは?
じゃないです
よいコードってなに?
♯ 拡張性
♯ 再利用性
♯ 開発速度
♯ 可読性 <- 今回のテーマはこれ
♯ パフォーマンス
♯ セキュリティ
リーダブルなコードとは?
新しいプロジェクトのメンバーが
理解するまでにかかる時間が少ないコード
※理解するというのは変更を加えたりバグを見つけ
たり出来るという意味。
コードを読みやすくするために
♯ 表面上の改善 <- すぐ出来て効果が高い
♯ コードの再構成
表面上の改善
♩ 名前に意味を込める
♩ 誤解されない名前
♩ 読みやすいフォーマット
♩ 分かりやすいコメント
名前に意味を込める -1-
buildTaxUtils()
generateTaxUtils()
事前に設定が必
要
新しいオブジェ
クトを作る
filter()
select()
exclude()
選択
除外
♪ メソッドには具体的な名前をつかう
makeTaxUtils()
名前に意味を込める -2-
delay
fileSize
delay_secs
size_mb
plaintext_password
unescaped_commen
password
comment
♪ 変数に単位をつける
♪ その他情報を追加する
名前に意味を込める -3-
OK : document -> doc
string -> str
NG : TTPCommonUtils
well knownな略
語
ディルバートを
読んでないと分
からない
♪ 頭文字と省略形
誤解されない名前
- get や size は軽い処理だと思われる
- 限界地を含めるときは min, max
- 範囲をしているときは first, last
- 包含、排他的範囲には begin, end
♪ 習慣的な名前
読みやすいフォーマット -1-
// 超過労働者チェック
List<String> overworker = employeeList.stream().filter(employee -> employee.getWorkTime >
200).sorted(Comparator.comparingInt(Employee::getEmployeeId)).map(Employee::getName).collect(C
ollectors.toList());
// 超過労働者チェック
List<String> overworker = employeeList.stream()
.filter(employee -> employee.getWorkTime > 200)
.sorted(Comparator.comparingInt(Employee::getEmployeeId))
.map(Employee::getName)
.collect(Collectors.toList());
✖
♪ 適当な改行
読みやすいフォーマット -2-
//データを配列化する
$data = array(
'monthly_report_id' => $dailyReportList[0]['monthly_report_id'],
'monthly_report_apply_status' => CELLAR_MONTHLY_REPORT_APPLY_STATUS_APPLIED,
'attendance_count' => $attendanceCount,
'working_hours' => $totalWorkingHours,
'holiday_working_hours' => $totalHolidayWorkingHours,
'midnight_working_hours' => $totalMidnightWorkingHours,
'paid_holiday_count' => $paidHolidayCount,
);
✖
♪ 縦の線をそろえる
読みやすいフォーマット -2-
//データを配列化する
$data = array(
'monthly_report_id' => $dailyReportList[0]['monthly_report_id'],
'monthly_report_apply_status' => CELLAR_MONTHLY_REPORT_APPLY_STATUS_APPLIED,
'attendance_count' => $attendanceCount,
'working_hours' => $totalWorkingHours,
'holiday_working_hours' => $totalHolidayWorkingHours,
'midnight_working_hours' => $totalMidnightWorkingHours,
'paid_holiday_count' => $paidHolidayCount,
);
♪ 縦の線をそろえる
読みやすいフォーマット -3-
$employeeId = $this->data["employee_id"];
$expenses = $this->data["expenses"];
$route = $this->data["route"];
$facility = $this->data["facility"];
$reportId = $this->data["monthly_report_id"];
$monthlyData = array('employee_id' => $employeeId,
'monthly_report_id' => $reportId,
'regular_transport_expenses' => $expenses,
'regular_transport_route' => $route,
'regular_transport_facility' => $facility,
);
✖
♪ 順番を守る
読みやすいフォーマット -4-
File inputFile = new File(input_file_name);
FileReader filereader = new FileReader(inputFile);
BufferedReader br = new BufferedReader(filereader);
String dateText = br.readLine();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(dateText, formatter);
String futureDate = localDateTime.plusDays(3).toString();
File outputFile = new File(output_file_name);
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(outputFile)));
pw.println(futureDate);
✖
♪ 段落を分ける
読みやすいフォーマット -4-
// extract
File inputFile = new File(input_file_name);
FileReader filereader = new FileReader(inputFile);
BufferedReader br = new BufferedReader(filereader);
String dateText = br.readLine();
// transform
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(dateText, formatter);
String futureDate = localDateTime.plusDays(3).toString();
// load
File outputFile = new File(output_file_name);
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(outputFile)));
pw.println(futureDate);
♪ 段落を分ける
読みやすいフォーマット -5-
@test
public void test(){
List<Employee> empList = new ArrayList<>();
Employee emp = new Employee();
emp.setName(“sato”);
emp.setAge(10);
emp.setAdministrative(false);
empList.add(emp);
emp = new Employee();
emp.setName(“yamada”);
emp.setAge(30);
emp.setAdministrative(false);
empList.add(emp);
...
}
✖
♪ ヘルパーメソッドの導入
読みやすいフォーマット -5-
@test
public void test(){
List<Employee> empList = new ArrayList<>();
// name age admin
empList.add(empHelper(“sato”, 10, false));
empList.add(empHelper(“yamada”, 30, false));
...
}
private Employee empHelper(String name, int age, boole admin) {
Employee emp = new Employee();
emp.setName(name);
emp.setAge(age);
emp.setAdministrative(admin);
return emp;
}
♪ ヘルパーメソッドの導入
分かりやすいコメント -1-
/**
* 金額を扱う為のクラスです。
* 通貨換算、税、丸めなどの機能を提供します。
* Java1.3用に標準APIを移植しました。
* このためJPY,USDにしか対応していません。
*/
public interface MonetaryAmount extends CurrencySupplier, NumberSupplier,
Comparable<MonetaryAmount>{
...
}
♪ ファイルやメソッドには全体像のコメントする
分かりやすいコメント -2-
// トランザクションの開始
$transaction->begin($dbh);
✖
♪ コードからすぐに分かることは書かない
分かりやすいコメント -3-
// 月報情報の取得
$trafficExpenses = WorkReportService::findWorkReport(
$employeeId, $year, $month, $this->errorMessageList);
// 月報情報の取得
// findWorkReportはデータが存在しない場合、データをDBに登録してその値を返します
$trafficExpenses = WorkReportService::findWorkReport(
$employeeId, $year, $month, $this->errorMessageList);
※findWorkReportは
データが存在しない場合、新規にデータを登録してその値を返す実装
✖
♪ 読み手が驚くような動作はコメントする
分かりやすいコメント -4-
// 月報情報の取得
$trafficExpenses = WorkReportService::findWorkReport(
$employeeId, $year, $month, $this->errorMessageList);
// 月報情報の取得
$trafficExpenses = WorkReportService::selecsertWorkReport(
$employeeId, $year, $month, $this->errorMessageList);
✖
♪ ひどい名前はコメントではなく名前を変える
分かりやすいコメント -5-
'first_name' => array(
'ruleNotEmpty' => array(
'rule' => 'notEmpty',
'message' => E_MESSAGE_FIRST_FAMILY_NAME_EMPTY
),
'ruleMaxLength' => array(
// FIXME 4バイト以上のUnicode文字を入力されるとDB登録時にエラーになる
'rule' => array('maxLength', '8'),
'message' => E_MESSAGE_FIRST_FAMILY_NAME_LENGTH
)
♪ コードの欠陥にコメントをつける
分かりやすいコメント -6-
# コネクションプールの設定
driverClassName=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521/xe
username=alibaba
password=0pen5esame
# 出社のピーク時だけ負荷が高いのでmaxActiveは社員数の80%、普段は出社ピークでも最大30接続程度
initialSize=5
maxActive=50
maxIdle=5
maxWait=5000
validationQuery=select count(*) from dual
♪ 設定値にコメントをつける
まとめ
♯ 変数・関数は性質を現している名前にする
♯ コメントは読む人の助けになるか考えて書く

More Related Content

What's hot

Racc でおてがる構文解析
Racc でおてがる構文解析Racc でおてがる構文解析
Racc でおてがる構文解析morphine57
 
コードで感じるKotlin入門
コードで感じるKotlin入門コードで感じるKotlin入門
コードで感じるKotlin入門iPride Co., Ltd.
 
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥Insight Technology, Inc.
 
次世代DaoフレームワークDoma
次世代DaoフレームワークDoma次世代DaoフレームワークDoma
次世代DaoフレームワークDomaToshihiro Nakamura
 
COBOL技術者のためのJava勉強会
COBOL技術者のためのJava勉強会COBOL技術者のためのJava勉強会
COBOL技術者のためのJava勉強会naka hide
 
Rの初歩: 5. 入出力
Rの初歩: 5. 入出力Rの初歩: 5. 入出力
Rの初歩: 5. 入出力Teiko Suzuki
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたYoshio Hanawa
 
Mongo db勉強会
Mongo db勉強会Mongo db勉強会
Mongo db勉強会otmb
 
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについてAndroidの通信周りのコーディングについて
Androidの通信周りのコーディングについてShoichi Takagi
 
URIやTEXTをBEAMするアプリを作ったよ!
URIやTEXTをBEAMするアプリを作ったよ!URIやTEXTをBEAMするアプリを作ったよ!
URIやTEXTをBEAMするアプリを作ったよ!treby
 
Beam利用アプリ紹介+関連技術ネタ
Beam利用アプリ紹介+関連技術ネタBeam利用アプリ紹介+関連技術ネタ
Beam利用アプリ紹介+関連技術ネタKenichi Kambara
 
使い捨て python コードの書き方
使い捨て python コードの書き方使い捨て python コードの書き方
使い捨て python コードの書き方Sho Shimauchi
 
シェルスクリプトを極める
シェルスクリプトを極めるシェルスクリプトを極める
シェルスクリプトを極めるbsdhack
 
ソーシャルゲームの為のデータベース設計
ソーシャルゲームの為のデータベース設計ソーシャルゲームの為のデータベース設計
ソーシャルゲームの為のデータベース設計kaminashi
 
可読性について リーダブルコード Part5(優れたテストコード2)
可読性について リーダブルコード Part5(優れたテストコード2)可読性について リーダブルコード Part5(優れたテストコード2)
可読性について リーダブルコード Part5(優れたテストコード2)tak
 
S2dao Seminar in tripodworks
S2dao Seminar in tripodworksS2dao Seminar in tripodworks
S2dao Seminar in tripodworkstripodworks
 
Fizz buzz publish
Fizz buzz publishFizz buzz publish
Fizz buzz publishM I
 

What's hot (20)

Racc でおてがる構文解析
Racc でおてがる構文解析Racc でおてがる構文解析
Racc でおてがる構文解析
 
良いコードとは
良いコードとは良いコードとは
良いコードとは
 
コードで感じるKotlin入門
コードで感じるKotlin入門コードで感じるKotlin入門
コードで感じるKotlin入門
 
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
 
次世代DaoフレームワークDoma
次世代DaoフレームワークDoma次世代DaoフレームワークDoma
次世代DaoフレームワークDoma
 
COBOL技術者のためのJava勉強会
COBOL技術者のためのJava勉強会COBOL技術者のためのJava勉強会
COBOL技術者のためのJava勉強会
 
Rの初歩: 5. 入出力
Rの初歩: 5. 入出力Rの初歩: 5. 入出力
Rの初歩: 5. 入出力
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
 
Mongo db勉強会
Mongo db勉強会Mongo db勉強会
Mongo db勉強会
 
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについてAndroidの通信周りのコーディングについて
Androidの通信周りのコーディングについて
 
URIやTEXTをBEAMするアプリを作ったよ!
URIやTEXTをBEAMするアプリを作ったよ!URIやTEXTをBEAMするアプリを作ったよ!
URIやTEXTをBEAMするアプリを作ったよ!
 
Beam利用アプリ紹介+関連技術ネタ
Beam利用アプリ紹介+関連技術ネタBeam利用アプリ紹介+関連技術ネタ
Beam利用アプリ紹介+関連技術ネタ
 
使い捨て python コードの書き方
使い捨て python コードの書き方使い捨て python コードの書き方
使い捨て python コードの書き方
 
勉強会 - 6
勉強会 - 6勉強会 - 6
勉強会 - 6
 
シェルスクリプトを極める
シェルスクリプトを極めるシェルスクリプトを極める
シェルスクリプトを極める
 
ソーシャルゲームの為のデータベース設計
ソーシャルゲームの為のデータベース設計ソーシャルゲームの為のデータベース設計
ソーシャルゲームの為のデータベース設計
 
可読性について リーダブルコード Part5(優れたテストコード2)
可読性について リーダブルコード Part5(優れたテストコード2)可読性について リーダブルコード Part5(優れたテストコード2)
可読性について リーダブルコード Part5(優れたテストコード2)
 
Lispmeetup11
Lispmeetup11Lispmeetup11
Lispmeetup11
 
S2dao Seminar in tripodworks
S2dao Seminar in tripodworksS2dao Seminar in tripodworks
S2dao Seminar in tripodworks
 
Fizz buzz publish
Fizz buzz publishFizz buzz publish
Fizz buzz publish
 

Viewers also liked

実践リーダブルコードの概要
実践リーダブルコードの概要実践リーダブルコードの概要
実践リーダブルコードの概要Kouhei Sutou
 
リーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめリーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめKouhei Sutou
 
リーダブルコード勉強会
リーダブルコード勉強会リーダブルコード勉強会
リーダブルコード勉強会norimatsu2012
 
名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう
名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう
名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こうKouhei Sutou
 
Writing Readable Code
Writing Readable CodeWriting Readable Code
Writing Readable Codeeddiehaber
 
The art of readable code (ch1~ch4)
The art of readable code (ch1~ch4)The art of readable code (ch1~ch4)
The art of readable code (ch1~ch4)Ki Sung Bae
 
実践リーダブルコードのコードチェンジ
実践リーダブルコードのコードチェンジ実践リーダブルコードのコードチェンジ
実践リーダブルコードのコードチェンジKouhei Sutou
 
The Art Of Readable Code
The Art Of Readable CodeThe Art Of Readable Code
The Art Of Readable CodeBaidu, Inc.
 
コーディングがラクになる!? “自分仕様”のさくさくコーディング法
コーディングがラクになる!? “自分仕様”のさくさくコーディング法コーディングがラクになる!? “自分仕様”のさくさくコーディング法
コーディングがラクになる!? “自分仕様”のさくさくコーディング法Rico Sengan
 
Introduction to Docker (and a bit more) at LSPE meetup Sunnyvale
Introduction to Docker (and a bit more) at LSPE meetup SunnyvaleIntroduction to Docker (and a bit more) at LSPE meetup Sunnyvale
Introduction to Docker (and a bit more) at LSPE meetup SunnyvaleJérôme Petazzoni
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code readingHiro Yoshioka
 
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでApache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでKouhei Sutou
 
コーディング入門以前
コーディング入門以前コーディング入門以前
コーディング入門以前Yutaka Kinjyo
 
Javaコーディング勉強会
Javaコーディング勉強会Javaコーディング勉強会
Javaコーディング勉強会inatus
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-靖 小田島
 
セキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試みセキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試みHiroshi Tokumaru
 
機械学習を利用したちょっとリッチな検索
機械学習を利用したちょっとリッチな検索機械学習を利用したちょっとリッチな検索
機械学習を利用したちょっとリッチな検索nobu_k
 
コーディングが上達するコツ
コーディングが上達するコツコーディングが上達するコツ
コーディングが上達するコツevol-ni
 

Viewers also liked (20)

実践リーダブルコードの概要
実践リーダブルコードの概要実践リーダブルコードの概要
実践リーダブルコードの概要
 
リーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめリーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめ
 
リーダブルコード勉強会
リーダブルコード勉強会リーダブルコード勉強会
リーダブルコード勉強会
 
名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう
名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう
名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう
 
Writing Readable Code
Writing Readable CodeWriting Readable Code
Writing Readable Code
 
The art of readable code (ch1~ch4)
The art of readable code (ch1~ch4)The art of readable code (ch1~ch4)
The art of readable code (ch1~ch4)
 
実践リーダブルコードのコードチェンジ
実践リーダブルコードのコードチェンジ実践リーダブルコードのコードチェンジ
実践リーダブルコードのコードチェンジ
 
The Art Of Readable Code.
The Art Of Readable Code.The Art Of Readable Code.
The Art Of Readable Code.
 
The Art Of Readable Code
The Art Of Readable CodeThe Art Of Readable Code
The Art Of Readable Code
 
コーディングがラクになる!? “自分仕様”のさくさくコーディング法
コーディングがラクになる!? “自分仕様”のさくさくコーディング法コーディングがラクになる!? “自分仕様”のさくさくコーディング法
コーディングがラクになる!? “自分仕様”のさくさくコーディング法
 
Introduction to Docker (and a bit more) at LSPE meetup Sunnyvale
Introduction to Docker (and a bit more) at LSPE meetup SunnyvaleIntroduction to Docker (and a bit more) at LSPE meetup Sunnyvale
Introduction to Docker (and a bit more) at LSPE meetup Sunnyvale
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
 
Xp祭り2013
Xp祭り2013Xp祭り2013
Xp祭り2013
 
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでApache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject Introspectionで
 
コーディング入門以前
コーディング入門以前コーディング入門以前
コーディング入門以前
 
Javaコーディング勉強会
Javaコーディング勉強会Javaコーディング勉強会
Javaコーディング勉強会
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
 
セキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試みセキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試み
 
機械学習を利用したちょっとリッチな検索
機械学習を利用したちょっとリッチな検索機械学習を利用したちょっとリッチな検索
機械学習を利用したちょっとリッチな検索
 
コーディングが上達するコツ
コーディングが上達するコツコーディングが上達するコツ
コーディングが上達するコツ
 

Similar to リーダブルコードが良書だったのでまとめました

CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14Takako Miyagawa
 
WordPressプラグイン作成入門
WordPressプラグイン作成入門WordPressプラグイン作成入門
WordPressプラグイン作成入門Yuji Nojima
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方do_aki
 
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話id774
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniterYuya Matsushima
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Takuya Matsunaga
 
Rancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げるRancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げるMichitaka Terada
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)Rui Hirokawa
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門Tomoya Kawanishi
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1kenjis
 
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術Koichi Fujikawa
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみるairtoxin Ishii
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会Yuji Otani
 
OSS開発勉強会-01B
OSS開発勉強会-01BOSS開発勉強会-01B
OSS開発勉強会-01BKohei KaiGai
 
NetBackup AIR CLI
NetBackup AIR CLINetBackup AIR CLI
NetBackup AIR CLIvxsejapan
 

Similar to リーダブルコードが良書だったのでまとめました (20)

CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14
 
WordPressプラグイン作成入門
WordPressプラグイン作成入門WordPressプラグイン作成入門
WordPressプラグイン作成入門
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
 
Rancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げるRancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げる
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 
BBBBB
BBBBBBBBBB
BBBBB
 
1MB
1MB1MB
1MB
 
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
 
OSS開発勉強会-01B
OSS開発勉強会-01BOSS開発勉強会-01B
OSS開発勉強会-01B
 
NetBackup AIR CLI
NetBackup AIR CLINetBackup AIR CLI
NetBackup AIR CLI
 

Recently uploaded

プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Recently uploaded (7)

プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

リーダブルコードが良書だったのでまとめました

Editor's Notes

  1. リーダブルコードという 可読性の高いコードについての技術書を読んだので内容を抜粋して紹介したいと思います。
  2. リーダブルコードとは...
  3. そのテーマは改めて
  4. みなさんコードを書く際に気を付けている事はいくつかあると思いますが 今回のテーマは可読性についてです。
  5. ソースコードを読む誰か(あるいは3ヵ月後のあなた)が読んだときに 同じ箇所を何回も読み直したり、デバッグしてみずともコードの意図が読めるコードがリーダブルなコードといえます。
  6. 今回は、すぐ出来て効果が高い命名やフォーマットに関する改善を中心に見ていきます。 書籍にはプログラムの構造そのものを変える「コードの再構成」についても示唆に富む内容が書かれていますので、興味のある方はぜひ読んでみてください。
  7. 表面上の改善には命名、フォーマット、コメントに関するものが挙げられます。
  8. makeでは意味が広すぎるので、より具体的な名称を付けましょう。 filterでは対象を選んでいるのか、除外しているのか不明確な場合があります。
  9. 変数名に型の情報(アプリケーションハンガリアン)を追加することで 可読性の向上と、バグ防止が見込めます。
  10. チーム内でしか意味の通らない略語の使用は避けるべきです。
  11. 慣用的な名前は意外な動きにならないように、注意して使用しましょう。
  12. 残業を多い社員をリストアップする処理です。
  13. 配列に値を設定する処理ですが keyとvalueの区別がつきにくいです。
  14. 整列することで key, valueがそれぞれ読みやすくなりました。
  15. 変数は定義する順番と使用する順番をそろえたほうが読みやすいです。
  16. ファイル処理の例です このままでは、何の処理か読み取るに大きな負荷がかかります。
  17. 段落を分割することで、関心のある部分にすぐに辿りつけます。 出力内容を改修したい場合はtransformのあたりを、ファイルが出力時にエラーが起きる場合はload付近から読み始められます。
  18. テストコードを書く際に、本来注目したいテストデータそのものが、処理のコードにまぎれて読みづらいです。
  19. ヘルパーメソッドを導入することで、データに集中しやすくなります。
  20. コードの先頭で、処理全体の概要を説明すると、理解がしやすくなります。
  21. 以上
  22. findとなっていますが、DBに新規レコードが作られることを注意喚起します。
  23. upsertじゃなくてselecsert?とはなりますが、意図せずデータを登録してしまうリスクが少し下がるように思います。 (補足)作為的な例で、ファンクション分割の粒度がおかしい気もします。
  24. TODO, FIXME, XXXなど使って、コードの欠陥やあるべき姿を伝えることで、コードの状態を理解しやすくなります。
  25. 設定値の算出根拠などをコメントすることで、定数の見直しの際に助けになります。