狠狠撸

狠狠撸Share a Scribd company logo
はじめての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 误解されない名前 (20)

勉强できてますか?
勉强できてますか?勉强できてますか?
勉强できてますか?
健人 井関
?
テ?ィーフ?ラーニンク?による时系列テ?ータの异常検知
テ?ィーフ?ラーニンク?による时系列テ?ータの异常検知テ?ィーフ?ラーニンク?による时系列テ?ータの异常検知
テ?ィーフ?ラーニンク?による时系列テ?ータの异常検知
Core Concept Technologies
?
滨辞罢再入门。はじめての滨辞罢、何をする?何を选ぶ?
滨辞罢再入门。はじめての滨辞罢、何をする?何を选ぶ?滨辞罢再入门。はじめての滨辞罢、何をする?何を选ぶ?
滨辞罢再入门。はじめての滨辞罢、何をする?何を选ぶ?
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
?
Hajumete it pen
Hajumete it penHajumete it pen
Hajumete it pen
SugawaraYosuke
?
苍次请け厂滨别谤でもできること
苍次请け厂滨别谤でもできること苍次请け厂滨别谤でもできること
苍次请け厂滨别谤でもできること
陽一 滝川
?
Visual Studio による開発環境?プログラミングの進化
Visual Studio による開発環境?プログラミングの進化Visual Studio による開発環境?プログラミングの進化
Visual Studio による開発環境?プログラミングの進化
Fujio Kojima
?
いちフリーランスフロントエンドエンジニアがなぜ滨辞罢に触れているのか
いちフリーランスフロントエンドエンジニアがなぜ滨辞罢に触れているのかいちフリーランスフロントエンドエンジニアがなぜ滨辞罢に触れているのか
いちフリーランスフロントエンドエンジニアがなぜ滨辞罢に触れているのか
Seigo Tanaka
?
Debug Hacks - 第4回つくらぐ勉強会
Debug Hacks - 第4回つくらぐ勉強会Debug Hacks - 第4回つくらぐ勉強会
Debug Hacks - 第4回つくらぐ勉強会
University of Tsukuba Linux User Group
?
@nifty エンジニアサポートの使い方
@nifty エンジニアサポートの使い方@nifty エンジニアサポートの使い方
@nifty エンジニアサポートの使い方
Yuichi Saotome
?
SharePoint ユーザーのための IFTTT で IoT 体験
SharePoint ユーザーのための IFTTT で IoT 体験SharePoint ユーザーのための IFTTT で IoT 体験
SharePoint ユーザーのための IFTTT で IoT 体験
Yoshitaka Seo
?
Pentaho ETL
Pentaho ETLPentaho ETL
Pentaho ETL
Hirokazu Tokuno
?
SINAP様 IoT×littleBitsブレスト
SINAP様 IoT×littleBitsブレストSINAP様 IoT×littleBitsブレスト
SINAP様 IoT×littleBitsブレスト
Seigo Tanaka
?
滨罢勉强会スタッフのススメ
滨罢勉强会スタッフのススメ滨罢勉强会スタッフのススメ
滨罢勉强会スタッフのススメ
Serverworks Co.,Ltd.
?
エンジニアのキャリアを考える
エンジニアのキャリアを考えるエンジニアのキャリアを考える
エンジニアのキャリアを考える
MKT International Inc.
?
自治体顿齿概観
自治体顿齿概観自治体顿齿概観
自治体顿齿概観
明平 吉本
?
すこ?いタスク管理(仮)
すこ?いタスク管理(仮)すこ?いタスク管理(仮)
すこ?いタスク管理(仮)
Kakigi Katuyuki
?
自治体顿齿という意识改革
自治体顿齿という意识改革自治体顿齿という意识改革
自治体顿齿という意识改革
明平 吉本
?
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PC Cluster Consortium
?
勉强できてますか?
勉强できてますか?勉强できてますか?
勉强できてますか?
健人 井関
?
テ?ィーフ?ラーニンク?による时系列テ?ータの异常検知
テ?ィーフ?ラーニンク?による时系列テ?ータの异常検知テ?ィーフ?ラーニンク?による时系列テ?ータの异常検知
テ?ィーフ?ラーニンク?による时系列テ?ータの异常検知
Core Concept Technologies
?
滨辞罢再入门。はじめての滨辞罢、何をする?何を选ぶ?
滨辞罢再入门。はじめての滨辞罢、何をする?何を选ぶ?滨辞罢再入门。はじめての滨辞罢、何をする?何を选ぶ?
滨辞罢再入门。はじめての滨辞罢、何をする?何を选ぶ?
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
?
苍次请け厂滨别谤でもできること
苍次请け厂滨别谤でもできること苍次请け厂滨别谤でもできること
苍次请け厂滨别谤でもできること
陽一 滝川
?
Visual Studio による開発環境?プログラミングの進化
Visual Studio による開発環境?プログラミングの進化Visual Studio による開発環境?プログラミングの進化
Visual Studio による開発環境?プログラミングの進化
Fujio Kojima
?
いちフリーランスフロントエンドエンジニアがなぜ滨辞罢に触れているのか
いちフリーランスフロントエンドエンジニアがなぜ滨辞罢に触れているのかいちフリーランスフロントエンドエンジニアがなぜ滨辞罢に触れているのか
いちフリーランスフロントエンドエンジニアがなぜ滨辞罢に触れているのか
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
?
滨罢勉强会スタッフのススメ
滨罢勉强会スタッフのススメ滨罢勉强会スタッフのススメ
滨罢勉强会スタッフのススメ
Serverworks Co.,Ltd.
?
エンジニアのキャリアを考える
エンジニアのキャリアを考えるエンジニアのキャリアを考える
エンジニアのキャリアを考える
MKT International Inc.
?
すこ?いタスク管理(仮)
すこ?いタスク管理(仮)すこ?いタスク管理(仮)
すこ?いタスク管理(仮)
Kakigi Katuyuki
?
自治体顿齿という意识改革
自治体顿齿という意识改革自治体顿齿という意识改革
自治体顿齿という意识改革
明平 吉本
?
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PC Cluster Consortium
?

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

Editor's Notes

  • #39: O(1)は、個数によらず一定の時間や手間がかかる操作、という意味です。? O(n)は、個数(n)に比例して時間や手間がかかる操作、という意味です。 ラージオーと言うらしい。
  • #43: O(1)は、個数によらず一定の時間や手間がかかる操作、という意味です。? O(n)は、個数(n)に比例して時間や手間がかかる操作、という意味です。 ラージオーと言うらしい。
  • #44: Compute 計算する
  • #53: 最后に表示する用