パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Excelワークシート関数で変数が使えるように」記事へのコメント

  • by Anonymous Coward on 2020年03月21日 21時13分 (#3782977)

    LETはなんで私普通の関数ですみたいな顔してるんだ?
    構文は関数だが引数のセマンティクスが通常関数とは違うだろ。

    例えば

    LET(x:=A, y:=B, x+y)

    みたいな構文にするべきじゃないのか?

    • by hjmhjm (39921) on 2020年03月22日 11時35分 (#3783134)

      わざわざ特殊な記法にしても、誰も得しない。
      見慣れないものが増えたら、事故が増えるだけやろ。
      # あくまでExcelの「関数」なんやし。w

      親コメント
      • by Anonymous Coward

        特殊な解釈が必要なのに見慣れた表記では却って混乱するのでは?
        初見ならLET関数に渡す最初の引数はどこで定義された変数なの、と思う。

      • by Anonymous Coward

        自分も同意です。あくまで関数。
        敢えて構文かえるなら、元コメだと違和感があるのでもう文として独立させればいいと思います。
        let x=a ; y=b in a+b みたいな記法はPowerQueryだのDAXですでにやってるし。

        まあ、違和感の正体はletという関数名だと思うので、do(x-a,y-b,x+y)とかに変えるならそれもいいかもしれませんが。

    • by Anonymous Coward

      LETのスコープ内処理だから問題ないだろ。
      セルアドレスを書けばRangeオブジェクトで、式を書けば式に応じたオブジェクトになる自由さから言えば、ローカル名前型というオブジェクトが追加になったと思えば良い。

      • by Anonymous Coward

        この場合、文法的にどうかという話で、スコープ云々は関係ないのでは?

        関数内の実引数は、値(オブジェクト含む)として評価された上で関数に渡される
        (だから、関数からは引数にどんな名前の変数が、どんな数式が渡されたか判断できない)ため、
        LET関数の場合、例えば、LET(x,A, y,B, x+y) だと、1番目と3番目は(まだ定義もしていない)変数の値を
        評価しているように見えてしまう。
        ここは、変数を定義しているように見えるよう変えるべきでは?

        と主張しているように見えるのですが、、、

    • by Anonymous Coward

      新しい演算子を追加すると、構文解析もちょいと改造しなきゃならず
      互換を目指すGSuiteのGoogleやLibreOffice陣営から激しい抵抗にあって
      「せっかくOpenDocumentの時代なのに、また悪の帝国Micro$oftが勝手な真似を!」ってなりそう。
      それを避けたんではなかろうか。

      • by Anonymous Coward

        今回のであっても名前解決あたりから先の処理がLETと他で共通化出来ないからなぁ……

    • by Anonymous Coward

      ふと考えたんだが、LET(X:=Y, Y:=Z, Z:=X)みたいな記述にコンパイルエラーみたいな
      新しいエラーが必要になるかも。

      LET(X,Y, Y,Z, Z,X)なら、たぶん左のYか右のXを評価したタイミングで参照エラーかなにか
      既存のエラーを返せばよい気がする。

    • by Anonymous Coward

      構文以前にいい加減エディタ的なものをデフォで用意しろ。
      後セル内での改行やスペースをもっとちゃんと許容しろ。
      書きづらいし読みづらいんだよ。

    • by Anonymous Coward

      非Algol系言語をちょっとでも知ってるならこういう構文は全然気にならないと思うけどなあ。
      私は10年以上まともなプログラミング言語に触ってないけど、Forth、RPL、Lispなどを考えるとごく自然に受け入れられる。

あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall

処理中...