citron syrup

HTML,CSS,js,Ruby,Swift

クラス,インスタンス

お久しぶりです。
「ぷろぐらみんぐ」という日本語を久しぶりに思い出して、朝からスタバで勉強を始めました。

f:id:CitronCockatiel:20160205100205j:plain:w300

iPhoneの画面下部を上にスワイプするとコントロールセンターが表示されます。
ここでは音楽のボリュームを変えたり、カメラを起動させたりすることができます。

このような、ユーザーが操作できる画面上の部品(ボタンやスライダー)やユーザーに情報を表示するための部品(ラベル)のことを、UI部品と呼びます。

クラスとインスタンス

f:id:CitronCockatiel:20160205101517j:plain:w300

二つのスライダーは見た目が少し違いますが、この二つはApple社様が用意した「クラス」と呼ぶスライダーのテンプレートをカスタマイズしたものです。
また、カスタマイズしたものをインスタンスといいます。
私たちはこのクラスという名のテンプレートを基にしてインスタンスを生成し、iPhoneアプリを開発します。

スライダーを表示する

f:id:CitronCockatiel:20160205105839p:plain

import UIKit //ଘ(ㆁvㆁ)<UIKitをインポートする

var slider = UISlider()  //ଘ(ㆁvㆁ)<変数sliderにインスタンスを代入

次はUI部品のカスタマイズをしたいのですが、今、前回のSwiftの記事の最後に「次は戻り値です」と書いてあるのを見つけてしまいました。
飛ばしたっぽいので次は戻り値について書きます。

Twitter

引数(parameter)

前回は関数についての記事を書いた。
もし前回学んだことだけで1〜9の段すべてを計算することになったら、9つの関数の宣言をしなければならない。
こういう時、引数(parameter)という機能を使うと1つにまとめることができる。

引数を使った関数の宣言

これまでの関数の宣言と違うのは()の中だけ。
()の中にまず引数名を書く。この引数名は関数内で定数として扱われる。
続いて:(コロン)を書き、引数の型を指定する。

九九を計算する関数の宣言と使用例

f:id:CitronCockatiel:20160120023223p:plain

func kuku(dan:Int) { //ଘ(ㆁvㆁ)<danという引数を使いkuku()という関数を定義する
    for x in 1...9 {
        print(dan * x)
    }
}

kuku(2) //ଘ(ㆁvㆁ)<二の段の計算の実行
kuku(3) //ଘ(ㆁvㆁ)<三の段の計算の実行

Console Output

2
4
6
8
10
12
14
16
18
3
6
9
12
15
18
21
24
27

複数の引数を指定する場合、引数を,(カンマ)で区切って指定する。
また関数の呼び出しを行う際、第一引数以外は引数名を表記する必要がある。

三角形の面積を計算する関数

f:id:CitronCockatiel:20160120025417p:plain

func areaOfTriangle(base:Int, height:Int) { //ଘ(ㆁvㆁ)<base,heightという引数を使いareaOfTriangle()という関数を定義
    print(base * height / 2) //ଘ(ㆁvㆁ)<base(底辺)×height(高さ)÷2
}

areaOfTriangle(3, height:4) //ଘ(ㆁvㆁ)<底辺が3、高さが4の三角形の面積を計算する

Console Output

6

次は戻り値です。

関数(function)

お久しぶりです。
言い訳はしません。サボっていました。

関数(function)

関数(function)とは、あらかじめ定義されている複数の命令文を一つにまとめる機能のことである。
関数を使用すれば、複数の命令を一つにまとめ、プログラムの実行時にその関数を呼び出すだけで目的の処理を実行できる。

@happy_ryoさんが僕のMacPhotoshopを入れてくれたので
せっかくなのでこれから図など書く際頑張って使っていこうかと思います。
ちなみに初心者なので、下の図だけで20分くらいかかってます。

関数の概念図

f:id:CitronCockatiel:20160117172630j:plain

関数の宣言をする際は、先頭にfuncと書く。
関数名は変数名と同様に自由に決めることができる。

2の段を計算する関数を宣言し、呼び出す

f:id:CitronCockatiel:20160117174608p:plain

func kuku2dan() { //ଘ(ㆁvㆁ)<kuku2danという関数を定義する
    for x in 1...9 {
        print(2 * x)
    }
}

kuku2dan() //ଘ(ㆁvㆁ)<関数を呼び出す

Console Output

2
4
6
8
10
12
14
16
18

今日はここまで、次は引数です。

Twitter

辞書(dictionary)

前回は配列の記事を書いた

f:id:CitronCockatiel:20160117175227p:plain

var cockatiel = ["もふもふ","とさか","ほっぺ"] 
print(cockatiel[0]) //ଘ(ㆁvㆁ)<表示結果はもふもふ

上記の様に配列の宣言がすぐ近くにあれば内容を確認できるが、配列の宣言と要素の取り出しが離れている場合、事前に内容を把握することが困難である。
この問題を解決するために用意されているのが辞書という機能。
辞書(dictionary)とは、添字に整数以外の型を指定できる配列である。

人の年齢を登録する辞書の宣言

var age = ["ろん":19, //ଘ(ㆁvㆁ)<ろんは19歳
           "はっぴーりょう":32, //ଘ(ㆁvㆁ)<はっぴーりょうは32歳
           "ゆーたむちー":20] //ଘ(ㆁvㆁ)<ゆーたむちーは20歳

年齢を変更し、その要素を取り出す

age["はっぴーりょう"] = 23 //ଘ(ㆁvㆁ)<はっぴーりょうは(心は)23歳

新たにというキーを作成し、その値を20にする

age["ちなっちゃん"] = 20 //ଘ(ㆁvㆁ)<ちなっちゃんは20歳という要素を追加する

また、辞書の要素を消去する場合は以下のようにnilという特殊な値を指定する。
このnilとは、プログラムにおいて何も値がないという状態を表す特殊な値である。

ろんの要素を消去する

age["ろん"] = nil //ଘ(ㆁvㆁ)<ろんという要素を消去する

次は関数です。

配列(array)

配列(array)とは、複数のデータを1つにまとめて管理する機能である。
配列は変数の一種で、宣言する際にその変数をデータを1つだけ格納できる変数にするのか、データを複数格納できる配列にするのかを決定する。

var cockatiel = ["もふもふ","とさか","ほっぺ"]

配列に格納されている1つ1つのデータのことを要素という。
配列の中から1つの要素を取り出すには以下のように書く。

f:id:CitronCockatiel:20160117175227p:plain

var cockatiel = ["もふもふ","とさか","ほっぺ"] //ଘ(ㆁvㆁ)<配列の宣言
print(cockatiel[0]) //ଘ(ㆁvㆁ)<0(添字)の要素を表示する

Console Output

もふもふ

上記からわかるように、配列には自動的に0から始まる添字が付いている。
そのため先頭から二番目の箱に格納されているデータを取り出したい場合はcockatiel[1]となる。

配列の要素の変更をすることも可能である。

f:id:CitronCockatiel:20160117175510p:plain

var cockatiel = ["もふもふ","とさか","ほっぺ"] //ଘ(ㆁvㆁ)<配列の宣言

cockatiel[0] = "まんまる" //ଘ(ㆁvㆁ)<0の要素"もふもふ"を"まんまる"に変更する
print(cockatiel[0]) //ଘ(ㆁvㆁ)<0(添字)の要素を表示する

Console Output

まんまる

また、配列はfor文の繰り返しの範囲として利用できる。

Q テスト結果が国語95点、数学70点、英語80点である場合に、この3つのテストの合計点を配列とfor文を使って計算せよ。

f:id:CitronCockatiel:20160117175635p:plain

var total = 0 //ଘ(ㆁvㆁ)<変数totalに0を代入
let pointArray = [95,70,80] //ଘ(ㆁvㆁ)<変数pointArrayに配列を代入

for n in pointArray { //ଘ(ㆁvㆁ)<変数nが変数pointArrayの間は
    total = total + n //ଘ(ㆁvㆁ)<変数totalと変数nを足す
}
print(total) //ଘ(ㆁvㆁ)<変数totalを表示する

Console Output

245

配列が難しかったので途中で寝ようとしたら、嫁に叱られ最後まで書かされました。
怖いです。

次は辞書(dictionary)です。

if文,switch文,while文

ある条件に合致した場合のみコードを実行したい場合、if文を使用する。
if文の条件には、判定結果がブール値(tryeかfalseになる式)しか指定できない。

if文

var batteryRemaining = 18 //ଘ(ㆁvㆁ)<バッテリー残量が18だとする

if batteryRemaining <= 20 { //ଘ(ㆁvㆁ)<もしバッテリー残量が20以下だったら
   print("バッテリー残量が少なくなっています") //ଘ(ㆁvㆁ)<("の中を)表示する
}

もし変数batteryRemainingが21以上だったら、命令文は実行されない。
以上のコードに出てきた<=のような値同士を比較するために使用する記号を比較演算子(comparative operator)という。

f:id:CitronCockatiel:20151220224639p:plain:w300

書く意味はないけれど、100%処理が実行されるif文を書くことも可能である。

if true {
   print("常に条件は正しい")
}

if-else文

条件結果がfalseの場合でも何らかの命令文を実行したい場合if-else文を使用する。

var num = -1 //ଘ(ㆁvㆁ)<変数numに-1を代入する

if num > 0 { //ଘ(ㆁvㆁ)<もし変数numが0より大きかったら
   print("\(num)は正の数です") 
} else { //ଘ(ㆁvㆁ)<上に当てはまらなかったら
   print("\(num)は負の数もしくは0です")
}

if文の追加

elseの後にまたif文を追加することもできる。

int batteryRemaining = 18 //ଘ(ㆁvㆁ)<変数batteryRemainingに18を代入

if batteryRemaining <= 10 { //ଘ(ㆁvㆁ)<もし変数が10以下なら
   print("バッテリー残量は残り10%以下です")
} else if batteryRemaining <= 20 { //ଘ(ㆁvㆁ)<上を満たさず20以下を満たす場合
   print("バッテリー残量は残り20%以下です")
}

switch文

switch文はif文と同様に処理を分岐させる制御構文である。
処理の分岐が多い場合に、if文よりもシンプルにコードを書くことができる。

var nam = 1

switch num {
            
       case 0:
             print("0です")
       case 1:
             print("1です")
       default:
             print("わかりません")
}

他のプログラミング言語の中には各caseの末尾にbreakを記述して処理の官僚を明記しないと次のcaseまで処理してしまう言語もあるが、swiftでは1つのcase内の文が処理されるとswitch文が終了するため記述する必要はない。

while文

while文を使用すると、for文と同様に任意の処理を繰り返し実行することができる。
while文では指定した条件がfalseになる迄繰り返し実行される。 

var i = 0 //ଘ(ㆁvㆁ)<変数iに0を代入する

while i < 5 { //ଘ(ㆁvㆁ)<変数iが5より小さい場合以下の命令を繰り返す
         print(i)
         i = i + 1 //ଘ(ㆁvㆁ)<i+1をして上に戻る
}

Console Output

0
1
2
3
4

次は配列!

データ型(data type)

数値や文字といったプログラムが扱うデータの種類のことを型(type)またはデータ型(data type)という。
主な型には整数型、小数型、文字列型、ブール型がある。

文字列

文字列(string)とは、0文字以上の文字の連なりのことである。
Swiftでは空文字(empty string)と呼ばれる0文字の文字列を扱うことができるため、この様な定義となっている。
Swiftのプログラム内で文字列を扱うときは文字列を"(ダブルクォート)で囲んで書く。

また文字列もプログラムで扱うことのできるデータの為、数値と同様に変数に代入できる。
数値と違う点は文字列を"で囲む点だけである。

文字列を変数に代入する

var cockatiel = "オカメインコもふもふ"
print(cockatiel)

数値と数字の違い

プログラムを書く際、数値と数字(文字列)の違いを意識することが必要である。

print(1 + 1) //ଘ(ㆁvㆁ)<数値
print("1" + "1") //ଘ(ㆁvㆁ)<数字
print("1 + 1") //ଘ(ㆁvㆁ)<数字

Console Output

2
11
1 + 1

文字列補完

文字列に変数を埋め込む方法を文字列補完(string interpolation)という。
今までやったことでバッテリー残量が1%づつ減っていくプログラムを書こうとすると
残量の箇所分思いつくだけ用意することを思いつくが、それだと面倒なので文字列補完を使う。

var batteryRemaining = 18 //ଘ(ㆁvㆁ)<変数バッテリー残量に18を代入する
print("バッテリー残量はあと\(batteryRemaining)%なのです") //ଘ(ㆁvㆁ)<"で囲まれた文字列の中に\を書き、()内に式を書く

ブール(boolean)

ブール(boolean)とはtrue(真)またはfalse(偽)の二種類の値を扱う型である。
整数にも文字列にも無限の組み合わせがあるが、ブールにはtrueまたはfalseの二つの値しかない。

型を指定する

変数に入れるデータの型は明示的に指定することも可能である。

f:id:CitronCockatiel:20151220222340p:plain

var num : Int = 3 //ଘ(ㆁvㆁ)<整数
let pi : Double = 3.14 //ଘ(ㆁvㆁ)<小数

次はif文!