質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Nim

Nimは、静的型付けプログラミング言語。Pythonの生産性でありながら、C言語のような高いパフォーマンスも持ち併せます。さらに自由度の高い言語で拡張性も重視されています。

意見交換

クローズ

1回答

184閲覧

nimのprocの返り値の型を指定するsyntaxについて

yojiyama7

総合スコア0

Nim

Nimは、静的型付けプログラミング言語。Pythonの生産性でありながら、C言語のような高いパフォーマンスも持ち併せます。さらに自由度の高い言語で拡張性も重視されています。

0グッド

0クリップ

投稿2023/07/18 22:06

0

0

知りたいこと

nim言語でプロシージャ(副作用を許す関数)を定義する際に返り値の型を指定しますが、なぜこのsyntaxになっているのかに興味があります。

nim

1proc myAdd(a, b: int): int = 2 a + b

なぜ = が使われているかなどの想像がつきません。

mySuggestion

1proc myAdd(a, b: int) -> int: 2 a + b

これでもいいと思うのですが、なぜ = を使った独特な表記なのでしょうか。
何か理由があれば知りたいと思っています。

背景、状況

ただただ興味があるので、この表記が見にくい、悪いなどと言いたいわけではないです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答1

#1

otn

総合スコア84651

投稿2023/07/19 05:35

その言語を知りませんが、イコールが使われていること自体は、変数宣言と同時の初期値代入と形式を合わせるということからじゃないでしょうか。
ググってみるとNimのサイトでvar letter: char = 'n'という記述がありましたが、これと同じ構造ですね。

他の言語例えばJavaScriptでも、変数に無名関数を代入することで関数定義とするケースがあります。

ただ、この記法だと、無名関数はどうやって書くのだろうと疑問が湧きました。
JavaScriptだと、a+bと書くと計算した結果の値、(a,b) => a+bと書くと無名関数と書き方が異なり、a+bで両方表すのは無理。
ググってみるとnimでは、無名関数を書くときに、proc (a, b: int): int = a + bとイコールまで残して書くんですかね。そうすると、「変数宣言と同時の初期値代入と形式を合わせる」説も弱いか。
再度考えると、「変数宣言と同時の初期値代入と形式を合わせる」なら、proc myAdd: (a, b: int) int = a + bとすべきな気がします(名前が来てコロンが来て型という書き方)。

似たような書き方の大昔の言語で、PROC myadd = (INT a, INT b) INT : a+b;というのもあり、これだとイコールの右辺が無名procで、変数宣言と同時の初期値代入と形式を合わせると言えます。これは確か省略しないで書くと、PROC (INT, INT) INT myadd = (INT a, INT b) INT : a+b;だった気がしますが、これだと首尾一貫している。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問