INASOFT 管理人のひとこと


フリーソフトダウンロードサイト「INASOFT」の管理人 矢吹拓也 が日々の「ひとこと」を語るページです。
2021年1月1日より、旧ブログ(blog.inasoft.org)からお引越ししました。
・INASOFT Webサイト: https://www.inasoft.org/
・管理人のふたこと(長文記事/寄稿文): https://www.inasoft.org/talk/
2022年7月下旬より再び本業多忙化してきているため、更新頻度は落ちます。 [2022/7/24 19:32]

目次 | ←前へ / 2026-02-16 00:00

■独自のスクリプトにWHILE文があるからFOR文は不要かなぁと思ってたけどやっぱりFOR文は必要だった

2026年 2月16日(月) 0:00:00



RSSRSS配信中
https://www.inasoft.org/



先日、キーボードシミュレータ ver.2.00.03β用のサンプルスクリプトを書き、動作テストをやっているとき、繰り返し同じ失敗に苛まれました。



whileで繰り返しを書いていると、しょっちゅう、初期化とインクリメントを書き忘れる!

いじくるつくーるのR-Scriptの頃にはFORが存在しました。
ただ、当時は、構文解析と式の評価(実行)を分離することができておらず、C言語のFOR文のように、初期化・評価・インクリメントを1行に書いておいて、必要に応じて実行するようなことができていませんでした。(初期化と共にインクリメントが実行されてしまう。ブロックの実行後にインクリメントすることができない。同時に評価・実行されてしまう)
なので、極めていびつで非直感的な文法になっています。

R-Scriptの頃のFORの書き方があまり好きではなかったので、FR-ScriptではFOR文の搭載を見送っていました。
ただ、今回、初期化とインクリメントを書き忘れるという人間側のバグをしょっちゅう起こしてしまったので、対策を考えたいと思います。というか、FORを搭載しようかと思います。

なお今回、構文解析と式の評価を分けるよう、生成AIが基礎固めをしてくれていましたので、今回はそれの上でFOR文の構築をしようかと思います。
ただ、FR-Scriptでは ; (セミコロン) がコメントの開始と定義されてしまっているため、FORの後ろの括弧の中でセミコロンを使うことができません。

しかし、FR-ScriptにはC言語と違って、カンマ演算子(順次実行し、最後のものを結果として返す)が存在していませんので、; (セミコロン) の代わりに , (カンマ) を使ってFOR文を構築しようかと思います。

for (i=0 , i<10 , ++i) {
TextOut("i = "+i)
}


みたいな感じで。

ちなみに、似たような理由(*1)で条件演算子( (cond_expr) ? true_expr : false_expr の書き方になるやつ。三項演算子ともいう)の実装も見送っていましたが、生成AIの基礎固めのおかげで書きやすくなっているため、FORと同時に実装しようかと思います。

(*1) … R-Scriptでは、(cond_expr)の真偽によらず、true_exprとfalse_exprは共に評価される。(cond_expr)の真偽は、どちらの評価結果が返却値になるかを決めるために利用される。R-Script構築当時は、構文解析と評価を分離できていなかったので、このような仕様になっていた。現在作成中のFR-Scriptでは、C言語と同様に、(cond_expr)の真偽によって、true_exprとfalse_exprのうち選ばれなかった方は、評価自体が行われないようにする。

・・・というわけで、マウスふるふる ver.1.26.06βマウスのお供 ver.1.67.06βキーボードシミュレータ ver.2.00.04βにて、FORと条件演算子を実装しています。

目次 | ←前へ / 2026-02-16 00:00


目次の表示:


ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメールフィードバックまたはX等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。
当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。本ページは公開から1年半後の任意のタイミングで削除される予定です。


- 最近の更新 -



3459987 (+0061)[+0690]

Copyright© 2010-2026 INASOFT