![見出し画像](https://assets.st-note.com/production/uploads/images/74867441/rectangle_large_type_2_2c8b26034f18d0f42be504057fdb9838.png?width=1200)
【開発哲学3_10】〜『CODE COMPLETE第2版 第10章(上巻)』の感想〜変数の使用
いよいよ第3部 変数✨
より具体的で身近なコーディングの話になってきたな🕺
感想
変数の接続時間、変数の寿命、永続性、バインディングタイム
などなど、
普段、自然と意識して身に付いてることだな。
数年前に読んで、意識して実践したから、内容の方をすっかり忘れているやつ。笑
詳細
見出しとしては、
データリテラシー
変数宣言のガイドライン
変数の初期化のガイドライン
スコープ
永続性
バインディングタイム
データ型と制御構造の関係
一つの目的に一つの変数
まとめ
て感じ。変数名の具体的な付け方は次章以降で、
ここでは主に
変数の位置
をしっかり解説。
たしかに、
変数に関しては、同じ名前の変数を全然違う用途で複数箇所で使う人がいて、解読が死ぬほど面倒くさいは現場ではあるある。
例えば、
「値が入った最終行以降のスプレッドシートの空白行を全て削除したい」
場合に、(思いつきで書いているからコードは正確じゃないかも、、、💦)
//最終行
let lastRow = sh.getLastRow();
//最終行以降の空白行
lestRow = sh.getMaxRows();
//最終行の次の行から空白行を全て消す
sh.deleteRows(lastRow + 1, lastRow - lastRow);
で、
どちらも最終行だから
と安易にやっちゃうと、同じ値から同じ値を引いているから、ひとつも削除されないかバグが発生するみたいな
想定されないエラー
を自分で惹き起こしちゃう。
次によくやるのが、
//最終行
let lastRow1 = sh.getLastRow();
//最終行以降の空白行
let lestRow2 = sh.getMaxRows();
//最終行の次の行から空白行を全て消す
sh.deleteRows(lastRow1 + 1, lastRow2 - lastRow1);
て感じで、変数に数値を割り振って増やすパターン。
見てわかるとおり、
lastRow1,lastRow2と数字以外は重複しているから、自分で書いてない人は、一見しただけではどっちがどっちだっけ?ってなっちゃう。
じゃあ、他の目的で機能を追加するたびにlastRow3,lastRow4、、、て感じで似た目的なのに、数字だけ割り振って似通った変数をどんどん増やすんかな?
て感じになっちゃう。
原因
やりたいことが具体的に突き詰められてないから起きちゃうネーミングや定義ミス💧
「値が入った最終行以降のスプレッドシートの空白行を全て削除したい」
をより具体的に表現すると、
「スプレッドシートの有効値が入った最終行の次の行からスプレッドシートの最大行までの空白行を全て削除したい」
てことだから、
//最終行
let lastRow = sh.getLastRow();
//スプレッドシートの最大行
let maxRow = sh.getMaxRows();
//最終行の次の行から空白行を全て消す
sh.deleteRows(lastRow + 1, maxRow - lastRow);
て感じで、きちんと役割が違うものだって明記できる。さらに、
普段の実務では、
//変数
let lastRow,maxRow;
//最終行
lastRow = sh.getLastRow();
//スプレッドシートの最大行
maxRow = sh.getMaxRows();
//最終行の次の行から空白行を全て消す
sh.deleteRows(lastRow + 1, maxRow - lastRow);
てな感じで変数の定義と利用も分離しちゃう。
理由
不用意にブロックやスコープごとに変数自体を定義していくと、同じ目的なのに違う名前(や番号)か、違う目的なのに同じ名前(や番号)みたいな変数が、
無限に増えて乱立
バグも起きやすい
改修にも時間がかかる
ので、変数の定義と利用は分けて再利用しちゃう。
(分離すると却って読みにくいって人もいるけど、、、💦)
本章の趣旨も、
変数はなるべく近くで利用すること
変数の利用は開始から終了までなるべくまとめること
なので、分離しても趣旨に反しないかなあ。
まとめ
実現したいこと(=要求)を、
より具体的に(言葉や文章で)表現することが大事
= 詳細設計
今回作ったサンプルコード(コピペでOK)
実行前
![](https://assets.st-note.com/img/1648029366546-ujQ6yXpy7x.png?width=1200)
実行後
![](https://assets.st-note.com/img/1648029387706-JLtCvbsvxN.png?width=1200)
コード
ここから先は
¥ 1,000
Amazonギフトカード5,000円分が当たる
この記事が気に入ったらチップで応援してみませんか?