.. index:: 
	single: Ring 1.6 の変更履歴; はじめに

=======================
Ring 1.6 の変更履歴
=======================

Ring 1.6 公開版の新機能と変更点を学びます。

.. index:: 
	pair: Ring 1.6 の変更履歴; 新機能と変更リスト

新機能と変更リスト
==================

Ring 1.6 の新機能！

* Employee アプリケーション
* 新ツール : Ring2EXE
* Android 版 Ring の改善
* 新ツール : Folder2qrc
* Ring ビルド用スクリプトの改善
* RingConsoleColors 拡張機能
* RingMurmurHash 拡張機能
* Ring ノートパッドの改善
* RingQt の改善
* StdLib の改善
* Ring VM の改善
* RingREPL の改善
* char(9) の代わりに Tab を使うには
* CR をキャリッジリターンとして使うには
* ! 演算子を not として使うには
* && および || 演算子の用法
* 式の表示後に ? で改行するには

.. index:: 
	pair: Ring 1.6 の変更履歴; Employee アプリケーション

Employee アプリケーション
=========================

Employee アプリケーションを ring/applications へ追加しました。

開発者: アーメド・ハッサウナ

.. image:: empapp.png
	:alt: Employee サンプル

.. index:: 
	pair: Ring 1.6 の変更履歴; 新ツール - Ring2EXE

新ツール - Ring2EXE
===================

現在は、スグレモノである RingEXE (Ring 1.6 以降) があります。

Ring2EXE (Ring にて記述) で Windows, Linux および macOS 用のアプリケーションを手軽に配布できます。

詳細情報は本取扱説明書の「Ring2EXE による Ring アプリケーションの配布方法」をご確認ください。


.. index:: 
	pair: Ring 1.6 の変更履歴; Android 版 Ring の改善

Android 版 Ring の改善
======================

複数のソースコードファイル (\*.ring) ではなく Ring オブジェクトファイル (\*.ringo)
を使用するために Android 版 Ring (RingQt の使用) を更新しました。

このスクリーンショットは Android 版 Cards ゲームのビルドに関する用例です。

cards.ring ではなく cards.ringo を使用します。

大規模プロジェクト構成 (大量の \*.ring ファイル) では、 \*.ringo ファイルのみ使います。

.. image:: cardsqt.png
	:alt: Android 版 Ring の改善

Qt プロジェクトでモバイル用 RingQt アプリケーションの配布準備をするには Ring2EXE を使用してください。

用例①

.. code-block:: ring

	ring2exe cards.ring -dist -mobileqt

用例②

.. code-block:: ring

	ring2exe formdesigner.ring -dist -mobileqt

.. image:: formdesignerandroid.png
	:alt: Android 版フォームデザイナー


.. index:: 
	pair: Ring 1.6 の変更履歴; 新ツール - Folder2qrc

新ツール - Folder2qrc
=====================

大量の画像とファイルから構成されている大規模 RingQt プロジェクトがある場合、
モバイル機器用のアプリケーションの配布時にリソースファイル (\*.qrc) へファイルを必ず追加してください。

Ring 1.6 以降では Folder2qrc ツールにより、一つずつファイルを追加する必要がなくなるので時間の節約になります。

用例:

.. code-block:: bash

	folder2qrc formdesigner.ring

アプリケーションフォルダに移動している間に、メインソースファイルの決定をするために
Folder2qrc は現在のフォルダとサブフォルダにある全てのファイルを確認します。
そして mainfile.ringo の後にリソースファイルを追加します (この用例では formdesigner.ringo です)。

出力ファイル : project.qrc

ファイルを開く、または削除するためにリソースは不要です！

.. index:: 
	pair: Ring 1.6 の変更履歴; Ring ビルド用スクリプトの改善

Ring ビルド用スクリプトの改善
=============================

Ring 1.6 ではソースコードから Ring のビルドを行うためのスクリプトを改善しました。

この更新は 32bit と 64bit システムの Windows, Linux (Ubuntu, Fedora) および macOS で検証済みです。

Windows 用のスクリプトでは Visual Studio のバージョンを基に Visual C/C++ コンパイラを検出するために更新されました。


.. index:: 
	pair: Ring 1.6 の変更履歴; RingConsoleColors 拡張機能

RingConsoleColors 拡張機能
===========================

RingConsoleColors 拡張機能でコンソールアプリケーションの配色を簡単に変更できます。

.. image:: consolecolors.png
	:alt: RingConsoleColors

詳細情報は取扱説明書の RingConsoleColors の章をご確認ください。

.. index:: 
	pair: Ring 1.6 の変更履歴; RingMurmurHash 拡張機能

RingMurmurHash 拡張機能
========================

Ring 1.6 には RingMurmurHash 拡張機能があります！

開発者: ハッサン・アーメド

用例:

.. code-block:: ring

	load "murmurhashlib.ring"

	key = "Ring Language"

	see murmurhash3_x86_32(key, 0, 0) + nl // 実行結果: 1894444853
	see murmurhash3_x86_32(key, 0, 1) + nl // 実行結果: 70eaef35

詳細情報は取扱説明書の RingMurmurHash の章をご確認ください。

.. index:: 
	pair: Ring 1.6 の変更履歴; Ring ノートパッドの改善

Ring ノートパッドの改善
=======================

Ring ノートパッドを更新しました。

(1) アプリケーションの実行時にメインファイルの自動設定 (メインファイルボタンを使用)。

(2) メインファイル - 実行前の自動保存。

(3) GUI アプリケーション実行時 - 実行結果ウィンドウで入力用テキストボックスの使用時はフォーカスを変更しないようにしました。

(4) ボタン、およびオプションからウェブアプリケーションを実行できるようになりました。

.. image:: runwebapp1.png
	:alt: Ring ノートパッド - ウェブアプリケーションの実行 - スクリーンショット 1

Ring 1.6 から Windows ユーザー用に Apache ウェブサーバーが添付されています！

設定は一切不要で指定フォルダからウェブアプリケーションを実行できます。

.. image:: runwebapp2.png
	:alt: Ring ノートパッド - ウェブアプリケーションの実行 - スクリーンショット 2

(5) ツール - オペレーティングシステム - ターミナル (コマンドプロンプト) & ファイルマネージャー (エクスプローラ)

.. image:: rnotetoolsterminal.png
	:alt: Ring ノートパッド - ツール - ターミナル - スクリーンショット 1

これにより、アプリケーションフォルダからコマンドプロンプト、またはエクスプローラを手軽に開くことができます。

.. image:: rnotetoolsterminal2.png
	:alt: Ring ノートパッド - ツール - ターミナル - スクリーンショット 2

(6) 拡張子 \*.sh と \*.batへの対応

(7) 新しいメニュー: 配布

.. image:: rnotedistribute.png
	:alt: Ring ノートパッド - 配布

.. index:: 
	pair: Ring 1.6 の変更履歴; RingQt の改善

RingQt の改善
=============

RingQt を更新しました。

(1) QAllEvents - getkeytext() メソッド

(2) QSQLQuery - exec_2() メソッド

(3) QDockWidget イベント

(4) AppFile() 関数

(5) IsMobile() 関数

(6) QRegion クラス

(7) QCoreApplication クラス


.. index:: 
	pair: Ring 1.6 の変更履歴; StdLib の改善

StdLib の改善
=============

StdLib を更新しました。

(1) Factors() 関数の更新 (表示を行わずに出力を返します)

(2) Palindrome() 関数の更新 (表示を行わずに出力を返します)

(3) stdlibcore.ring で StdLib 関数を使えます (クラスはありません)。

    これはスタンドアローン型のコンソールアプリケーションを作成する場合に便利です。

    stdlib.ring (関数とクラス) は RingLibCurl, RingOpenSSL などのライブラリを読み込みます。


(4) 新しい関数

* SystemSilent(cCommand) : 実行結果を表示せずにシステムをコマンド実行します。

* OSCreateOpenFolder(cFolder) : フォルダの作成後に、現在のフォルダを作成した新しいフォルダへ変更します。

* OSCopyFolder(cParentFolder,cFolderNameToCopy) : 現在のディレクトリへフォルダをコピーします。

* OSDeleteFolder(cFolder) : フォルダの削除

* OSCopyFile(cFileName) : 現在のディレクトリへファイルをコピーします。

* OSDeleteFile(cFileName) : ファイルの削除

* OSRenameFile(cOldFileName,cNewFileName) : ファイル名変更

.. index:: 
	pair: Ring 1.6 の変更履歴; Ring VM の改善

Ring VM の改善
==============

Ring VM を更新しました。

(1) 式において getter メソッドの複数使用に対応

(2) This と Self を Setter/Getter メソッドを呼び出さずに Setter/Getter/Normal メソッドで使用できるようにするための対応

(3) TempName() 関数の更新 (コードの改善)

(4) ExeFileName() 関数の更新 (コードの改善)

(5) Private 属性 - クラス範囲における再利用の対応 (Private キーワードの後に)

(6) Ring API : ring_scanner_runobjstring()

(7) ring_state_setvar() 関数

.. index:: 
	pair: Ring 1.6 の変更履歴; RingREPL の改善

RingREPL の改善
===============

RingREPL を更新しました。

(1) RingREPL はコマンドラインの仮引数でスタイルを決定します。

(2) Ring ノートパッドのスタイルに基づき RingREPL のスタイルを設定します。


.. index:: 
	pair: Ring 1.6 の変更履歴; char(9) の代わりに Tab を使うには

char(9) の代わりに Tab を使うには
=================================

Tab 変数は char(9) の代わりに使用するために定義済みです。

用例①:

.. code-block:: ring

	see :one + nl + tab + :two + nl + tab + tab + :three

実行結果:

.. code-block:: none

	one
	        two
	                three

変数を別の値へ変更できます。

用例②:

.. code-block:: ring

	tab = "  "
	see :one + nl + tab + :two + nl + tab + tab + :three

実行結果:

.. code-block:: none

	one
	  two
	    three

.. index:: 
	pair: Ring 1.6 の変更履歴; CR をキャリッジリターンとして使うには

CR をキャリッジリターンとして使うには
=====================================

この用例では、十秒間に同じ行で 1 ～ 10 まで数えます。

.. code-block:: ring

	load "stdlibcore.ring"
	for x = 1 to 10 see x sleep(1) see cr next

.. index:: 
	pair: Ring 1.6 の変更履歴; ! 演算子を not として使うには

! 演算子を not として使うには
=============================

Ring には = と != があります。

しかし、論理演算子には and, or, そして not があります。

さら、 ! 演算子を not として使えます。

用例:

.. code-block:: ring

	if ! false
		see "True!" + nl
	ok

実行結果:

.. code-block:: none

	True!


.. index:: 
	pair: Ring 1.6 の変更履歴; && および || 演算子の用法

&& および || 演算子の用法
=========================

このようなキーワードが Ring の論理演算子としてあります。

* and
* or
* not

また、このような演算子もあります。

* &&
* ||
* !

用例:

.. code-block:: ring

	if one() and two()
		see "Test1 - Fail" + nl
	else
		see "Test1 - Pass" + nl
	ok

	if two() or one()
		see "Test2 - Pass" + nl
	else
		see "Test2 - Fail" + nl
	ok

	if one() && two()
		see "Test3 - Fail" + nl
	else
		see "Test3 - Pass" + nl
	ok

	if two() || one()
		see "Test4 - Pass" + nl
	else
		see "Test4 - Fail" + nl
	ok

	func one return True

	func two return False

実行結果:

.. code-block:: none

	Test1 - Pass
	Test2 - Pass
	Test3 - Pass
	Test4 - Pass

.. index:: 
	pair: Ring 1.6 の変更履歴; ? 演算子で式の表示後に改行するには

? 演算子で式の表示後に改行するには
==================================

式の表示後に改行することは一般的です。これは ? 演算子で実現できます！

用例:

.. code-block:: ring

	? "Hello, World!"
	for x = 1 to 10
		? x
	next

実行結果:

.. code-block:: none

	Hello, World!
	1
	2
	3
	4
	5
	6
	7
	8
	9
	10
