未経験者のための『コードを学ぼう』ガイド-4
ここから「コードを学ぼう 2」です。
この記事は『コードを学ぼう』の副読本です。
『コードを学ぼう』の各章を整理・解説し、より本格的なプログラミング学習に(立ち往生せず)進むことを目的としています。
在宅でできるスキルとして、プログラミングに興味を持っている人に向けて書きます。
複数の記事に分かれています、順に読み進んでください。
このシリーズの構成 ▶︎このnote
未経験者のための『コードを学ぼう』ガイド-1
⬇︎
iPadで『コードを学ぼう』
Macで『コードを学ぼう』
⬇︎
未経験者のための『コードを学ぼう』ガイド-2
未経験者のための『コードを学ぼう』ガイド-3
⬇︎
▶︎未経験者のための『コードを学ぼう』ガイド-4
未経験者のための『コードを学ぼう』ガイド-5
未経験者のための『コードを学ぼう』ガイド-6
・画像クリックで拡大表示できます
画面がiPadとMacでは少し違う部分があります。
この記事の画面キャプチャはライトモードのiPadで、文字サイズは少し大きくしています。
ダークモードで実行しているとライブビューには夜景を表示します。
ページタイトルの後ろの「🔶」印は課題のページ、⏺は練習のページです。
「コードを学ぼう 2」は中級編となっています。
これは基礎編である「コードを学ぼう 1」の後から取り組む教材であることを明確にするためあえて中級編としたように思えます。
プログラミング言語の難易度としてはまだ初歩の段階ですので、安心して取り組んでください。
「コードを学ぼう」はもともと英語版の教材です。
英語では「コードを学ぼう1」が Fundamentals of Swift、「コードを学ぼう2」が Beyond the Basics となっています。
章の番号は「未経験者のための『コードを学ぼう』ガイド-3」から続いています。
10 変数の章 【コードを学ぼう2】
さあ、ここからは「コードを学ぼう2」です。
「はじめに」ではたくさんのキーワードが出てきました。
変数、var、代入演算子、String、Int、算術演算子、型
詳しくは各ページで学びます。
変数と定数
変数と定数はデータの入れ物(容器)です
変数と定数は入れることのできる種類(型)を最初に決めます
変数と定数には自由な名前を付けます これを宣言といいます
変数と定数名前で指定します 宣言していない名前は使えません
「変数」は中の値を変更でき、「定数」は変更できません
「宣言」は英語では declaration です。
「変数」は英語で variable です。
「定数」は英語で constant です。
10-1 記録する 🔶
変数の宣言と代入を学びます。
「コードを学ぼう 2」でも解説文とヒントの両方を、最初によく読んでから取り組んでください。
たくさんの用語が出てきます、用語集に載っている青い単語はすべて表示して説明を確認してください。
宣言の説明に出てくる let planet = "Earth" の let は定数を宣言するキーワードです。
このページには入力済みのコードがあります。
iPadではvalue を選ぶと数値入力用のキーボードが自動表示します。
このページもコードを入力してから実行すると、ヒントの表示内容が変わります。
変数に代入するにはイコールを使います。
イコール( = )もショートカットバー(Macではショートカットリスト)に表示されます(入力可能な場合)。
表示されるまで少し時間がかかる場合もあります。
ショートカットバー/ショートカットリストからイコールを選ぶと、次画面のように数値入力になります。
※基本的にイコールの前後には空白が必要なので、なれないうちはショートカットバー/ショートカットリストからの入力がおすすめです。
代入演算について
例の myAge = 16 は変数 myAge に右辺の 16 を代入します。
右辺は計算式の場合もあります(16だけでも最もシンプルな式なのです)。
右辺を先に計算し、その結果を変数に代入します。
10-2 値を増やす(代入版) ⏺
英語のタイトルは「Bump Up the Value」です。
Playgroundsアプリと教材の「コードを学ぼう」は日本語だけでなく、たくさんの言語に対応しています。
もともと英語で開発され、それが各国語に翻訳されています。
デバイスの使用言語を切り替えると表示を各国語に変更できます。
代入で変数の値を変更する練習です。
正解はありません。
5個の連続する宝石があるので、繰り返しをつかいたくなりますが...?
10-3 値を増やす(インクリメント版) 🔶
英語のタイトルは「Incrementing the Value」です。
日本語のタイトルは前ページと同じ「値を増やす」です。
英語表示では前のページが「Bump Up the Value」、このページが「Incrementing the Value」となっています。
※インクリメントはコンピュータ用語では数値に1加えることです。
この画面は日本語表示と英語表示の合成です。
日本語の同じタイトルはまずいですよね。
変数の値を条件判断の結果により増やす練習です。
例の myNumber = myNumber + 1 の入力ではプラス「+」の入力もショートカットバー/ショートカットリストから選んで入力できます。
変数名を選んでからプラスがショートカットリストに表示されるまで、少し時間がかかる場合があります。
プラスの前後にも空白が必要です。
ショートカットバー/ショートカットリストから選んだ場合は空白も自動入力されます。
キーボードから入力する場合は「空白」「プラス」「空白」と入力してください。
代入演算 myNumber = myNumber + 1 は見慣れない不思議な式です。
これは方程式ではありません。
右辺を先に計算し結果を変数に代入します。
このため確実に myNumber の値をひとつ増やすことができます。
10-4 7つの宝石を集める 🔶
変数の値を増やしながら結果を比較する練習です。
解説文をじっくり読み、コードを入力してください。
このステージは実行するたびに宝石の出現がかわります、クリアできても何度か実行し確認してください。
10-5 3つの宝石と4つのスイッチ ⏺
二つの変数を定義しそれぞれの条件を両方満たした時に止まるコードを考えます。
用語「キャメルケース」について
英語では camel case です。
lower case が小文字、upper case が大文字です。
キャメルはらくだ(🐪)のことです。
複数の単語を結合して変数や関数名を作るとき、単語のはじまりだけ大文字にしてほかの文字は小文字にするのがキャメルケースです。
変数名と関数名は小文字からはじめるのがSwiftの流儀です。
小文字からはじまるキャメルケースがローワーキャメルケースです。
gemCounter、isOnClosedSwitch、moveForward、などすべてキャメルケース(ローワーキャメルケース)です。
このステージは入力済みのコードはありません。
説明とヒントを参考にコードを入力してください。
変数名はキーボードからの入力が必要ですが、iPadではローマ字変換など『かな漢字変換』ではなく English を使い半角で入力がおすすめです。
日本語入力ではショートカットバーにコードの候補が表示されなかったり、選びにくかったりします。
このステージも一度実行するとヒントの表示内容が変わります。
10-6 値が等しいかどうかを調べる 🔶
二つの値が等しくなったら止まるコードを考えます。
このステージでは定数を使います。
定数は変数と同じように、名前のついた値の入れ物です。
ただし定数は一度入れた値を変更できません。
名前の付け方は、変数と同じ小文字ではじまるキャメルケースです。
変数は var で宣言しましたが、定数は let で宣言します。
このステージでは入力済みのコードが一行あります。
let switchCounter = numberOfSwitches
numberOfSwitches は説明も宣言もなしに使われていますが、実行ごとにランダムに変わるステージのスイッチの数です。
toggleSwitch() などと同じく「コードを学ぼう2」の通常は見えない部分で定義済みと考えてください。
ステージの目標はこの定数 switchCounter と同じ数だけ宝石を取ることです。
取った宝石の数を比較演算子で比較し、それを条件にループを繰り返す練習です。
まず宝石の数のための変数が必要ですね。
このステージは二つにわかれていて一見複雑ですが、宝石を取るための動きは『行き止まりなら右へまわる』だけです。
このステージもスイッチの数がランダムに変わるので、クリアできても何度も実行しコードの動きを確認してください。
10-7 決まった数だけスイッチを入れる ⏺
変数を使って条件を満たした時に止まるコードの練習です。
このステージでは新しい用語として「複合代入演算子」が出てきます。
とくに1加える複合代入演算子はインクリメントに便利です。
gemCounter = gemCounter + 1
と書くところを
gemCounter += 1
と書くことができます。
gemCounterの値をひとつふやすことが直感的にわかるコードです。
右辺に同じ変数名を書くと変数名のスペルミスや、行ごとコピーして変数名の修正忘れによるミスなどを防ぐこともできます。
このステージは同じ形の道が抜け穴でつながっています。
変数名を入力して、しばらく待つとショートカットバー/ショートカットリストに += が表示されます。
ショートカットバー/ショートカットリストから選び入力すると複合代入演算子の前後に必要な空白も自動で入力されます。
変数名だけ入力してショートカットバーの更新を待っていると、入力した行に赤丸が表示されエラーの発生を知らせます。
まだ入力途中なのでこの赤丸は無視して構いません。
残りをすべて入力すると、エラー表示は自動で消えます(そのまま入力を続けて大丈夫です)。
コード入力で、コピーペーストも使えます。
クリアできても、何度か実行し宝石の数が変わってもクリアできることを確認してください。
10-8 決まった数だけ集める ⏺
定数と変数の比較の練習です。
このステージは1行だけ入力済みのコードがあります。
説明文もヒントもシンプルですが、どのようにすればクリアできるでしょうか?
疑似コードを書いて見るのもよいですね。
なかなかてごわいステージです。
forやifのブロックをドラッグ操作で変更しようとすると、字下げが乱れる場合があります。
実行には影響しませんが、気になります。
そんな時は「すべてを選択」してから「カット」して、すぐに「ペースト」してください。
正しい字下げで表示されるはずです。
このステージをクリアできればかなりのものです。
でもここでも宝石の数はランダムです、一度クリアできても何度も実行し毎回クリアを確認してください。
このステージで変数の章は終わりです。
変数の章(この章)の「はじめに」を見直してください、さらに次の解説で復習してから「11 型の章」へ進みましょう。
10-9 変数(variable)と定数の説明
「変数」は英語で ”variable” なのでキーワードは var です。
var myAge = 15
変数 myAge を宣言し同時に初期値を15に設定しています。
変数名(この例ではmyAge)は若干の約束事がありますがほぼ自由につけることができます。
▲注意: 代入演算子「=」の前後には空白が必要です。(Playgroundsのショートカットバー/ショートカットリストで入力すると自動的に空白も入力されます)
「代入演算子」は英語では assignment operator です。
コードを学ぼうでは出てきませんでしたが、変数の宣言は var 変数名: 型 と書くこともできます。
// 変数の宣言 初期値を代入しない場合は型の指定が必要
var age: Int
var myAge = 15 は代入する15で型が決まるので「:型」を省略できました。
変数名は名前で区別します。
すでに変数や定数として宣言済みの名前と同じつづりは使えません。
エラーを表示します。
var age: Int
var age: Int // Invalid redeclaration of 'age'のエラーになる
変数では使えない名前
基本的に『var』など Swift言語のキーワードと同じつづりを変数名にはできません。(少々例外もあります)
キーワードはたくさんありますので注意してください。
var var: Int // エラーになる
数字ではじまる名前は使えません。
先頭以外には数字も使うことができます。
var 7age: Int // エラーになる
var age7: Int // 文法的には正しい変数宣言
意味のある名前にする
変数名・定数名はできるだけ意味のある名前にしてください。
var numOfMember = 0
v1 v2 v3 などとしてもプログラムは作ることができますが、何を処理しているのか後から見るとわからなくなります。
変数の先頭は小文字ではじめる
変数は小文字で書き始めるのが Swift 標準の書き方です。
複数の単語を組み合わせる場合、単語の始まりを大文字にします。(この書き方をキャメルケースと呼びます)
var averageAge: Double
宣言と初期化(初期値代入)
変数は使う前に『値』を入れなければいけません。
変数に値を入れることを『代入』と言います。
代入は = を使います(このイコールは演算子です)。
「代入」は英語では assignment です。
var age: Int = 10
変数と定数は使う(参照する)前に値が決まっていなければなりません。
可能な場合は宣言と同時に初期値を代入することは良い習慣です。
定数
プログラム実行中に変わることがない場合は定数にします。
「定数」は英語では constant です。
定数の宣言は let 変数名 : 型 と書きます。
宣言と同時に内容を設定する場合は次のように書きます。
let ageOfMac: Int = 31
let capacity: UInt = 800
初期値を代入する場合、右辺で型が決まる場合は変数宣言の『:型』は省略することもできます。
この仕組みを Swift では『型の推定』と呼びます。
let productName = "Mac" // productNameはString型になる
let lineNumber = 30 // lineNumberはInt型になる
型の指定を省略するのはタイプ量が少なくなり楽ですが、省略せずに指定することもできます。
型を省略すると型を推定する処理のためにコンパイルに時間がかかる場合があります。
型を省略し関数などで初期化すると(関数の型を勘違いした場合やつづりの似た別の関数名を書いてしまった場合などに)期待と異なる型になってしまう場合があり注意が必要です。
型を指定しているとこのような場合にエラーが表示され気づくことができます。
初期値を代入しない場合は、型を省略できません。
Type annotation missing in pattern エラーになります。
let ageOfiPhone // 型が決まらないのでエラー
Playgrounds でショートカットバー/ショートカットリストから var や let を選ぶと var name = value と入力されるため、エラーを防げます。
複合代入演算子について
名前は大げさですがプログラムではしばしば使います。
「アレに1を足してアレにしまって」を「アレに1を足して」と省略しています。
gemCounter = gemCounter + 1
と書くところを
gemCounter += 1
と書いてまったく同じ処理になります。
「+=」のプラスとイコールの間に空白があってはいけません(連続する「+=」でひとつの演算子です)。
また「+=」の前後には空白が必要です。
Playgroundsでショートカットバーから「+=」を選んだ場合は自動的に前後に空白が入ります。
複合代入演算子は次のように四則演算が可能です。
counter -= 1 // counter = counter - 1 と同じ
counter *= 3 // counter = counter * 3 と同じ
counter /= 4 // counter = counter / 4 と同じ
「複合代入演算子」は英語では compound assignment operator です。
・・・
11 型の章 【コードを学ぼう2】
型と初期化
・型とはプログラムが扱うデータの種類です
・Swift にはあらかじめたくさんの型が用意されています
・自分で型を追加することができます
「型」は英語では type です。
この章の用語
型、インスタンス、プロパティ、メソッド、ドット表記、構文、などたくさんあります。
どれも今後プログラミングを続けるなら頻繁に登場する、重要で基礎的な用語ばかりです。
たくさん練習して用語の持つイメージを膨らませてください。
はじめにでは「型」は設計図、「インスタンス」はその設計図を使って建てた家のようなものとあります。
「型」は「プロパティ」と「メソッド」を持つことができます。
プロパティは特徴をあらわす変数で、メソッドは機能に対応する関数です。
コードでは「インスタンス」は変数(または定数)の中に名前をつけて入れます。
インスタンスの変数名にドットを続け、その後ろにメソッドを続けて書くことでメソッドを呼び出します。
コードを学ぼう 2 のはじめには新しいことがたくさん登場します。
何度でも見直してください。
11-1 ワープをオフにする 🔶
インスタンスのプロパティの値を変える意味と方法を学びます。
このステージには入力済みのコードが一行あります。
greenPortal.isActive = true
「greenPortal」とはなんでしょうか?
解説文によるとインスタンスのようです。
greenPortalをタップし選ぶとメニューがポップアップします。
メニューの「ヘルプ」を選ぶとポップオーバーにgreenPortalの宣言が表示され、「Portal」型のvarつまり変数とわかります。
greenPortal は Portal型のインスタンスであることが確認できました。
デバイスの言語を英語に変更して確認すると日本語で「ワープ」に対応する単語は「Portal」でした。
「コードを学ぼう」はかなり自然に日本語に訳されていますが、解説文とコードの対応は少しだけ説明不足ですね。
「Portal」は抜け穴のための「型」の名前です。
訳を「ポータル」としても意味が通じないので、現在のように「抜け穴」と「ワープする」に落ち着いたものと思われます。
ちょっと予習ですが、型の名前は大文字ではじまるのがSwiftの流儀です。
このステージの目標は三つのスイッチを入れることです。
しかしまっすぐ進むとスイッチのないところにワープします。
そこで抜け穴の機能を停止(「有効」を決めるisActiveプロパティをfalseにする)し、まっすぐ進むわけです。
このステージで「コードを実行」すると、見えない部分にあるコードによりバイトがスタート位置に着き、抜け穴 のisActive は greenPortal.isActive = true に毎回設定されます。
ステージを観察しすべてのスイッチを切り替えるコードを考えてください。
一度実行するとヒントが切り替わり「解き方」を見ることもできます。
11-2 ワープのオンとオフ ⏺
プロパティ設定の練習です。
ステージの抜け穴の色が変わり、インスタンスの名前も変わっています。
説明とヒントを見て練習してください。
対応している抜け穴に入るときのByteの向きと、出るときのByteの向きは変わりません。
この性質をうまく利用してコードを作ってください。
11-3 ワープを正しく操作する 🔶
ふたつのインスタンスのそれぞれのプロパティを扱う練習です。
型が同じだとどのインスタンスも同じプロパティを持っています。
プロパティはインスタンスが管理する独立した変数なので、ほかのインスタンスのプロパティには影響せず変更できます。
このプロパティの正式名称はインスタンスプロパティです。
このステージは二つのインスタンスのプロパティを適切に変更しなければクリアできません。
bluePortal.isActive = false
pinkPortal.isActive = true
と続けて別の値を代入することもできます。
それぞれ独立して値を代入することもできます。
プロパティはおなじ「isActive」ですが、持ち主(インスタンス)が違うので、それぞれ別々のものです。
「はじめに」で型が設計図、プロパティは特徴だったことを思い出してください。
同じ設計図で作った家も、色はそれぞれ違っていました。(同じにもできます)
11-4 隅々まで歩き回る ⏺
インスタンスのプロパティを設定してパズルを解く練習です。
解説文には「上手なコードを書けば、プログラムの実行が早くなります。」とあります。
コードを学ぼうでは、実行時間のかなりの部分はmoveForward()の歩いている時間です。
そこで、同じブロックはなるべく通らないや、moveForward()コマンドの実行回数をできるだけ少なくするように考えてはどうでしょうか。
このステージもクリアするため(パズルを解くため)ポータル(抜け穴)のisActiveプロパティを切り替え、ワープするかしないかを適切に使ってください。
一部を修正した後に確認するときは「もっと速く実行」を使うと時短実行できますよ。
11-5 宝石があちこちにランダムに ⏺
再利用可能な関数を考えパズルを解く練習です。
このステージでは入力済みのコードが1行あります。
説明文とヒントを参考にパズルを解いてください。
一度実行すると宝石の現れる場所を確認できます。
宝石の現れる場所は残らず通らないと、集めることはできないですね。
11-6 型とインスタンスについて
型の章の「はじめに」では型とインスタンスは「設計図と建物」に例えられていました。
型はインスタンスを作るための設計図です。
実際に使う(住む)のは名前をつけた変数の中にしまったインスタンス(スペルは instance)です。
メソッドと関数はどう違うのか
メソッドは型の中で定義された関数です。
ドット表記でインスタンスを明記して使います。
メソッドは型のプロパティを使って計算したり、プロパティを条件にするコードを実行したりします。
インスタンスごとに設定されたプロパティをうまく利用しているはずです。
ここから先は
未経験者のための『コードを学ぼう』ガイド
未経験者のための『コードで学ぼう』ガイドシリーズをまとめて読めるマガジンです。★注意★現在このマガジンで読めるnoteはすべて無料で読める…
今後も記事を増やすつもりです。 サポートしていただけると大変はげみになります。