This post is Private. Only a writer or those who know its URL can access this post.

Improve article
RevisionsShow article in Markdown
Report article
Help us understand the problem. What is going on with this article?

<4> 動作の概念 (標準 Pascal 範囲内での Delphi 入門)〔裏〕

4. 動作の概念

4.1. 代入文と式

拡張 Pascal では、このあいまいな論理評価を避けるために and_thenor_else という論理演算子を新たに追加しています。これらの演算子は短絡論理評価する事が保証されています。

MPW Pascal では、andor とは別に &| が 使えます。これらは 短絡演算子 と呼ばれます。但し、一つの式の中でこれらを混在させる事はできません。

See also:

4.2. 手続き呼び出し文

4.3. 複合文と空文

4.4. 繰り返し文

4.4.1. while 文

4.4.2. repeat 文

4.4.3. for to do 文

制御変数に値を代入することは許されませんが、Turbo Pascal では可能でした。
image.png

See also:

(4.4.4.) for in do 文

この構文は拡張 Pascal にもありました。

program ForInDo(output);
var
  i: Integer;
begin
  for i in [100, 200, 100] do
    Writeln(i);
end.

Pascal 8000 には forall in do がありました。

forall i in [1, 3, 4, 6] do
  flag[i] := True;

See also:

(4.4.4.1.) 配列式を使った反復処理

(4.4.4.2.) 文字列式を使った反復処理

(4.4.4.3.) 集合式を使った反復処理

(4.4.4.4.) コレクション式を使った反復処理

(4.4.5.) break と continue

この拡張は Turbo Pascal 7.0 以降のようです。MPW Pascal にはそれ以前に leavecycle が存在しました。

C Apple Borland
break leave Break
continue cycle Continue

標準 Pascal でこれらに近い事をやりたいのであれば、制御変数ともう一段のループを使うか goto 文を使います。

Pascal 8000 には無限ループを構成する loop~end 構文と、それから脱出するための exit がありました。

loop
  i := i + 1;
  if a[i] = 0 then
    exit;
  j := j - 1;
end;

この構文は Modula-2 にもあります。

See also:

4.5. 条件式

4.5.1. if 文

4.5.2. case 文

case 文の拡張ですが、 Turbo Pascal には 1.0 から else が、その前身である BLS Pascal には others が、OS-9 PascalMPW Pascal には otherwise がありました。

// Turbo Pascal / Delphi
case n of
  1: v := 100;
  2: v := 200;
else
  v := 0;
end;

// BLS Pascal
case n of
  1:
    v := 100;
  2: 
    v := 200;
  others:
    v := 0;
end;

// OS-9 Pascal
case n of
  1:
    v := 100;
  2: 
    v := 200;
  otherwise:
    v := 0;
end;

// MPW Pascal
case n of
  1: v := 100;
  2: v := 200;
otherwise
  v := 0;
end;

otherwise 拡張は標準 Pascal の策定中にも検討されていたようです。

See also:

4.6. with 文

4.7. goto 文

(4.7.1.) Pascal と goto

Linus Torvalds 氏が Linux カーネルで goto 文が使われている事に対する議論の中で

Of course, in stupid languages like Pascal,
where labels cannot be descriptive, goto's can be bad.

と述べています。意訳すると「Pascal のようにラベルに識別子が使えないクソ言語で goto 使っちゃダメだろうけどね」という事なのですが、先述の通り Delphi ではラベルに識別子が使えますし、Turbo Pascal でも使えました。

Linus 氏の発言は 2003 年の事ですが Pascal という大きな主語で語ってはいけませんよね。既に Delphi 誕生から 8 年、Turbo Pascal 誕生からなら 20 年経っていますので、氏の Pascal に対する知識はアップデートされていない事が伺い知れます (アップデートする必要もなかったのでしょうけれど)。

少なくともこの話をもって「Linus 氏が言ってるから Pascal はクソ言語」と言ってはいけません。
image.png
Ed Post 氏の "Real Programmers Don't Use PASCAL (本物のプログラマはPascalを使わない)" にしても、デバッガを使わずにバグを修正するような凄腕の Fortran 使い以外に言われる筋合いはない話です。他の言語を使ってる人がこれを言ってきたら、まず中身を読んでいません。

"Why Pascal is Not My Favorite Programming Language (何故 Pascal はお気に入りのプログラミング言語ではないのか)" にしても、書いてるのは K&R の Brian W. Kernighan 氏ですので、話半分で聞いた方がいいかもしれません。前提が標準 Pascal なら言ってる事は正しいのですが Pascal という大きな主語だと正しくありません。

例えば MPW や MacApp の開発に携わった Dan Allen 氏は次のように述べています。

MPW Pascal overcomes most of Brian Kernighan's objections to Pascal included in his famous memo "Why Pascal Is Not My Favorite Programming Language."

拡張 Pascal の仕様からの反論もあります。

The criticisms in Kernighan's paper have become outdated and mostly irrelevant with the implementation of Extended Pascal. The paper would not have been mentioned at all, except that the criticisms contained within the paper are used by many in the field today against current implementations of Pascal.

よって、今時この話を持ち出す人もまず中身を読んでいません。あるいは標準 Pascal と Delphi 等のモダンな Pascal との違いを説明できないでしょう。

(4.8.) 文の正確な定義

索引

:ramen: [ ← 3. プログラムヘッダと宣言部〔裏〕 ] [ ↑ 目次へ ] [ → 5. 列挙型と部分範囲型〔裏〕) ]

ht_deko
とある熊本の障害復旧(トラブルシューター)
https://ht-deko.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away