Objective-C 基本講座

関数から情報をもらう

全334コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
グローバル変数を宣言し、関数の呼び出し元と関数間とで、値の受け渡しをおこなうやり方について学習します。構造体も紹介します。
講師:
07:41

字幕

このレッスンでは関数から情報を貰う 方法について学習して下さい ここにある oneDaySimulator 関数は ある日の友達とのやり取りを シミュレートしたものです 所持金 asset の状態から 友達に貸していたお金 loan が戻り priceOfDrink へのジュースをおごった後 あらためて友達に借金を申し込まれてしまい 自分の今持っているお金の 半分貸し直すというものですが もしこの関数内で計算した asset や loan を 関数を呼び出した側が使いたい場合は どうすれば良いでしょう 関数の仮引数 asset や loan の値を 関数から戻ったときに使えればいいのですが この記憶区画は oneDaySimulator から戻った時には 片付けられてしまう仕組みになっています この場合 oneDaySimulator 関数が 戻り値を返すように変更し その値を呼び出し元の変数に 記憶させる必要がありますが 関数は値を1つしか戻せません 今回のように asset や loan の2つが 必要な場合 少し工夫が必要になります その点はあとで検討するとして まずは oneDaySimulator 関数が asset を戻り値として返すように してみましょう oneDaySimulator の関数定義で 戻り値の型を void から int に変更し 処理部で return というキーワードを使って asset の値を戻します return は呼び出し元に戻れと いう命令です 戻り値を返さない関数の場合は 単独で使います 最後の処理の後には暗黙裡に return が書かれたことになるので わざわざ書く必要はありません 処理の途中で関数から 戻りたいときだけ使います 戻り値を返す関数の場合は 最後の処理として必ず使う必要があり その場合 return に続けて書かれた内容が 戻り値として返されます 変数名を書けばその変数の値を戻し リテラルを書けばその値をそのまま戻します 式を書いた場合はその式の計算結果を戻します 残る問題は loan です 色々な方法がありますが ここではグローバル変数を使ってみます 変数を関数外で宣言すると グローバル変数となります そしてグローバル変数はこれまで 関数内で宣言してきた変数と違い スタック外に記憶区画を確保します この区画はアプリ起動時から 存在することになり 関数の呼び出し戻りで確保されたり 片付けられたりはしません また 宣言時に何も代入しなかった場合 値として0が代入されるようにもなっています そしてどんな関数からでも参照できます その為 oneDaySimulator 関数で このグローバル変数 g に loan の値を代入すれば 呼び出し側で参照することができます グローバル変数 g 経由で oneDaySimulator 関数で計算した loan が受け取れるわけです 勿論 直接グローバル変数 g を 引数に使っても構いません グローバル変数に対し 関数内で宣言された変数を ローカル変数と呼んだり スタック変数と呼んだりします グローバル変数とスタック変数は 同じ名前を持つことができますが その場合 コンパイラは仮引数も含め スタック変数側を優先します その為 自分では グローバル変数 loan の値を スタック変数 loan に入れてるつもりでも コンパイラには意味不明の命令となります このような事態を避けるため 一般的にグローバル変数の名前には 最初に g と1文字つけたりします 各自で工夫して下さい いずれにせよグローバル変数の利用は 本来関数が持っている ブラックボックスとして使える性質となり 呼び出し元とは引数と戻り値のみでつながり それ以外は気にかけなくてよいという 特性を無効にしてしまう点で注意が必要です 例えば この update 関数のように gloan を更新する別の関数を 作ってしまったなら 呼び出し元では oneDaySimulator update を呼び出す時に gloan が変化することを注意 しなければいけなくなります 関数でグローバル変数を使うか使わないかは このような点を検討すべきです もし oneDaySimulator 関数を ブラックボックスのまま使いたいなら 構造体を使うと良いでしょう 構造体は複数の変数を ひと塊りとして取り扱うものです struct というキーワードを書き 続けてその構造体用に任意の名前をつけ 続く { } で囲まれた中に変数宣言の要領で その構造体を構成する変数群を 記述します これで1つの構造体定義命令なので セミコロンをつけて完了です 構造体ではこの変数群を メンバまたはフィールドと呼びます これで以後 struct Balance が 変数の型として使えるようになります 例えば 次のように struct Balance 型の 変数 newBalance と宣言すれば グローバルでもスタックでも asset ・loan をひと塊りにした 記憶区画が確保されます そして変数名にドットをつけて メンバ名を続けることで 各メンバに値を代入することができます また { } で囲み カンマで区切った値を用意すると 各メンバの値を一気に初期化 することも可能です この場合メンバの定義順に値を並べます 同じ構造体の変数同士は 代入も可能です その場合 全メンバの値が すべてコピーされます 構造体は関数内で定義してしまうと 関数内でしか利用できないので 引数や戻り値で使うならグローバル変数同様 関数外で定義します これで oneDaySimulator や main は struct Balance が使えるようになります 仮引数側の asset と loan も struct Balance にまとめました 呼び出し側でも struct Balance を 使うようにします これでグローバル変数は不要となります ではここで OS X コマンドライン ツールとして作り 実際に動くようにしたものをお見せします Xcode の画面に切り替えます このレッスンでは関数から情報を貰う 方法について学習しました

Objective-C 基本講座

このコースはプログラミング初心者でもObjective-CによるiOSアプリ開発の体系的な理解が得られるように構成されています。プログラムの動作の原理、Objective-C言語の役割、そこで利用されるCocoa touchオブジェクトの役割、基本的なiOSアプリの作成方法などを学習します。ぜひこのコースをアプリ開発に踏み出すさいの第一歩としてください!

6時間39分 (69 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
価格: 3,990
発売日:2015年11月18日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。