フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1]
トピック: Succ と Pred
DEKO
管理者
投稿数: 2693
Succ と Pred
on: 2013/05/15 13:02 Wed

2年前の雑談で以下のような事を書きましたが、

[使い所が難しい Delphi の関数 ]
http://ht-deko.minim.ne.jp/ft1105.html#110514

よくよく (じゃなくても) 考えてみれば、Succ と Pred は順序型に対して使えるのですよね。例えば、遷移状態を表す列挙型があったとします。

type
TSequence = (seqFirst, seqSecond, seqThird);

 
seqFirst から seqSecond へ遷移したい場合、

function TForm1.NextSequence(Sequence: TSequence): TSequence;
begin
result := Sequence + 1;
end;

 
これは "E2008 互換性の無い型です" で怒られちゃいます。

function TForm1.NextSequence(Sequence: TSequence): TSequence;
begin
result := TSequence(Integer(Sequence) + 1);
end;

 
キャストすると冗長なコードになりますね。Succ を使えば簡潔に書けます。

function TForm1.NextSequence(Sequence: TSequence): TSequence;
begin
result := Succ(Sequence);
end;

 
列挙型の変数の値を書き換えるのであれば、Inc / Dec が使えるのですが。

type
TForm1 = class(TForm)
private
{ Private 宣言 }
FSequence: TSequence;
procedure NextSequence;
...

procedure TForm1.NextSequence;
begin
Inc(FSequence);
end;

 
# 駄文で申し訳ない。

ページ: [1]
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.019 sec.