Submit Search
Upload
リーダブルコードが良書だったのでまとめました
•
4 likes
•
1,910 views
T
Takumi Sato
Follow
書籍リーダブルコードより 可読性の高いコードを書くためのtipsをまとめてみました
Read less
Read more
Technology
Report
Share
Report
Share
1 of 26
Download now
Download to read offline
Recommended
リーダブルコード勉強会
リーダブルコード勉強会
TAKUYA YAMAMOTO
リーダブルコード 1.0'
リーダブルコード 1.0'
Yamamura Takashi
リーダブルコード
リーダブルコード
Keita Otsuka
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
Shigenori Sagawa
PHP+DB
PHP+DB
Sawada Makoto
Mobile programming seigyokoubun
Mobile programming seigyokoubun
Yuichiro Takahashi
後期第六回ネットワークチーム講座資料
後期第六回ネットワークチーム講座資料
densan_teacher
Programming under capability mode
Programming under capability mode
Yuichiro Naito
Recommended
リーダブルコード勉強会
リーダブルコード勉強会
TAKUYA YAMAMOTO
リーダブルコード 1.0'
リーダブルコード 1.0'
Yamamura Takashi
リーダブルコード
リーダブルコード
Keita Otsuka
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
Shigenori Sagawa
PHP+DB
PHP+DB
Sawada Makoto
Mobile programming seigyokoubun
Mobile programming seigyokoubun
Yuichiro Takahashi
後期第六回ネットワークチーム講座資料
後期第六回ネットワークチーム講座資料
densan_teacher
Programming under capability mode
Programming under capability mode
Yuichiro Naito
Racc でおてがる構文解析
Racc でおてがる構文解析
morphine57
良いコードとは
良いコードとは
Nobuyuki Matsui
コードで感じる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. 日本支社 高塚遥
Insight Technology, Inc.
次世代DaoフレームワークDoma
次世代DaoフレームワークDoma
Toshihiro Nakamura
COBOL技術者のためのJava勉強会
COBOL技術者のためのJava勉強会
naka hide
Rの初歩: 5. 入出力
Rの初歩: 5. 入出力
Teiko Suzuki
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
Mongo db勉強会
Mongo db勉強会
otmb
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについて
Shoichi Takagi
URIやTEXTをBEAMするアプリを作ったよ!
URIやTEXTをBEAMするアプリを作ったよ!
treby
Beam利用アプリ紹介+関連技術ネタ
Beam利用アプリ紹介+関連技術ネタ
Kenichi Kambara
使い捨て python コードの書き方
使い捨て python コードの書き方
Sho Shimauchi
勉強会 - 6
勉強会 - 6
KenjiYamasaki5
シェルスクリプトを極める
シェルスクリプトを極める
bsdhack
ソーシャルゲームの為のデータベース設計
ソーシャルゲームの為のデータベース設計
kaminashi
可読性について リーダブルコード Part5(優れたテストコード2)
可読性について リーダブルコード Part5(優れたテストコード2)
tak
Lispmeetup11
Lispmeetup11
blackenedgold
S2dao Seminar in tripodworks
S2dao Seminar in tripodworks
tripodworks
Fizz buzz publish
Fizz buzz publish
M I
実践リーダブルコードの概要
実践リーダブルコードの概要
Kouhei Sutou
リーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめ
Kouhei Sutou
More Related Content
What's hot
Racc でおてがる構文解析
Racc でおてがる構文解析
morphine57
良いコードとは
良いコードとは
Nobuyuki Matsui
コードで感じる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. 日本支社 高塚遥
Insight Technology, Inc.
次世代DaoフレームワークDoma
次世代DaoフレームワークDoma
Toshihiro Nakamura
COBOL技術者のためのJava勉強会
COBOL技術者のためのJava勉強会
naka hide
Rの初歩: 5. 入出力
Rの初歩: 5. 入出力
Teiko Suzuki
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
Mongo db勉強会
Mongo db勉強会
otmb
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについて
Shoichi Takagi
URIやTEXTをBEAMするアプリを作ったよ!
URIやTEXTをBEAMするアプリを作ったよ!
treby
Beam利用アプリ紹介+関連技術ネタ
Beam利用アプリ紹介+関連技術ネタ
Kenichi Kambara
使い捨て python コードの書き方
使い捨て python コードの書き方
Sho Shimauchi
勉強会 - 6
勉強会 - 6
KenjiYamasaki5
シェルスクリプトを極める
シェルスクリプトを極める
bsdhack
ソーシャルゲームの為のデータベース設計
ソーシャルゲームの為のデータベース設計
kaminashi
可読性について リーダブルコード Part5(優れたテストコード2)
可読性について リーダブルコード Part5(優れたテストコード2)
tak
Lispmeetup11
Lispmeetup11
blackenedgold
S2dao Seminar in tripodworks
S2dao Seminar in tripodworks
tripodworks
Fizz buzz publish
Fizz buzz publish
M I
What's hot
(20)
Racc でおてがる構文解析
Racc でおてがる構文解析
良いコードとは
良いコードとは
コードで感じるKotlin入門
コードで感じるKotlin入門
[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
COBOL技術者のためのJava勉強会
COBOL技術者のためのJava勉強会
Rの初歩: 5. 入出力
Rの初歩: 5. 入出力
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Mongo db勉強会
Mongo db勉強会
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについて
URIやTEXTをBEAMするアプリを作ったよ!
URIやTEXTをBEAMするアプリを作ったよ!
Beam利用アプリ紹介+関連技術ネタ
Beam利用アプリ紹介+関連技術ネタ
使い捨て python コードの書き方
使い捨て python コードの書き方
勉強会 - 6
勉強会 - 6
シェルスクリプトを極める
シェルスクリプトを極める
ソーシャルゲームの為のデータベース設計
ソーシャルゲームの為のデータベース設計
可読性について リーダブルコード Part5(優れたテストコード2)
可読性について リーダブルコード Part5(優れたテストコード2)
Lispmeetup11
Lispmeetup11
S2dao Seminar in tripodworks
S2dao Seminar in tripodworks
Fizz buzz publish
Fizz buzz publish
Viewers also liked
実践リーダブルコードの概要
実践リーダブルコードの概要
Kouhei Sutou
リーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめ
Kouhei Sutou
リーダブルコード勉強会
リーダブルコード勉強会
norimatsu2012
名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう
名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう
Kouhei Sutou
Writing Readable Code
Writing Readable Code
eddiehaber
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 Code.
Unyong (Sheldon) Choi
The Art Of Readable Code
The Art Of Readable Code
Baidu, Inc.
コーディングがラクになる!? “自分仕様”のさくさくコーディング法
コーディングがラクになる!? “自分仕様”のさくさくコーディング法
Rico Sengan
Introduction to Docker (and a bit more) at LSPE meetup Sunnyvale
Introduction to Docker (and a bit more) at LSPE meetup Sunnyvale
Jérôme Petazzoni
Programming camp code reading
Programming camp code reading
Hiro Yoshioka
Xp祭り2013
Xp祭り2013
Yoshihiro Furukawa
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject Introspectionで
Kouhei Sutou
コーディング入門以前
コーディング入門以前
Yutaka Kinjyo
Javaコーディング勉強会
Javaコーディング勉強会
inatus
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
靖 小田島
セキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試み
Hiroshi Tokumaru
機械学習を利用したちょっとリッチな検索
機械学習を利用したちょっとリッチな検索
nobu_k
コーディングが上達するコツ
コーディングが上達するコツ
evol-ni
Viewers also liked
(20)
実践リーダブルコードの概要
実践リーダブルコードの概要
リーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会
リーダブルコード勉強会
名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう
名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こう
Writing Readable Code
Writing Readable Code
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
コーディングがラクになる!? “自分仕様”のさくさくコーディング法
コーディングがラクになる!? “自分仕様”のさくさくコーディング法
Introduction 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 reading
Xp祭り2013
Xp祭り2013
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject Introspectionで
コーディング入門以前
コーディング入門以前
Javaコーディング勉強会
Javaコーディング勉強会
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
セキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試み
機械学習を利用したちょっとリッチな検索
機械学習を利用したちょっとリッチな検索
コーディングが上達するコツ
コーディングが上達するコツ
Similar to リーダブルコードが良書だったのでまとめました
CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14
Takako Miyagawa
WordPressプラグイン作成入門
WordPressプラグイン作成入門
Yuji Nojima
php-src の歩き方
php-src の歩き方
do_aki
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
id774
はじめてのCodeIgniter
はじめてのCodeIgniter
Yuya Matsushima
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Shinya Okano
Programming camp 2008, Codereading
Programming camp 2008, Codereading
Hiro Yoshioka
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
Takuya Matsunaga
Rancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げる
Michitaka Terada
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
Rui Hirokawa
いまさら聞けないRake入門
いまさら聞けないRake入門
Tomoya Kawanishi
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
kenjis
BBBBB
BBBBB
arase_utagoe
1MB
1MB
arase_utagoe
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術
Koichi Fujikawa
2日間Fabricを触った俺が 色々解説してみる
2日間Fabricを触った俺が 色々解説してみる
airtoxin Ishii
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
PHP基礎勉強会
PHP基礎勉強会
Yuji Otani
OSS開発勉強会-01B
OSS開発勉強会-01B
Kohei KaiGai
NetBackup AIR CLI
NetBackup AIR CLI
vxsejapan
Similar to リーダブルコードが良書だったのでまとめました
(20)
CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14
WordPressプラグイン作成入門
WordPressプラグイン作成入門
php-src の歩き方
php-src の歩き方
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
はじめてのCodeIgniter
はじめてのCodeIgniter
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Programming camp 2008, Codereading
Programming camp 2008, Codereading
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
Rancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げる
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
いまさら聞けないRake入門
いまさら聞けないRake入門
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
BBBBB
BBBBB
1MB
1MB
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術
2日間Fabricを触った俺が 色々解説してみる
2日間Fabricを触った俺が 色々解説してみる
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
PHP基礎勉強会
PHP基礎勉強会
OSS開発勉強会-01B
OSS開発勉強会-01B
NetBackup AIR CLI
NetBackup AIR CLI
Recently uploaded
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
sugiuralab
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
sugiuralab
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
osamut
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
Shota Ito
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
Atomu Hidaka
Recently uploaded
(7)
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
PHP-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.pptx
リーダブルコードが良書だったのでまとめました
1.
リーダブルコード が良書だったのでまとめました
2.
リーダブルコードとは? リーダーぶる行動? 寄り目のバイトリーダーの マネジメント術とかそんなの
3.
リーダブルコードとは? じゃないです
4.
よいコードってなに? ♯ 拡張性 ♯ 再利用性 ♯
開発速度 ♯ 可読性 <- 今回のテーマはこれ ♯ パフォーマンス ♯ セキュリティ
5.
リーダブルなコードとは? 新しいプロジェクトのメンバーが 理解するまでにかかる時間が少ないコード ※理解するというのは変更を加えたりバグを見つけ たり出来るという意味。
6.
コードを読みやすくするために ♯ 表面上の改善 <-
すぐ出来て効果が高い ♯ コードの再構成
7.
表面上の改善 ♩ 名前に意味を込める ♩ 誤解されない名前 ♩
読みやすいフォーマット ♩ 分かりやすいコメント
8.
名前に意味を込める -1- buildTaxUtils() generateTaxUtils() 事前に設定が必 要 新しいオブジェ クトを作る filter() select() exclude() 選択 除外 ♪ メソッドには具体的な名前をつかう makeTaxUtils()
9.
名前に意味を込める -2- delay fileSize delay_secs size_mb plaintext_password unescaped_commen password comment ♪ 変数に単位をつける ♪
その他情報を追加する
10.
名前に意味を込める -3- OK :
document -> doc string -> str NG : TTPCommonUtils well knownな略 語 ディルバートを 読んでないと分 からない ♪ 頭文字と省略形
11.
誤解されない名前 - get や
size は軽い処理だと思われる - 限界地を含めるときは min, max - 範囲をしているときは first, last - 包含、排他的範囲には begin, end ♪ 習慣的な名前
12.
読みやすいフォーマット -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()); ✖ ♪ 適当な改行
13.
読みやすいフォーマット -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, ); ✖ ♪ 縦の線をそろえる
14.
読みやすいフォーマット -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, ); ♪ 縦の線をそろえる
15.
読みやすいフォーマット -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, ); ✖ ♪ 順番を守る
16.
読みやすいフォーマット -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); ✖ ♪ 段落を分ける
17.
読みやすいフォーマット -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); ♪ 段落を分ける
18.
読みやすいフォーマット -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); ... } ✖ ♪ ヘルパーメソッドの導入
19.
読みやすいフォーマット -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; } ♪ ヘルパーメソッドの導入
20.
分かりやすいコメント -1- /** * 金額を扱う為のクラスです。 *
通貨換算、税、丸めなどの機能を提供します。 * Java1.3用に標準APIを移植しました。 * このためJPY,USDにしか対応していません。 */ public interface MonetaryAmount extends CurrencySupplier, NumberSupplier, Comparable<MonetaryAmount>{ ... } ♪ ファイルやメソッドには全体像のコメントする
21.
分かりやすいコメント -2- // トランザクションの開始 $transaction->begin($dbh); ✖ ♪
コードからすぐに分かることは書かない
22.
分かりやすいコメント -3- // 月報情報の取得 $trafficExpenses
= WorkReportService::findWorkReport( $employeeId, $year, $month, $this->errorMessageList); // 月報情報の取得 // findWorkReportはデータが存在しない場合、データをDBに登録してその値を返します $trafficExpenses = WorkReportService::findWorkReport( $employeeId, $year, $month, $this->errorMessageList); ※findWorkReportは データが存在しない場合、新規にデータを登録してその値を返す実装 ✖ ♪ 読み手が驚くような動作はコメントする
23.
分かりやすいコメント -4- // 月報情報の取得 $trafficExpenses
= WorkReportService::findWorkReport( $employeeId, $year, $month, $this->errorMessageList); // 月報情報の取得 $trafficExpenses = WorkReportService::selecsertWorkReport( $employeeId, $year, $month, $this->errorMessageList); ✖ ♪ ひどい名前はコメントではなく名前を変える
24.
分かりやすいコメント -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 ) ♪ コードの欠陥にコメントをつける
25.
分かりやすいコメント -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 ♪ 設定値にコメントをつける
26.
まとめ ♯ 変数・関数は性質を現している名前にする ♯ コメントは読む人の助けになるか考えて書く
Editor's Notes
リーダブルコードという 可読性の高いコードについての技術書を読んだので内容を抜粋して紹介したいと思います。
リーダブルコードとは...
そのテーマは改めて
みなさんコードを書く際に気を付けている事はいくつかあると思いますが 今回のテーマは可読性についてです。
ソースコードを読む誰か(あるいは3ヵ月後のあなた)が読んだときに 同じ箇所を何回も読み直したり、デバッグしてみずともコードの意図が読めるコードがリーダブルなコードといえます。
今回は、すぐ出来て効果が高い命名やフォーマットに関する改善を中心に見ていきます。 書籍にはプログラムの構造そのものを変える「コードの再構成」についても示唆に富む内容が書かれていますので、興味のある方はぜひ読んでみてください。
表面上の改善には命名、フォーマット、コメントに関するものが挙げられます。
makeでは意味が広すぎるので、より具体的な名称を付けましょう。 filterでは対象を選んでいるのか、除外しているのか不明確な場合があります。
変数名に型の情報(アプリケーションハンガリアン)を追加することで 可読性の向上と、バグ防止が見込めます。
チーム内でしか意味の通らない略語の使用は避けるべきです。
慣用的な名前は意外な動きにならないように、注意して使用しましょう。
残業を多い社員をリストアップする処理です。
配列に値を設定する処理ですが keyとvalueの区別がつきにくいです。
整列することで key, valueがそれぞれ読みやすくなりました。
変数は定義する順番と使用する順番をそろえたほうが読みやすいです。
ファイル処理の例です このままでは、何の処理か読み取るに大きな負荷がかかります。
段落を分割することで、関心のある部分にすぐに辿りつけます。 出力内容を改修したい場合はtransformのあたりを、ファイルが出力時にエラーが起きる場合はload付近から読み始められます。
テストコードを書く際に、本来注目したいテストデータそのものが、処理のコードにまぎれて読みづらいです。
ヘルパーメソッドを導入することで、データに集中しやすくなります。
コードの先頭で、処理全体の概要を説明すると、理解がしやすくなります。
以上
findとなっていますが、DBに新規レコードが作られることを注意喚起します。
upsertじゃなくてselecsert?とはなりますが、意図せずデータを登録してしまうリスクが少し下がるように思います。 (補足)作為的な例で、ファンクション分割の粒度がおかしい気もします。
TODO, FIXME, XXXなど使って、コードの欠陥やあるべき姿を伝えることで、コードの状態を理解しやすくなります。
設定値の算出根拠などをコメントすることで、定数の見直しの際に助けになります。
Download now