見出し画像

プログラミング初心者がやりがちな間違った名前の付け方

前置き

こちらのノートに経歴や経緯などを書いていますが、4月からプログラミングを個人で教えており、コードレビューをたくさんやりました。その経験から、同じようなことを何人にも指摘しましたので、その内容をまとめてみました。

前回はコードレビューの内容と改修の手順まで書きましたが、今回はあっさりめです。

今回は変数名について書きます。

例えその1

例えばアプリの初回起動時に出てくるウォークスルー画面を作る時です。LINEのようなコミュニケーションツールの場合だと以下のような感じでしょうか。

・気軽にメッセージ
・音声通話&ビデオ通話
・気持ちが気軽に伝わるスタンプ

スクリーンショット 2020-09-13 13.24.17

これを実装するのに初心者の方々はこんなふうに書いてました。

import UIKit

class WalkthroughViewController: UIViewController {
 var imageView1: UIImageView? //気軽にメッセージの画像
 var imageView2: UIImageView? //音声通話&ビデオ通話画像
 var imageView3: UIImageView? //気持ちが気軽に伝わるスタンプ画像
}

実際はIBOutletでつながってたり、UIScrollViewもあったりすると思ってください。

これだと何が問題かというと、アプリは今後も改修が続きますのでこんなことが考えられます。

「3枚目と1枚目を入れ替えよう」
「ウォークスルーが多すぎるからひとつ消そう」
「グループチャット機能を入れたから2枚目に出そう」

この改修を素直にやったらコードはこんなことになります。

import UIKit

class WalkthroughViewController: UIViewController {
 var imageView1: UIImageView? //気軽にメッセージの画像 これが3枚目
 var imageView2: UIImageView? //音声通話&ビデオ通話画像 これは使わない
 var imageView3: UIImageView? //気持ちが気軽に伝わるスタンプ画像 これが1枚目
 var imageView4: UIImageView? //グループチャットの画像 これが2枚目
}

ちょっと思いついた改修を入れただけでもう訳が分からなくなりました。

名前に数値を入れないようにする

この問題が起こった原因は変数名に数値を入れたことです。
数値というのはそれ自体が抽象的な概念です。

「1日」という「時間の長さ」を表す1と
「りんごが1個」という「物体がどれだけあるのか」を表す1が同じ「1」で表せます。

それをプログラムの変数名に使うと何の「1」か分からなくります。
さきほどの例だとimageView1は「実装した順番」を表す「1」でしかなくなり何の意味もありません。

では、どうすればいいかというと、ちゃんと「何を」表示させる画像なのか表す名前に変えます。

import UIKit

class WalkthroughViewController: UIViewController {
 var messageImageView: UIImageView?
 var callImageView: UIImageView?
 var stampImageView: UIImageView?
 var groupChatImageView: UIImageView?
 lazy var imageViews = [stampImageView, groupChatImageView, messageImageView] //画像の表示順
}

これで変数名を見るだけで何を表示させる画像か分かりやすくなり、入れ替えや追加や削除も簡単になりました。

例えその2

次の例です。
ある画面で利用規約を読んだかどうか判断するフラグが必要になったとします。

初心者の方々はこういう実装を追加していました。

class HogeHogeViewController: UIViewController {

 var readButton: UIButton?
 var flg: Bool = false

 //readButtonがタップされた時のメソッド
 @objc func tapReadButton(_ sender: UIButton) {
   flg.toggle() //flgの値を入れ替える
   if flg {
     //readButtonをONのレイアウトにする
   } else {
     //readButtonをOFFのレイアウトにする
   }
 }
}

これの何がダメかというと、flgという変数名が問題です。

変数名に何のためなのか意味を持たせる

flgはBool型であり、Bool型はON/OFFを切り替えるものなので、flgという名前では情報が一切増えていません。

「何のON/OFFを切り替えるフラグなの?」
「他にもON/OFFを切り替えるパラメータが増えたら名前はどうなるの?」

これもやはり変数名に意味を持たせていないことが原因です。
改修するならこんな感じでしょうか。

class HogeHogeViewController: UIViewController {
 var readButton: UIButton?

 var hasRead: Bool = false

 //readButtonがタップされた時のメソッド
 @objc func tapReadButton(_ sender: UIButton) {
   hasRead.toggle() //flgの値を入れ替える
   if hasRead {
     //readButtonをONのレイアウトにする
   } else {
     //readButtonをOFFのレイアウトにする
   }
 }
}

これで何のためのフラグか分かり、他にフラグが増えても問題なくなりました。

まとめ

・変数名に数値を入れないようにしよう

・変数名には「何のため」なのか意味を持たせよう

記事はこれで終わりですが、満足いただけたら投げ銭していただけると嬉しいです。

ご支援ありがとうございました!!!!!!!!!

この記事が気に入ったらサポートをしてみませんか?