-
Notifications
You must be signed in to change notification settings - Fork 0
Swift_basic_grammar1
アプリを作り始める前に、まずは一緒にSwiftの基本文法を学んでいきましょう!!
各項目ごとに練習問題も用意しています。実際に手を動かしながら覚えていきましょう。
参考コードはこちら
print文を用いると、実行結果を出力(画面に表示)することができる。
まずは、以下のコードでHello, world!という文字列を出力してみよう。
// プログラム1-1
print("Hello, world!")
練習問題1-1. 上のプログラム1-1を書き換えて、"Hello, Rikoten!"と出力してみよう。
プログラム中に//
や/* */
を書くと、その行は「コメント」になりプログラムとして認識されなくなる。これを「コメントアウト」という。
1行だけのコメントは//
を左に書き、複数行のコメントは/* */
で囲む。
コメントを書くと、思考が整理されたり、自分で書いたコードの意味を後で思い出す際に役立つ。
さらにチーム開発では、書いたプログラムの意味や意図を他のメンバーに伝えるためにも重要なので、コメントはなるべく書くようにしよう。
// プログラム1-2
// 一行のコメント
/* 複数行のコメント
複数行のコメント
複数行のコメント */
ショートカットキー「⌘」+「/」で「//」を挿入できる。
複数行選択中に「⌘」+「/」で「/* */」を挿入できる。
練習問題1-2. 好きな文章を書いてコメントアウトしてみよう。
練習問題1-3. プログラム1-1のprint文をコメントアウトしてみよう。次に、プログラムを実行しても文字列が出力されないことを確認しよう。
以下の演算子を用いると、プログラム上で計算をすることができる。
演算子 | 意味 |
---|---|
+ | 足し算 |
- | 引き算 |
* | 掛け算 |
/ | 割り算 |
% | 割り算のあまり |
// プログラム1-3
print(10+2) //12が出力される
print(10-2) //8
print(10*2) //20
print(10/2) //5
print(10%3) //「10÷3 = 3あまり1」なので、あまりの1が出力される
""
で囲まれた値を文字列という。+演算子で文字列の結合が可能。
// プログラム1-4
print("Hello, " + "world!") //Hello, world!と出力される
練習問題1-4. 「2020を17で割ったあまり」と 3771113*37の計算結果をそれぞれprint文で出力しよう。
練習問題1-5. 2つの文字列"矢口"と"くん"を+演算子で結合し、出力しよう。
変数を定義すると、同じ値を何回も記述せずに済む。
変数は、基本的にvar 変数名: 変数の型 = 値
のように定義する。変数の型については後述の項目を参照。
// プログラム1-5
var str: String = "Hello, "
var a: Int = 3
var b: Double = 1.234
print(str + "world!")
print(str + "swift!")
以下のように、型を省略して定義することもできる。(Swiftの型推論機能を利用)
しかし、その分コンパイル速度が遅くなるデメリットもある。
// プログラム1-6
var c = "Good morning!"
「変数」とは、後から値を変えられる数であり、後述の「定数」との違いに注意。
// プログラム1-7
var a: Int = 3
a = 10 //値を変更してもエラーが起きない。
練習問題1-6. Int型変数yearを定義し、値として2019を代入しよう。その後、値を2020に変更しよう。
練習問題1-7. String型変数projectを定義し、値として"Science cafe"を代入しよう。その後、値を"ワセリコセミナー"に変更しよう。
定数は、let 変数名: 変数の型 = 値
のように定義する。「定数」は「変数」と違い、後から値を変更できない。
しかし、値が変更されないことがわかるため、プログラムが読みやすくなるメリットもあるので適宜使っていこう。
また、慣習的に変数は小文字、定数は大文字で書かれることも多い。
// プログラム1-8
let PI: Double = 3.14
PI = 3.14159 // エラー「Cannot assign to value: 'PI' is a 'let' constant」が出る。
練習問題1-8. Double型の定数eを定義し、値として2.71828を代入しよう。
練習問題1-9. String型の定数MASCOT_NAMEを定義し、値として"Yaguchikun"を代入しよう。
変数や定数には型があり、代入するデータによって決まった型を用いる必要がある(下表参照)。
型 | データ | 例 |
---|---|---|
Int | 整数 | 10, 9999 |
Float | 単精度浮動小数点 | 2.5, 3.14 |
Double | 倍精度浮動小数点 | 2.5, 3.14 |
String | 文字列 | "こんにちは", "1月1日" |
Bool | 真偽 | true, falseのみ |
// プログラム1-9
var i: Int = 1000
var f: Float = 12.34
var d: Double = 1234.56
var s: String = "Apple"
var isOK: Bool = true
isOK = false
慣習的に、Bool型変数はisXXX(XXXは名詞や形容詞)と命名されることが多い。
また、Swiftでは、int型+double型など、型の異なる値同士の計算はできない。
Int(),Double(),Float()関数などで型変換する必要がある。
// プログラム1-10(プログラム1-9の続き)
//var ans = i + dはエラー。
var ans = Double(i) + d //2234.56
練習問題1-10. Bool型の変数isMacを定義し、値としてtrueを代入しよう。次に、Bool型の変数isWindowsを定義し、値としてfalseを代入しよう。
配列を利用することで複数の値を持つ変数を定義できる。
配列の定義は、var(またはlet) 配列名: [要素の型] = [要素0、要素1、要素2…]
で定義する方法と、var 配列名: [要素の型] = [要素の型]()
で宣言し後から要素を追加する方法の2つがある。
配列にも、要素の変更や追加・削除ができる可変(ミュータブル)な配列と不変(イミュータブル)な配列がある。
要素を変更する必要がない時は、不具合の防止やプログラムの見やすさの観点からできるだけイミュータブルな配列を使うことが望ましい。
fruits[0] | fruits[1] | fruits[2] |
---|---|---|
Apple | Banana | Orange |
- 可変(ミュータブル)な配列
var fruits: [String] = [String]()
fruits.append("Apple") //「配列名.append(要素)」で新しく要素を追加
fruits.append("Banana")
fruits.append("Orange")
print(fruits[0]) //Apple
- 不変(イミュータブル)な配列
let cities: [String] = ["Tokyo", "Osaka", "Nagoya"]
print(cities[1]) //Osaka
//cities.append("Yokohama")はエラーになる。
「文字列と文字列」や「文字列と数字」など、2つの値を1セットのペアで管理したいときに使う。
辞書では、片方のデータをキー(key)、もう片方のデータを値(value)という。
key (氏名) |
value (テストの点数) |
---|---|
佐藤 | 85点 |
田中 | 55点 |
鈴木 | 95点 |
- 可変(ミュータブル)な辞書
var dictionary: [String:String] = [String:String]()
dictionary["Apple"] = "りんご"
dictionary["Orange"] = "みかん"
- 不変(イミュータブル)な辞書
let testScore: [String:Int] = ["Sato":85, "Tanaka":55, "Suzuki":95]
// testScore["Kato"]=70はエラー。