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

値渡しとか参照渡しとか共有渡しとか

〜渡し

プログラミングをちゃんとやっている人であれば当たり前であろうこの言葉たち、先日とある本を読んでいたら、共有渡しという言葉がでてきて「なんぞソレ?」ってなったのでまとめておきます。

 

値渡しと参照渡し

値渡し

これは単純明快で、変数や関数に渡す際に仮引数などに値そのものがコピーされるというもの。

値そのものをコピーしているので、コピーした変数を変更してもコピーされた変数はなにも影響を受けません。

 

参照渡し

こちらは変数をコピーした際に値そのものがコピーされるのではなく、コピーされる変数のメモリのアドレスがコピーされるといもの。

なのでコピーした変数はコピーされた変数のアドレスをもっており、さらには指し示す値はコピーされた変数の値なので変更を加えるとコピーされた変数の値も変更されます。

 

 

と。ここまではそこまで難しいものではないのですが、次に出てくる共有渡しはムムムという感じです

 

共有渡し

これは結論からいうと言語で値渡ししかサポートをしてないのに参照渡しっぽいことをしてたら、それは参照渡しではなくなにか新しい言い方をすべきだ!みたいな流れでつけられたものだと思います。

 

たとえば、JSなどでオブジェクトを作成し、コピーをすると元の変数にはオブジェクトのアドレスが格納されているのですが、それを値渡しという形でコピーをします。

そうするとコピーされた変数をいじると、オブジェクトのアドレスを指し示すため、コピーされた値が変更されたかのように見えます。(変更されます。)

でも言語がやっていることは変数に格納されていたアドレスを値渡ししただけなので、参照渡しではなく値渡しとなります。

そしてこれを共有渡しといいますw

まとめ

めっちゃ雑ですが、こんなかんじです。

結局ただ、言語が参照渡しをサポートしてないのにそれっぽいことをしてたら共有渡しにしようぜ!みたいな感じだと思います。

 

めっちゃ前に書いてたのに下書きになったものを今出しましたw