配列(array)
配列(array)とは、複数のデータを1つにまとめて管理する機能である。
配列は変数の一種で、宣言する際にその変数をデータを1つだけ格納できる変数にするのか、データを複数格納できる配列にするのかを決定する。
var cockatiel = ["もふもふ","とさか","ほっぺ"]
配列に格納されている1つ1つのデータのことを要素という。
配列の中から1つの要素を取り出すには以下のように書く。
var cockatiel = ["もふもふ","とさか","ほっぺ"] //ଘ(ㆁvㆁ)<配列の宣言 print(cockatiel[0]) //ଘ(ㆁvㆁ)<0(添字)の要素を表示する
Console Output
もふもふ
上記からわかるように、配列には自動的に0から始まる添字が付いている。
そのため先頭から二番目の箱に格納されているデータを取り出したい場合はcockatiel[1]となる。
配列の要素の変更をすることも可能である。
var cockatiel = ["もふもふ","とさか","ほっぺ"] //ଘ(ㆁvㆁ)<配列の宣言 cockatiel[0] = "まんまる" //ଘ(ㆁvㆁ)<0の要素"もふもふ"を"まんまる"に変更する print(cockatiel[0]) //ଘ(ㆁvㆁ)<0(添字)の要素を表示する
Console Output
まんまる
また、配列はfor文の繰り返しの範囲として利用できる。
Q テスト結果が国語95点、数学70点、英語80点である場合に、この3つのテストの合計点を配列とfor文を使って計算せよ。
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)という。
書く意味はないけれど、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の二つの値しかない。
型を指定する
変数に入れるデータの型は明示的に指定することも可能である。
例
var num : Int = 3 //ଘ(ㆁvㆁ)<整数 let pi : Double = 3.14 //ଘ(ㆁvㆁ)<小数
次はif文!
変数とかfor文とかのまとめ
今までのまとめっぽいコード。
書くのに10分以上かかったし、はじめ変数に加算するの忘れて全然違う答えになったりしたし、
後で復習したい。
1〜100までの全ての整数を合計するプログラム
var cockatiel = 0 for n in 1...100 { cockatiel = cockatiel + n } print( cockatiel )
Console Output
5050
今日はデータ型について書きたい、と思ってます。
書きたい、ナァ…
文(statement)
プログラム内には複数の命令を書くことができるが、1つひとつの命令のことを文(statement)と呼ぶ。
例えば
print( 1 + 1 ) print( 3 - 2 )
というプログラムがあったとする。
この場合
文はprint( 1 + 1 ),print( 3 - 2 )
また、トークンはprint,(,1,+,1,),print,(,3,-,2,)に分解できる。
なお、前回使用したプログラム(for文による三の段の計算)ではprint( 3 * n )という一つの文でのみ記述したが、forでは以下のように複数の文を記述することができる。
for n in 1...9 { print ( 3 * n ) print ( 4 * n ) }
{}で囲まれた範囲内に記述された文を一つの塊として処理する。
このような{}で囲まれた文の塊をブロックという。
ブロック(block)
ブロックとは、複数の文の集まりで、一つの処理の塊である。
ブロック内の処理は順次処理で行われる為、以下のコードを実行しても三の段と四の段の計算結果は個別に表示されるわけではない。
for n in 1...9 { print( 3 * n ) print( 4 * n ) }
Concole Output
3 4 6 8 9 12 . . . 27 36
ブロック内には文を記述できる為、新たに変数を宣言することもできる。
ただし、ブロック内で宣言した変数はそのブロック内でしか利用できない。
このような変数を利用できる範囲のことをスコープという。
繰り返し処理(for文)
私にも、毎日ブログを更新していくんだという強い気持ちがあった時期がありました。
明日はfor文について書くといい、二週間が経ちました。
そろそろ本気出す…
順次処理
基本的にSwiftは記述されている順番通りにコードを実行する。
これを順次処理という。
それに加えて、繰り返し処理と条件分岐という二つの方法で処理の流れを変えることができる。
繰り返し処理とは、指定した条件が満たされるまで、ある命令文を繰り返し実行する処理のことである。
このような処理の流れを総称して制御フローという。
for文の構文
for <定数名> in <範囲> { <文> }
以上の繰り返し処理(for文)の構文を文章で表すと、<定数名>の値が<範囲>の間は<文>を実行するという意味になる。
for文による三の段の計算
for n in 1...9 { //文頭にfor(〜の間は),定数名を指定(n),in(〜の中で)で範囲を指定(整数...整数) print( 3 * n ) //3と定数nで指定された範囲の最後の値になるまで掛け算を行う }
ConsoleOutput
3 6 9 12 15 18 21 24 27
今回定数名をnと指定したが、これはfor文の中だけで使われる一時的なものでカウンターと呼ばれる。
また、以下のコードでも同じ結果が得られる。
print( 3 * 1 ) print( 3 * 2 ) print( 3 * 3 ) print( 3 * 4 ) print( 3 * 5 ) print( 3 * 6 ) print( 3 * 7 ) print( 3 * 8 ) print( 3 * 9 )
バイトが割と忙しいので、毎日更新は難しいのですがなるべく頑張ります。
↓12月4日追記
for文の定数は宣言してはいけない
定数について書いた際、定数を使用するときはletキーワードを指定して定数名を宣言し、初期値を代入することが必要と書いた。
しかし、for文のカウンターとして使用する定数については、宣言や初期値の代入は不要である。
定数(constant)
おはようございます。
バイトまで時間あるので、スタバでホワイトモカ(ホワイトモカホットトールサイズマグカップで〜)飲みながら頑張る。
定数(constant)
昨日は変数について書いたが、
その特徴の一つに変数の値を後から上書きできる、というものがある。
メリットの一つではあるが、裏を返せばコードの途中で変数に誤った値が代入される可能性があるということにもなる。
そこで、定数が使われる。
定数は、変数と同様にコンピュータのメモリ内に値を一時的に保存しておく機能だが、宣言時に設定した初期値は後から上書きすることができない。
定数の宣言
定数を使う場合は、変数と同様にSwiftに対して定数の宣言(constant declaration)が必要。
変数の宣言では行頭にvarを記述したが、定数の宣言ではletを記述する。
また、定数の値は上書きできないため、プログラムの途中で上書きしようとするとエラーになる。
let tax = 1.08 //定数tax(消費税)に1.08(0.8%)を代入する tax = 1.05 //定数taxの値を上書きしようとしているためエラーになる print( 100 * tax ) //このコードは実行されない
明日はfor文について書くよ。