読者です 読者をやめる 読者になる 読者になる

by shigemk2

当面は技術的なことしか書かない

実行順序に気をつける感じのやつ

F#
// fetch 中で変数の値を書き換えているので副作用が発生する
let fetch() =
    let ret = read16 mem pc
    pc <- pc + 2
    ret

let opr1, opr2 = fetch(), fetch()  // このような書き方だと環境依存で実行順序が保証されない

副作用のある関数の結果を、上のような方法で複数の変数に同時に代入すると、 環境によって実行順序が変わることがあるので、opr1とopr2の中身がそのときどきに よって違うことがあるため、推奨されない。

これはF#だけの話ではなく、他のプログラミング言語にも言える。

追記

F#は環境依存で実行順序が変わることはない。

でも一般的な話として、環境依存で想定外の動きをするような書き方をするべきではない。