LoginSignup
0
1

More than 1 year has passed since last update.

toggle(トグル)の使用方法

Last updated at Posted at 2022-11-30

概要

ビデオ通話実装中に、マイク機能とスピーカー機能、カメラの反転機能の実装をしていた時に、switch文を用いてtrueとfalesを判別していました。しかし、その条件分岐を3つの機能にそれぞれ、記述しないといけなかったのでかなり可読性が低いコードになっていました。そこで、レビュー時にtoggle()というものを教えていただいたので、備忘録を残しておきます。

前提条件

「そもそも、toggleとは何ぞや?」ということで、Apple公式ドキュメントを調べてみました。
ドキュメントには、こう書かれていました。

「Use this method to toggle a Boolean value from true to false or from false to true.」

Apple.swift
var bools = [true, false]
bools[0].toggle()
// bools == [false, false]

要するに、「変数が持っている現状のBool値を切り替えたい時に使えよ!(もちろん、定数ではない。)」とのことです。

Apple公式ドキュメント

自分は、今まで以下のように実装をしてかなり面倒な実装をしていたので「toggle()」に出会って人生が変わりました!(大嘘)

実装方法

それでは、実際にどのようにtoggle()を用いてリファクタリングしたのかを確認してみましょう!
まずは、リファクタリング前のswitch文での条件分岐から!(コードが汚いかもしれませんが、ご了承ください。)

BeforeSwitch.swift
    @IBOutlet private weak var speakerButton: UIButton!
    private weak var isSpeakerOn = true
    @IBAction private func tappedMic(_ sender: UIButton) {
        swith isSpeakerOn {
        case .true:
            //スピーカー機能オフ
            speakerButton.background = 暗い系の色
            isSpeakerOn = false
        case .false:
            //スピーカー機能オン
            speakerButton.background = 明るい系の色
            isSpeakerOn = true
        }
    }

まぁ安易にやりがちなコードの書き方かなと思います。
次はリファクタリング後です。

AfterSwitch.swift
    @IBOutlet private weak var speakerButton: UIButton!
    private weak var isSpeakerOn = true
    @IBAction private func tappedMic(_ sender: UIButton) {
        //スピーカー機能オンとオフの機能
        let backgroundColor: UIColor = isSpeakerOn ? 暗い系の色 : 明るい系の色
        isSpeakerOn.backgroundColor = backgroundColor
        //ここで、toggleを使用する!
        isSpeakerOn.toggle()
    }

実際には、BeforeSwitch.swiftのswitch文の中にもっと色んな要素が入っていましたが、上記のように、toggle()と三項演算子をうまく活用することで、より可読性が高いコードを書くことができました!
やはり、switch文は場合分けを可視化するにはいいかもしれませんが、「可視化すること=可読性の向上」にならないということを改めて学びました。
レビューしていただくと本当に勉強になります!

ちなみに、toggleとは以下の辞書によると、電子計算機の2つの状態をトグルで切り換えるという意味で、そもそも英語では、toggle単語は一般的に使われるんですかね。英単語を調べたりしながら実装すると理解しやすい。

さいごに

今回はレビューをしていただき、提案していただいてtoggle()の存在を知りましたが、今後は自分でも「ここはこのように書けば、もっと可読性が良くなるのでは?」という視点を持ってコードを書いていきたいと思います!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1