メインコンテンツまでスキップ

SenseTalkについて

SenseTalkは、あなたのコンピュータを制御するための言語です。それは人々が読み、書き、理解するのが容易な英語に似た言語です。SenseTalkを使用する人々は、それが彼らが望むことを行うかどうかを知らないで何かを試みることがあり、それがうまくいくとよく驚いています!

もちろん、コンピュータは知能を持っていません。コンピュータが正確にあなたの指示を理解するためには、それらを明確で曖昧でない方法で述べなければなりません。この理由から、SenseTalkは英語よりも構造化された言語であり、従わなければならないルールがあります。

SenseTalkの紹介

SenseTalkは、あなたのコンピュータの力と能力を驚くほど容易で理解可能な方法で利用するために、コンピュータとのコミュニケーションを可能にします。SenseTalkは、あなたのコンピュータに固有の全範囲の機能にアクセスを提供し、習得と理解が容易であるままです。これは、多くの言葉の背後にある強力な概念を利用することでこれを達成しています。これらの言葉は、コンピュータ産業でバズワードとなっています。

今日の技術用語では:

SenseTalkは非常に高いレベルの、オブジェクト指向の、インタープリタ型のスクリプト言語で、モジュラーで拡張可能なアーキテクチャに基づいています。

では、平易な英語で、それは本当に何を意味するのでしょうか?

SenseTalkは「オブジェクト指向」です。なぜなら、オブジェクトについて考えることは、潜在的に複雑なシステムを説明し、扱うための自然で理解しやすい方法だからです。私たちは毎日、「物」を扱っています。それは電話や水のグラスのような手に取ることができる物、または銀行口座や子供のサッカーのスケジュールのような抽象的な物であってもです。SenseTalkを使用すると、これらの物事を表す「オブジェクト」をコンピュータに作成できます。

SenseTalkは「非常に高水準」な言語とされています。なぜなら、それは非常に少ない単語で多くのことを行うことができるからです。高水準のコマンドはあなたの仕事を容易にします。例えば、あなたが姓のアルファベット順に並べ替えたい名前のリストを持っているとします。低水準のプログラミング言語では、名前の最後のスペースを見つけて姓を見つけるための指示を書き、そして名前をアルファベット順に丁寧に並べ替えるためのさらに多くの指示を書く必要があります。SenseTalkでは、単純に sort the lines of nameList by the last word of each コマンドを与えるだけで済みます。

「インタープリタ型のスクリプト言語」であるSenseTalkは非常に反応が良く、あなたが言語を学び、新しいコマンドを試す際に即時のフィードバックを提供します。あなたはコマンドや部分的なスクリプトをタイプし、すぐにコンピュータに指示を実行させることができます。

そして、SenseTalkの「モジュラーで拡張可能なアーキテクチャ」は、新しいコマンドと関数を追加してSenseTalkができることの範囲を拡張することを可能にします。言語は石に刻まれているわけではなく、あなたのニーズに応じて成長と進化が可能です。基礎となる構造は、コンピュータの機能が進歩し、あなたの知識と理解が成長するにつれて、新たな要求と変化する要求をサポートするように作られています。

簡単に言えば、SenseTalkはあなたがコンピュータに何をしたいのかを伝えるための英語に似た言語です。 あなたは、取り組みたい情報を理解しやすい方法で組織するソフトウェア「オブジェクト」を作成し、それぞれのオブジェクトがどのように振る舞うべきかを説明する「スクリプト」を書くことでこれを行います。

それはある意味、演劇を書くようなものと少し似ています。キャラクターのキャストを作り、彼らにそれぞれの役割を定義し、どのようにさまざまなメッセージに反応すべきかを明示するスクリプトを提供します。しかし、演劇とは違い、スクリプトが実行されるたびに同じシーケンスに従う必要はありません。キャラクター(オブジェクト)は、メッセージの送受信によって互いに、そしてシステムのユーザー(あなた)と相互作用します。

メッセージは、オブジェクトに何をすべきかを伝えるか、情報を提供するかもしれません。メッセージを受け取ったとき、それはその時点でシステム内で何が起こっているかによって、異なる方法で異なる方法で反応することがあります。すべてはオブジェクトのスクリプトが何をすべきかを指示するかによります。各オブジェクトは自分のスクリプト - 従うべき指示のセット - を持っており、指示はSenseTalk言語を使用して書かれます。

SenseTalkは主にEggplant内のスクリプティング言語として使用されますが、SenseTalkはまた独立したスクリプティング言語としても存在します。このマニュアルは、SenseTalk言語をそれが使用される可能性がある任意の環境やホストアプリケーションから別々に説明することを目指しています。

なぜSenseTalkなのか?

ここであなたは思うかもしれません:よく分かりました、それはすべて十分に良さそうですが、既にたくさんのスクリプティング言語が存在します。世界は本当に別の言語を必要としていますか?SenseTalkがどう違うのでしょうか?

それは優れた質問であり、全ての人にとって一つの答えがあるわけではないかもしれません。各言語にはそれぞれの強みと特性があり、言語の異なる特性が異なる人々に訴えるでしょう。おそらく、他の言語と最もSenseTalkを区別するもの - そのユニークな風味を提供するテーマ - は、このセクションの最初の文章で述べられています:SenseTalkは「驚くほど英語に似ています」。

今、一部の人々は「英語に似ている」ということがプログラミング言語にとって利点であるとは必ずしも考えていないかもしれません。英語は冗長であり、その意味が時折あいまいである可能性があります。そのような人々は、より厳密な構文規則を持つより簡潔で正確な言語を好むかもしれません。そうであれば、それでいいのです。

一方で、英語に似た言語は特別な利点を提供します:初心者が学びやすく、経験豊富なユーザーが覚えやすく、そして誰もが読んで理解するのがずっと簡単です。この機能 - 可読性 - は、スクリプトの保守と修正をはるかに簡単にします。

SenseTalkの可読性を他の一部の人気のある言語と比較してみましょう。私たちは、今日の世界で最も広く使用されているスクリプト言語であるPerlとPythonとの比較から始めます。

PerlはWikipediaで「実用的(使いやすく、効率的、完全)であることよりも美しい(小さく、優雅で、最小限)」とされており、暗号化で読みにくいことで有名で、SenseTalkとの極端な対比を通じて明らかにするために役立ちます。これは、Perlの専門家が書いた人気のある本(「Perl Cookbook」、p. 247)からほぼ逐語的に取られたPerlスクリプトの例です。私たちはすぐにそれが何をするのかを説明します。

sysopen(FH, "numfile", O_RDWR|O_CREAT)or die "can’t open numfile: $!";

$num = <FH> || 0; # DO NOT USE "or" HERE!!

seek(FH, 0, 0) or die "can’t rewind numfile: $!";

truncate(FH, 0) or die "can’t truncate numfile: $!";

print FH $num+1, "\n" or die "can’t write numfile: $!";

close(FH) § or die "can’t close numfile: $!";

一方、Pythonは、読みやすさで知られる別の人気のあるスクリプト言語です。これはPythonで書かれた同等のスクリプトです:

file = open("numfile", "r+")

num = int(file.read())

file.seek(0,0)

file.truncate(0)

file.write(str(num+1) + "\n")

file.close()

最後に、同じことを達成するSenseTalkスクリプトがこちらです(これらのスクリプトが何をするのかまだ明確でない場合、これが役立つかもしれません):

add 1 to file "numfile"

さて、もう少し明確になってきましたか? これらのすべてのスクリプトの目的は、「numfile」というファイルに保存されているカウンタに1を加えることです。この比較の目的は、PerlやPythonを批判することではなく、多くの人々に広範に利用されている非常に強力な言語ですが、ニーズがそれほど厳格ではないかもしれないスクリプターにとって、SenseTalkが提供する利点を指摘することですが、迅速かつ簡単に何かを達成したいと思っています。

公平を期すために、PerlとPythonのスクリプトを少し短縮する方法があり、SenseTalkも同じことをするより長い方法を提供します。これは、他のスクリプトで使用されたアプローチにより密接に従って、同じタスクを実行するSenseTalkの別のスクリプトです:

open file "numfile"
read from file "numfile" until end
put the first word of it into num
seek in file "numfile" to the beginning
write num+1 & return to file "numfile"
close file "numfile"

Perlスクリプトの「or die」部分をすべて削除すると(これらは主に報告に非常に慎重であるべきだという、ほとんどありそうもないエラーをあらわしている)、このSenseTalkスクリプトはPerlまたはPythonバージョンよりも少し長くなることがわかるでしょう。ただし、SenseTalkスクリプトは、はるかに明確で、読みやすく理解しやすく、また学びやすく覚えやすいことに同意するでしょう。読みやすさが格段に向上しているため、間違いを見つけて修正することが容易であり、また数ヶ月前に書いたスクリプトを少し異なることをするように変更する必要がある場合、それを変更することも容易です。

ここにもう1つの例を挙げてみましょう。今回は、いくつかの言語で、かなり一般的な操作を実行する方法を示します:「var」という変数に格納されているテキスト文字列の最後の文字を削除する方法:

  • PHP: $var = substr($var, 0, strlen($var)-1)
  • Ruby: var.chop
  • Perl: chop($var)
  • Java: var = var.substring(0, var.length()-1);
  • Python: var = var[0:-1] // (or, commonly: var = var[:-1] )
  • JavaScript: var = var.slice(0, -1)
  • Excel VBA macro: ActiveCell.Value = Left(ActiveCell.Value, Len(ActiveCell.Value) - 1)
  • SenseTalk: delete the last character of var

ここで、RubyとPerlのバージョンが最も短く、「chop」関数が何をするのかを知っていれば非常に読みやすいです。これらの例が何をするのか、言語に新しく参加した人にとって明らかでしょうか?

それでは、スクリプトを変更して、最後の文字の代わりに_varの最初の文字を削除する_必要があるとします。または、varの最後の2文字を削除する?それをどのように行うか明白でしょうか?(ヒント:すでに推測しなかった場合、これらの操作を行うための実際のSenseTalkコマンドがイタリック体の質問に埋め込まれています!)

おそらく、それはSenseTalkが何であるか、そして私たちが何を達成しようとしているかについてあなたにいくらかの考えを与えるのに十分な紹介でしょう。今度はこの言語がどのように機能し、それをどのように使用するかについて学ぶための時間です。