Delphi (Object Pascal) でその場でローカル変数を使用できるように言語を拡張するとしたら、という話
Delphi (Object Pascal) でその場でローカル変数を宣言できるように拡張するとしたら、 var hoge:String := 'Hello'; よりも hoge::String := 'Hello'; みたいな拡張がいいのかな。 #delphi_jp
2018-03-01 13:23:07@ht_deko 後ろに型名を書くだけだと for (var n = 0; n < 10; n++) みたいな型推論が実装しにくい(::autoとでもする?)かなという気もするので何かしら単語を前置きする方がよい気はします。 どこかに実装試してるものがないんですかね:-)
2018-03-01 13:36:05@mohno 型推論は hoge:: := 'Hello'; みたいに単に省略するとか。ちょっと気持ち悪いので :: じゃなく、:| とかの方がいいかもです。 var を使った実装は (どこかに) ありそうですけどね。
2018-03-01 13:49:45@ht_deko 記号って“Pascal らしくない”気がしません?:-) もっとも互換性を維持しつつ新たな単語を使うには contextual な評価が必要になるのでしょうが、varは(contextualではない)予約語なので使いにくいかな、と。
2018-03-01 13:54:48Oxygene: RemObjects 製の言語。
Object Pascal ではあるものの "Oxgene 言語" と言ったりもする。Delphi より若干カジュアルな記述ができる。
Oxygene は RemObjects Elements に含まれている。
http://www.elementscompiler.com/elements/default.aspx
一時期 Delphi Prism という名前で Embarcadero の RAD Studo に含まれていた (現在は含まれていない)。同じ .NET 用ではあるが、Delphi 8 の系譜である Delphi for .NET の事ではない。
@pik @mohno 「Oxygene 警察だ!」というのは冗談として、var でも確かに拡張できると思うし、パッと思いつくのが var なんですよね。 function foo(var s: String): Boolean; みたいな var キーワードの使われ方もあるので、 var hoge:String := 'Hello'; とかでもいいのかなぁ...。
2018-03-01 14:17:28@ht_deko @pik varだと変数部始まっちゃうじゃんと思ったけど、コード部では元々使えないから問題ないですかね^_^; あとは変数定義時にコンストラクタをどう呼び出すか、かな(?)
2018-03-01 14:24:27@ht_deko @mohno 指令を増やすとかですかねー。let a: String = 'foo'; とかどうでしょう。
2018-03-01 14:37:11@pik @ht_deko @mohno Oxygene使いとしてはvarで一向に違和感なしなのでございまs
2018-03-01 14:45:13@pik @ht_deko 今の Delphi に contextual keyword があるのか知らないんですが^_^; let が変数/関数名として使われている可能性を考えると var の方が評価は楽だと思います。 あと、その場で変数定義を実現する場合、その型がクラスの場合は、どうやってオブジェクトの定義と初期化を同時に行うか、も考えないと:-)
2018-03-01 14:56:19@mohno @ht_deko なるほど、確かに let という名前の何かがある可能性ありますね。 オブジェクトの初期化は Oxygen でも普通に var a: TList<String> = TLIst<String>.Create; とやっているので問題無いのでは?
2018-03-01 15:52:38@pik @ht_deko おお、なるほど。型推論させて var a: TList<String>.Create; とできればよいですね。というか VB.NET がこんな感じですね:-)
2018-03-01 16:15:06@pik @ht_deko あ、Oxygene では var a := new TList<String>; なのですね(?)(そもそも Oxygene を知らなかった^_^;; var a := TList<String>.Create; あたりでいいのかな:-)
2018-03-01 16:24:31@mohno @ht_deko 型推論が同時に載るならそれが良さそうですね。 Oxygen だとグローバル変数の初期化と同じ書き方なんだと思います。あと型は型推論で無しにできるみたいですね。
2018-03-01 16:32:46