--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <title>オブジェクト指向プログラミング (OOP) — プログラミング言語 Ring 1.12 取扱説明書</title>
+
+ <link rel="stylesheet" href="_static/bootstrap-astropy.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+
+ <script type="text/javascript">
+ var DOCUMENTATION_OPTIONS = {
+ URL_ROOT: './',
+ VERSION: '1.12',
+ COLLAPSE_INDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/translations.js"></script>
+ <link rel="top" title="プログラミング言語 Ring 1.12 取扱説明書" href="index.html" />
+ <link rel="next" title="関数型プログラミング" href="fp.html" />
+ <link rel="prev" title="セキュリティとインターネット関数" href="secfunc.html" />
+ <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,600' rel='stylesheet' type='text/css'/>
+
+ </head>
+ <body role="document">
+<div class="topbar">
+ <a class="brand" title="Documentation Home" href="index.html"><span id="logotext1">🍩Ring</span><span id="logotext2"> 1.12</span><span id="logotext3">:docs</span></a>
+ <ul>
+
+ <li><a href="http://ring-lang.sourceforge.net/news.html">News</a></li>
+ <li><a href="http://ring-lang.sourceforge.net/download.html">Download</a></li>
+ <li><a href="https://groups.google.com/forum/#!forum/ring-lang">Get Help</a></li>
+ <li><a href="https://github.com/ring-lang/ring">Contribute</a></li>
+ <li><a href="http://ring-lang.sourceforge.net/resources.html">Resources</a></li>
+ <li><a href="http://ring-lang.sourceforge.net/team.html">Team</a></li>
+
+ <li><a title="Ring Homepage" href="http://ring-lang.net/">Website</a></li>
+ <li><a title="総合索引" href="genindex.html">Index</a></li>
+ <li>
+
+
+<form action="search.html" method="get">
+ <input type="text" name="q" placeholder="Search" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+</form>
+
+ </li>
+ </ul>
+</div>
+
+<div class="related">
+ <h3>ナビゲーション</h3>
+ <ul>
+ <li class="right">
+ <a href="fp.html" title="関数型プログラミング">
+ next »
+ </a>
+ </li>
+ <li class="right">
+ <a href="secfunc.html" title="セキュリティとインターネット関数">
+ « previous
+ </a>
+ |
+ </li>
+ <li>
+ <a href="index.html">プログラミング言語 Ring 1.12 取扱説明書</a>
+ »
+ </li>
+
+ <li>オブジェクト指向プログラミング (OOP)</li>
+ </ul>
+</div>
+
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <div class="section" id="oop">
+<span id="index-0"></span><h1>オブジェクト指向プログラミング (OOP)<a class="headerlink" href="#oop" title="このヘッドラインへのパーマリンク">¶</a></h1>
+<p>Ring でオブジェクト指向プログラミングのパラダイムを扱う方法を学びます。</p>
+<ul class="simple">
+<li>クラスとオブジェクト</li>
+<li>括弧を用いたオブジェクトへのアクセス</li>
+<li>コンポジション</li>
+<li>Setter と Getter</li>
+<li>プライベート属性とメソッド</li>
+<li>演算子のオーバーロード</li>
+<li>継承</li>
+<li>動的属性</li>
+<li>パッケージ</li>
+<li>オブジェクトの表示</li>
+<li>Find() とオブジェクトのリスト</li>
+<li>Sort() とオブジェクトのリスト</li>
+<li>Self.属性 および Self.メソッド() の用法</li>
+<li>This.属性 および This.メソッド() の用法</li>
+</ul>
+<div class="section" id="index-1">
+<span id="id1"></span><h2>クラスとオブジェクト<a class="headerlink" href="#index-1" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>このシンタックスで新しいクラスを定義できます。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">Class</span> <span class="o"><</span><span class="n">クラス名</span><span class="o">></span> <span class="o">[</span><span class="k">From</span><span class="o">|<|</span><span class="p">:</span> <span class="o"><</span><span class="n">親クラス名</span><span class="o">>]</span>
+ <span class="o">[</span><span class="n">属性</span><span class="o">]</span>
+ <span class="o">[</span><span class="n">メソッド</span><span class="o">]</span>
+ <span class="o">[</span><span class="n">Private</span>
+ <span class="o">[</span><span class="n">属性</span><span class="o">]</span>
+ <span class="o">[</span><span class="n">メソッド</span><span class="o">]</span>
+ <span class="o">]</span>
+</pre></div>
+</div>
+<p>また、このシンタックスでオブジェクトを作成できます。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre>New <オブジェクト名> [ (init メソッドの仮引数) ] |
+[ { オブジェクトのデータ、およびメソッドへのアクセス } ] ---> オブジェクト
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">New</span> <span class="n">point</span> <span class="p">{</span> <span class="n">x</span><span class="o">=</span><span class="mi">10</span> <span class="n">y</span><span class="o">=</span><span class="mi">20</span> <span class="n">z</span><span class="o">=</span><span class="mi">30</span> <span class="n">print</span><span class="p">()</span> <span class="p">}</span>
+<span class="k">Class</span> <span class="n">Point</span> <span class="n">x</span> <span class="n">y</span> <span class="n">z</span> <span class="k">func</span> <span class="n">print</span> <span class="k">see</span> <span class="n">x</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">y</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">z</span> <span class="o">+</span> <span class="n">nl</span>
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">注釈</p>
+<p class="last">{ } でオブジェクトのデータとメソッドへアクセスできます。</p>
+</div>
+<div class="admonition tip">
+<p class="first admonition-title">ちなみに</p>
+<p class="last">クラス名の直後にクラスの属性を宣言できます。</p>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="mi">10</span>
+<span class="mi">20</span>
+<span class="mi">30</span>
+</pre></div>
+</div>
+<p>別の記法で同じプログラムを書き直せます。</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">New</span> <span class="n">point</span> <span class="c"># point クラスで新しいオブジェクトを作成</span>
+<span class="p">{</span> <span class="c"># 新しいオブジェクトの属性、およびメソッドへのアクセス</span>
+ <span class="n">x</span> <span class="o">=</span> <span class="mi">10</span> <span class="c"># 属性 x へ 10 を設定</span>
+ <span class="n">y</span> <span class="o">=</span> <span class="mi">20</span> <span class="c"># 属性 y へ 20 を設定</span>
+ <span class="n">z</span> <span class="o">=</span> <span class="mi">30</span> <span class="c"># 属性 z へ 30 を設定</span>
+ <span class="n">print</span><span class="p">()</span> <span class="c"># print メソッドの呼び出し</span>
+<span class="p">}</span> <span class="c"># オブジェクトのアクセスを終了</span>
+
+
+<span class="k">Class</span> <span class="n">Point</span> <span class="c"># Point クラスの定義</span>
+ <span class="n">x</span> <span class="n">y</span> <span class="n">z</span> <span class="c"># クラスには属性 x, y および z があります。</span>
+ <span class="k">func</span> <span class="n">print</span> <span class="c"># print メソッドの定義</span>
+ <span class="k">see</span> <span class="n">x</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="c"># 属性 x の表示</span>
+ <span class="n">y</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="c"># 属性 y の表示</span>
+ <span class="n">z</span> <span class="o">+</span> <span class="n">nl</span> <span class="c"># 属性 z の表示</span>
+</pre></div>
+</div>
+<p>また、別の方法で同じプログラムを書くことができます。</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">P1</span> <span class="o">=</span> <span class="k">New</span> <span class="n">Point</span>
+<span class="n">P1</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="mi">10</span>
+<span class="n">P1</span><span class="p">.</span><span class="n">y</span> <span class="o">=</span> <span class="mi">20</span>
+<span class="n">P1</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="mi">30</span>
+<span class="n">P1</span><span class="p">.</span><span class="n">Print</span><span class="p">()</span>
+<span class="k">Class</span> <span class="n">Point</span> <span class="n">x</span> <span class="n">y</span> <span class="n">z</span> <span class="k">func</span> <span class="n">print</span> <span class="k">see</span> <span class="n">x</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">y</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">z</span> <span class="o">+</span> <span class="n">nl</span>
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">注釈</p>
+<p class="last">オブジェクト名の直後にドット演算子を用いるとオブジェクトのメンバへアクセスできます。</p>
+</div>
+<p>また、別の方法で同じプログラムを書くことができます。</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">new</span> <span class="n">point</span> <span class="p">{</span> <span class="n">print</span><span class="p">()</span> <span class="p">}</span>
+<span class="k">Class</span> <span class="n">Point</span>
+ <span class="n">x</span> <span class="o">=</span> <span class="mi">10</span> <span class="n">y</span> <span class="o">=</span> <span class="mi">20</span> <span class="n">z</span> <span class="o">=</span> <span class="mi">30</span>
+ <span class="k">func</span> <span class="n">print</span> <span class="k">see</span> <span class="n">x</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">y</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">z</span> <span class="o">+</span> <span class="n">nl</span>
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">注釈</p>
+<p class="last">クラスの属性を宣言する時にクラスの属性へデフォルトの値を設定できます。</p>
+</div>
+<p>また、別の方法で同じプログラムを書くことができます。</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">new</span> <span class="n">point</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="mi">20</span><span class="p">,</span><span class="mi">30</span><span class="p">)</span>
+<span class="k">Class</span> <span class="n">Point</span>
+ <span class="n">x</span> <span class="n">y</span> <span class="n">z</span>
+ <span class="k">func</span> <span class="n">init</span> <span class="n">p1</span><span class="p">,</span><span class="n">p2</span><span class="p">,</span><span class="n">p3</span> <span class="n">x</span><span class="o">=</span><span class="n">p1</span> <span class="n">y</span><span class="o">=</span><span class="n">p2</span> <span class="n">z</span><span class="o">=</span><span class="n">p3</span> <span class="n">print</span><span class="p">()</span>
+ <span class="k">func</span> <span class="n">print</span> <span class="k">see</span> <span class="n">x</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">y</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">z</span> <span class="o">+</span> <span class="n">nl</span>
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">注釈</p>
+<p class="last">新しいオブジェクトを作成するときに () を用いる init メソッドを直接呼び出せます。</p>
+</div>
+<p>また、別の方法で同じプログラムを書くことができます。</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">new</span> <span class="n">point</span><span class="p">(</span> <span class="o">[</span> <span class="p">:</span><span class="n">x</span> <span class="o">=</span> <span class="mi">10</span> <span class="p">,</span> <span class="p">:</span><span class="n">y</span> <span class="o">=</span> <span class="mi">20</span> <span class="p">,</span> <span class="p">:</span><span class="n">z</span> <span class="o">=</span> <span class="mi">30</span> <span class="o">]</span> <span class="p">)</span>
+<span class="k">Class</span> <span class="n">Point</span> <span class="n">x</span> <span class="n">y</span> <span class="n">z</span>
+ <span class="k">func</span> <span class="n">init</span> <span class="n">aPara</span> <span class="n">x</span> <span class="o">=</span> <span class="n">aPara</span><span class="o">[</span><span class="p">:</span><span class="n">x</span><span class="o">]</span> <span class="n">y</span> <span class="o">=</span> <span class="n">aPara</span><span class="o">[</span><span class="p">:</span><span class="n">y</span><span class="o">]</span> <span class="n">z</span> <span class="o">=</span> <span class="n">aPara</span><span class="o">[</span><span class="p">:</span><span class="n">z</span><span class="o">]</span> <span class="n">print</span><span class="p">()</span>
+ <span class="k">func</span> <span class="n">print</span> <span class="k">see</span> <span class="n">x</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">y</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">z</span> <span class="o">+</span> <span class="n">nl</span>
+</pre></div>
+</div>
+<div class="admonition tip">
+<p class="first admonition-title">ちなみに</p>
+<p class="last">メソッドの仮引数を渡すためにハッシュを使用する場合は、
+オプションの仮引数の作成時、およびハッシュへ追加時は仮引数の順序を変更できます。</p>
+</div>
+</div>
+<div class="section" id="index-2">
+<span id="id2"></span><h2>括弧を用いたオブジェクトへのアクセス<a class="headerlink" href="#index-2" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>括弧 { } で、いつでもオブジェクトへアクセスできます。</p>
+<p>括弧内ではオブジェクトの属性とメソッドを直接使えます。</p>
+<p>これは New キーワードによるオブジェクトの作成、またはこのシンタックスを必要なときに使えます。</p>
+<div class="highlight-ring"><div class="highlight"><pre>オブジェクト名 { オブジェクトのデータ、およびメソッドへのアクセス }
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">See</span> <span class="s">"Creating the Object"</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="n">o1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Point</span>
+<span class="k">See</span> <span class="s">"Using the Object"</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="n">o1</span> <span class="p">{</span>
+ <span class="n">x</span><span class="o">=</span><span class="mi">5</span>
+ <span class="n">y</span><span class="o">=</span><span class="mi">15</span>
+ <span class="n">z</span><span class="o">=</span><span class="mi">25</span>
+ <span class="n">print</span><span class="p">()</span>
+<span class="p">}</span>
+<span class="k">Class</span> <span class="n">Point</span> <span class="n">x</span> <span class="n">y</span> <span class="n">z</span> <span class="k">func</span> <span class="n">print</span> <span class="k">see</span> <span class="n">x</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">y</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">z</span>
+</pre></div>
+</div>
+<p>括弧は関数、またはメソッドの呼び出し時にオブジェクトへアクセスするために使えます。</p>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">o1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Point</span>
+
+<span class="n">print</span><span class="p">(</span> <span class="n">o1</span> <span class="p">{</span> <span class="n">x</span><span class="o">=</span><span class="mi">10</span> <span class="n">y</span><span class="o">=</span><span class="mi">20</span> <span class="n">z</span><span class="o">=</span><span class="mi">30</span> <span class="p">}</span> <span class="p">)</span>
+
+<span class="k">func</span> <span class="n">print</span> <span class="n">object</span>
+ <span class="k">see</span> <span class="n">object</span><span class="p">.</span><span class="n">x</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span>
+ <span class="n">object</span><span class="p">.</span><span class="n">y</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span>
+ <span class="n">object</span><span class="p">.</span><span class="n">z</span>
+
+<span class="k">Class</span> <span class="n">Point</span> <span class="n">x</span> <span class="n">y</span> <span class="n">z</span>
+</pre></div>
+</div>
+<p>括弧とドット演算子を併用して同じ式のオブジェクトへアクセスできます。</p>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">o1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Point</span>
+
+<span class="n">O1</span> <span class="p">{</span> <span class="n">x</span><span class="o">=</span><span class="mi">10</span> <span class="n">y</span><span class="o">=</span><span class="mi">20</span> <span class="n">z</span><span class="o">=</span><span class="mi">30</span> <span class="p">}.</span><span class="n">print</span><span class="p">()</span>
+
+<span class="k">Class</span> <span class="n">Point</span> <span class="n">x</span> <span class="n">y</span> <span class="n">z</span>
+ <span class="k">func</span> <span class="n">print</span> <span class="k">see</span> <span class="n">x</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">y</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">z</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="index-3">
+<span id="id3"></span><h2>コンポジション<a class="headerlink" href="#index-3" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>オブジェクトでは、ほかのオブジェクトの属性を所有できます。</p>
+<p>アクセスしたいオブジェクトを括弧で入れ子にすることで実現できます。</p>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">R1</span> <span class="o">=</span> <span class="k">New</span> <span class="n">Rectangle</span>
+<span class="p">{</span>
+
+ <span class="n">Name</span> <span class="o">=</span> <span class="s">"Rectangle 1"</span>
+
+ <span class="n">P1</span>
+ <span class="p">{</span>
+ <span class="n">X</span> <span class="o">=</span> <span class="mi">10</span>
+ <span class="n">Y</span> <span class="o">=</span> <span class="mi">20</span>
+ <span class="p">}</span>
+
+ <span class="n">P2</span>
+ <span class="p">{</span>
+ <span class="n">X</span> <span class="o">=</span> <span class="mi">200</span>
+ <span class="n">Y</span> <span class="o">=</span> <span class="mi">300</span>
+ <span class="p">}</span>
+
+ <span class="n">Color</span> <span class="o">=</span> <span class="s">"Blue"</span>
+
+<span class="p">}</span>
+
+<span class="k">see</span> <span class="s">"Name : "</span> <span class="o">+</span> <span class="n">R1</span><span class="p">.</span><span class="n">Name</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span>
+ <span class="s">"Color: "</span> <span class="o">+</span> <span class="n">R1</span><span class="p">.</span><span class="n">Color</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span>
+ <span class="s">"P1 : ("</span> <span class="o">+</span> <span class="n">R1</span><span class="p">.</span><span class="n">P1</span><span class="p">.</span><span class="n">X</span> <span class="o">+</span> <span class="s">","</span> <span class="o">+</span> <span class="n">R1</span><span class="p">.</span><span class="n">P1</span><span class="p">.</span><span class="n">Y</span> <span class="o">+</span> <span class="s">")"</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span>
+ <span class="s">"P2 : ("</span> <span class="o">+</span> <span class="n">R1</span><span class="p">.</span><span class="n">P2</span><span class="p">.</span><span class="n">X</span> <span class="o">+</span> <span class="s">","</span> <span class="o">+</span> <span class="n">R1</span><span class="p">.</span><span class="n">P2</span><span class="p">.</span><span class="n">Y</span> <span class="o">+</span> <span class="s">")"</span>
+
+<span class="k">Class</span> <span class="n">Rectangle</span>
+ <span class="n">name</span> <span class="n">color</span>
+ <span class="n">p1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Point</span>
+ <span class="n">p2</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Point</span>
+
+<span class="k">Class</span> <span class="n">Point</span> <span class="n">x</span> <span class="n">y</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">Name</span> <span class="p">:</span> <span class="n">Rectangle</span> <span class="mi">1</span>
+<span class="n">Color</span><span class="p">:</span> <span class="n">Blue</span>
+<span class="n">P1</span> <span class="p">:</span> <span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="mi">20</span><span class="p">)</span>
+<span class="n">P2</span> <span class="p">:</span> <span class="p">(</span><span class="mi">200</span><span class="p">,</span><span class="mi">300</span><span class="p">)</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="setter-getter">
+<span id="index-4"></span><h2>Setter と Getter<a class="headerlink" href="#setter-getter" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>オブジェクトの属性を設定 (Setter)、または取得 (Getter) 時に用いるメソッドを定義できます。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">Class</span> <span class="o">[</span><span class="n">クラス名</span><span class="o">]</span>
+
+ <span class="o">[</span><span class="n">属性名</span><span class="o">]</span>
+ <span class="p">...</span>
+
+ <span class="k">Func</span> <span class="n">Set</span><span class="o">[</span><span class="n">属性名</span><span class="o">]</span>
+ <span class="p">...</span>
+
+ <span class="k">Func</span> <span class="k">Get</span><span class="o">[</span><span class="n">属性名</span><span class="o">]</span>
+ <span class="p">...</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">o1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">person</span>
+
+<span class="n">o1</span><span class="p">.</span><span class="n">name</span> <span class="o">=</span> <span class="s">"Mahmoud"</span> <span class="k">see</span> <span class="n">o1</span><span class="p">.</span><span class="n">name</span> <span class="o">+</span> <span class="n">nl</span>
+
+<span class="n">o1</span> <span class="p">{</span> <span class="n">name</span> <span class="o">=</span> <span class="s">"Ahmed"</span> <span class="k">see</span> <span class="n">name</span> <span class="p">}</span>
+
+<span class="k">Class</span> <span class="n">Person</span>
+
+ <span class="n">name</span> <span class="n">family</span> <span class="o">=</span> <span class="s">"Fayed"</span>
+
+ <span class="k">func</span> <span class="n">setname</span> <span class="n">value</span>
+ <span class="k">see</span> <span class="s">"Message from SetName() Function!"</span> <span class="o">+</span> <span class="n">nl</span>
+ <span class="n">name</span> <span class="o">=</span> <span class="n">value</span> <span class="o">+</span> <span class="s">" "</span> <span class="o">+</span> <span class="n">family</span>
+
+ <span class="k">func</span> <span class="n">getname</span>
+ <span class="k">see</span> <span class="s">"Message from GetName() Function!"</span> <span class="o">+</span> <span class="n">nl</span>
+ <span class="k">return</span> <span class="s">"Mr. "</span> <span class="o">+</span> <span class="n">name</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">Message</span> <span class="k">from</span> <span class="n">SetName</span><span class="p">()</span> <span class="n">Function</span><span class="o">!</span>
+<span class="n">Message</span> <span class="k">from</span> <span class="n">GetName</span><span class="p">()</span> <span class="n">Function</span><span class="o">!</span>
+<span class="n">Mr</span><span class="p">.</span> <span class="n">Mahmoud</span> <span class="n">Fayed</span>
+<span class="n">Message</span> <span class="k">from</span> <span class="n">SetName</span><span class="p">()</span> <span class="n">Function</span><span class="o">!</span>
+<span class="n">Message</span> <span class="k">from</span> <span class="n">GetName</span><span class="p">()</span> <span class="n">Function</span><span class="o">!</span>
+<span class="n">Mr</span><span class="p">.</span> <span class="n">Ahmed</span> <span class="n">Fayed</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="index-5">
+<span id="id4"></span><h2>プライベート属性とメソッド<a class="headerlink" href="#index-5" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>クラスの本体内では private キーワードの後にプライベートな属性とメソッドを定義できます。</p>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">o1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">person</span> <span class="p">{</span>
+ <span class="n">name</span> <span class="o">=</span> <span class="s">"Test"</span>
+ <span class="n">age</span> <span class="o">=</span> <span class="mi">20</span>
+ <span class="n">print</span><span class="p">()</span>
+ <span class="n">o1</span><span class="p">.</span><span class="n">printsalary</span><span class="p">()</span>
+<span class="p">}</span>
+
+<span class="k">try</span>
+ <span class="k">see</span> <span class="n">o1</span><span class="p">.</span><span class="n">salary</span>
+<span class="k">catch</span>
+ <span class="k">see</span> <span class="n">cCatchError</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">done</span>
+
+<span class="k">try</span>
+ <span class="n">o1</span><span class="p">.</span><span class="n">increasesalary</span><span class="p">(</span><span class="mi">1000</span><span class="p">)</span>
+<span class="k">catch</span>
+ <span class="k">see</span> <span class="n">cCatchError</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">done</span>
+
+<span class="k">Class</span> <span class="n">Person</span>
+
+ <span class="n">name</span> <span class="n">age</span>
+
+ <span class="k">func</span> <span class="n">print</span>
+ <span class="k">see</span> <span class="s">"Name : "</span> <span class="o">+</span> <span class="n">name</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span>
+ <span class="s">"Age : "</span> <span class="o">+</span> <span class="n">age</span> <span class="o">+</span> <span class="n">nl</span>
+
+ <span class="k">func</span> <span class="n">printsalary</span>
+ <span class="k">see</span> <span class="s">"Salary : "</span> <span class="o">+</span> <span class="n">salary</span> <span class="o">+</span> <span class="n">nl</span>
+
+ <span class="n">private</span>
+
+ <span class="n">salary</span> <span class="o">=</span> <span class="mi">15000</span>
+
+ <span class="k">func</span> <span class="n">increasesalary</span> <span class="n">x</span>
+ <span class="n">salary</span> <span class="o">+=</span> <span class="n">x</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">Name</span> <span class="p">:</span> <span class="n">Test</span>
+<span class="n">Age</span> <span class="p">:</span> <span class="mi">20</span>
+<span class="n">Salary</span> <span class="p">:</span> <span class="mi">15000</span>
+<span class="n">Error</span> <span class="p">(</span><span class="n">R27</span><span class="p">)</span> <span class="p">:</span> <span class="n">Using</span> <span class="n">private</span> <span class="n">attribute</span> <span class="k">from</span> <span class="n">outside</span> <span class="n">the</span> <span class="k">class</span> <span class="p">:</span> <span class="n">salary</span>
+<span class="n">Error</span> <span class="p">(</span><span class="n">R26</span><span class="p">)</span> <span class="p">:</span> <span class="n">Calling</span> <span class="n">private</span> <span class="n">method</span> <span class="k">from</span> <span class="n">outside</span> <span class="n">the</span> <span class="k">class</span> <span class="p">:</span> <span class="n">increasesalary</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="index-6">
+<span id="id5"></span><h2>演算子のオーバーロード<a class="headerlink" href="#index-6" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>クラスオブジェクトで演算子を使用可能にするには、クラスへ <strong>operator</strong> メソッドを追加します。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">Class</span> <span class="n">ClassName</span>
+
+ <span class="p">...</span>
+
+ <span class="k">Func</span> <span class="n">operator</span> <span class="n">cOperator</span><span class="p">,</span><span class="n">Para</span>
+
+ <span class="p">...</span>
+</pre></div>
+</div>
+<p>関数の演算子は二種類の仮引数を扱います。一つ目は演算子を、二つ目は演算子の後にある第二仮引数を意味します。</p>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">o1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">point</span> <span class="p">{</span> <span class="n">x</span> <span class="o">=</span> <span class="mi">10</span> <span class="n">y</span> <span class="o">=</span> <span class="mi">10</span> <span class="n">print</span><span class="p">(</span><span class="s">"P1 : "</span><span class="p">)</span> <span class="p">}</span>
+<span class="n">o2</span> <span class="o">=</span> <span class="k">new</span> <span class="n">point</span> <span class="p">{</span> <span class="n">x</span> <span class="o">=</span> <span class="mi">20</span> <span class="n">y</span> <span class="o">=</span> <span class="mi">40</span> <span class="n">print</span><span class="p">(</span><span class="s">"P2 : "</span><span class="p">)</span> <span class="p">}</span>
+
+<span class="n">o3</span> <span class="o">=</span> <span class="n">o1</span> <span class="o">+</span> <span class="n">o2</span>
+<span class="n">o3</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">"P1+P2 : "</span><span class="p">)</span>
+
+<span class="k">class</span> <span class="n">point</span> <span class="n">x</span> <span class="n">y</span>
+
+ <span class="k">func</span> <span class="n">operator</span> <span class="n">cOperator</span><span class="p">,</span><span class="n">Para</span>
+ <span class="n">result</span> <span class="o">=</span> <span class="k">new</span> <span class="n">point</span>
+ <span class="k">switch</span> <span class="n">cOperator</span>
+ <span class="k">on</span> <span class="s">"+"</span>
+ <span class="n">result</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">x</span> <span class="o">+</span> <span class="n">Para</span><span class="p">.</span><span class="n">x</span>
+ <span class="n">result</span><span class="p">.</span><span class="n">y</span> <span class="o">=</span> <span class="n">y</span> <span class="o">+</span> <span class="n">Para</span><span class="p">.</span><span class="n">y</span>
+ <span class="k">on</span> <span class="s">"-"</span>
+ <span class="n">result</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">x</span> <span class="o">-</span> <span class="n">Para</span><span class="p">.</span><span class="n">x</span>
+ <span class="n">result</span><span class="p">.</span><span class="n">y</span> <span class="o">=</span> <span class="n">y</span> <span class="o">-</span> <span class="n">Para</span><span class="p">.</span><span class="n">y</span>
+ <span class="k">off</span>
+ <span class="k">return</span> <span class="n">result</span>
+
+ <span class="k">func</span> <span class="n">print</span> <span class="n">cPoint</span>
+ <span class="k">see</span> <span class="n">cPoint</span> <span class="o">+</span> <span class="s">"X : "</span> <span class="o">+</span> <span class="n">x</span> <span class="o">+</span> <span class="s">" Y : "</span> <span class="o">+</span> <span class="n">y</span> <span class="o">+</span> <span class="n">nl</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">P1</span> <span class="p">:</span> <span class="n">X</span> <span class="p">:</span> <span class="mi">10</span> <span class="n">Y</span> <span class="p">:</span> <span class="mi">10</span>
+<span class="n">P2</span> <span class="p">:</span> <span class="n">X</span> <span class="p">:</span> <span class="mi">20</span> <span class="n">Y</span> <span class="p">:</span> <span class="mi">40</span>
+<span class="n">P1</span><span class="o">+</span><span class="n">P2</span> <span class="p">:</span> <span class="n">X</span> <span class="p">:</span> <span class="mi">30</span> <span class="n">Y</span> <span class="p">:</span> <span class="mi">50</span>
+</pre></div>
+</div>
+<p>この用例は stdlib.ring にある List クラスからの引用です。</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">Func</span> <span class="n">operator</span> <span class="n">cOperator</span><span class="p">,</span><span class="n">Para</span>
+ <span class="n">result</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">list</span>
+ <span class="k">switch</span> <span class="n">cOperator</span>
+ <span class="k">on</span> <span class="s">"+"</span>
+ <span class="k">if</span> <span class="n">isobject</span><span class="p">(</span><span class="n">para</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">t</span> <span class="k">in</span> <span class="n">Para</span><span class="p">.</span><span class="n">vValue</span>
+ <span class="n">vValue</span> <span class="o">+</span> <span class="n">t</span>
+ <span class="k">next</span>
+ <span class="k">but</span> <span class="n">islist</span><span class="p">(</span><span class="n">para</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">t</span> <span class="k">in</span> <span class="n">Para</span>
+ <span class="n">vValue</span> <span class="o">+</span> <span class="n">t</span>
+ <span class="k">next</span>
+ <span class="k">ok</span>
+ <span class="k">on</span> <span class="s">"len"</span>
+ <span class="k">return</span> <span class="n">len</span><span class="p">(</span> <span class="n">vValue</span> <span class="p">)</span>
+ <span class="k">on</span> <span class="s">"[]"</span>
+ <span class="k">return</span> <span class="o">&</span><span class="n">vValue</span><span class="o">[</span><span class="n">para</span><span class="o">]</span>
+ <span class="k">off</span>
+ <span class="k">return</span> <span class="n">result</span>
+</pre></div>
+</div>
+<p>“len” 演算子は制御構造 (for in) で使用されます。</p>
+<p>“[]” 演算子はリスト項目のアクセスをするときに使用されます。
+この場合、 & 演算子は数値による参照で文字列などの項目の値を返すときに使用します。
+よって、項目へアクセスするときに項目の更新ができます。</p>
+<p>用例2</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">func</span> <span class="n">main</span>
+
+<span class="k">See</span> <span class="s">"----1"</span><span class="o">+</span><span class="n">nl</span>
+ <span class="n">a1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">BigNumber</span><span class="p">(</span> <span class="s">"123"</span> <span class="p">)</span>
+ <span class="n">a2</span> <span class="o">=</span> <span class="k">new</span> <span class="n">BigNumber</span><span class="p">(</span> <span class="s">"456"</span> <span class="p">)</span>
+ <span class="n">a3</span> <span class="o">=</span> <span class="k">new</span> <span class="n">BigNumber</span><span class="p">(</span> <span class="s">"789"</span> <span class="p">)</span>
+<span class="k">See</span> <span class="n">nl</span><span class="o">+</span><span class="s">"----2"</span><span class="o">+</span><span class="n">nl</span>
+ <span class="n">a1</span><span class="p">.</span><span class="n">print</span><span class="p">()</span>
+ <span class="n">a2</span><span class="p">.</span><span class="n">print</span><span class="p">()</span>
+ <span class="n">a3</span><span class="p">.</span><span class="n">print</span><span class="p">()</span>
+<span class="k">See</span> <span class="n">nl</span><span class="o">+</span><span class="s">"----3"</span><span class="o">+</span><span class="n">nl</span>
+ <span class="n">a2</span> <span class="o">=</span> <span class="n">a1</span> <span class="o">+</span> <span class="s">"45"</span>
+<span class="k">See</span> <span class="n">nl</span><span class="o">+</span><span class="s">"----4"</span><span class="o">+</span><span class="n">nl</span>
+ <span class="n">a2</span><span class="p">.</span><span class="n">print</span><span class="p">()</span>
+<span class="k">See</span> <span class="n">nl</span><span class="o">+</span><span class="s">"----5"</span><span class="o">+</span><span class="n">nl</span>
+ <span class="n">a3</span> <span class="o">=</span> <span class="n">a1</span> <span class="o">+</span> <span class="n">a2</span>
+<span class="k">See</span> <span class="n">nl</span><span class="o">+</span><span class="s">"----6"</span><span class="o">+</span><span class="n">nl</span>
+ <span class="n">a3</span><span class="p">.</span><span class="n">print</span><span class="p">()</span>
+<span class="k">See</span> <span class="n">nl</span><span class="o">+</span><span class="s">"----7"</span><span class="o">+</span><span class="n">nl</span>
+
+<span class="sd">###==================================</span>
+<span class="k">Func</span> <span class="n">FuncAdd</span><span class="p">(</span> <span class="n">num1</span><span class="p">,</span> <span class="n">num2</span><span class="p">)</span>
+ <span class="n">Sum</span> <span class="o">=</span> <span class="mi">0</span> <span class="o">+</span> <span class="n">num1</span> <span class="o">+</span> <span class="n">num2</span> <span class="sd">### Para.aData isNumber</span>
+ <span class="n">Sum</span> <span class="o">=</span> <span class="s">""</span> <span class="o">+</span><span class="n">Sum</span> <span class="sd">### Para.adata isString</span>
+<span class="k">return</span> <span class="n">Sum</span> <span class="sd">### クラスからの返値</span>
+<span class="sd">###===================================</span>
+
+<span class="k">class</span> <span class="n">BigNumber</span>
+
+ <span class="sd">### 変数</span>
+ <span class="n">aData</span> <span class="o">=</span> <span class="s">"468"</span>
+
+ <span class="sd">### INIT 関数のデフォルト値</span>
+ <span class="k">func</span> <span class="n">init</span> <span class="n">aPara</span>
+ <span class="o">?</span> <span class="s">"INIT aPara: "</span> <span class="o">?</span> <span class="n">aPara</span>
+ <span class="k">if</span> <span class="n">isString</span><span class="p">(</span><span class="n">aPara</span><span class="p">)</span>
+ <span class="n">aData</span> <span class="o">=</span> <span class="n">aPara</span>
+ <span class="k">else</span>
+ <span class="n">aData</span> <span class="o">=</span> <span class="s">""</span> <span class="o">+</span> <span class="n">aPara</span>
+ <span class="k">ok</span>
+
+ <span class="sd">### そのほかの関数</span>
+ <span class="k">func</span> <span class="n">operator</span> <span class="n">cOperator</span><span class="p">,</span> <span class="n">Para</span>
+ <span class="n">whatType</span> <span class="o">=</span> <span class="n">Type</span><span class="p">(</span><span class="n">Para</span><span class="p">)</span>
+ <span class="o">?</span> <span class="n">nl</span><span class="o">+</span><span class="s">"WhatType-PARA: "</span><span class="o">+</span> <span class="n">whatType</span> <span class="o">?</span> <span class="n">Para</span>
+ <span class="o">?</span> <span class="n">nl</span><span class="o">+</span><span class="s">"Operator: "</span> <span class="o">?</span> <span class="n">cOperator</span> <span class="o">?</span> <span class="n">nl</span><span class="o">+</span><span class="s">"PARA: "</span> <span class="o">?</span> <span class="n">Para</span> <span class="o">?</span> <span class="s">" ______"</span> <span class="o">?</span> <span class="n">nl</span>
+ <span class="k">if</span> <span class="n">whatType</span> <span class="o">=</span> <span class="s">"STRING"</span>
+ <span class="n">dataInfo</span> <span class="o">=</span> <span class="n">Para</span>
+ <span class="o">?</span> <span class="s">"dataInfo String: "</span> <span class="o">?</span> <span class="n">dataInfo</span>
+ <span class="k">but</span> <span class="n">whatType</span> <span class="o">=</span> <span class="s">"NUMBER"</span>
+ <span class="n">datinfo</span> <span class="o">=</span> <span class="s">""</span> <span class="o">+</span> <span class="n">Para</span>
+ <span class="o">?</span> <span class="s">"dataInfo Number: "</span> <span class="o">?</span> <span class="n">dataInfo</span>
+ <span class="k">else</span> <span class="n">whatType</span> <span class="o">=</span> <span class="s">"OBJECT"</span>
+ <span class="n">dataInfo</span> <span class="o">=</span> <span class="s">""</span> <span class="o">+</span> <span class="n">para</span><span class="p">.</span><span class="n">aData</span>
+ <span class="o">?</span> <span class="s">"dataInfo OBJECT: "</span> <span class="o">?</span> <span class="n">dataInfo</span>
+ <span class="k">ok</span>
+ <span class="o">?</span> <span class="s">"dataInfo USING: "</span> <span class="o">?</span> <span class="n">dataInfo</span>
+ <span class="sd">### Para.aData は初めて渡されたときには存在しません (メンバのオブジェクト)。</span>
+ <span class="sd">### "self" が代入されたときの結果は isObject です。</span>
+ <span class="n">result</span> <span class="o">=</span> <span class="n">self</span>
+ <span class="k">switch</span> <span class="n">cOperator</span>
+ <span class="k">on</span> <span class="s">"+"</span>
+ <span class="n">answer</span> <span class="o">=</span> <span class="n">FuncAdd</span><span class="p">(</span> <span class="n">aData</span><span class="p">,</span> <span class="n">dataInfo</span> <span class="p">)</span>
+ <span class="o">?</span> <span class="n">nl</span><span class="o">+</span><span class="s">"AnswerString - FunAdd aData, dataInfo: "</span> <span class="o">?</span> <span class="n">answer</span>
+ <span class="sd">### result = Self はオブジェクトであるため、 aData メンバへオブジェクトを代入します</span>
+ <span class="n">result</span><span class="p">.</span><span class="n">aData</span> <span class="o">=</span> <span class="n">answer</span>
+ <span class="k">off</span>
+ <span class="sd">### Result = Self はオブジェクトです</span>
+ <span class="k">return</span> <span class="n">result</span>
+
+ <span class="k">func</span> <span class="n">print</span>
+ <span class="o">?</span> <span class="n">nl</span><span class="o">+</span><span class="s">"ClassPrint aData: "</span> <span class="o">?</span> <span class="n">aData</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="index-7">
+<span id="id6"></span><h2>継承<a class="headerlink" href="#index-7" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>From キーワードを使用したクラスの定義で別のクラスからクラスを作成できます。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">Class</span> <span class="o"><</span><span class="n">クラス名</span><span class="o">></span> <span class="o">[</span><span class="k">From</span> <span class="o"><</span><span class="n">親クラスの名前</span><span class="o">>]</span>
+</pre></div>
+</div>
+<p>super オブジェクトで子クラスから親クラスのメソッドを呼び出せます。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">func</span> <span class="n">methodname</span>
+ <span class="p">...</span>
+ <span class="n">super</span><span class="p">.</span><span class="n">methodname</span><span class="p">()</span>
+ <span class="p">...</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">Func</span> <span class="n">main</span>
+ <span class="n">e1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Employee</span> <span class="p">{</span>
+ <span class="n">Name</span> <span class="o">=</span> <span class="s">"test"</span>
+ <span class="n">age</span> <span class="o">=</span> <span class="mi">20</span>
+ <span class="n">job</span> <span class="o">=</span> <span class="s">"programmer"</span>
+ <span class="n">salary</span> <span class="o">=</span> <span class="mi">20000000</span>
+ <span class="n">print</span><span class="p">()</span>
+ <span class="p">}</span>
+
+
+<span class="k">Class</span> <span class="n">Human</span>
+ <span class="n">Name</span> <span class="n">Age</span>
+ <span class="k">func</span> <span class="n">print</span>
+ <span class="k">see</span> <span class="s">"Name : "</span> <span class="o">+</span> <span class="n">name</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="s">"Age : "</span> <span class="o">+</span> <span class="n">age</span> <span class="o">+</span> <span class="n">nl</span>
+
+<span class="k">Class</span> <span class="n">Employee</span> <span class="k">from</span> <span class="n">Human</span>
+ <span class="n">Job</span> <span class="n">Salary</span>
+ <span class="k">func</span> <span class="n">print</span>
+ <span class="n">super</span><span class="p">.</span><span class="n">print</span><span class="p">()</span>
+ <span class="k">see</span> <span class="s">"Job : "</span> <span class="o">+</span> <span class="n">job</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="s">"Salary : "</span> <span class="o">+</span> <span class="n">salary</span> <span class="o">+</span> <span class="n">nl</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">Name</span> <span class="p">:</span> <span class="n">test</span>
+<span class="n">Age</span> <span class="p">:</span> <span class="mi">20</span>
+<span class="n">Job</span> <span class="p">:</span> <span class="n">programmer</span>
+<span class="n">Salary</span> <span class="p">:</span> <span class="mi">20000000</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="index-8">
+<span id="id7"></span><h2>動的属性<a class="headerlink" href="#index-8" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>クラス名末尾に命令を記述すると、新しいオブジェクトが作成されたときに実行します。</p>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">o1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">dynamicClass</span>
+<span class="k">see</span> <span class="n">o1</span><span class="p">.</span><span class="n">var5</span> <span class="o">+</span> <span class="n">nl</span> <span class="c"># 5 を出力</span>
+
+<span class="k">Class</span> <span class="n">DynamicClass</span>
+ <span class="k">for</span> <span class="n">x</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">to</span> <span class="mi">10</span>
+ <span class="n">cStr</span> <span class="o">=</span> <span class="s">"var"</span> <span class="o">+</span> <span class="n">x</span> <span class="o">+</span> <span class="s">" = "</span> <span class="o">+</span> <span class="n">x</span>
+ <span class="n">eval</span><span class="p">(</span><span class="n">cStr</span><span class="p">)</span>
+ <span class="k">next</span>
+</pre></div>
+</div>
+<div class="admonition tip">
+<p class="first admonition-title">ちなみに</p>
+<p class="last">前述の用例では var1, var2, ..., var10 は属性として定義されています。</p>
+</div>
+<div class="admonition tip">
+<p class="first admonition-title">ちなみに</p>
+<p class="last">前述の用例における問題は x および cStr が同じ属性として定義されていることです!</p>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">注釈</p>
+<p class="last">文字列内にクラスの定義を記述できます。
+また、 eval() 関数で文字列を実行するとクラスを定義できます。</p>
+</div>
+</div>
+<div class="section" id="index-9">
+<span id="id8"></span><h2>パッケージ<a class="headerlink" href="#index-9" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>このシンタックスでパッケージ (共通の名前によるクラスのグループ) を作成できます。</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">package</span> <span class="n">PackageName</span>
+ <span class="k">Class</span> <span class="n">Class1</span>
+ <span class="p">...</span>
+ <span class="k">Class</span> <span class="n">Class2</span>
+ <span class="p">...</span>
+ <span class="k">Class</span> <span class="n">Class3</span>
+ <span class="p">...</span>
+ <span class="p">...</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">o1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">System</span><span class="p">.</span><span class="n">output</span><span class="p">.</span><span class="n">console</span>
+<span class="n">o1</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">"Hello World"</span><span class="p">)</span>
+
+<span class="n">Package</span> <span class="n">System</span><span class="p">.</span><span class="n">Output</span>
+ <span class="k">Class</span> <span class="n">Console</span>
+ <span class="k">Func</span> <span class="n">Print</span> <span class="n">cText</span>
+ <span class="k">see</span> <span class="n">cText</span> <span class="o">+</span> <span class="n">nl</span>
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">注釈</p>
+<p class="last">パッケージ名にドット演算子を使えます。</p>
+</div>
+<p>パッケージ.クラス名 (PackageName.ClassName) という長い名前を入力する代わりに import 命令を使えます。</p>
+<p>パッケージをインポートする場合は、このパッケージを指定のクラスで直接使えます。</p>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">import</span> <span class="n">system</span><span class="p">.</span><span class="n">output</span>
+<span class="n">o1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">console</span> <span class="p">{</span>
+ <span class="n">print</span><span class="p">(</span><span class="s">"Hello World"</span><span class="p">)</span>
+<span class="p">}</span>
+<span class="n">Package</span> <span class="n">System</span><span class="p">.</span><span class="n">Output</span>
+ <span class="k">Class</span> <span class="n">Console</span>
+ <span class="k">Func</span> <span class="n">Print</span> <span class="n">cText</span>
+ <span class="k">see</span> <span class="n">cText</span> <span class="o">+</span> <span class="n">nl</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="index-10">
+<span id="id9"></span><h2>オブジェクトの表示<a class="headerlink" href="#index-10" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>see 命令はオブジェクトの状態 (属性と値) を表示します。</p>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">see</span> <span class="k">new</span> <span class="n">point</span> <span class="p">{</span> <span class="n">x</span><span class="o">=</span><span class="mi">10</span> <span class="n">y</span><span class="o">=</span><span class="mi">20</span> <span class="n">z</span><span class="o">=</span><span class="mi">30</span> <span class="p">}</span>
+<span class="k">class</span> <span class="n">point</span> <span class="n">x</span> <span class="n">y</span> <span class="n">z</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">x</span><span class="p">:</span> <span class="mf">10.000000</span>
+<span class="n">y</span><span class="p">:</span> <span class="mf">20.000000</span>
+<span class="n">z</span><span class="p">:</span> <span class="mf">30.000000</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="find">
+<span id="index-11"></span><h2>Find() とオブジェクトのリスト<a class="headerlink" href="#find" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>Find() 関数はオブジェクトのリスト内部を検索します。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">Find</span><span class="p">(</span><span class="kt">List</span><span class="p">,</span><span class="n">ItemValue</span><span class="p">,</span><span class="n">nColumn</span><span class="p">,</span><span class="n">cAttribute</span><span class="p">)</span> <span class="o">---></span> <span class="n">項目のインデックス</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">myList1</span> <span class="o">=</span> <span class="o">[</span><span class="k">new</span> <span class="n">Company</span> <span class="p">{</span><span class="n">position</span><span class="o">=</span><span class="mi">3</span> <span class="n">name</span><span class="o">=</span><span class="s">"Mahmoud"</span> <span class="n">symbol</span><span class="o">=</span><span class="s">"MHD"</span><span class="p">},</span>
+ <span class="k">new</span> <span class="n">Company</span> <span class="p">{</span><span class="n">position</span><span class="o">=</span><span class="mi">2</span> <span class="n">name</span><span class="o">=</span><span class="s">"Bert"</span> <span class="n">symbol</span><span class="o">=</span><span class="s">"BRT"</span><span class="p">},</span>
+ <span class="k">new</span> <span class="n">Company</span> <span class="p">{</span><span class="n">position</span><span class="o">=</span><span class="mi">1</span> <span class="n">name</span><span class="o">=</span><span class="s">"Ring"</span> <span class="n">symbol</span><span class="o">=</span><span class="s">"RNG"</span><span class="p">}</span>
+ <span class="o">]</span>
+
+<span class="k">see</span> <span class="n">find</span><span class="p">(</span><span class="n">mylist1</span><span class="p">,</span><span class="s">"Bert"</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">"name"</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="n">find</span><span class="p">(</span><span class="n">mylist1</span><span class="p">,</span><span class="s">"Ring"</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">"name"</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="n">find</span><span class="p">(</span><span class="n">mylist1</span><span class="p">,</span><span class="s">"Mahmoud"</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">"name"</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="n">find</span><span class="p">(</span><span class="n">mylist1</span><span class="p">,</span><span class="s">"RNG"</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">"symbol"</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="n">find</span><span class="p">(</span><span class="n">mylist1</span><span class="p">,</span><span class="s">"MHD"</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">"symbol"</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="n">find</span><span class="p">(</span><span class="n">mylist1</span><span class="p">,</span><span class="s">"BRT"</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">"symbol"</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="n">find</span><span class="p">(</span><span class="n">mylist1</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">"position"</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="n">find</span><span class="p">(</span><span class="n">mylist1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">"position"</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="s">"Other"</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="n">find</span><span class="p">(</span><span class="n">mylist1</span><span class="p">,</span><span class="s">"test"</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">"name"</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="n">find</span><span class="p">(</span><span class="n">mylist1</span><span class="p">,</span><span class="s">"test"</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="s">"name"</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="n">find</span><span class="p">(</span><span class="n">mylist1</span><span class="p">,</span><span class="s">"test"</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="s">"name"</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+
+<span class="k">class</span> <span class="n">company</span> <span class="n">position</span> <span class="n">name</span> <span class="n">symbol</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="mi">2</span>
+<span class="mi">3</span>
+<span class="mi">1</span>
+<span class="mi">3</span>
+<span class="mi">1</span>
+<span class="mi">2</span>
+<span class="mi">1</span>
+<span class="mi">3</span>
+<span class="k">Other</span>
+<span class="mi">0</span>
+<span class="mi">0</span>
+<span class="mi">0</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="sort">
+<span id="index-12"></span><h2>Sort() とオブジェクトのリスト<a class="headerlink" href="#sort" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>Sort() 関数はオブジェクトの属性に基づきオブジェクトのリストを整列します。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">Sort</span><span class="p">(</span><span class="kt">List</span><span class="p">,</span><span class="n">nColumn</span><span class="p">,</span><span class="n">cAttribute</span><span class="p">)</span> <span class="o">---></span> <span class="n">オブジェクトの属性に基づいて整列されたリスト</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">myList1</span> <span class="o">=</span> <span class="o">[</span>
+ <span class="k">new</span> <span class="n">Company</span> <span class="p">{</span><span class="n">position</span><span class="o">=</span><span class="mi">3</span> <span class="n">name</span><span class="o">=</span><span class="s">"Mahmoud"</span> <span class="n">symbol</span><span class="o">=</span><span class="s">"MHD"</span><span class="p">},</span>
+ <span class="k">new</span> <span class="n">Company</span> <span class="p">{</span><span class="n">position</span><span class="o">=</span><span class="mi">2</span> <span class="n">name</span><span class="o">=</span><span class="s">"Bert"</span> <span class="n">symbol</span><span class="o">=</span><span class="s">"BRT"</span><span class="p">},</span>
+ <span class="k">new</span> <span class="n">Company</span> <span class="p">{</span><span class="n">position</span><span class="o">=</span><span class="mi">8</span> <span class="n">name</span><span class="o">=</span><span class="s">"Charlie"</span> <span class="n">symbol</span><span class="o">=</span><span class="s">"CHR"</span><span class="p">},</span>
+ <span class="k">new</span> <span class="n">Company</span> <span class="p">{</span><span class="n">position</span><span class="o">=</span><span class="mi">6</span> <span class="n">name</span><span class="o">=</span><span class="s">"Easy"</span> <span class="n">symbol</span><span class="o">=</span><span class="s">"FEAS"</span><span class="p">},</span>
+ <span class="k">new</span> <span class="n">Company</span> <span class="p">{</span><span class="n">position</span><span class="o">=</span><span class="mi">7</span> <span class="n">name</span><span class="o">=</span><span class="s">"Fox"</span> <span class="n">symbol</span><span class="o">=</span><span class="s">"EFOX"</span><span class="p">},</span>
+ <span class="k">new</span> <span class="n">Company</span> <span class="p">{</span><span class="n">position</span><span class="o">=</span><span class="mi">5</span> <span class="n">name</span><span class="o">=</span><span class="s">"Dog"</span> <span class="n">symbol</span><span class="o">=</span><span class="s">"GDOG"</span><span class="p">},</span>
+ <span class="k">new</span> <span class="n">Company</span> <span class="p">{</span><span class="n">position</span><span class="o">=</span><span class="mi">4</span> <span class="n">name</span><span class="o">=</span><span class="s">"George"</span> <span class="n">symbol</span><span class="o">=</span><span class="s">"DGRG"</span><span class="p">},</span>
+ <span class="k">new</span> <span class="n">Company</span> <span class="p">{</span><span class="n">position</span><span class="o">=</span><span class="mi">1</span> <span class="n">name</span><span class="o">=</span><span class="s">"Ring"</span> <span class="n">symbol</span><span class="o">=</span><span class="s">"RNG"</span><span class="p">}</span>
+ <span class="o">]</span>
+
+<span class="k">see</span> <span class="n">sort</span><span class="p">(</span><span class="n">mylist1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">"name"</span><span class="p">)</span>
+<span class="k">see</span> <span class="n">copy</span><span class="p">(</span><span class="s">"*"</span><span class="p">,</span><span class="mi">70</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="n">sort</span><span class="p">(</span><span class="n">mylist1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">"symbol"</span><span class="p">)</span>
+<span class="k">see</span> <span class="n">copy</span><span class="p">(</span><span class="s">"*"</span><span class="p">,</span><span class="mi">70</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="n">sort</span><span class="p">(</span><span class="n">mylist1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="s">"position"</span><span class="p">)</span>
+
+<span class="k">class</span> <span class="n">company</span> <span class="n">position</span> <span class="n">name</span> <span class="n">symbol</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">position</span><span class="p">:</span> <span class="mf">2.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Bert</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">BRT</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">8.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Charlie</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">CHR</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">5.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Dog</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">GDOG</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">6.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Easy</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">FEAS</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">7.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Fox</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">EFOX</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">4.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">George</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">DGRG</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">3.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Mahmoud</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">MHD</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">1.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Ring</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">RNG</span>
+<span class="o">**********************************************************************</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">2.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Bert</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">BRT</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">8.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Charlie</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">CHR</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">4.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">George</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">DGRG</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">7.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Fox</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">EFOX</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">6.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Easy</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">FEAS</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">5.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Dog</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">GDOG</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">3.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Mahmoud</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">MHD</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">1.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Ring</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">RNG</span>
+<span class="o">**********************************************************************</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">1.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Ring</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">RNG</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">2.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Bert</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">BRT</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">3.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Mahmoud</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">MHD</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">4.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">George</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">DGRG</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">5.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Dog</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">GDOG</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">6.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Easy</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">FEAS</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">7.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Fox</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">EFOX</span>
+<span class="n">position</span><span class="p">:</span> <span class="mf">8.000000</span>
+<span class="n">name</span><span class="p">:</span> <span class="n">Charlie</span>
+<span class="n">symbol</span><span class="p">:</span> <span class="n">CHR</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="self-self">
+<span id="index-13"></span><h2>Self.属性 と Self.メソッド() の用法<a class="headerlink" href="#self-self" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>クラスの範囲内 (クラス名末尾、およびメソッドの前) ならびに、クラスのメソッドは Self.属性 と Self.メソッド() を使えます。</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">Class</span> <span class="n">Point</span>
+ <span class="n">self</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="mi">10</span>
+ <span class="n">self</span><span class="p">.</span><span class="n">y</span> <span class="o">=</span> <span class="mi">20</span>
+ <span class="n">self</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="mi">30</span>
+ <span class="k">func</span> <span class="n">print</span>
+ <span class="k">see</span> <span class="n">self</span><span class="p">.</span><span class="n">x</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">self</span><span class="p">.</span><span class="n">y</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">self</span><span class="p">.</span><span class="n">z</span> <span class="o">+</span> <span class="n">nl</span>
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">注釈</p>
+<p class="last">クラスの属性を定義するために、クラスの範囲内で Self.属性 を使うとクラスの属性はグローバル変数との名前衝突から保護されます。</p>
+</div>
+<div class="admonition tip">
+<p class="first admonition-title">ちなみに</p>
+<p class="last">Self.属性 でクラスの属性を定義するときに、同名のグローバル変数が存在する場合は属性の定義は行われずにグローバル変数が使用されます。</p>
+</div>
+<p>グローバル変数名と属性名の間で起こる名前衝突については「スコープの規則」をご確認ください。</p>
+<p>これは何が起きているのですか?</p>
+<p>理由</p>
+<ul class="simple">
+<li>クラスの範囲内ではグローバル変数へアクセスできます。</li>
+<li>変数定義前に Ring は変数の検索を行い、見つかれば使用します。</li>
+</ul>
+<div class="admonition note">
+<p class="first admonition-title">注釈</p>
+<p class="last">グローバル変数を避けるために Main 関数の使用、および名前を $ から始めてください。</p>
+</div>
+<div class="admonition tip">
+<p class="first admonition-title">ちなみに</p>
+<p class="last">大規模プログラムでは Self.属性 でクラスの保護、およびメンバの定義してください。</p>
+</div>
+</div>
+<div class="section" id="this-this">
+<span id="index-14"></span><h2>This.属性 と This.メソッド() の用法<a class="headerlink" href="#this-this" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>クラス内にあるメソッドはオブジェクトのスコープへ直接的なアクセスできます。
+属性の読み書き、またはメソッドの呼び出しでは Self.属性 あるいは Self.メソッド() の使用は不要です。</p>
+<p>また、括弧 { } でメソッドの内側から別のオブジェクトへアクセスできます。
+この場合は、現在のオブジェクトの有効範囲は括弧内へ変更されます。</p>
+<p>括弧内のクラスの属性、およびメソッドへのアクセスする方法はありますか?</p>
+<p>これは This.属性 と This.メソッド() で実現できます。</p>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">new</span> <span class="n">point</span>
+
+<span class="k">class</span> <span class="n">point</span>
+ <span class="n">x</span><span class="o">=</span><span class="mi">10</span> <span class="n">y</span><span class="o">=</span><span class="mi">20</span> <span class="n">z</span><span class="o">=</span><span class="mi">30</span>
+ <span class="n">print</span><span class="p">()</span>
+ <span class="k">func</span> <span class="n">print</span>
+ <span class="k">new</span> <span class="n">UI</span> <span class="p">{</span>
+ <span class="n">display</span><span class="p">(</span><span class="n">this</span><span class="p">.</span><span class="n">x</span><span class="p">,</span><span class="n">this</span><span class="p">.</span><span class="n">y</span><span class="p">,</span><span class="n">this</span><span class="p">.</span><span class="n">z</span><span class="p">)</span>
+ <span class="p">}</span>
+
+<span class="k">Class</span> <span class="n">UI</span>
+ <span class="k">func</span> <span class="n">display</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span>
+ <span class="k">see</span> <span class="n">x</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">y</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">z</span> <span class="o">+</span> <span class="n">nl</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="this-self">
+<span id="index-15"></span><h2>クラス範囲で This を Self として使用<a class="headerlink" href="#this-self" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>クラス範囲とはクラス名の後、およびすべてのメソッドの前に出現する範囲のことです。</p>
+<p>クラス範囲で This を Self として使えます。</p>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">func</span> <span class="n">main</span>
+
+ <span class="n">o1</span> <span class="o">=</span> <span class="k">new</span> <span class="n">program</span> <span class="p">{</span>
+ <span class="n">test</span><span class="p">()</span>
+ <span class="p">}</span>
+
+ <span class="o">?</span> <span class="n">o1</span>
+
+<span class="k">class</span> <span class="n">program</span>
+
+ <span class="n">this</span><span class="p">.</span><span class="n">name</span> <span class="o">=</span> <span class="s">"My Application"</span>
+ <span class="n">this</span><span class="p">.</span><span class="n">version</span> <span class="o">=</span> <span class="s">"1.0"</span>
+ <span class="o">?</span> <span class="n">name</span> <span class="o">?</span> <span class="n">version</span>
+
+ <span class="k">func</span> <span class="n">test</span>
+ <span class="o">?</span> <span class="s">"Name = "</span> <span class="o">+</span> <span class="n">name</span>
+ <span class="o">?</span> <span class="s">"Version = "</span> <span class="o">+</span> <span class="n">version</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-none"><div class="highlight"><pre>My Application
+1.0
+Name = My Application
+Version = 1.0
+name: My Application
+version: 1.0
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">注釈</p>
+<p class="last">弓括弧は現在の有効なオブジェクトを変更しますが、This はクラスを指したままにできます。</p>
+</div>
+<div class="admonition tip">
+<p class="first admonition-title">ちなみに</p>
+<p class="last">This と Self には違いがあります。 Self が指している現在の有効なオブジェクトは弓括弧で変更できます。</p>
+</div>
+<p>ほとんどの場合、クラス範囲で This あるいは Self を使う必要はないことを覚えていてください。</p>
+<p>このように記述することもできます。</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">class</span> <span class="n">program</span> <span class="n">name</span> <span class="n">version</span>
+</pre></div>
+</div>
+<p>または、</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">class</span> <span class="n">program</span> <span class="n">name</span><span class="o">=</span><span class="s">"My Application"</span> <span class="n">version</span><span class="o">=</span><span class="s">"1.0"</span>
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">注釈</p>
+<p class="last">同名で定義されたグローバル変数との衝突を回避するために、クラス範囲で This あるいは Self を使用します。</p>
+</div>
+</div>
+<div class="section" id="index-16">
+<span id="id10"></span><h2>オブジェクト属性のデフォルト値<a class="headerlink" href="#index-16" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>オブジェクト属性のデフォルト値は NULL です。</p>
+<p>Ring では、 NULL 値は空文字列または “NULL” を有する文字列です。</p>
+<p>isNULL() 関数で NULL 値を確認できます。</p>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">oProgram</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Program</span>
+<span class="o">?</span> <span class="n">oProgram</span><span class="p">.</span><span class="n">name</span>
+<span class="o">?</span> <span class="n">oProgram</span><span class="p">.</span><span class="n">version</span>
+<span class="o">?</span> <span class="n">isNULL</span><span class="p">(</span><span class="n">oProgram</span><span class="p">.</span><span class="n">name</span><span class="p">)</span>
+<span class="o">?</span> <span class="n">isNULL</span><span class="p">(</span><span class="n">oProgram</span><span class="p">.</span><span class="n">version</span><span class="p">)</span>
+<span class="n">oProgram</span> <span class="p">{</span> <span class="n">name</span><span class="o">=</span><span class="s">"My Application"</span> <span class="n">version</span><span class="o">=</span><span class="s">"1.0"</span> <span class="p">}</span>
+<span class="o">?</span> <span class="n">isNULL</span><span class="p">(</span><span class="n">oProgram</span><span class="p">.</span><span class="n">name</span><span class="p">)</span>
+<span class="o">?</span> <span class="n">isNULL</span><span class="p">(</span><span class="n">oProgram</span><span class="p">.</span><span class="n">version</span><span class="p">)</span>
+<span class="o">?</span> <span class="n">oProgram</span>
+
+<span class="k">class</span> <span class="n">program</span>
+ <span class="n">name</span>
+ <span class="n">version</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-none"><div class="highlight"><pre>NULL
+NULL
+1
+1
+0
+0
+name: My Application
+version: 1.0
+</pre></div>
+</div>
+</div>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+ <div class="sphinxsidebarwrapper"><h3>ページの内容</h3>
+<ul>
+<li><a class="reference internal" href="#">オブジェクト指向プログラミング (OOP)</a><ul>
+<li><a class="reference internal" href="#index-1">クラスとオブジェクト</a></li>
+<li><a class="reference internal" href="#index-2">括弧を用いたオブジェクトへのアクセス</a></li>
+<li><a class="reference internal" href="#index-3">コンポジション</a></li>
+<li><a class="reference internal" href="#setter-getter">Setter と Getter</a></li>
+<li><a class="reference internal" href="#index-5">プライベート属性とメソッド</a></li>
+<li><a class="reference internal" href="#index-6">演算子のオーバーロード</a></li>
+<li><a class="reference internal" href="#index-7">継承</a></li>
+<li><a class="reference internal" href="#index-8">動的属性</a></li>
+<li><a class="reference internal" href="#index-9">パッケージ</a></li>
+<li><a class="reference internal" href="#index-10">オブジェクトの表示</a></li>
+<li><a class="reference internal" href="#find">Find() とオブジェクトのリスト</a></li>
+<li><a class="reference internal" href="#sort">Sort() とオブジェクトのリスト</a></li>
+<li><a class="reference internal" href="#self-self">Self.属性 と Self.メソッド() の用法</a></li>
+<li><a class="reference internal" href="#this-this">This.属性 と This.メソッド() の用法</a></li>
+<li><a class="reference internal" href="#this-self">クラス範囲で This を Self として使用</a></li>
+<li><a class="reference internal" href="#index-16">オブジェクト属性のデフォルト値</a></li>
+</ul>
+</li>
+</ul>
+
+
+ <h4>前のトピックへ</h4>
+ <p class="topless"><a href="secfunc.html"
+ title="前の章へ">セキュリティとインターネット関数</a></p>
+ <h4>次のトピックへ</h4>
+ <p class="topless"><a href="fp.html"
+ title="次の章へ">関数型プログラミング</a></p>
+ <div role="note" aria-label="source link">
+ <h3>このページ</h3>
+ <ul class="this-page-menu">
+ <li><a href="_sources/oop.txt"
+ rel="nofollow">ソースコードを表示</a></li>
+ </ul>
+ </div>
+
+<form action="search.html" method="get">
+ <input type="text" name="q" placeholder="Search" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+</form>
+
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+<footer class="footer">
+ <p class="pull-right">
+ <a href="_sources/oop.txt"
+ rel="nofollow">Page Source</a>
+ <a href="#">Back to Top</a></p>
+ <p>
+ © Copyright 2016-2020, Ring Team.<br/>
+ Created using <a href="http://www.sphinx-doc.org/en/stable/">Sphinx</a> 1.3.6. / astropy-sphinx-theme 1.1 (isVowel)
+ </p>
+</footer>
+ </body>
+</html>
\ No newline at end of file