最近お風呂でベードーヴェンの「交響曲第9番」を熱唱することが趣味となってきました。メモリアインクのふくしまです!
今回はどの言語を勉強するにも必ず通るであろうクラス(Class)について解説していきたい思います!
この記事を読んでわかること…
・クラス(Class)の正体
・クラスの基本的な使い方
・イニシャライザについて
クラス(Class)って何?
クラス(Class)とは、プログラミング上で何かしらの物質や事象を定義するための「設計書」です。
例えばプログラミング上で存在する「人間」を設計したい場合、その人間は色んなモノを持っているだろうし、色んな行動もするでしょう。
そのモノや行動を、プロパティ(定数/変数)や関数(メソッド)を用いてクラス内に定義していきます。
また、定義したクラスを実体化することをインスタンス化と呼びます。
たこ焼き機を想像すると分かり易いですね〜
丸い形、星の形、ハートの形など様々な型枠があるたこ焼き機があるとして、その一個一個がクラスとすると、そこに色んな具材(プロパティ)が入って、焼き上げるという処理(関数)を経てポコっと出来上がったたこ焼きがインスタンスって訳ですね!
え?
このような、「ある役割を持ったモノ」ごとにクラスを作成して、モノとモノとの関係性を定義していくシステム構成のことをオブジェクト指向と呼ばれています。
クラスの基本的な使い方
福嶋がなんか変なことを言っているのはひとまず置いておいて、
実際にコードを用いてクラスについて理解を深めていきましょう!
クラスの定義
まずは、今回題材となるクラスを定義してみましょう。
所持金300デッセ、月給1500デッセの人間の設計図を書いてみました。
// クラスの定義
class Human {
// 所持金
var money: Int = 300
// 固定給
let salary: Int = 1500
// 給料メソッド
func getSalary() {
self.money += salary
}
}
2行目のブロック内で、Humanクラスを定義していきます。
まずは、こちらの「人間(Human)」の所持金(money)と固定給(salary)を意味するプロパティを4行目・6行目で定義します。(所持金は変数var、固定給は定数let)
そして、このしがないサラリーマンであろう「人間(Human)」の給料日を関数(getSalaryメソッド)として9〜11行目で定義しています。
クラスの使い方
定義したクラスを使うには、前述した通りまずインスタンス化して、クラスの変数や関数にアクセスできるようにしなければなりません。
今回は先ほど例に挙げた、Humanクラスを作成します。
そして、そのクラスをインスタンス化して変数や関数にアクセスする方法をご紹介したいと思います。
クラスのインスタンス化
インスタンス化は以下のように書くだけです。
let fukushima = Human()
Human()でクラスをインスタンス化して、定数(fukushima)に格納しています。
こうして、しがないサラリーマンの人間(福嶋くん)がこの世に生を受けました
続いて、その生成したインスタンスから、クラス内で定義したプロパティやメソッドにアクセスする方法を紹介します。
…おぎゃあ
プロパティへのアクセス
生を受けた(インスタンス化した)福嶋くんの現在の所持金はいくらなの?って気になった時には、Humanクラスに定義した所持金プロパティにアクセスしたらわかっちゃいます!
// Humanクラスのインスタンス化
let fukushima = Human()
// 現在の所持金を確認
print("所持金:" + String(fukushima.money) + "デッセ")
2行目でインスタンス化されたことで、4行目の「fukushima.money」のようにHumanクラスのmoneyプロパティにアクセスすることができるようになりました。(Print()メソッドは、コンソールに実行結果を出力するためのメソッドです)
それでは、実際にこのコードを実行してみましょう!
実行結果は以下の通りです。
所持金:300デッセ
福嶋くんの現在の所持金は「300デッセ」ということが分かりました。
これでは、生きていけませんね。。。
次は、getSalaryメソッドにアクセスして、給料を受け取りましょう!
同情するなら金をくれ
メソッドへのアクセス
今日は福嶋くんの給料日!
getSalaryメソッドにアクセスしてみましょう。
// Humanクラスのインスタンス化
let fukushima = Human()
// 給料を受け取る
fukushima.getSalary()
// 給料を受け取った後の所持金
print("所持金:" + String(fukushima.money) + "デッセ")
インスタンス化された福嶋くんが4行目でgetSalary()にアクセスすることで給料もらうことができました。やったね!
6行目で給料を受け取った後の所持金を確認しています。
実行結果は以下です。
所持金:15300デッセ
実行結果から、初期に持っていた所持金(300デッセ)に固定給(15000デッセ)が加算されたことが確認できました。
これでなんとか、1ヶ月は食っていけそうですね!
財布が潤った!たくさん遊んだんねん
イニシャライザについて
イニシャライザって?
イニシャライザとは、インスタンス生成時に自動的に呼び出されるメソッドのことを言います。
イニシャライザは、クラス変数を初期化する際に用いられることが一般的です。
イニシャライザの定義
先ほど定義したHumanクラスにイニシャライザを追加してみましょう!
import UIKit
class Human {
// 所持金
var money = 0
// 給料
let salary = 15000
// 借金(追加)
var debt = 0
// イニシャライザ(追加)
init(debt) {
self.debt = 0
}
// 給料をもらうメソッド
func getSalary() {
self.money += salary
}
// 借金するメソッド
func borrowMoney() {
self.debt = 100000
}
}
Swiftにおいて、イニシャライザは12行目のようにinit()と書くことで定義できます。
13行目のイニシャライザのブロック内で、self.debt = 0とすることで、インスタンス時に必ずHumanクラスのdebtプロパティの値は0となります。
変更点:8行目に借金プロパティ(debt)、22行目に借金するメソッド(borrowMoneyメソッド)を追加
しまった!給料が入って調子に乗って遊びすぎちまった
借金するしかないや。。。
と、いう訳で福嶋くんは仕方なく借金をすることになりました。
// Humanクラスのインスタンス化
let fukushima = Human()
// 借金する
fukushima.borrowMoney()
// 現在の借金額
print("借金:" + String(fukushima.debt) + "デッセ")
福嶋くんは4行目で借金をしにいきました。
気になる借金額は…?
借金:100000デッセ
やばい、、、借金額が生涯給与をゆうに超えてしまった!
こうなったら初期化(自己破産)をするしかない!!
イニシャライザの利用(自動処理)
ということで、初期化(自己破産)をしていきましょう…。
現在の借金は100000デッセです。初期化(インスタンス化)することで、借金額は0デッセになるはずです。
// Humanクラスを初期化
let fukushima = Human()
// 現在の借金額
print("借金:" + String(fukushima.debt) + "デッセ")
2行目でHumanクラスを初期化しました。この時点でHumanクラスに定義したinit()メソッドが自動処理されます。
これで、Humanクラスのdebtプロパティには0が格納されているはずです。
4行目で現在の福嶋くんの借金額を出力してみましょう!
借金:0デッセ
見事、福嶋くんの借金は0となりました!めでたしめでたし…….?
まとめ
今回は、Swiftにおけるクラス(Class)について福嶋くんの人生に沿って学びました。
この辺の概念は、Swiftに限らずあらゆる言語において必要不可欠な知識となりますので、この機会にしっかりと理解しておきましょう!
この記事が皆様の開発ライフの一助になれれば幸いです!
この記事があなたのスキルアップに役立ったなら、次のキャリアステップを踏み出す絶好の機会かもしれません。エンジニアとしてのさらなる成長と挑戦を求めるなら、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】
コメント
コメント一覧 (2件)
[…] 要チェック! 【iOS】Swiftにおけるクラス(Class)の使い方について徹底解説 […]
[…] 【iOS】Swiftにおけるクラス(Class)の使い方について徹底解説 【iOS】Swiftにおけるクラス(Class)の使い方について徹底解説 […]