Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

関数にデータ型を追加する #1453

Open
kujirahand opened this issue Apr 9, 2023 · 2 comments
Open

関数にデータ型を追加する #1453

kujirahand opened this issue Apr 9, 2023 · 2 comments

Comments

@kujirahand
Copy link
Owner

kujirahand commented Apr 9, 2023

#1448

より段階的に関数定義にデータ型サポートを追加したいと思います。
仕様も少しずつ考えていきたいところです。

型名を日本語にするか英語のままにするかも議論したいところ。

  • string | 文字列
  • number | 数値
  • object | オブジェクト
  • bigint | 巨大整数
  • any | 何か

プラグイン関数

型のタイプを、'vType'プロパティに割り当てたいと思います。

// 定数定義
'ナデシコバージョン': { type: 'const', value: '?', vType: '文字列' }, 

// 関数定義
 '足': { // @AとBを足す // @たす
    type: 'func',
    josi: [['に', 'と'], ['を']],
    isVariableJosi: false,
    pure: true,
    fn: function (a: any, b: any) {
      return a + b
    },
    vType: '文字列'
  },

なでしこ関数

以下のように、なでしこv1のような{型}アノテーションをつける感じにすると良さそうな気がします。

●({数値}Aと {数値}Bで) 何々計算とは{数値}
ここまで

どうでしょうか。

@TumoiYorozu
Copy link
Contributor

型を付けられるところにはどんどんつけていくのは賛成ですが、引数によって戻り値の型が変わってしまうものはどう扱いましょう?

例えば『足』関数の現在の実装は単に JS の + 演算子を使っているだけなので、両方とも数値のときは数値が、そうじゃないときは文字列になります。

なでしこエンジン側でオーバーロードに対応していれば、引数が両方とも数値のときの関数と、そうじゃない2種類を関数定義すれば解決はしますが、結構大きな改修になりそうです。

修正を少なくするとしたら、
・複数の型になりえるときは any を返す
・{string = 1, number = 2, object = 4, bigint = 8} として、複数の型になりえるときはその和集合にする(数値か文字列になるときは3。any は 15)
とかになりそうです

@kujirahand
Copy link
Owner Author

問題点の指摘ありがとうございます。
型に厳密になれば、いずれオーバーロードに対応する必要がありそうですね。
とは言え、複数の型を持つ場合はanyとするのが良さそうです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants