情報学部 | 菅沼ホーム | 目次 | 索引 |
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
情報学部 | 菅沼ホーム | 目次 | 索引 |