三項演算子が (ちょっと) 羨ましい Delphi ユーザーの集い

C# 6.0 で ?. という Null 条件演算子 (Null-conditional operators) が実装されましたが、 http://www.buildinsider.net/language/csharplang/0600 我らが Delphi にはそれ以前に三項演算子が存在しません (ぽいのはあるけれど)。 関連ツイートが興味深かったのでまとめてみました。
4
Ktz @ktz_alias

@pik @owlsperspective IfExp<Double>(a > b).ThenWith(trueProc).ElseWith(elseProc).EndIf こんなの #チョーVBぽくてウケル

2015-07-23 15:42:43
Owl's perspective @owlsperspective

@pik @ktz_alias なんという演算子オーバロードの無駄遣い(誉めてない

2015-07-23 15:44:52
HOSOKAWA Jun @pik

@ktz_alias @owlsperspective 多分 EndIf で T を返すのでしょうけど、これ IfExp<String>(False).ThenWith(TrueProc).EndIf ってやったら False の時に何を返すのでしょうか…?

2015-07-23 15:54:47
Ktz @ktz_alias

@pik @owlsperspective 例外?かな? ifを式として扱う言語だったら、値を返す必要があるときにelseないとコンパイルエラーにするので。

2015-07-23 15:58:55
Ktz @ktz_alias

@pik @owlsperspective () をオーバーロードできれば、EndIfなしにできたかもだけど(これはこれでキモイ)

2015-07-23 16:00:24
DEKO @ht_deko

@pik @ktz_alias @owlsperspective '+' が '=' で '-' が 'or' だとそれなりに意味が通るかもですね。 Ex. " IfExp<String>(1 > 0) = 'true' or 'false' "

2015-07-23 16:19:09
HOSOKAWA Jun @pik

@ht_deko @ktz_alias @owlsperspective やってたのは IfExp<String>(True) <= 'true' or 'false'; ですけど

2015-07-23 16:27:17
HOSOKAWA Jun @pik

@ht_deko @ktz_alias @owlsperspective あと IfExp<String>(True) = ['true', 'false'] とかも宣言はコンパイル通りますけど、実行側のコードが通らなかったです。

2015-07-23 16:29:55
HOSOKAWA Jun @pik

@ht_deko @ktz_alias @owlsperspective ああそっか! Equal とかの比較関数は Boolean 以外返せないのでした!

2015-07-23 16:34:13
HOSOKAWA Jun @pik

@ht_deko @ktz_alias @owlsperspective 二項演算子の組で一番美しいのはなんでしょうね…?

2015-07-23 16:36:00
DEKO @ht_deko

@pik @ktz_alias @owlsperspective シフト演算子が << / >> だったらなぁ...

2015-07-23 16:37:50
HOSOKAWA Jun @pik

@ht_deko @ktz_alias @owlsperspective Equal を overload して Boolean に対して record helper を設定してやったらいけないかなあと思ったものの良い方法がないでござる

2015-07-23 16:46:20
HOSOKAWA Jun @pik

気持ち悪い書き方だけど、もしかして結構使い出があるのか…?

2015-07-23 16:48:00
DEKO @ht_deko

@pik @ktz_alias @owlsperspective 個人的には '-' と 'or (BitwiseOr)' ですかねー。 IfExp<String>(1 > 0) - 'true' or 'false'

2015-07-23 16:48:01
DEKO @ht_deko

@pik @ktz_alias @owlsperspective 普通は使われない "演算子オーバーロード専用の二項演算子" をエンバカさんが用意してくれればいいのに。? とか |(パイプ) とか。

2015-07-23 16:57:08
HOSOKAWA Jun @pik

@ht_deko @ktz_alias @owlsperspective あったら面白いですね! : かオーバーロードできればコロン演算子作れたんですけどねー。

2015-07-23 17:02:24
HOSOKAWA Jun @pik

@ht_deko @ktz_alias @owlsperspective と、思って作ろうとしたものの、よくよく考えると Foo.GetBar.GetBaz.ToString ってなったとき GetBar も GetBaz も TFoo 型ではないので無理でしたー/(^o^)\

2015-07-23 17:22:10