| パラダイム | 人間指向プログラミング、 マルチパラダイム、オブジェクト指向 |
|---|---|
| 家族 | スクリプト言語 |
| デザイン: | ダグラス・シモンズ |
| 開発者 | ナス(ソフトウェア) |
| 初登場 | 1992年 |
| 安定版リリース | 2.18 / 2024年6月 |
| タイピングの規律 | アヒル |
| ライセンス | 独自 |
| ファイル名拡張子 |
|
| Webサイト | 翻訳: |
| 影響を受けた | |
| xトーク、ハイパートーク | |
SenseTalk は、 XTalkファミリーの高水準な英語風のスクリプト言語であり、手続き型とオブジェクト指向の両方のパラダイムをサポートしています。SenseTalk スクリプトは、プログラミングのトレーニングをほとんど受けていない人やまったく受けていない人を含む、一般の人がほぼ読めるように設計されています。
このため、SenseTalk には、基盤となるマシンの動作ではなく、人間のタスク向けの機能を提供する言語要素が多数含まれています。たとえば、ある数量が 3 で割り切れるかどうかを確認する場合、スクリプトではまたはという式を使用できます。この場合、読みやすさと、割り切れるという人間の概念に重点が置かれます。[1]これを、結果を決定するために必要なマシン操作に重点を置き、同じテストが通常 と記述される従来のプログラミング言語 (C、Java、Python など) と比較してください。[2]if quantity is divisible by 3 …if quantity is a multiple of 3 …if (quantity % 3) == 0 …
基礎となる機械計算から、人間の言葉で英語のような動作を記述することへの焦点の移行により、SenseTalkは「人間中心のプログラミング言語」と説明されるようになりました。[3]
特徴的な特徴
自称「人間中心のプログラミング」言語である SenseTalk の設計には、他のプログラミング言語とは異なる、独特の特徴があります。その特徴は、大文字と小文字を区別しないといったありふれた特徴から、読みやすさを高める構文要素、流動的な変数型といったより微妙な特徴、単位や SenseTalk パターン言語といった高度な機能まで多岐にわたります。
大文字と小文字を区別しない
SenseTalk のキーワードと変数名はすべて大文字と小文字を区別しません。これにより、動作を変更することなく、大文字の使用を自由に行うことができます。
リンゴに12 個、 バナナに5 個を入れます。PUT "果物の合計個数: " &リンゴ+バナナ--> "果物の合計個数: 17" と表示されます。
これは、プロパティ リスト (SenseTalk の辞書またはハッシュ テーブルの名前) 内のプロパティの名前にも当てはまります。
{名前: "Green" 、 HexCode : "#00FF00" }を AColorに 入力します。aColorの名前を入力すると、"Green" と表示されます。acolorのHEXcodeを入力すると、"#00FF00" と表示されます。
さらに、比較や検索などのテキスト操作では、デフォルトでは大文字と小文字が区別されませんが、必要に応じて大文字と小文字を区別するように設定できます。
名前を 「McMaster」に 設定し、名前に「master」を含めると、True が表示されます (大文字と小文字は無視されます)。大文字と小文字を考慮して名前に「master」を含めると、False が表示されます。
流体の種類
大文字と小文字を区別しない名前を持つことに加えて、SenseTalk の変数は他の点でも珍しいものです。変数は宣言する必要がなく、型がありません。変数は最初に使用されたときに存在し、その型はそこに格納されている値の型によって決まります。
この柔軟性は、他の言語に見られる「ダック タイピング」を超えています。ダック タイピングでは、変数に値が割り当てられると、特定の変数の型が確立されます。SenseTalk では、変数は任意の型の値を格納できる「コンテナー」と見なされます。変数に含まれる値の型はスクリプトの実行中に変更される可能性があるため、同じ変数に最初は数値が含まれていても、後に文字列、さらに値のリストが含まれることがあります。この「型の流動性」により、非常に柔軟な方法で作業でき、値を自由に操作し、スクリプトの特定の時点での使用方法に応じて各値を扱うことができます。
SenseTalk の型なし変数の結果の 1 つは、一般に「オーバーロード」演算子がないことです。つまり、操作する変数の型に応じて異なる演算を実行する演算子です。たとえば、一部の言語では、演算子は数値オペランドで使用されると加算を実行し、文字列オペランドで使用されると文字列連結を実行します。SenseTalk では、オペランドはすべて流動的であるため、加算を実行するための演算子 (オペランドを数値として扱う ) と、文字列連結用の別の演算子 (オペランドを文字列として扱う )+が必要です。
+&
1 + 2 & 3 + 4 を足すと 37 が表示されます
この例では、+演算子の優先順位が演算子よりも高い&ため、式は「(1 + 2) & (3 + 4)」または「3 & 7」と同等になり、「37」になります。括弧を使用して&最初に演算子を実行すると、「1 + (2 & 3) + 4」は 1 + 「23」 + 4 になり、結果は 28 になります。
定義済み変数
SenseTalk には、数百の「定義済み変数」が含まれています。これらは、通常の変数として使用できる変数名ですが、最初に値を保存せずに使用した場合、定義済み値で始まります。定義済み値の一部は、π やゼロなどの数値です。多くは、euroSign、copyrightSign、hotBeverageなどの特殊文字または記号です。また、 jsonListFormatなどの他の種類の値を持つものもいくつかあります。これは、 listFormat グローバル プロパティの設定に使用できる複数のキー/値ペアを含むプロパティ リストです。
「半径5の円の面積は:」 と 円周率 5 の 2乗を掛けます。
定義済みの値を持たず、まだ明示的に値が割り当てられていない変数は、使用されるコンテキストに応じて、独自の名前として評価されるか、空として評価されます。これにより、通常は引用符が必要な多くの場合、単語を引用符なしで使用できます。
CookieCount を入力する--> 「CookieCount」と表示される
CookieCountに3ダースを追加する --> 空、つまり 0 として扱われる
CookieCount を入力する --> 36 と表示される
ユニット
SenseTalk には、さまざまな種類の単位 (長さ、質量、時間、体積、周波数など) が完全にサポートされています。数値には単位が関連付けられている場合があります。単位値は、算術演算を実行するときに必要に応じて変換されます。
5 ヤード + 2 フィート を入力すると、17フィートが表示されます
変数には単位付きの値を含めることができます。単位は値とともに渡され、後続の計算に適用されます。
長さに5 ヤードを 入力し、長さに2フィートを追加します。長さの値は、加算を実行するために互換性のある単位に変換されます。長さを入力すると、17 フィートが表示されます。幅に42インチを入力します。面積を長さ*幅に設定します。面積を入力すると、59.5 平方フィートが表示されます。
速度 (マイル/時、またはメートル/秒) や加速度 (m/s^2) などのより複雑な単位もサポートされています。
日付
SenseTalk はさまざまな形式の日付と時刻を認識し、日付と時刻の計算をサポートします。
「8:22」 - 「8:15」 と入力--> 420秒を表示
日付/時刻の値は変数に保存でき、計算を通じて形式が維持されます。
「3月3日」 + 34 日 を入力すると、「4月6日」と表示されます。
nextDateに「2021-03-04」を 入力してください
nextDateに4 週間 追加します。put nextDate --> 「2021-04-01」と表示されます。
nextDateに4 か 月 を追加して、 nextDateを入力すると、「2021-08-01」と表示されます。
チャンク式
SenseTalk のチャンク式は、 HyperTalkから派生したXTalk言語ファミリーのメンバーとして受け継がれています。チャンク式を使用すると、文字、単語、項目、行などの使い慣れた英語の用語を使用して、テキストのチャンクを操作できます。SenseTalk は、元のチャンク構文を拡張し、テキストだけでなく、リスト内の項目やバイナリ データ内のバイトにも使用できるようになりました。
「Rumpelstiltskin」の7文字 目から11文字目を入力すると、「stilt」と表示されます。
「book catalog 」の2番目の単語の最初の 3 文字 を 入力すると、「cat」と表示されます。
チャンク式は値を変更するためにも使用できます。Xtalk 言語の用語では、コンテナのチャンク (変数など) もコンテナであるため、コンテナの値を変更するコマンドはチャンクの変更にも使用できます。
funnyNameに「Rumpelstiltskin」と 入力
funnyNameの7文字目から12文字目に「bump 」 を入れてください
funnyName を入力すると、「Rumpelbumpkin」と表示されます。
ファイル
SenseTalk には、ファイルを開く、読み取る、書き込むためのコマンドが含まれています。テキスト ファイルはコンテナ (変数など) として扱うことができるため、ファイルを変数に入れるだけでファイルの内容を読み取ることができます。同様に、ファイルに変数またはその他の式を入れることで、ファイルを書き込むことができます。
ファイル 「/tmp/addressList.txt」を アドレスに 置きます
「Miriam,219 Sparrow Ln,Freeburgh,MA」 と入力し、 住所の後に改行を入れます。
アドレスを ファイル「/tmp/addressList.txt」に 保存します
ファイルはコンテナであるため、コンテナを変更するコマンドはファイルに対して直接使用できます。
ファイル「/tmp/addressList.txt」の1行目の後にreturn & "Earlybird,12 Elm St,Vista,NM" と入力します。
データベース
データベース内のレコードへのアクセスはファイルの読み取りよりも複雑ですが、SenseTalk はここでもコンテナの概念を適用します。これにより、データベースに接続し、非常に少ないコードで特定のレコードのフィールドを更新できるようになります。
{ type : ” ODBC ” 、 DSN : ” customers ” 、 user : ” admin ” 、 password : ” sEcrEt ” }を custDBに 入力します
custDBのテーブル 「subscriptions 」を subsに配置します-- DB テーブルへの接続を作成します
CustNumが「83946 - d 」であるサブレコードのexpDateに12か 月 を追加します。特定のレコードの値を更新します。
パターン言語
SenseTalkの「パターン言語」[4]は、読みやすい英語のような構文を使用して正規表現を実装します。次の例では、アメリカの社会保障番号(「999-99-9999」など)を識別するパターンを作成します。
ssnPattern を < 3桁、ダッシュ、2桁、ダッシュ、4桁>に 設定します。
パターンはさまざまな方法で使用できます。
userEntryが ssnPatternと一致する 場合はvalidSSNをtrueに設定する
ファイル「userData 」内のssnPatternのすべての 出現を ssnListに格納します。
clientInfoに ssnPatternが含まれていない場合は、clientInfoの後に“ < SSN missing > ”を記述します。
パターン言語を使用すると、他のパターンからパターンを構築できます。この例では、前の ssnPattern を使用して、直前の文字または直後の文字も数字である場合に一致を回避するパターンを定義します。
isolationSSN を < ssnPatternの前に数字がなく、後ろに数字が続かない>に 設定します。
歴史
SenseTalk 言語は、 HyperCardをモデルにしたNeXTSTEPプラットフォームのマルチメディア オーサリング アプリケーションである HyperSense のスクリプト言語として 1992 年に初めて登場しました。当時、この言語は HyperCard のHyperTalk言語のコピーに過ぎませんでした。この言語をより大胆に再考し再設計した結果、現在の言語が誕生し、2002 年に Eggplant V1.0 のスクリプト言語としてバージョン 0.02 がリリースされました。この言語は成長と進化を続け、次のような機能強化が行われています。
- 各式(他の言語の「リスト内包表記」に類似)V1.26(2007)
- ツリーデータ構造(ネイティブ XML サポート)(V1.30 (2008))
- V1.36 (2008) のイテレータ
- V1.38 (2009) の範囲
- V1.53 (2012) で HTTP と XML-RPC を直接サポート
- V1.63 (2013) の SQL データベース
- V1.67のユニット(2014年)
- SenseTalk パターン言語 (読み取り可能な正規表現) V1.81 (2018)
- V1.91 (2019) の読み取り可能なトークンを使用した日付形式
- V2.00 (2020) のマルチケース if ステートメント
- every 式; V2.04 (2021) のコンテナーに対する each 式の使用
参考文献
- ^ 「SenseTalk 数学演算子」。
- ^ 「Python で割り切れるかどうかを確認する」。
- ^ 「人間中心のプログラミング」。
- ^ 「SenseTalkパターン言語」。
外部リンク
- SenseTalk - 人間中心のプログラミング
- SenseTalk - 直感的なプログラミング
- SenseTalk ドキュメント
- RosettaCode の SenseTalk の例
- SenseTalkの所有者であるキーサイト・テクノロジーズ
