この投稿は...
前回の【Swift】Xcodeで始めるアプリ開発入門①に続き、元素について学ぶことができる、コマンドラインインターフェース(CLI)のアプリケーションを開発します。
Swiftを基礎から学ぶには
自著、工学社より発売中の「まるごと分かるSwiftプログラミング」をお勧めします。変数、関数、フロー制御構文、データ構造はもちろん、構造体からクロージャ、エクステンション、プロトコル、クロージャまでを基礎からわかりやすく解説しています。
また、Swiftプログラミングを基礎から動画で学びたい方には、Udemyコース「今日からはじめるプログラミング」をお勧めします。
ハンズオン
ユーザーの選択に基づいて、実行するコードを制御します。
さらに、ランループを構築して、ユーザーとの対話を継続できるようにします。
ユーザーの意思に基づいて、学習方法を決定する
-
「元素をランダムに学習するかどうか」を、ユーザーに質問します。
そして、返答をdecision
定数に保持します。print("Select element to learn, Randomly? (Y or N)") let decision = readLine()!
-
decision
定数に基づいて、「どのタスクを実行するか」を判断します。
そのためのifステートメントを構築してください。print("Select elements to learn, Randomly? (Y or N)") let decision = readLine()! if decision == "Y" { print("OK! Learning element randomly.") } else if decision == "N" { print("OK, Select atomic weight of element...") } else { print("Sorry, I didn't get that.") }
このifステートメントは
decision
定数が「Y」の場合、「N」の場合、あるいは「YでもNでもない」場合の3通りにコードを分岐します。 -
プログラムを実行してください。
「Y」と「N」および「それ以外の値」を入力して、それぞれの出力を観察してください。「Y」を入力した場合
Select elements to learn, Randomly? (Y or N) Y OK! Learning element randomly.
「N」を入力した場合
Select elements to learn, Randomly? (Y or N) N OK, Select atomic weight of element...
それ以外を入力した場合
Select elements to learn, Randomly? (Y or N) XYZ Sorry, I didn't get that.
条件分岐構文を置き換える
It条件分岐構文と同じロジックを、Switch構文で記述します。
-
If文をswitch文に変更してください。
print("Select elements to learn, Randomly? (Y or N)") let decision = readLine()! switch decision { case "Y": print("OK! Learning element randomly.") case "N": print("OK, Select atomic weight of element...") default: print("Sorry, I didn't get that.") }
分岐条件によっては、if構文よりswitch構文の方が読みやすいことがあります。
-
プログラムを実行してください。
コンソールと対話して、機能が維持されていることを観察してください。
ランループを構築する
ユーザーが正しく入力するまで、対話を継続できるようにします。
そのためには、入力値を検証するwhileループを実装します。
そして、ユーザが「YかN」を入力するまで「返答の入力」を求めます。
-
実行ループ中に、ユーザーが繰り返し探索できるようにします。
decision
定数の宣言を変数にして、既定値を「空文字」に変更してください。
そして、ユーザー入力で値を更新します。print("Select elements to learn, Randomly? (Y or N)") var decision = "" decision = readLine()! switch decision { case "Y": print("OK! Learning element randomly.") case "N": print("OK, Select atomic weight of element...") default: print("Sorry, I didn't get that.") }
-
ユーザーが「Y」または「N」を入力するまで、タスクを繰り返すwhileループを構築してください。
print("Select elements to learn, Randomly? (Y or N)") var decision = "" while !(decision == "Y" || decision == "N") { decision = readLine()! switch decision { case "Y": print("OK! Learning element randomly.") case "N": print("OK, Select atomic weight of element...") default: print("Sorry, I didn't get that.") } }
-
プログラムを実行してください。
ユーザーが「Y」か「N」を入力するまで、ランループが繰り返されることを観察してください。
Repeat-Whileループ
このランループは必ず、「少なくとも一度」は実行すべき処理です。
そのため、反復の開始時点で「decision
変数がYかNか」を評価することは無意味です。
-
whileループをrepeat-whileループに置き換えます。
そして、反復処理を行った後で終了条件を評価してください。print("Select elements to learn, Randomly? (Y or N)") var decision = "" repeat { decision = readLine()! switch decision { case "Y": print("OK! Learning element randomly.") case "N": print("OK, Select atomic weight of element...") default: print("Sorry, I didn't get that.") } } while !(decision == "Y" || decision == "N")
-
プログラムを実行してください。
コンソールと対話して、機能が維持されていることを観察してください。
Xcodeのジャンプバー
コードを整理するための注釈をジャンプバーに追加します。
そうすると、コーディング中にジャンプバーをクリックして、該当コードに移動できます。
-
swhitch構文の各ケースに、「コードを後で実装する」ことを示すTODOアノテーションを挿入してください。
print("Select elements to learn, Randomly? (Y or N)") var decision = "" while !(decision == "Y" || decision == "N") { decision = readLine()! switch decision { case "Y": print("OK! Learning element randomly.") // TODO: learn to random element. case "N": print("OK, Select atomic weight of element...") // TODO: let the user select atomic weight of element. default: print("Sorry, I didn't get that.") } }
-
ジャンプバーをクリックして、リストにTODOが追加されたことを観察してください。
全体のコード
main.swift
import Foundation
print("Welcome to the Elements Illustrated Book!")
print("There are 1 element")
print("What is your name?")
let yourName = readLine()!
print("Hi, \(yourName).")
print("Select elements to learn, Randomly? (Y or N)")
var decision = ""
repeat {
decision = readLine()!
switch decision {
case "Y":
print("OK! Learning element randomly.")
// TODO: learn to random element.
case "N":
print("OK, Select atomic weight of element...")
// TODO: let the user select atomic weight of element.
default:
print("Sorry, I didn't get that.")
}
} while !(decision == "Y" || decision == "N")
次のステップ
続きは、「Xcodeで始めるアプリ開発入門③」にて解説。
投稿を告知するので、X(旧Twitter)のアカウントフォローをお願いします。