広告
  サイト内検索:
<Let's create a game!> Introduction of programming for absolute beginners English
 

SESSION 7 その9
変数(へんすう) つづき
  変数の有効範囲(スコープ)

次に変数の有効範囲を見てみよう。

変数は使える範囲が決まってるんだ。

まず、宣言・初期化より後じゃないと使用できない。


それから、ほら、前にブロックをみただろ。
変数は、宣言したブロック内でのみ有効だ。
ブロック外では使用できない。


また、変数の有効範囲内なら、何回でも使い回しできる。
もちろん、値の書き換えも可能だ。

じゃあ、変数の有効範囲を図を使って見てみよう。
基本的に
ブロックが変数の
有効範囲になるって
ことだ。
 
  ブロックが
範囲なんだ。


参考コードを書いてみたからよく見てくれ。
まだ勉強してない if文(いふぶん) が出てくるけど、
それは無視してブロック部分だけ見てくれ。

ちなみに、
プログラミングでは有効範囲をスコープと言うんだ。
覚えておいてくれ。
 
はい。

変数の
スコープだね。
 
変数の有効範囲 宣言・初期化以降から利用可能


内側のブロックからは
外側のブロックの変数も
使えるんだ。
ああ。
内側のブロックは
外側のブロックに
含まれているんだからな。


当然ちゃ当然だろ。
そうか。
蛇足で
言うなら
こんな感じ。

内側ほど
権利が
広いだろ。
会社書類に例えると


それから、
変数の宣言は、メイン関数内のどこでもできるよ。

ルールを守っていればね。

「解答改変 変数対応」では、先頭でまとめて宣言したけど、
別に使う直前にバラバラに宣言することもできる。

この例を見てね。
KotoTest2を
見てね。
どこでも
出来るんだ。
 

練習問題1 解答改変 変数対応(KotoTest2のKNMain.java)17行目~
 
・・・          
017            public static void main(String[] args) {      
018                  // TODO code application logic here      
019          
020                  //System.out.println((2048 * (1024 + 1024)) - 8658 +      
021                  //                             896 * 1024);      
022          
023                  //変数 a と b と c を宣言。同時に初期化      
024                  //int a = 0;      
025                  //int b = 0;      
026                  //int c = 0;      
027          
028                  //昼の合計を計算して変数 a に代入      
029                  int a = 100 * 5;      
030                  //昼の合計を表示      
031                  System.out.println("昼の合計は" + a + "円です。");      
032  
033                  //夜の合計を計算して変数 b に代入      
034                  int b = 200 * 3;      
035                  //夜の合計を表示      
036                  System.out.println("夜の合計は" + b + "円です。");      
037                          
038                  //昼(変数 a)と夜(変数 b)の合計を計算して変数 c に代入      
039                  int c = a + b;      
040                  //昼と夜の合計を表示      
041                  System.out.println("昼と夜の合計は" + c + "円です。");      
042                       
043           }      
・・・          
 
宣言を個別にすることもできる。宣言と同時に計算で初期化している。
 

黄色の部分が追加・改変部分です。
書き写して実行して下さい。



一般的には、
関数全体を通して使う変数は
先頭でまとめて宣言。
部分でしか使わないものは
その処理の直前、って感じだな。


絶対ってわけじゃないから
読みやすいように
いろいろ考えてみてくれ。

まあ、ここらへん
臨機応変だな。
臨機応変ね。  
まとめたほうが
分かりやすいもんね。



メイン関数の外にも
変数って宣言できるの?


あー、実は書ける。

それはメンバ変数(フィールド)と言って
クラスと関係してくるから今はパス。

あと、メイン関数以外の関数にも
書けるけど、これもあとな。

ややこしくなるからな。
今はメイン関数の中だけで考えよう。
何ブツブツ
言ってるの?
  あー、
クラスを考えると、
正確にはブロックが
変数の有効範囲とは
言えないんだよな。
継承とかあるし。

独り言。。。

  キャスト(型変換)

KotoTest3ね。
数値型の変数の場合、
型が違っても互換性がある。

つまり、お互いの型が違っていても
値を入れることができるんだよ。


byte型の値をint型の変数に
入れてみよう。


新しいプロジェクトを作って
テストしてみてくれ。
 
 
ほんとだ。byte型の
変数に入ってる値と
同じのが表示された。

普通に代入できるんだね。
 
 
 

型変換テスト byte型の値をint型変数に代入
(KotoTest3のKNMain.java)17行目~
 
・・・          
017            public static void main(String[] args) {      
018                  // TODO code application logic here      
019          
020                  // 変数を宣言と初期化      
021                  int a = 11;      
022                  byte b = 99;       
023          
024                  // byte型の値をint型の変数に代入      
025                  a = b;      
026          
027                  // 変数を表示      
028                  System.out.println("変数の値は " + a + " です。");      
029          
030           }      
・・・          
黄色の部分が追加・改変部分です。
書き写して実行して下さい。
 
実行結果
実行結果(出力ウィンドウ)


でも、なぽちゃん、
逆にbyte型にint型入れた場合は?

byte型の箱は-128~127しか
入らないんでしょ。
もし、int型の値が777とかだったら
byte型じゃ入らないよね。

byte型の箱は、int型の箱より
小さいから入れたら溢れちゃうよ。
お前の言うとおり、エラーに
なるよ。
値のまるめが起こるから
だめです
ってな。

でも、int型のデータをbyte型に
写したい時もある。

たとえint型でも127以下の値
なら問題ないはずだろ。

そんな時、強制的に型を
変換する方法
があるんだ。
それがキャスト(型変換)だ。
   
 
 
キャスト:小さい場合 キャスト:大きいので入らない キャスト:キャストで入れる
 

キャストの仕方
 

型変換テスト改変 キャスト使用例
(KotoTest3のKNMain.java)17行目~
 
・・・          
017            public static void main(String[] args) {      
018                  // TODO code application logic here      
019          
020                  // 変数を宣言と初期化      
021                  int a = 11;      
022                  byte b = 99;       
023          
024                  // int型の変数をキャストしてbyte型変数に代入      
025                  b = (byte)a;      
026          
027                  // 変数を表示      
028                  System.out.println("変数の値は " + b + " です。");      
029          
030           }      
・・・          
黄色の部分が追加・改変部分です。
書き写して実行して下さい。

ちなみにまるめとは
自分より小さい型に変換した場合、
値が削られて正確じゃなくなることだ。

このキャスト(型変換)は
数値型以外の変数にもいろいろ
使われる。

その都度見ていくから覚えておいてくれ。

はい。

まるめには気をつけるね。

 
 

 
 

広告
home もくじ 前のページを読む 次のページを読む
  サイト内検索:
広告
お勧めの姉妹サイト
leafdays - リーフデイズ 超初心者のための園芸入門 - 楽しい趣味のガーデニング -
広告