未経験者のための『コードを学ぼう』ガイド-3
コードを学ぼう1の 第4章条件分岐コード 第5章論理演算子 第6章whileループ 第7章アルゴリズム を解説しています。
この記事は『コードを学ぼう』の副読本です。
『コードを学ぼう』の各章を整理・解説し、より本格的なプログラミング学習に(立ち往生せず)進むことを目的としています。
在宅でできるスキルとして、プログラミングに興味を持っている人に向けて書きます。
複数の記事に分かれています、順に読み進んでください。
このシリーズの構成 ▶︎このnote
未経験者のための『コードを学ぼう』ガイド-1
⬇︎
iPadで『コードを学ぼう』
Macで『コードを学ぼう』
⬇︎
未経験者のための『コードを学ぼう』ガイド-2
▶︎未経験者のための『コードを学ぼう』ガイド-3
⬇︎
未経験者のための『コードを学ぼう』ガイド-4
未経験者のための『コードを学ぼう』ガイド-5
未経験者のための『コードを学ぼう』ガイド-6
・画像クリックで拡大表示できます
ページタイトルの後ろの「🔶」印は課題のページ、⏺は練習のページです。
6 条件分岐コードの章(if 文)
条件分岐がプログラムを実用的なものにします。
「演算子」は英語では operator です。
「条件分岐」は英語では conditional code です。
「もし〜ならば△△△をする」といった、条件に当てはまる場合だけ処理をおこなうのが if 文です。
プログラミングの世界で条件は真か偽かでシンプルに判別します。
「真」は英語で true、「偽」は false です。
true も false も コードで使うことのできるSwiftのキーワードです。
「コンピュータはゼロか1かの世界」と聞いたことがあるかもしれません。
1が true で、ゼロが false に対応します。
※この記事で「ゼロ」をカナで書くのは、ゼロとアルファベットのオーの見分けがつきにくいためです。
0:ゼロ、O:大文字のオー、o:小文字のオー
コードでは区別しやすい表示になっています。
0:ゼロ、O:大文字のオー、o:小文字のオー
6-1 スイッチを調べる 🔶
if 文の使い方を学びます。
いきなり isOnClosedSwitch が登場します。
これは()で終わっていないので、コマンドではありません。
isOnClosedSwitch は「今、切れているスイッチの上にいる」の true または false を持ちます。
このステージの説明に「コードを書く前に、まずはこのステージを何回か実行してみてください。」とかかれています。
実行するたびに三つあるスイッチの状態がかわります。
このため if 文で処理を切り替えなければなりません。
if 文は 下のショートカットバー/ショートカットリストにあらわれるので選ぶと入力できます。
6-2 else if を使う 🔶
if と else if の使い方を学びます。
まず説明を読み、青字の if と else if の解説も確認してください。(else if は用語集の「else if ブロック」を表示します)
if と else if ブロックの関係を「例」のコードで説明します。
if isOnClosedSwitch { // 1️⃣
toggleSwitch() // 2️⃣
} else if isOnGem { // 3️⃣
collectGem() // 4️⃣
}
// 5️⃣
この例は isOnClosedSwitch が真ならば2️⃣の toggleSwitch() だけを実行し5️⃣の行へ進みます。
もし isOnClosedSwitch が偽ならば3️⃣の else if isOnGem に進みます(2️⃣の行は実行しません)。
else if isOnGem は「else」と「if 文」が合体したものです。
isOnGemが真ならば4️⃣の collectGem() を実行し5️⃣の行へ進みます。
isOnGem が偽ならば5️⃣の行へ進みます。
つまり isOnClosedSwitch も isOnGem も偽ならば何もせずに5️⃣の行へ進みます。
上記のif else if コードは
スイッチが閉じていれば(宝石があってもなくても) スイッチを切り替えます。
閉じたスイッチの上ではなく 宝石があれば 宝石を取ります。
else if はショートカットバー/ショートカットリストにはありません。
まず if 文を入力しブロックを選択状態にするとポップアップメニューを表示します。
このメニューに「'else'文を追加」「'else if'文を追加」を選ぶと追加できます。
このステージも実行するたびに、スイッチや宝石の状態が変わります。
目的を達成しても、何度か実行し正しくスイッチや宝石を区別していることを確認してください。
6-3 条件分岐コードをループする 🔶
繰り返しの中で if を使う練習です。
このステージも実行するたびにスイッチや宝石の状態が変化します。
それを確認するために何も入力せずに実行すると、次のような表示になります。
赤い丸印はその行にSwift言語として解釈できない部分があることを示しています。
赤い丸はコードを修正しなければ消えません。
赤い丸(エラー)が一つもない状態にしなければ、実行はできません。
エラーメッセージは英語の場合もあります。
このエラーの説明:
『エラー:このプレースホルダに入力する必要があります』
プレースホルダ(placeholder)は『実際の内容で置き換えるために、とりあえず仮に確保した仮の入力のことです』
(仮の入力を残したままでは、必ずエラーになります)
for文の繰り返し回数をまだ入力していませんでした。
仮に1などを入力するとエラーは消えるはずです。
宝石かスイッチを表す白線の枠をここでは「ワイヤフレーム」と呼んでいます。
実行のたびにスイッチと宝石の状態がかわるので、一度ゴールに到達しても何度か実行してください。
「▶︎▶︎▶︎一番速く実行」で実行すると、バイトが早歩きになり短時間で結果が得られます。
6-3-1 ソースコンパイルエラー
まれに次のような表示になる場合があります。
これは Playgroundsアプリもしくは 「コードを学ぼう」の不具合です。
あなたの入力したコードのエラーではありません。(安心してください)
❶「完了」ボタンをタップするとこのエラー表示は消えます。
そのまま実行を続けるには、
❷ 別のベージに切り替え、その後でもう一度このエラーを表示したページに戻ってください。
ステージを表示しバイトが動き出したら準備完了です。
ページを切り替えた時にきれいな状態から開始するので、これで継続できるはずです。
ページ切り替えは、実行ボタンをタップしてからバイトが動き出すまで時間がかかるような場合でも、ためしてください。
6-4 階段を上がる条件を探す ⏺
if と else if の使い方を練習します。
このページでは新しい用語「ブール」が載っています。
説明とヒントを参考にこのページも課題をクリアしてください。
(ページタイトルもヒントの一つです)
6-5 関数をじょうずに使う 🔶
関数の中で if と else if を使う練習です。
ループで対応できない場合は関数で対応しましょう。
if 文、else if に慣れてください。
パターンとパターンに収まらない場合をうまく切り分けてください。
6-6 囲まれる ⏺
条件分岐と関数やループを使う練習です。
ヒントを参考に、課題をクリアしてください。
6-7 繰り返しを探す ⏺
パターンの条件をみつけ状態により分岐する練習です。
ここでは例としてコードの一部があります。
この例を使って、関数を完成させてください。
何行もコードを入力しないと完成しません。
頭では分かっていても、コードにしないとバイトは動きません。
楽しみながらこの章最後の課題に挑戦してください。
・・・
7 論理演算子の章
論理(ろんり)演算子(えんざんし)、なにやらムズカシそうな章ですね。
複数の条件をまとめて判断することは日常でも頻繁にあります
天気が良くて 風がなければ 自転車で出かける
寒くて 風が強ければ 暖かいコートを着て行く
現実の課題をコンピュータで処理する場合には、さらに複雑な条件に対応しなければなりません。
それに対応するため 論理演算子 を使います。
コードを学ぼうをここまで進んできたなら大丈夫ですよ。
論理演算子の説明を何度も見直してから進みましょう。
はじめに ではまず演算子の説明があります。
3 + 4 のプラス(+)が演算子のひとつです。
次に AND OR NOT 三つの演算子、これが論理演算子です。
7-1 NOT演算子を使う 🔶
NOT演算子を学びます。
NOT演算子(ノットえんざんし)はSwiftでは半角文字の感嘆符「!」です。
残念ながらショートカットバー/ショートカットリストでは入力できません。
キーボードから入力してください。
for 文の i(アイ)と間違えないようにしてください。
iPadの場合の入力方法:
if else ブロックを使うと同じ処理が NOT演算子を使わなくてもできます。
ここでは論理演算子の練習なので NOT演算子を使ってください。
7-2 NOTで周る ⏺
NOT演算子の練習です。
ステージのコースは実行するたびに変わります。
課題をクリアできても、何度か実行して確認してください。
NOT演算子を使わなくても課題をクリアすることは可能です。
余裕があれば「ページをリセット」して挑戦してください。
7-3 両方正しければ合格 🔶
AND演算子(アンドえんざんし)を学びます。
ステージのコースは固定です。
AND演算子は2文字連続の半角アンドマーク「 && 」です。
間に空白を入れてはいけません。
このステージもAND演算子を使わなくても課題をクリアすることは可能です。
余裕があれば「ページをリセット」して挑戦してください。
7-4 一方でも正しければ合格 🔶
OR演算子(オアえんざんし)を学びます。
OR演算子は2文字連続の半角アンドマーク「 || 」です。
間に空白を入れてはいけません。
OR演算子はショートカットバー/ショートカットリストから選ぶのが確実です。
キーボードから入力する場合は似た文字と間違わないようにしてください。
iPadの場合 a キーを下にずらして離すと入力できます。
実際のキーボードでは、JISキーボードの場合 ¥(円記号)のキーをシフトを押しながら入力です。
このステージはelseブロックを使わなくても課題をクリアすることは可能です。
余裕があれば「ページをリセット」して挑戦してください。
7-5 論理の迷宮 ⏺
論理演算子の練習です。
まずステージを拡大表示して、パターンを考えてください。
論理演算子を使わせるためのステージですね。
7-6 条件とブール値を少し詳しく
(コードを学ぼうでは説明されていない予習の内容を含みます)
比較演算子 > < >= <= == !=
比較して結果を trueまたはfalseのブール値で返します。
条件分岐などで使います。
let a = 3 // aに3を代入 単独のイコールは代入演算子と呼びます
3 < a // 3よりも大きいか?
10 > a // 10よりも小さいか?
3 <= a // 3と等しいか大きい?
10 >= a // 10と等しいか小さい?
a == 5 // aと5は等しいか?
a != 5 // aと5は等しくないか?
等しくないは半角の感嘆符とイコールです。
▲注意: Swift言語では感嘆符は重要です。しかも使われる場所で意味がいろいろと変わりますので感嘆符には注意してください。
「比較演算子」は英語では comparison operator です。
7-7 論理演算と論理演算子
論理演算はプログラムでは頻繁に使います。
論理NOT(ノット)「!」
「行き止まりならば」を「行き止まりでなければ」にします。
論理否定も半角の感嘆符を使います。
論理否定とも呼ばれます。
論理AND(アンド)「&&」
「楽譜が読める」「ピアノが弾ける」の条件で両方できる人を表します。
論理積とも呼ばれます。
日本語では『かつ』(楽譜が読める かつ ピアノが弾ける)に相当します。
論理OR(オア)「||」
どちらかできる人を表します。
論理和とも呼ばれます。
日本語では『または』(楽譜が読める または ピアノが弾ける)に相当します。
例:
let condA = true
let condB = false
!condA // 論理否定
condA && condB // 論理積
condA || condB // 論理和
▲注意: 論理NOT演算子の感嘆符の後ろに空白を置くことはできません。
▲注意: 論理OR演算子の『|』はSwift Playgroundsのオンスクリーンキーボードでは「a」キーを下にスワイプ(aキーをタッチしたまま少し下にずらす)で入力できます。
論理積と論理和:
true を1(いち)、false を0(ゼロ)とすると両方1の場合だけ1になり掛け算と同じなので論理積、どちらかが1なら1になるのは足し算と同じなので論理和と呼ばれます(ゼロ以外をtrueとみなすためです)。
7-8 if 文
条件に一致した場合に何かする
if文は例その1のように if 条件 { 条件が一致した場合の処理 } と書きます。
{ }の中は複数行でもかまいません。
条件は比較演算子を使うことが多いですが Bool(論理)型の変数やプロパティも使えます。
「if 文」は英語では if statement です。
「if」と条件は空白で区切ります。
var a = 500
var b = 0
// 例その1
if b != 0 {
a / b // bがゼロでなければbで割り算
}
if 文の処理の行数が多くなるとコードがわかりにくくなります。
10行以上などの場合には関数にまとめることを検討してください。
条件に一致しない場合にも何かする
『例その2』のように条件に一致した場合だけでなく、一致しない場合にも何かするには
if 条件 { 条件成立の場合 } else { 成立しない場合 } と書きます。
{ }の中は複数行でもかまいません。
// 例その2
var str = ""
b = 5
if b == 0 {
str = "割り算できません"
}
else {
str = "\(a / b)" // 割り算の結果を文字にする書き方
}
条件判断が続く場合
最初の条件以外の場合にさらに別の条件で判断するには else if 文 を使います。
12歳未満が子供料金、65歳以上が敬老料金、12歳から64歳がおとな料金の場合
var age = 22
var fare = 200
if 12 > age {
fare = 100 // 子供料金
} else if 65 <= age {
fare = 100 // 敬老料金
} else {
// おとな料金
}
この例では最初に200に設定しているため最後の else { } はなくても構いません。
条件が一つでない場合
次のように条件が複数ある(身長と年齢)場合
var height = 160
let age = 14
if 160 <= height && 16 <= age {
// 身長が160以上で年齢が16以上
}
次のように条件をカッコでくくっても処理に影響はありません。
if (160 <= height) && (16 <= age) {
上記の二つの条件をそれぞれBool型定数に代入しても同じ処理を実現できます。
let tall = 160 <= height // 身長が160以上か?
let ageLimit = 16 <= age // 年齢が16以上か?
if tall && ageLimit {
// tall かつ ageLimit
}
このように比較結果を一度論理型変数に代入しその変数の組み合わせで判断した方が直感的でバグの少ないプログラムになる場合があります。
・・・
8 while ループの章
whileループは回数ではなく条件が真(true)のあいだ繰り返します。
ループの中で変化する条件などにも対応できます。
「条件」は英語で condition です。
8-1 条件を決めてコードをループする 🔶
条件により繰り返すwhileループを学びます。
whileブロックが入力済みでcondition(条件)がプレースホルダになっています。
ここでショートカットバー/ショートカットリストに isOnOpenSwitch があります。
ショートカットバーは長押しすると簡単な説明を表示します。
タップしてコードを入力の部分はforと同じに書けます。
8-2 whileループをじょうずに使う 🔶
whileループの練習です。
入力済みコードがなにもないので、ショートカットバーからwhileブロックも入力します。
繰り返しを続ける条件を見つけ出すのがポイントです。
8-3 正しいループを使う 🔶
このステージには入力済みの関数定義があります。
どのように動くのかコードをたどってみてください。
次にループではなくこの関数をコマンドとして実行し、動きを確認すると良いですよ。
ヒントも参考に目標を達成できるようループに組み込み実行してください。
8-4 2つのループ ⏺
ループの使い方を練習します。
まずステージを回転し、全体を確認してください。
最初に表示される角度ではパターンを見渡しにくいので。
8-5 回る ⏺
これまで学んだ方法の応用です。
込み入っていますが、パターンはシンプルです。
コードもシンプルで大丈夫です。
8-6 方法はたくさん ⏺
ランダムに変化するステージに対応する練習です。
長さが変わるのでwhileループに最適ですね。
パターンはいくつか見つかるので、ためしてください。
8-7 ループをネストする 🔶
ループの中にループがあるコードの練習です。
目標とヒントをよく読み、ステージをよく見てコードを書いてください。
ふたつのwhileループの条件をうまく探すと、コードはシンプルになります。
このページをクリアすると注意が表示されます。
『whileループのブール条件がいつまでも当てはまると、コードが無限ループで永遠に実行され、コンピュータがフリーズしてしまいます。』
ループが永久に終わらないのはコードの大敵です。
8-8 ランダムな四角形 ⏺
ランダムに変化するステージに対応する練習です。
課題とヒントを参考にコードを書いてください。
ループの中でくりかえし実行することと、ループが終了してから一度だけ実行することにわけて考えるのがコツです。
8-9 どんな方法でも ⏺
スイッチの状態がランダムに変化するステージに対応する練習です。
whileの章の最後のページです。
『コードを学ぼう1』も次の「アルゴリズム」の章のみです。
さあ復習して進みましょう。
8-10 条件を満たす間繰り返すwhile
while 条件 { 繰り返す処理 } と書き条件を満たす間処理を繰り返します。
while isOnClosedSwitch { // 閉じたスイッチの上なら繰り返す
toggleSwitch()
moveForward()
}
無限ループ対策
条件を適切に設定しないと一度も { 繰り返す処理 } を実行しなかったり、繰り返し続けたりします。
特に繰り返し続ける状態を「無限ループ」と呼びます。
無限ループを実行するとほかの処理ができなくなったり、操作を受け付けなくなる原因となります。
このため一般に無限ループ イコール 致命的なバグと言えます。
無限ループとならないよう条件には十分注意しましょう。
なおコードを学ぼうでは紹介されませんが、Swift言語には繰り返し処理を中断する方法もあります。
・・・
9 アルゴリズムの章
『コードを学ぼう1』最後の章です。
ここではSwift言語の新しいキーワードは登場しません。
これまでに学んだ要素を組み合わせて、課題に取り組むみましょう。
用語集では「アルゴリズム」は「問題を解くための段階的な手段または規則。」と載っています。
はじめにには「アルゴリズムは問題を解くための、一連の規則および手順」とかかれています。
コードで問題解決するには不可欠です。
じっくりと取り組み課題をクリアし、アルゴリズムの基本を身につけてください。
9-1 右手法 🔶
「右手法」アルゴリズムを使う練習です。
「疑似コード」を使い、どのような手順なら目標をクリアできるかを考えてください。
疑似コードでうまくいかなければ、コードにしてもクリアは難しいです。
逆に疑似コードでできることなら、それをコードにもれなく書き換えれば正しく動作するはずです。
私が過去に聞いた「右手法」は「常に右手で壁を触りながら進む」でした。
同じことですが、「手」と結び付きずっと記憶しています。
まず説明にある疑似コードを実際に当てはめて、正しく進めることを確認してください。
疑似コードが完成すれば、それをコードとして入力し実行するのみです。
このページには入力済みのコードがありますが不完全です。
どこが疑似コードとちがうか、じっくり見てください。
修正だけでなく、追加も必要ですね。
実行中「■停止」をタップすると実行を止めることができます。
9-2 アルゴリズムを直す 🔶
アルゴリズムの改良を練習します。
入力済みのコードを修正する前に、実行して何が問題か観察してください。
問題修正の方針を立て、コードを変更して効果を確認してください。
9-3 迷路を解く 🔶
アルゴリズムの改良とコードのコピーを練習します。
前のページのコードで難しそうな迷路を進みますね。
宝石を取ったら目標達成! うまくいきましたか?
一本道は右側に進めないので「壁」があるのと同じです。
このため「右手法」が使えます。
目標がかわると、必要なコードもかわります。
9-4 どっちの手を使う? 🔶
状況を見てアルゴリズムを考える練習です。
私は最初のコードでこのステージをクリアできませんでした。
宝石を取らずに前に進みつづけました。
コードを見てもどこが正しくないのか、見つけられません。
そこで「コードをステップ実行」でコードのどの行を実行しているか、確認しました。
思っていたのと違う部分のコードを実行していたことがわかりました。
「コードをステップ実行」はプログラマーの思い込みには関係なく、実際のどのように実行しているのかを確認できるツールです。
活用してください。
9-5 右に行くか、左にいくか ⏺
コードを学ぼう1最後の課題です。
このステージも、実行するとヒントが変わります。
でも無限ループを停止ボタンで止めた場合にはヒントはかわりません。
(新しいヒントは3ページ構成です)
新しいヒントを見るには、ループではなく正常に終わるコードを実行してください。
コードを学ぼう1をすべて終えることができました!
(もし飛ばしたページがあればもう一度チャレンジしてください)
改めてこの「1週間でコーディングを学ぼう」を読んでください。
(最初に読んだ時とは印象が違いませんか?)
「コードを学ぼう1」をやりきったので、「コードを学ぼう2」へ進む準備は完了です。
ここで「コードを学ぼう2」をタップすると、次画面の「入手」ボタンでダウンロードできます。(コードを学ぼう2も340Mを超える巨大サイズです、速度を確保できるWiFi環境がおすすめです)
・・・
お知らせ
noteで公開しているこのシリーズ記事を一冊にまとめ、一部加筆したものをプログラミング未経験者向けの電子書籍としてブックストアからリリースしました。
未経験者のための『コードを学ぼう』ガイド
(目次と冒頭部分が読めるサンプルは無料です)
・・・
ここから先は
未経験者のための『コードを学ぼう』ガイド
未経験者のための『コードで学ぼう』ガイドシリーズをまとめて読めるマガジンです。★注意★現在このマガジンで読めるnoteはすべて無料で読める…
今後も記事を増やすつもりです。 サポートしていただけると大変はげみになります。