.. index:: 
	single: 変数; はじめに

====
変数
====

新しい変数を作成するには、変数名と値を定義します。
変数の型は値により決定します。
同名変数の値を変更することで型も変更されます。

文法:

.. code-block:: ring
	
	<変数名> = <値>

.. tip:: 
	
	ここでは、演算子 '=' は代入演算子として扱いますが、
	この演算子は式の等価性を評価するために条件文でも使います。

.. note:: 
	
	変数は実際の値を有しています (参照ではありません)。
	すでにリストやオブジェクトが変数にあっても、 
	変数の値を変更すると、以前の古い値は削除されます。


.. index:: 
	pair: 変数; 動的型付け

動的型付け
==========

Ring は `動的型付け <https://ja.wikipedia.org/wiki/動的型付け>`_ を使う動的プログラミング言語です。

.. code-block:: ring

	x = "Hello"		# x は文字列です。
	see x + nl
	x = 5			# x は数値です (int 型)。
	see x + nl
	x = 1.2 		# x は数値です (double 型)。
	see x + nl
	x = [1,2,3,4]		# x はリストです。
	see x 			# リストの項目を表示します。
	x = date()		# は日付入りの文字列です。
	see x + nl
	x = time()		# は時刻入りの文字列です。
	see x + nl
	x = true		# x は数値です (論理値 = 1)。
	see x + nl
	x = false		# x は数値です (論理値 = 0)。
	see x + nl

.. index:: 
	pair: 変数; 深いコピー

深いコピー
==========

代入演算子 '=' は変数を完全にコピーします。
文字列と数値などの値のコピーに限らず、
リストとオブジェクトも完全にコピーします。
この処理は `深いコピー (Deep Copy) <http://en.wikipedia.org/wiki/Object_copy#Deep_copy>`_ です。


.. code-block:: ring

	list = [1,2,3,"four","five"]
	list2 = list
	list = []
	See list	# 最初のリストを表示します - 項目を表示しません。
	See "********" + nl
	See list2	# 次のリストを表示します - 五項目あります。

.. index:: 
	pair: 変数; 暗黙的型変換

暗黙的型変換
============

Ring は数値と文字列において自動型変換を行います。

変換規則:

.. code-block:: ring

	<数値> + <文字列> --> <数値>
	<文字列> + <数値> --> <文字列>

.. note:: 

	演算子 '+' は算術演算子、または文字列の連結にも使います。
	

用例:

.. code-block:: ring

	x = 10			# x は数値です。
	y = "20"		# y は文字列です。
	sum = x + y		# sum は数値です (y は数値へ変換します)。
	Msg = "Sum = " + sum 	# Msg は文字列 (sum は文字列へ変換します)。
	see Msg + nl
