パンの木を植えて

主として数学の話をするブログ

参照渡しってなんやねん

\[ %%% 黒板太字 %%% \newcommand{\A}{\mathbb{A}} %アフィン空間 \newcommand{\C}{\mathbb{C}} %複素数 \newcommand{\F}{\mathbb{F}} %有限体 \newcommand{\N}{\mathbb{N}} %自然数 \newcommand{\Q}{\mathbb{Q}} %有理数 \newcommand{\R}{\mathbb{R}} %実数 \newcommand{\Z}{\mathbb{Z}} %整数 %%% 2項演算 %%% \newcommand{\f}[2]{ \frac{#1}{#2} } \]

Python を覚えるために,Python を使って LeetCode に挑戦してみました.

そしたらよくわかんないバグが頻発してしまいまして.

変数を宣言するじゃないですか.その宣言した変数を引数に使って関数を走らせてるだけなのに,変数の値がいつのまにか更新されて変化してるんですよ.

不思議ですよね.


それで調べたら,参照渡し値渡しというのがあるみたいです.

わかってない私が解説するのもアレなんで,詳しいことは調べてください.

とにかく,Python では変数を扱う時にミュータブルオブジェクトだったら参照渡しになってしまって,変数の値が書き換えられてしまうみたいですね.

許せないですね.

TypeScriptでは発生しないと思いきや,勝手に参照渡しになることはTypeScriptでもあるみたいですね.

変数の値が意図せず変更されるのはバグの温床なので,こちらが明示的に宣言しない限り絶対に値渡しになる,みたいな仕様の言語を使いたいですね….

ちょうどTypeScriptを使い始めたことで型を意識するようになったように,そういう言語があれば参照渡しと値渡しの違いに敏感になれそうやし,教育的にもGoodでは.

たぶんあると思うので,探してみます.


追記.CryptoHackとかHackTheBoxとか登録し過ぎて完全にキャパオーバーなので,暗号理論とかセキュリティ関連は全部HackTheBoxにまとめて,離散最適化とかアルゴリズム論関連は全部LeetCodeにまとめようかなと思ってます.せっかく激賞したけど,CryptoHack放置しちゃうかも.

まだ確定ではないですけど.