見出し画像

【じっくりSw1ftUI 17】Essentials第6章〜Playgroundで遊ぼう③演算子いろいろ

さてと、先週は、

なんかでも書いたとおり、

🤵‍♀️結婚記念日🤵

だったので、そっちを優先 笑😆

無事に3回目の結婚記念日を迎えることが出来たオイラ
👉結婚記念日にまで、プログラミングを優先させていたら、何のためにプログラミングを仕事にしたのかが分からない🤔

オイラは、結婚記念日をゆっくり嫁とイチャつけるような生活がしたかった

から、この業界に転職しました@10年以上前 笑😆

まだSwiftUIも序盤だけど、

なんでこの学びをし始めたのか
なぜ、この学びを継続してるのか
👉最終的に何をしたいのか?

そこをしっかり意識して、今回も読んで貰えたら幸い🕺

さてと、早速2週間ぶりに、、、

第6章をじっくり読んでく👀

ま、まずは一番シンプルに〜〜〜

var sum6_1 = 1 + 1
とまあ、当たり前の結果が出たね👀

単純に、

=の右側にある値の合計を、=の左側にある引数(今回は、varで宣言してるから変数)に入れましたと。

お遊びで、

//定数で足し算
let sum6_2 = 1 + 1

でやっても、、、

って出来ちゃうんだよね〜〜〜

定数letは、前回で解説したとおり、

処理の途中で変更を許さない

ってだけだから、別に、

最初の宣言で数式でやってもここは大丈夫🌱

一回、宣言した後に、

みたいな感じで、他の値とかを代入しようとすると、
エラーになるだけ👀💦

これって、こんだけ単純だと、

言われなくてもそんなのは当たり前

って思う人が殆どなんだけど、意外とMVVMに則って、複雑な連携なんかをやろうとすると、

意味不明なエラーが出た
👉辿っていくとvarで宣言したつもりがletで宣言してたorz
なんてのは、JavaScriptみたいな言語も使い慣れてると
やりがちなミスで焦る

からね💦その原因は、

なんかでも軽く触れてるから参考にしてみてね。

さてと、続き

まずは、

=:代入する記号やっでね。

ってゆーていて、

//代入式
//オプショナル型で表現
var a6_3: Int?
var b6_3 = 10
//値を代入
a6_3 = 21
//出力
print(a6_3!)
//強制アンラップして、加算
a6_3 = a6_3! + b6_3
//出力
print(a6_3!)
//bにaを代入
b6_3 = a6_3!
//出力。bはオプショナル型じゃないので強制アンラップ不要
print(b6_3)

てな感じで代入して遊ぶと、、、

前回やったオプショナル型の強制アンラップなんかも絡んでるから面白いやね🕺
print(a6_3!)
↓
print(a6_3)

てな感じで、!を外して再実行してみると、、、

てな感じで、出力結果が違うから気を付けてね〜〜〜

これって、結構、

  • ボタンをタップさせて何かをカウントしたい

  • マップで位置情報を計測したい

  • WEBでリンクURLにアクセスさせたい

みたいな時に赤マークのFatalエラーなんかが出てきて、想定通りに動かないぞ👀

👉強制アンラップかキャストをやってなかっただけでした

みたいなことで、ウンウン唸ることになる人も多いので気を付けてね🌱

さてと、それから〜〜〜

ここで四則演算と余りなんかが出てきてて、この本でもご多聞に漏れず、一覧表でほとんどの演算子の端折ってるんだけど、実際に動かしておくことは大事だから、

こんなのは算数だし、理解してるから

って端折らずに、

実際に動かしてみよう🕺

👉頭で理解してて実際に動かして検証しない
=想定通りの動きになってるかわからない

からね。検証の重要性なんかは

なんかも参考にしてみてね。開発の正道は、

頭で想定してるとおりの実行結果になるとは限らない
遠回りなようで近道
急がば回れ
100の思い込みよりも、ひとつの検証
頭で覚える、理解するよりも、実際に動かして、目と体で身に付けよ

だからね🕺

下手に動かしもせずに、タイパやらコスパで、頭で理解した気になって、
実際ここで動かさずに、いざ組み込んで見たらエラーとバグの大量発生で
どうなってるかわからない

なんてことは山ほどあるからね〜〜〜🧐
まあ、そーゆー、安易に頭で簡単なことを理解して全部出来るように錯覚するような短絡的な人ほど、

早々に挫折して、この業界からは去っていく人は星の数ほどいるので〜〜〜

と話が脱線しまくってるけど、

足し算

//足し算
var x6_4 = 20
var y6_4 = -1
x6_4 = x6_4 + y6_4
print(x6_4)

って感じで実行すると〜〜〜

出来てるね👀

正の値を負の値に

//マイナスの値を足し算で表記
var x6_5 = 20
var y6_5 = 1
x6_5 = x6_5 + -(y6_5)
print(x6_5)
もちろん同じ結果になって、コンソーラに出力もちゃんと出来てるね👀

掛け算

//掛け算
var x6_6 = 20
var y6_6 = 1
x6_6 = x6_6 * -(y6_6)
print(x6_6)
ちゃんとー20になったね👀

割り算

//割り算
var x6_7 = 20
var y6_7 = 7
x6_7 = x6_7 / -(y6_7)
print(x6_7)
ちゃんと出てきたね👀

余り

//余り
var x6_8 = 20
var y6_8 = 7
x6_8 = x6_8 % -(y6_8)
print(x6_8)

優先順位

//優先順位
var x6_9 = 20
var y6_9 = 7
var z6_9 = 35
x6_9 = y6_9 * 15 + z6_9 + -(4/2)
print(x6_9)
てな感じになるんだけど、

カッコでさらに最優先で括って計算させると、、、

//優先順位
var x6_9 = 20
var y6_9 = 7
var z6_9 = 35
x6_9 = y6_9 * (15 + z6_9 + -(4/2))
print(x6_9)
てな感じで計算結果がもちろん全然違ってくる

ま、別に暗算能力とかを競ったりするために、
全てのプログラミング言語のSyntaxはあるわけではなく、
むしろ、こんな複雑な計算を人間がしなくて良いようにあるんだし、
世界的な名著を書いてるジェラルド・ワインバーグ博士も、著書

で、

2桁の足し算ですら、暗算だと覚束ないし、即答できる自信がない

って言ってるくらいなんだから、

こんなパッと見、理解するのが複雑な(?👀)計算式なんて、

//優先順位
var x6_9 = 20
//掛けられる数
var y6_9 = 7
var z6_9 = 35
//掛ける数
var multipleValue = 15 + z6_9 + -(4/2)
x6_9 = y6_9 * multipleValue
print(x6_9)

てな感じでさらに分割して、

掛ける側の数の計算結果が何になるかをわかるようにしとくけどね

こうしとくと、優先順位とかが覚束ない人でも

掛ける数が何で、掛けられる数が何か一目見ればわかるでしょ
👉何をしてるかわかるから、改修が早くなるし、バグの発生も少なくて済む

からね。

さらに、続きは〜〜〜

いや別に、算数みたいに書かなくても、

//別表記
var x6_10 = 20
var y6_10 = 7
x6_10 += y6_10
print(x6_10)
x6_10 = 20 //初期値に戻す
x6_10 -= y6_10
print(x6_10)
x6_10 = 20 //初期値に戻す
x6_10 *= y6_10
print(x6_10)
x6_10 = 20 //初期値に戻す
x6_10 /= y6_10
print(x6_10)
x6_10 = 20 //初期値に戻す
x6_10 %= y6_10
print(x6_10)
てな感じでもできるってことをゆーてるね

お次は、比較演算子で、大なりとか小なりをすることもできるぜぃ

ってゆーてるね👀

//比較演算子
var result6_11: Bool? //比較結果の変数(インスタンス)を作っておいて
var x6_11 = 20
var y6_11 = 7
//大
result6_11 = x6_11 > y6_11
print(result6_11!)
//小
result6_11 = x6_11 < y6_11
print(result6_11!)
//以上
result6_11 = x6_11 >= y6_11
print(result6_11!)
//以下
result6_11 = x6_11 <= y6_11
print(result6_11!)
//等しい
result6_11 = x6_11 == y6_11
print(result6_11!)
//違う
result6_11 = x6_11 != y6_11
print(result6_11!)
てな感じで比較できたね🕺

で、お次は真偽値演算子てか、論理演算子

//論理演算子:排他
var x6_12 = 20
var y6_12 = 10
    //じゃなければ
if x6_12 != y6_12 {
    print("同じじゃないぞ")
    //以外であれば
} else {
    print("同じだぞ")
}

//論理演算子:かつ
var x6_13 = 20
var y6_13 = 10
    //いずれも満たしてる場合
if (x6_13 < y6_13) && (x6_13 > y6_13) {
    print("満たしてるぞ")
    //以外であれば
} else {
    print("満たしてないぞ")
}

//論理演算子:または
var x6_14 = 20
var y6_14 = 10
    //いずれかを満たしてる場合
if (x6_14 < y6_14) || (x6_14 > y6_14) {
    print("満たしてるぞ")
    //以外であれば
} else {
    print("満たしてないぞ")
}
てな感じだね👀

範囲演算子

ここはSwift以降のプログラミング言語で定着してきてる表現記法で、

Swiftの真骨頂とも言って良いんじゃないかな👀

って演算子なんだけど、範囲を何から何までって感じで表記する

//範囲演算子
var x6_15 = 1
var y6_15 = 5
var z6_15 = 2
//未満
for n in x6_15..<y6_15 {
    print("\(n)回目の計算前のZの値は、\(z6_15)")
    print("今は、\(n)回目")
    z6_15 += n
    print("\(n)回目の計算結果は、\(z6_15)")
}

てな感じで、

てな感じで1〜4回繰り返す
//指定した値まで含んで繰り返す
for n in x6_15...y6_15 {
    print("\(n)回目の計算前のZの値は、\(z6_15)")
    print("今は、\(n)回目")
    z6_15 += n
    print("\(n)回目の計算結果は、\(z6_15)")
}

で、最後の値まで繰り返すようにすると、、、

てな感じで、5回目まで繰り返すからね。

教室事例なようで、意外と現場でも、

100まで計算して欲しい

ってきたときに、

0〜100なのか0〜99までなのか、1~100までなのか

ってことで、

要求が明確じゃない

ってことはよくある話なので。。。勝手に思い込まずに、

不明確ならきちんと差し戻して確認しようね〜〜〜
👉クライアントなんて、

そこまで正確に伝えなくても、エンジニアとかクリエイターならば、
それくらい分かって当たり前。わかるべき

とかって勝手に押し付けてくるもんだから。

実際、

//教室事例:最後を含まない
var sum6_16 = 1
for n in 0..<100 {
    sum6_16 += n
    print(sum6_16)
}

だと、

最後の値は4951

だけど、、、

//教室事例:最後を含む
var sum6_17 = 1
for n in 0...100 {
    sum6_17 += n
    print(sum6_17)
}

だと、

処理結果は、5051になってる

で、さらにそれに、例えば、

定価と消費税を掛けるなんてことになると、、、

//教室事例:最後を含まない
var sum6_16 = 1
for n in 0..<100 {
    sum6_16 += n
}
let comsumerTax6_16 = 1.1
let price6_16: Double = 121
var result6_16: Double
result6_16 = price6_16 * Double(sum6_16) * comsumerTax6_16
print(result6_16)

//教室事例:最後を含む
var sum6_17 = 1
for n in 0...100 {
    sum6_17 += n
}
let comsumerTax6_17 = 1.1
let price6_17: Double = 121
var result6_17: Double
result6_17 = price6_17 * Double(sum6_17) * comsumerTax6_17
print(result6_17)
見ての通り計算結果が全然違うことになりかねないからね、、、💦

こんなの税とか金融システムの現場で、実際にやらかして
更新処理なんかをしてたらって考えるだけでも恐ろしい
😱

三項演算子

ま、ここはさっきまでやってたif文を、1行の式で書けるよって感じな演算子で(意外と便利🕺)

//三項演算子
var a6_18 = 1
var b6_18 = 2
print(a6_18 < b6_18 ? "条件通り" : "条件と違うぞ")

みたいな感じで、実行すると

てな感じで出来なくもないんだけど、、、

//三項演算子
var a6_18 = 1
var b6_18 = 2
//条件に一致した時だけ掛け算
print(a6_18 < b6_18 ? a6_18 * b6_18 : "")

てな感じで、

と出来なくもない。

まあ、

どれが見やすいか見にくいか

だけの違いだけど、意外と重宝するので、三項演算子での記法に慣れておいて損はないかなと、、、💦

nil融合演算子

//nil融合演算子
let item6_19: String? = nil
print("商品は、\(item6_19 ?? "りんごです") ")

で実行すると、、、

てな感じで

ま、引数がnilの場合に、どうするかを決めておく演算子ってことで💦
これをしないと、、、

てな感じで、

値がnilのままで、後続の処理がおかしくなるかもしれないので、

ま、普通は

//nil融合演算子
var item6_19: String? = nil
item6_19 = greeting
print("商品は、\(item6_19!) ")

って感じで、値を代入させて、アンラップさせるか

てな感じ
//nil融合演算子
var item6_19: String? = nil
print("商品は、\(item6_19 ?? "nilだぞ") ")

てな感じで、

nilの時にnilとわかるようにログに吐き出してる

nilが間のどこに入ってるかをわかるようにさせておきたいときに使う程度だけどね、、、💦

Bitwise演算子

最後は、Bitwise演算子なんだけど、オイラはこの方あんまり、SwiftUIでアプリを作る中で、Bitwise演算子を使う場面に遭遇したことがないんだけど、、、💦

どんな時に使うのか?

あんまイメージ湧かないんだよね〜〜〜🤔勉強不足とか経験不足なだけかもしれないけど。。。💦

なんかが参考になるかなとは思うんだけど、、、

SwiftUIでやるときに未だにポインタみたいな考え方を使う局面があるのかなっと🧐

なのでここは、実際に簡単なサンプルコードで例示だけに留めておくね

//Bitwise演算子
//Not
let a6_20 = 23
let b = ~a6_20
print(b)
//AND
let x6_21 = 14
let y6_21 = 23
let z6_21 = x6_21 & y6_21
print(z6_21)
//OR
let x6_22 = 14
let y6_22 = 23
let z6_22 = x6_22 | y6_22
print(z6_22)
//XOR
let x6_23 = 14
let y6_23 = 23
let z6_23 = x6_23 ^ y6_23
print(z6_23)
//LEFTShift
let x6_24 = 14
let y6_24 = x6_24 << 1
print(y6_24)
//RightShift
let x6_25 = 14
let y6_25 = x6_24 >> 1
print(y6_25)
実行結果

別の書き方で、

//Bitwise演算子別の書き方
var x6_26 = 14
var y6_26 = 23
//AND
x6_26 &= y6_26
print(x6_26)
//OR
x6_26 |= y6_26
print(x6_26)
//XOR
x6_26 ^= y6_26
print(x6_26)
//LEFTShift
x6_26 <<= y6_26
print(x6_26)
//RightShift
x6_26 >>= y6_26
print(x6_26)

みたいなこともできるみたいだけど。。。

👀?

ちょっと、ここのサンプルだと分かりにくいよなあ🧐
理論的にはわかるが、
Bitwise演算子はオーバーフロー対策でどう使うのか
が肌感覚でわからんな
💦

Apple公式

Apple以外の参考リンク

さてと、次回は

💃制御構文を扱う第7章に入ってく〜〜〜〜🕺

ビットワイズ演算子がよくわからないので、明日以降で復習しとこう💦

記事公開後、

いつもどおり、コードテンプレートで今回の内容を貼り付け〜〜〜〜🕺

でやった作業を参考に〜〜〜

今回は、
横回転で
楽しんでみた 藁🤣
下までバッチリ🕺

前回はコードを載せなかったので〜〜〜!あくまでも参考に👀

🔷iOSApp17DevelopmentEssentials.swift

import SwiftUI

//ビュー管理構造体
struct ListiOSApp17DevelopmentEssentials: Identifiable {
    var id: Int
    var title: String
    var view: ViewEnumiOSApp17DevelopmentEssentials
}

//遷移先の画面を格納する列挙型
enum ViewEnumiOSApp17DevelopmentEssentials {
    case Ch1
    //じっくり13で追加
    case Ch2
    //じっくり13で追加
    case Ch3
    //じっくり15で追加
    case Ch4
    //じっくり16で追加
    case Ch5
    //じっくり17で追加
    case Ch6
}

//各項目に表示する文字列
let dataiOSApp17DevelopmentEssentials: [ListiOSApp17DevelopmentEssentials] = [
    ListiOSApp17DevelopmentEssentials(id: 1, title: "第1章", view: .Ch1),
    //じっくり13で追加
    ListiOSApp17DevelopmentEssentials(id: 2, title: "第2章", view: .Ch2),
    //じっくり13で追加
    ListiOSApp17DevelopmentEssentials(id: 3, title: "第3章", view: .Ch3),
    //じっくり15で追加
    ListiOSApp17DevelopmentEssentials(id: 4, title: "第4章", view: .Ch4),
    //じっくり16で追加
    ListiOSApp17DevelopmentEssentials(id: 5, title: "第5章", view: .Ch5),
    //じっくり17で追加
    ListiOSApp17DevelopmentEssentials(id: 6, title: "第6章", view: .Ch6)
]

struct iOSApp17DevelopmentEssentials: View {
    var body: some View {
        VStack {
            Divider()
            List (dataiOSApp17DevelopmentEssentials) { data in
                self.containedViewiOSApp17DevelopmentEssentials(dataiOSApp17DevelopmentEssentials: data)
            }
            .edgesIgnoringSafeArea([.bottom])
        }
        .navigationTitle("iOS開発の章目次")
        .navigationBarTitleDisplayMode(.inline)
    }
    //タップ後に遷移先へ遷移させる関数
    func containedViewiOSApp17DevelopmentEssentials(dataiOSApp17DevelopmentEssentials: ListiOSApp17DevelopmentEssentials) -> AnyView {
        switch dataiOSApp17DevelopmentEssentials.view {
        case .Ch1:
            return AnyView(NavigationLink (destination: iOSApp17DevelopmentEssentialsCh1()) {
                Text(dataiOSApp17DevelopmentEssentials.title)
            })
        //じっくり13で追加
        case .Ch2:
            return AnyView(NavigationLink (destination: iOSApp17DevelopmentEssentialsCh2()) {
                Text(dataiOSApp17DevelopmentEssentials.title)
            })
        //じっくり13で追加
        case .Ch3:
            return AnyView(NavigationLink (destination: iOSApp17DevelopmentEssentialsCh3()) {
                Text(dataiOSApp17DevelopmentEssentials.title)
            })
        //じっくり15で追加
        case .Ch4:
            return AnyView(NavigationLink (destination: iOSApp17DevelopmentEssentialsCh4()) {
                Text(dataiOSApp17DevelopmentEssentials.title)
            })
        //じっくり16で追加
        case .Ch5:
            return AnyView(NavigationLink (destination: iOSApp17DevelopmentEssentialsCh5()) {
                Text(dataiOSApp17DevelopmentEssentials.title)
            })
        //じっくり16で追加
        case .Ch6:
            return AnyView(NavigationLink (destination: iOSApp17DevelopmentEssentialsCh6()) {
                    Text(dataiOSApp17DevelopmentEssentials.title)
            })
        }
    }
}

#Preview {
    iOSApp17DevelopmentEssentials()
}

🔷iOSApp17DevelopmentEssentialsCh6.swift

import SwiftUI

//ビュー管理構造体
struct ListiOSApp17DevelopmentEssentialsCh6: Identifiable {
    var id: Int
    var title: String
    var view: ViewEnumiOSApp17DevelopmentEssentialsCh6
}

//遷移先の画面を格納する列挙型
enum ViewEnumiOSApp17DevelopmentEssentialsCh6 {
    case Sec1
}

//各項目に表示するリスト項目
let dataiOSApp17DevelopmentEssentialsCh6: [ListiOSApp17DevelopmentEssentialsCh6] = [
    ListiOSApp17DevelopmentEssentialsCh6(id: 1, title: "第1節", view: .Sec1)
]

struct iOSApp17DevelopmentEssentialsCh6: View {
    var body: some View {
        VStack {
            Divider()
            List (dataiOSApp17DevelopmentEssentialsCh6) { data in
                self.containedViewiOSApp17DevelopmentEssentialsCh6(dataiOSApp17DevelopmentEssentialsCh6: data)
            }
            .edgesIgnoringSafeArea([.bottom])
        }
        .navigationTitle("6章目次")
        .navigationBarTitleDisplayMode(.inline)
    }
    //タップ後に遷移先へ遷移させる関数
    func containedViewiOSApp17DevelopmentEssentialsCh6(dataiOSApp17DevelopmentEssentialsCh6: ListiOSApp17DevelopmentEssentialsCh6) -> AnyView {
        switch dataiOSApp17DevelopmentEssentialsCh6.view {
        case .Sec1:
            return AnyView(NavigationLink (destination: Essentials6()) {
                Text(dataiOSApp17DevelopmentEssentialsCh6.title)
            })
        }
    }
}

#Preview {
    iOSApp17DevelopmentEssentialsCh6()
}

🔷Essentials6.swift

import SwiftUI
import WebKit

struct Essentials6: View {
    var body: some View {
        VStack{
            TabView {
                Essentials6Code()
                    .tabItem {
                        Image(systemName: codeImageTab)
                        Text(codeTextTab)
                    }
                Essentials6Points()
                    .tabItem {
                        Image(systemName: pointImageTab)
                        Text(pointTextTab)
                    }
                Essentials6WEB()
                    .tabItem {
                        Image(systemName: webImageTab)
                        Text(webTextTab)
                    }
            }
        }
    }
}

#Preview {
    Essentials6()
}

struct Essentials6Code: View {
    var body: some View {
        ScrollView{
            Text(codeEssentials6)
        }
    }
}

#Preview {
    Essentials6Code()
}

struct Essentials6Points: View {
    var body: some View {
        ScrollView{
            Text(pointEssencials6)
        }
    }
}

#Preview {
    Essentials6Points()
}

struct Essentials6WebView: UIViewRepresentable {
    let searchURL: URL
    func makeUIView(context: Context) -> WKWebView {
        let view = WKWebView()
        let request = URLRequest(url: searchURL)
        view.load(request)
        return view
    }
    
    func updateUIView(_ uiView: WKWebView, context: Context) {
        
    }
}

struct Essentials6WEB: View {
    private var url:URL = URL(string: urlEssentials6)!
    var body: some View {
        Essentials6WebView(searchURL: url)
    }
}

#Preview {
    Essentials6WEB()
}

🔶CodeManageFile.swift(追記分)

let codeEssentials6 = """
/**:-------------------------------------------
  Essentials 第6章
 ----------------------------------------------*/
//Basic expression

var sum6_1 = 1 + 1

//定数で足し算
let sum6_2 = 1 + 1

//代入式
//オプショナル型で表現
var a6_3: Int?
var b6_3 = 10
//値を代入
a6_3 = 21
//出力
print(a6_3!)
//強制アンラップして、加算
a6_3 = a6_3! + b6_3
//出力
print(a6_3!)
//bにaを代入
b6_3 = a6_3!
//出力。bはオプショナル型じゃないので強制アンラップ不要
print(b6_3)

//足し算
var x6_4 = 20
var y6_4 = -1
x6_4 = x6_4 + y6_4
print(x6_4)


//マイナスの値を足し算で表記
var x6_5 = 20
var y6_5 = 1
x6_5 = x6_5 + -(y6_5)
print(x6_5)

//掛け算
var x6_6 = 20
var y6_6 = 1
x6_6 = x6_6 * -(y6_6)
print(x6_6)

//割り算
var x6_7 = 20
var y6_7 = 7
x6_7 = x6_7 / -(y6_7)
print(x6_7)

//余り
var x6_8 = 20
var y6_8 = 7
x6_8 = x6_8 % -(y6_8)
print(x6_8)

//優先順位
var x6_9 = 20
//掛けられる数
var y6_9 = 7
var z6_9 = 35
//掛ける数
var multipleValue = 15 + z6_9 + -(4/2)
x6_9 = y6_9 * multipleValue
print(x6_9)

//別表記
var x6_10 = 20
var y6_10 = 7
x6_10 += y6_10
print(x6_10)
x6_10 = 20 //初期値に戻す
x6_10 -= y6_10
print(x6_10)
x6_10 = 20 //初期値に戻す
x6_10 *= y6_10
print(x6_10)
x6_10 = 20 //初期値に戻す
x6_10 /= y6_10
print(x6_10)
x6_10 = 20 //初期値に戻す
x6_10 %= y6_10
print(x6_10)

//比較演算子
var result6_11: Bool? //比較結果の変数(インスタンス)を作っておいて
var x6_11 = 20
var y6_11 = 7
//大
result6_11 = x6_11 > y6_11
print(result6_11!)
//小
result6_11 = x6_11 < y6_11
print(result6_11!)
//以上
result6_11 = x6_11 >= y6_11
print(result6_11!)
//以下
result6_11 = x6_11 <= y6_11
print(result6_11!)
//等しい
result6_11 = x6_11 == y6_11
print(result6_11!)
//違う
result6_11 = x6_11 != y6_11
print(result6_11!)

//論理演算子:排他
var x6_12 = 20
var y6_12 = 10
    //じゃなければ
if x6_12 != y6_12 {
    print("同じじゃないぞ")
    //以外であれば
} else {
    print("同じだぞ")
}

//論理演算子:かつ
var x6_13 = 20
var y6_13 = 10
    //いずれも満たしてる場合
if (x6_13 < y6_13) && (x6_13 > y6_13) {
    print("満たしてるぞ")
    //以外であれば
} else {
    print("満たしてないぞ")
}

//論理演算子:または
var x6_14 = 20
var y6_14 = 10
    //いずれかを満たしてる場合
if (x6_14 < y6_14) || (x6_14 > y6_14) {
    print("満たしてるぞ")
    //以外であれば
} else {
    print("満たしてないぞ")
}

//範囲演算子
var x6_15 = 1
var y6_15 = 5
var z6_15 = 2
//未満
for n in x6_15..<y6_15 {
    print("\\(n)回目の計算前のZの値は、\\(z6_15)")
    print("今は、\\(n)回目")
    z6_15 += n
    print("\\(n)回目の計算結果は、\\(z6_15)")
}
//指定した値まで含んで繰り返す
for n in x6_15...y6_15 {
    print("\\(n)回目の計算前のZの値は、\\(z6_15)")
    print("今は、\\(n)回目")
    z6_15 += n
    print("\\(n)回目の計算結果は、\\(z6_15)")
}

//教室事例:最後を含まない
var sum6_16 = 1
for n in 0..<100 {
    sum6_16 += n
}
let comsumerTax6_16 = 1.1
let price6_16: Double = 121
var result6_16: Double
result6_16 = price6_16 * Double(sum6_16) * comsumerTax6_16
print(result6_16)

//教室事例:最後を含む
var sum6_17 = 1
for n in 0...100 {
    sum6_17 += n
}
let comsumerTax6_17 = 1.1
let price6_17: Double = 121
var result6_17: Double
result6_17 = price6_17 * Double(sum6_17) * comsumerTax6_17
print(result6_17)

//三項演算子
var a6_18 = 1
var b6_18 = 2
//条件に一致した時だけ掛け算
print(a6_18 < b6_18 ? a6_18 * b6_18 : "")

//nil融合演算子
var item6_19: String? = nil
print("商品は、\\(item6_19 ?? "nilだぞ") ")

//Bitwise演算子
//Not
let a6_20 = 23
let b = ~a6_20
print(b)
//AND
let x6_21 = 14
let y6_21 = 23
let z6_21 = x6_21 & y6_21
print(z6_21)
//OR
let x6_22 = 14
let y6_22 = 23
let z6_22 = x6_22 | y6_22
print(z6_22)
//XOR
let x6_23 = 14
let y6_23 = 23
let z6_23 = x6_23 ^ y6_23
print(z6_23)
//LEFTShift
let x6_24 = 14
let y6_24 = x6_24 << 1
print(y6_24)
//RightShift
let x6_25 = 14
let y6_25 = x6_24 >> 1
print(y6_25)

//Bitwise演算子別の書き方
var x6_26 = 14
var y6_26 = 23
//AND
x6_26 &= y6_26
print(x6_26)
//OR
x6_26 |= y6_26
print(x6_26)
//XOR
x6_26 ^= y6_26
print(x6_26)
//LEFTShift
x6_26 <<= y6_26
print(x6_26)
//RightShift
x6_26 >>= y6_26
print(x6_26)
"""

と、前回playgroundでやったコードを真面目に組み込もうとした人は、ちゃんと理解してれば簡単かな〜〜っと思って、実は宿題な気分で端折ったんだけど、

print("商品は、\(item6_19 ?? "nilだぞ") ")

みたいに、マルチライン

”””
”””

の中に組み込もうとすると、エラーが出てきたはず。答え合わせって感じで、実は、マルチラインの中だと、

print("商品は、\\(item6_19 ?? "nilだぞ") ")

にしないとエラーになるんだよね〜〜〜🧐

マルチラインの中だと、エスケープ文字を使わないとバックスラッシュなんかはバックスラッシュとして認識しないから🌱🕺
👉ま、その理屈が分かるか知ってれば簡単なんだが。

🔶PointManageFile.swift(追記分)

let pointEssencials6 = """
◾️意味不明なエラーが出た
👉辿っていくとvarで宣言したつもりがletで宣言してたorz
なんてのは、JavaScriptみたいな言語も使い慣れてると
やりがちなミスで焦る
◾️=:代入する記号やっでね。
◾️実際に動かしてみよう🕺
👉頭で理解してて実際に動かして検証しない
=想定通りの動きになってるかわからない
◾️頭で想定してるとおりの実行結果になるとは限らない
遠回りなようで近道
急がば回れ
100の思い込みよりも、ひとつの検証
頭で覚える、理解するよりも、実際に動かして、目と体で身に付けよ
◾️こんなの税とか金融システムの現場で、実際にやらかして
更新処理なんかをしてたらって考えるだけでも恐ろしい😱
"""

🔶URLManageFile.swift(追記分)

let urlEssentials6 = "https://note.com/m_kakudo/n/n8d342f5d8431"

ではでは、また次回💦

さてと、トイレ掃除して、嫁にカレーを作ろう🍛🥂

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