コース: Objective-C 基本講座

今すぐコースを受講しましょう

今すぐ登録して、23,200件以上登録されている、業界エキスパート指導のコースを受講しましょう。

スコープを調整する

スコープを調整する

このレッスンでは変数、関数の見える 範囲について学習します まずこのサンプルは 7 日間の出来事シュミレーションです ループ中ジュースを飲む drink 友達を遊びに誘う invite 友達が遊びに来る come の3 関数を 無条件に呼び出していますが呼び出された 関数側で変化をつけています 例えばinvite 関数では友達が3回に 1 度誘いを断るようにしています この場合何回目の誘いかを記憶する 必要があるのですがスタック変数だと 関数から戻った時点で片付けられれるので グローバルにする必要がありました drink 関数も2 回に1 度は 売り切れで買えなかったとしています 同じようにg カウントを用意して 使っていますが特にエラーにはなりません しかしいざランさせてみると リンクでエラーが生じます エラーマークをクリックして 詳細を確認してみましょう エラーの内容は変数が複数あるというものです これは2 つのファイルで宣言した グローバル変数が リンクの時点で衝突したせいです 当たり前ですがグローバル変数は 名前の重複が許されません 重ならないように名前を変更するのでも いいのですが もっといい方法があります それは変数を関数の中に入れてしまい スタティックキーワードをつける方法です このように型の前にスタティックキーワード をつけることでその変数をスタック上ではなく グローバル変数用のメモリー区画に確保させた ままその関数からしか見えないようにできます この時点でリンクも通るのですがdrink 側もちゃんとスタティックをつけて 関数内に入れましょう こうしてこまめに関数内からしか見えないよう にしておくといざ本当にgカウントを グローバル変数で 使わなければならなくなった時に困りません 本当はグローバル変数の識別用につけている 変数目頭のg も外すべきですが ここでは省略します こうやってすべてのグローバル変数を関数内に 収めれば変数名の衝突を気にしなくてよいの ですがそうも行かない場合があります 例えば友達が誘うといけないと言っておき ながら直後にcome で 遊びに来たのでは変です この場合come 関数もinvite内の g カウントの値に伝導させる必要があり g カウントを関数外に出さざるを得ません これだとまたグローバル変数名の…

目次