| 情報学部 | 菅沼ホーム | 目次 | 索引 |
01 /****************************/
02 /* 変数の有効範囲(スコープ) */
03 /* coded by Y.Suganuma */
04 /****************************/
05 #include <stdio.h>
06
07 /*******************/
08 /* クラス Example1 */
09 /*******************/
10 class Example1 {
11 int pri;
12 protected :
13 int pro;
14 public :
15 int pub;
16
17 Example1() {
18 pub = 1000;
19 pri = 2000;
20 pro = 3000;
21 }
22
23 void sub1() {
24 printf("sub1 pub %d pri %d pro %d\n", pub, pri, pro);
25 }
26 };
27
28 /*******************/
29 /* クラス Example2 */
30 /*******************/
31 class Example2 : public Example1 {
32
33 public :
34
35 Example2() {}
36
37 void sub2() {
38 printf("sub2 pub %d pro %d\n", pub, pro);
39 // printf("sub2 pri %d\n", pri); // 許されない
40 }
41 };
42
43 void sub();
44
45 /****************/
46 /* main program */
47 /****************/
48 int main()
49 {
50 // ブロック
51 int x = 10;
52 if (x > 5) {
53 printf("block x %d\n", x);
54 int x = 15;
55 int y = 20;
56 printf("block x %d\n", x);
57 printf("block y %d\n", y);
58 }
59 sub();
60 printf("x %d\n", x);
61 // int y = 100; // この文がなければ,y が未定義
62 // printf("y %d\n", y);
63 extern int z;
64 printf("z %d\n", z);
65 // クラス
66 Example2 ex = Example2();
67 ex.sub1();
68 ex.sub2();
69 printf("public member( pub ) %d\n", ex.pub);
70
71 return 0;
72 }
73
74 int z = 30;
75
76 /************/
77 /* 関数 sub */
78 /************/
79 void sub()
80 {
81 int x = 40;
82 printf(" sub x %d\n", x);
83 printf(" sub z %d\n", z);
84 }
block x 10 block x 15 block y 20 sub x 40 sub z 30 x 10 z 30
sub1 pub 1000 pri 2000 pro 3000 sub2 pub 1000 pro 3000 public member( pub ) 1000
01 /****************************/
02 /* 変数の有効範囲(スコープ) */
03 /* coded by Y.Suganuma */
04 /****************************/
05 import java.io.*;
06
07 public class Test {
08 public static void main(String args[]) throws IOException
09 {
10 // ブロック
11 int x = 10;
12 if (x > 5) {
13 System.out.printf("block x %d\n", x);
14 // int x = 15; // 許されない
15 int y = 20;
16 System.out.printf("block y %d\n", y);
17 }
18 sub();
19 System.out.printf("x %d\n", x);
20 // int y = 100; // この文がなければ,y が未定義
21 // System.out.printf("y %d\n", y);
22 // クラス
23 // クラス
24 Example2 ex = new Example2();
25 ex.sub1();
26 ex.sub2();
27 System.out.printf("public member( pub ) %d\n", ex.pub);
28 }
29
30 /************/
31 /* 関数 sub */
32 /************/
33 static void sub()
34 {
35 int x = 40;
36 System.out.printf(" sub x %d\n", x);
37 }
38 }
39
40 /*******************/
41 /* クラス Example1 */
42 /*******************/
43 class Example1 {
44
45 private int pri;
46 protected int pro;
47 public int pub;
48
49 Example1() {
50 pub = 1000;
51 pri = 2000;
52 pro = 3000;
53 }
54
55 void sub1() {
56 System.out.printf("sub1 pub %d pri %d pro %d\n", pub, pri, pro);
57 }
58 }
59
60 /*******************/
61 /* クラス Example2 */
62 /*******************/
63 class Example2 extends Example1 {
64 void sub2() {
65 System.out.printf("sub2 pub %d pro %d\n", pub, pro);
66 // System.out.printf("sub2 pri %d\n", pri); // 許されない
67 }
68 }
block x 10 block y 20 sub x 40 x 10
sub1 pub 1000 pri 2000 pro 3000 sub2 pub 1000 pro 3000 public member( pub ) 1000
01 <!DOCTYPE HTML>
02 <HTML>
03 <HEAD>
04 <TITLE>変数の有効範囲(スコープ)</TITLE>
05 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
06 <SCRIPT TYPE="text/javascript">
07 /****************************/
08 /* 変数の有効範囲(スコープ) */
09 /* coded by Y.Suganuma */
10 /****************************/
11
12 str = "";
13 z = 30;
14
15 /************************/
16 /* オブジェクト Example */
17 /************************/
18 function Example() { // class Example {
19 this.x = 1000; // constructor() { this.x = 1000; }
20 }
21
22 Example.prototype.sub = function() { // sub = function() {
23 str += "sub member( x ) " + this.x + "\n";
24 }
25
26 /************/
27 /* 関数 run */
28 /************/
29 function run() {
30 // ブロック
31 let x = 10;
32 var a = 100;
33 if (x > 5) {
34 // str += "then block x " + x + "\n"; // 許されない
35 str += "then block a " + a + "\n";
36 let x = 15;
37 if (x > 7) {
38 let x = 20; // OK
39 str += "then block block x " + x + "\n";
40 }
41 var a = 200;
42 let b = -100;
43 var y = 20;
44 str += "then block x " + x + "\n";
45 str += "then block a " + a + "\n";
46 str += "then block b " + b + "\n";
47 str += "then block y " + y + "\n";
48 }
49 else {
50 str += "else block x " + x + "\n";
51 str += "else block a " + a + "\n";
52 x = -15;
53 str += "else block x " + x + "\n";
54 }
55 // let x = 100; // 許されない
56 // var a = 300; // 許される
57 // str += "w " + w + "\n"; // 許されない
58 sub();
59 str += "w " + w + "\n"; // グローバル変数
60 str += "x " + x + "\n";
61 str += "a " + a + "\n";
62 // str += "b " + b + "\n"; // 許されない
63 str += "y " + y + "\n"; // ブロック内の定義が有効
64 // 最初の x が 1 の時は undefined
65 // オブジェクト
66 let ex = new Example();
67 ex.sub();
68 str += "member( x ) " + ex.x + "\n";
69 //
70 // 結果の設定
71 //
72 document.getElementById("tx").value = str;
73 }
74
75 /************/
76 /* 関数 sub */
77 /************/
78 function sub()
79 {
80 // str += " sub x " + x + "\n"; // 許されない
81 let x = 40;
82 str += " sub x " + x + "\n";
83 str += " sub z " + z + "\n"; // グローバル変数
84 w = 50;
85 }
86 </SCRIPT>
87 </HEAD>
88 <BODY STYLE="font-size:130%">
89 <P STYLE="text-align:center">
90 <INPUT TYPE="button" VALUE="OK" onClick="run()" STYLE="font-size:90%"><BR><BR>
91 <TEXTAREA TYPE="text" ID="tx" COLS="30" ROWS="10" STYLE="font-size: 100%"></TEXTAREA>
92 </P>
93 </BODY>
94 </HTML>
01 x = 10;
02 function run() {
03 alert(x); // undefined
04 var x = 20;
05 alert(x);
06 var x = 30;
07 alert(x);
08 // let x = 40; // 定義済みエラー
09 ・・・・・
10 }
01 x = 10;
02 function run() {
03 // alert(x); // 未定義エラー
04 let x = 20;
05 alert(x);
06 // let x = 30; // 定義済みエラー
07 // var x = 30; // 定義済みエラー
08 }
01 x = 10;
02 function run() {
03 alert(x);
04 x = 20;
05 alert(x);
06 }
// 31 行目の x が 10 のとき 35 then block a 100 39 then block block x 20 44 then block x 15 45 then block a 200 46 then block b -100 47 then block y 20 82 sub x 40 83 sub z 30 59 w 50 60 x 10 61 a 200 63 y 20 // 31 行目の x が 1 のとき 50 else block x 1 51 else block a 100 53 else block x -15 82 sub x 40 83 sub z 30 59 w 50 60 x -15 61 a 100 63 y undefined
sub member( x ) 1000 member( x ) 1000
01 <?php
02
03 /****************************/
04 /* 変数の有効範囲(スコープ) */
05 /* coded by Y.Suganuma */
06 /****************************/
07
08 /*******************/
09 /* クラス Example1 */
10 /*******************/
11 class Example1 {
12 private $pri;
13 protected $pro;
14 public $pub;
15
16 function Example1() {
17 $this->pub = 1000;
18 $this->pri = 2000;
19 $this->pro = 3000;
20 }
21
22 function sub1() {
23 printf("sub1 pub %d pri %d pro %d\n", $this->pub, $this->pri, $this->pro);
24 }
25 }
26
27 /*******************/
28 /* クラス Example2 */
29 /*******************/
30 class Example2 extends Example1 {
31 function sub2() {
32 printf("sub2 pub %d pro %d\n", $this->pub, $this->pro);
33 // printf("sub2 pri %d\n", $this->pri); // 許されない
34 }
35 }
36
37 /****************/
38 /* main program */
39 /****************/
40 // ブロック
41 $x = 10;
42 $z = 30;
43 if ($x > 5) {
44 printf("block x %d\n", $x);
45 $x = 15;
46 $y = 20;
47 printf("block x %d\n", $x);
48 printf("block y %d\n", $y);
49 }
50 else {
51 printf("block x %d\n", $x);
52 $x = -15;
53 printf("block x %d\n", $x);
54 }
55 sub();
56 printf("x %d\n", $x);
57 printf("y %d\n", $y); // 最初の x が 1 の時は,y が未定義のためエラー
58 // クラス
59 $ex = new Example2();
60 $ex->sub1();
61 $ex->sub2();
62 printf("public member( pub ) %d\n", $ex->pub);
63
64 /************/
65 /* 関数 sub */
66 /************/
67 function sub()
68 {
69 $x = 40;
70 printf(" sub x %d\n", $x);
71 global $z;
72 printf(" sub z %d\n", $z);
73 }
74
75 ?>
block x 10 block x 15 block y 20 sub x 40 sub z 30 x 15 y 20
sub1 pub 1000 pri 2000 pro 3000 sub2 pub 1000 pro 3000 public member( pub ) 1000
01 #***************************/
02 # 変数の有効範囲(スコープ) */
03 # coded by Y.Suganuma */
04 #***************************/
05
06 #******************/
07 # クラス Example1 */
08 #******************/
09 class Example1
10 Const = 1000;
11 @@_class = 2000;
12
13 def initialize
14 @_pro = 3000;
15 end
16
17 def sub1()
18 printf("sub1 Const %d @@_class %d @_pro %d\n", Const, @@_class, @_pro);
19 end
20 end
21
22 #******************/
23 # クラス Example2 */
24 #******************/
25 class Example2 < Example1
26 public
27 def sub2()
28 printf("sub2 Const %d @@_class %d @_pro %d\n", Const, @@_class, @_pro);
29 end
30
31 attr_accessor("_pro");
32 end
33
34 #***********/
35 # 関数 sub */
36 #***********/
37 def sub() # この位置で定義する必要がある
38 x = 40;
39 printf(" sub x %d\n", x);
40 printf(" sub z %d\n", $z);
41 end
42
43 #***************/
44 # main program */
45 #***************/
46 # ブロック
47 x = 10;
48 $z = 30;
49 if x > 5
50 printf("block x %d\n", x);
51 x = 15;
52 y = 20;
53 printf("block x %d\n", x);
54 printf("block y %d\n", y);
55 else
56 printf("block x %d\n", x);
57 x = -15;
58 printf("block x %d\n", x);
59 end
60 sub();
61 printf("x %d\n", x);
62 printf("y %d\n", y); # 最初の x が 1 の時は,y が未定義のためエラー
63 # クラス
64 ex = Example2.new;
65 ex.sub1();
66 ex.sub2();
67 printf("public member( Const ) %d\n", Example2::Const);
68 printf("public member( @_pro ) %d\n", ex._pro);
block x 10 block x 15 block y 20 sub x 40 sub z 30 x 15 y 20
sub1 Const 1000 @@_class 2000 @_pro 3000 sub2 Const 1000 @@_class 2000 @_pro 3000 public member( Const ) 1000 public member( @_pro ) 3000
01 # -*- coding: UTF-8 -*-
02
03 #***************************/
04 # 変数の有効範囲(スコープ) */
05 # coded by Y.Suganuma */
06 #***************************/
07
08 #******************/
09 # クラス Example1 */
10 #******************/
11 class Example1 :
12 c_var = 1000
13
14 def __init__(self) :
15 self.i_var = 2000
16
17 def sub1(self) :
18 print("sub1 c_var", self.c_var, "i_var", self.i_var)
19
20 #******************/
21 # クラス Example2 */
22 #******************/
23 class Example2(Example1) :
24 def sub2(self) :
25 print("sub2 c_var", self.c_var, "i_var", self.i_var)
26
27 #***********/
28 # 関数 sub */
29 #***********/
30 def sub() : # この位置で定義する必要がある
31 x = 40
32 print(" sub x", x)
33 print(" sub z", z)
34
35 #***************/
36 # main program */
37 #***************/
38 # ブロック
39 x = 10
40 z = 30
41 if x > 5 :
42 print("block x", x)
43 x = 15
44 y = 20
45 print("block x", x)
46 print("block y", y)
47 else :
48 print("block x", x)
49 x = -15
50 print("block x", x)
51 sub()
52 print("x", x)
53 print("y", y) # 最初の x が 1 の時は,y が未定義のためエラー
54 # クラス
55 ex = Example2()
56 ex.sub1()
57 ex.sub2()
58 print("member( c_var )", Example2.c_var)
59 print("member( i_var )", ex.i_var)
global x
block x 10 block x 15 block y 20 sub x 40 sub z 30 x 15 y 20
sub1 c_var 1000 i_var 2000 sub2 c_var 1000 i_var 2000 member( c_var ) 1000 member( i_var ) 2000
01 /******************************/
02 /* 変数の有効範囲(スコープ) */
03 /* coded by Y.Suganuma */
04 /******************************/
05 using System;
06
07 class Program
08 {
09 static void Main()
10 {
11 // ブロック
12 int x = 10;
13 if (x > 5) {
14 Console.WriteLine("block x " + x);
15 // int x = 15; // 許されない
16 int y = 20;
17 Console.WriteLine("block y " + y);
18 }
19 sub();
20 Console.WriteLine("x " + x);
21 // int y = 100; // 16 行目がエラー
22 // Console.WriteLine("y " + y); // y が未定義
23 // クラス
24 // クラス
25 Example2 ex = new Example2();
26 ex.sub1();
27 ex.sub2();
28 Console.WriteLine("public member( pub ) " + ex.pub);
29 }
30
31 /************/
32 /* 関数 sub */
33 /************/
34 static void sub()
35 {
36 int x = 40;
37 Console.WriteLine(" sub x " + x);
38 }
39 }
40
41 /*******************/
42 /* クラス Example1 */
43 /*******************/
44 class Example1 {
45
46 private int pri;
47 protected int pro;
48 public int pub;
49
50 public Example1() {
51 pub = 1000;
52 pri = 2000;
53 pro = 3000;
54 }
55
56 public void sub1() {
57 Console.WriteLine("sub1 pub " + pub + " pri " + pri + " pro " + pro);
58 }
59 }
60
61 /*******************/
62 /* クラス Example2 */
63 /*******************/
64 class Example2 : Example1 {
65 public void sub2() {
66 Console.WriteLine("sub2 pub " + pub + " pro " + pro);
67 // Console.WriteLine("sub2 pri " + pri); // 許されない
68 }
69 }
block x 10 block y 20 sub x 40 x 10
sub1 pub 1000 pri 2000 pro 3000 sub2 pub 1000 pro 3000 public member( pub ) 1000
01 ''''''''''''''''''''''''''''
02 ' 変数の有効範囲(スコープ) '
03 ' coded by Y.Suganuma '
04 ''''''''''''''''''''''''''''
05 Imports System
06 Module Test
07 Sub Main()
08 ' ブロック
09 Dim x As Integer = 10
10 ' Dim X As Integer = 100 大文字,小文字を区別しない
11 If x > 5 Then
12 Console.WriteLine("block x " & x)
13 x = 15
14 ' Dim x As Integer = 15 ' 許されない
15 Dim y As Integer = 20
16 Console.WriteLine("block y " & y)
17 End If
18 func()
19 Console.WriteLine("x " & x)
20 ' Dim y As Integer = 100 ' 14 行目がエラー
21 ' Console.WriteLine("y %d\n", y) ' y が未定義
22 ' クラス
23 ' クラス
24 Dim ex As new Example2()
25 ex.sub1()
26 ex.sub2()
27 Console.WriteLine("public member( pub ) " & ex.pub)
28 End Sub
29
30 '''''''''''''
31 ' 関数 func '
32 '''''''''''''
33 Sub func()
34 Dim x As Integer = 40
35 Console.WriteLine(" func x " & x)
36 End Sub
37
38 '''''''''''''''''''
39 ' クラス Example1 '
40 '''''''''''''''''''
41 Class Example1
42
43 Private pri As Integer
44 Protected pro As Integer
45 Public pub As Integer
46
47 Sub New ()
48 pub = 1000
49 pri = 2000
50 pro = 3000
51 End Sub
52
53 Sub sub1()
54 Console.WriteLine("sub1 pub " & pub & " pri " & pri & " pro " & pro)
55 End Sub
56 End Class
57
58 '''''''''''''''''''
59 ' クラス Example2 '
60 '''''''''''''''''''
61 Class Example2
62 Inherits Example1
63 Sub sub2()
64 Console.WriteLine("sub2 pub " & pub & " pro " & pro)
65 ' Console.WriteLine("sub2 pri " & pri) ' 許されない
66 End sub
67 End Class
68 End Module
block x 10 block y 20 func x 40 x 15
sub1 pub 1000 pri 2000 pro 3000 sub2 pub 1000 pro 3000 public member( pub ) 1000
| 情報学部 | 菅沼ホーム | 目次 | 索引 |