本稿は,拙著 null合体演算子 ?? の優先順位と結合規則 の最後に出題した演習問題の解答である.
問題
(a ?? b) ?? c
と a ?? (b ?? c)
の演算結果は同じか.同じであれば証明し,そうでなければ反例を挙げよ.
解答
(a ?? b) ?? c
と a ?? (b ?? c)
の演算結果は同じである.以下,その証明を述べる.
方針
a
と b
のそれぞれがnullか否かで場合分けして考える.
証明
a
がnullでないとき
\begin{align}
(a\ ??\ b)\ ??\ c
&=a\ ??\ c & (\because a\neq\text{null}よりa\ ??\ b=a) \\
&=a & (\because a\neq\text{null})
\end{align}
であり,さらに
\begin{align}
a\ ??\ (b\ ??\ c)&=a & (\because a\neq\text{null})
\end{align}
となる.
a
がnullであり,かつ b
がnullであるとき
\begin{align}
(a\ ??\ b)\ ??\ c
&=b\ ??\ c & (\because a=\text{null}よりa\ ??\ b=b) \\
&=c & (\because b=\text{null})
\end{align}
であり,さらに
\begin{align}
a\ ??\ (b\ ??\ c)
&=a\ ??\ c & (\because b=\text{null}よりb\ ??\ c=c) \\
&=c & (\because a=\text{null})
\end{align}
となる.
a
がnullであり,かつ b
がnullでないとき
\begin{align}
(a\ ??\ b)\ ??\ c
&=b\ ??\ c & (\because a=\text{null}よりa\ ??\ b=b) \\
&=b & (\because b\neq\text{null})
\end{align}
であり,さらに
\begin{align}
a\ ??\ (b\ ??\ c)
&=a\ ??\ b & (\because b\neq\text{null}よりb\ ??\ c=b) \\
&=b & (\because a=\text{null})
\end{align}
となる.
以上より,(a ?? b) ?? c
と a ?? (b ?? c)
の演算結果は常に同じである.