SlideShare a Scribd company logo
1 of 52
はじめてのIT勉強会 in 仙台
リーダブルコード
Part2: 誤解されない名前
鈴木寛之(すーさん)はこんな人
 どんな技術でもやる雑草エンジニア
(フロント、バック、ETLもやってます)
 本を読むのが好き
 人を助けるのが好き
 Confluence(社内Wiki)の運用・推進活動
 社内LT(Lightning Talk)活動
 社内リフレクションカード活動
※実は教員免許も持ってます
それでは、始めますー
誤解されない名前
誤解されない名前?
誤解されそうなコードを
見てみよう!
resultには何が入る?
var result = historyData.filter(“year <= 2011”);
B:2011年以前を除いた履歴データ
どっちの意味にもとれる
A:2011年以前の履歴データ
もう少し意味を
明確にしてみよう!
これなら分かりやすい
2011年以前の履歴データを「選択する」なら
var result = historyData.select(“year <= 2011”);
2011年以前の履歴データを「除外する」なら
var result = historyData.exclude(“year <= 2011”);
var result = historyData.filter(“year <= 2011”);
意味が明確になった
「コレ、どっちの意味?」
だったら
それは、誤解されるコード
「これは他の意味と
間違えられないか?」を
何度も自問自答しよう
他の例も見てみよう!
誤解される限界値
誤解されるコード
const CART_TOO_BIG_LIMIT = 10;
if ( cart.item.count >= CART_TOO_BIG_LIMIT ){
new Error(“カートにある商品が多すぎます。”);
<仕様>
ショッピングカートには「10個」までしか商品が入らない
先生!
このコードバグってます!
ん!?
誤解されるコード
const CART_TOO_BIG_LIMIT = 10;
if ( cart.item.count >= CART_TOO_BIG_LIMIT ){
new Error(“カートにある商品が多すぎます。”);
<仕様>
ショッピングカートには「10個」までしか商品が入らない
実は、10個だとエラーになる
誤解されるコード
const CART_TOO_BIG_LIMIT = 10;
if ( cart.item.count >= CART_TOO_BIG_LIMIT ){
new Error(“カートにある商品が多すぎます。”);
<仕様>
ショッピングカートには「10個」までしか商品が入らない
LIMITという言葉はあいまい。
10を含む?含まない?
分かりやすいコード
const MAX_ITEMS_IN_CART = 10;
if ( cart.item.count > MAX_ITEMS_IN_CART ){
new Error(“カートにある商品が多すぎます。”);
<仕様>
ショッピングカートには「10個」までしか商品が入らない
MAXを使うと限界値が分かりやすい
限界値を含める時は
minとmaxを使おう!
次は
誤解される範囲指定
誤解されるコード
function print_int_range(start = 2, stop = 4) {…}
stopという言葉があいまい 
A:「2、3」が表示される
B:「2、3、4」が表示される
分かりやすいコード
function print_int_range(first = 2, last = 4) {…}
lastだと理解しやすい 
最後の要素を含む範囲は
firstとlastを使おう!
minとmaxでも良いよ
1 2 3 4 5
first last
次は
誤解されるブール値
誤解されるコード
readPassword = true;
A:パスワードをこれから読み込む必要がある?
B:パスワードを既に読み取っている?
readが紛らわしい
分かりやすいコード
これだと理解しやすい
読み込む必要がある:needPassword
もう読み込んだ :isAuthenticated
もうひとつ
否定のブール値も
避けよう!
誤解されるコード
var disable_ssl = false;
SSLを無効にするという変数がfalseだから
無効の逆で、有効かな。
わかりづらい!!!
分かりやすいコード
var use_ssl = true;
SSLを使うってことね 
ブール値は
trueとfalseの意味を
明確にしよう!
否定形も避けてね
次は
使う人の期待に合わせる
誤解されるコード
public class StatisticsCollector {
public void addSample(double x){…}
public double getMean() {…}
getMeanだから、O(1)か。ハイハイ。
先生!
Sampleを100万件
登録したら
getMeanの処理結果が
返ってきません!
ん!?
誤解されるコード
public class StatisticsCollector {
public void addSample(double x){…}
public double getMean() {…}
<注意>
すべてのサンプルをイテレートして
total / numSample を返す
O(n) だった。。。
分かりやすいコード
public class StatisticsCollector {
public void addSample(double x){…}
public double computeMean() {…}
computeだから計算するのか。
処理に時間かかる可能性があるな。気を付けよう
使う人の期待を
裏切らない名前を付けよう!
今日のまとめ
誤解されない名前をつけるためには
名前をより明確に!
-> filter より select, excludeを使う
限界値を決める時は?
-> min, maxを使う
最後の要素を含む範囲の時は?
-> first, lastを使う
ブール値を使う時は?
-> isやneedなどを使う
-> 否定形を避ける
ユーザの期待に反することは避けよう!
-> get*()は軽い処理にしよう!
最後にもう一度
「これは他の意味と
間違えられないか?」を
何度も自問自答しよう
キーンコーンカーンコーン
これで
今日の授業を終わります!
ありがとうございました!
誤解されない名前をつけるためには
名前をより明確に!
-> filter より select, excludeを使う
限界値を決める時は?
-> min, maxを使う
最後の要素を含む範囲の時は?
-> first, lastを使う
ブール値を使う時は?
-> isやneedなどを使う
-> 否定形を避ける
ユーザの期待に反することは避けよう!
-> get*()は軽い処理にしよう!

More Related Content

Similar to 20180523 はじめてのIT勉強会 Part2 誤解されない名前

勉強できてますか?
勉強できてますか?勉強できてますか?
勉強できてますか?健人 井関
 
ディープラーニングによる時系列データの異常検知
ディープラーニングによる時系列データの異常検知ディープラーニングによる時系列データの異常検知
ディープラーニングによる時系列データの異常検知Core Concept Technologies
 
IoT再入門。はじめてのIoT、何をする?何を選ぶ?
IoT再入門。はじめてのIoT、何をする?何を選ぶ?IoT再入門。はじめてのIoT、何をする?何を選ぶ?
IoT再入門。はじめてのIoT、何をする?何を選ぶ?Yuki Sakai
 
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナーakihiro uehara
 
2018.05.16 DOA 朝会トーク | 自己紹介&勉強会のすゝめ
2018.05.16 DOA 朝会トーク | 自己紹介&勉強会のすゝめ 2018.05.16 DOA 朝会トーク | 自己紹介&勉強会のすゝめ
2018.05.16 DOA 朝会トーク | 自己紹介&勉強会のすゝめ Koichiro Oki
 
n次請けSIerでもできること
n次請けSIerでもできることn次請けSIerでもできること
n次請けSIerでもできること陽一 滝川
 
Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Fujio Kojima
 
いちフリーランスフロントエンドエンジニアがなぜIoTに触れているのか
いちフリーランスフロントエンドエンジニアがなぜIoTに触れているのかいちフリーランスフロントエンドエンジニアがなぜIoTに触れているのか
いちフリーランスフロントエンドエンジニアがなぜIoTに触れているのかSeigo Tanaka
 
@nifty エンジニアサポートの使い方
@nifty エンジニアサポートの使い方@nifty エンジニアサポートの使い方
@nifty エンジニアサポートの使い方Yuichi Saotome
 
SharePoint ユーザーのための IFTTT で IoT 体験
SharePoint ユーザーのための IFTTT で IoT 体験SharePoint ユーザーのための IFTTT で IoT 体験
SharePoint ユーザーのための IFTTT で IoT 体験Yoshitaka Seo
 
SINAP様 IoT×littleBitsブレスト
SINAP様 IoT×littleBitsブレストSINAP様 IoT×littleBitsブレスト
SINAP様 IoT×littleBitsブレストSeigo Tanaka
 
IT勉強会スタッフのススメ
IT勉強会スタッフのススメIT勉強会スタッフのススメ
IT勉強会スタッフのススメServerworks Co.,Ltd.
 
エンジニアのキャリアを考える
エンジニアのキャリアを考えるエンジニアのキャリアを考える
エンジニアのキャリアを考えるMKT International Inc.
 
すごいタスク管理(仮)
すごいタスク管理(仮)すごいタスク管理(仮)
すごいタスク管理(仮)Kakigi Katuyuki
 
自治体DXという意識改革
自治体DXという意識改革自治体DXという意識改革
自治体DXという意識改革明平 吉本
 
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」PC Cluster Consortium
 

Similar to 20180523 はじめてのIT勉強会 Part2 誤解されない名前 (20)

勉強できてますか?
勉強できてますか?勉強できてますか?
勉強できてますか?
 
ディープラーニングによる時系列データの異常検知
ディープラーニングによる時系列データの異常検知ディープラーニングによる時系列データの異常検知
ディープラーニングによる時系列データの異常検知
 
IoT再入門。はじめてのIoT、何をする?何を選ぶ?
IoT再入門。はじめてのIoT、何をする?何を選ぶ?IoT再入門。はじめてのIoT、何をする?何を選ぶ?
IoT再入門。はじめてのIoT、何をする?何を選ぶ?
 
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
 
2018.05.16 DOA 朝会トーク | 自己紹介&勉強会のすゝめ
2018.05.16 DOA 朝会トーク | 自己紹介&勉強会のすゝめ 2018.05.16 DOA 朝会トーク | 自己紹介&勉強会のすゝめ
2018.05.16 DOA 朝会トーク | 自己紹介&勉強会のすゝめ
 
Hajumete it pen
Hajumete it penHajumete it pen
Hajumete it pen
 
n次請けSIerでもできること
n次請けSIerでもできることn次請けSIerでもできること
n次請けSIerでもできること
 
Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化
 
いちフリーランスフロントエンドエンジニアがなぜIoTに触れているのか
いちフリーランスフロントエンドエンジニアがなぜIoTに触れているのかいちフリーランスフロントエンドエンジニアがなぜIoTに触れているのか
いちフリーランスフロントエンドエンジニアがなぜIoTに触れているのか
 
Debug Hacks - 第4回つくらぐ勉強会
Debug Hacks - 第4回つくらぐ勉強会Debug Hacks - 第4回つくらぐ勉強会
Debug Hacks - 第4回つくらぐ勉強会
 
@nifty エンジニアサポートの使い方
@nifty エンジニアサポートの使い方@nifty エンジニアサポートの使い方
@nifty エンジニアサポートの使い方
 
SharePoint ユーザーのための IFTTT で IoT 体験
SharePoint ユーザーのための IFTTT で IoT 体験SharePoint ユーザーのための IFTTT で IoT 体験
SharePoint ユーザーのための IFTTT で IoT 体験
 
Pentaho ETL
Pentaho ETLPentaho ETL
Pentaho ETL
 
SINAP様 IoT×littleBitsブレスト
SINAP様 IoT×littleBitsブレストSINAP様 IoT×littleBitsブレスト
SINAP様 IoT×littleBitsブレスト
 
IT勉強会スタッフのススメ
IT勉強会スタッフのススメIT勉強会スタッフのススメ
IT勉強会スタッフのススメ
 
エンジニアのキャリアを考える
エンジニアのキャリアを考えるエンジニアのキャリアを考える
エンジニアのキャリアを考える
 
自治体DX概観
自治体DX概観自治体DX概観
自治体DX概観
 
すごいタスク管理(仮)
すごいタスク管理(仮)すごいタスク管理(仮)
すごいタスク管理(仮)
 
自治体DXという意識改革
自治体DXという意識改革自治体DXという意識改革
自治体DXという意識改革
 
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
 

20180523 はじめてのIT勉強会 Part2 誤解されない名前

Editor's Notes

  1. O(1)は、個数によらず一定の時間や手間がかかる操作、という意味です。  O(n)は、個数(n)に比例して時間や手間がかかる操作、という意味です。 ラージオーと言うらしい。
  2. O(1)は、個数によらず一定の時間や手間がかかる操作、という意味です。  O(n)は、個数(n)に比例して時間や手間がかかる操作、という意味です。 ラージオーと言うらしい。
  3. Compute 計算する
  4. 最後に表示する用