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