---
title: switch分って何してるの？
tags: 
author: [RT-EGG](https://www.docswell.com/user/3854512105)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/V7N395ZD78.jpg?width=480
description: switch分って何してるの？ by RT-EGG
published: December 18, 25
canonical: https://www.docswell.com/s/3854512105/KEY24Q-2025-12-18-174843
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/V7N395ZD78.jpg)

文 (式) ​使ってますか？​
switch


# Page. 2

![Page Image](https://bcdn.docswell.com/page/YJ992YZ8J3.jpg)

文 (式) が​何しているか​知ってますか？​
switch
と​何が​違う？​
if


# Page. 3

![Page Image](https://bcdn.docswell.com/page/GJ89561ZED.jpg)

ソースコードが​実行可能に​なるまで​
C#
.NET
ソースコード
C#
F#
C++/CLI
VB
.NET
IL
(Intermediate Language)
バイナリ
IL_0000: nop
IL_0001: ldarg.1
IL_0002: stloc.1
...
010101
101010
110011
コンパイラ
コンパイラ
コンパイラ
AOT
JIT
一度​中間言語を​介する​ことで​
プラットフォームの​差分を​吸収しやすくなる​


# Page. 4

![Page Image](https://bcdn.docswell.com/page/LJLWY9Q17R.jpg)

IL
を​見てみよう
C#を​ILに​コンパイルした​結果が見
​ える​
を使っています
sharplab ​ ​


# Page. 5

![Page Image](https://bcdn.docswell.com/page/47M9NZ15JW.jpg)

解説
1.
2.
3.
引数スタックメモリからを​メモリから​ロード
一度​loc.1から​loc.0を​通す形で​引数式を​『評価』し
結果を​loc.0へセ
​ ットする​
移動先の​アドレスを​配列に​定義して​おき
をイ
​ ンデックスとし
​ て移
​ 動先を決
​ 定
ジャンプする​
1.
2. loc.0
3.
ジャンプ先を​記録した​テーブル → ジャンプテーブル
配列への​アクセスは​O(1)なので、​単純な​if文より​効率的


# Page. 6

![Page Image](https://bcdn.docswell.com/page/P7RGD6LZJ9.jpg)

コードで​例えると？​
C#
実際には​↑ より​最適化されていると​思う​


# Page. 7

![Page Image](https://bcdn.docswell.com/page/PJXX1MW1JX.jpg)

なるほど？
密な​（連番）​整数への​switchに​対しては​
ジャンプテーブルによ
​ る最
​ 適化がさ
​ れていそう​
じゃあ、​
負の​値を​含んで​たり、疎
​ な整
​ 数だとど
​ うなる？​


# Page. 8

![Page Image](https://bcdn.docswell.com/page/3JKW2GVMJD.jpg)

疎な​整数だと？​


# Page. 9

![Page Image](https://bcdn.docswell.com/page/LE314NM275.jpg)

コードで​例えると？​
C#
いい​感じな​分岐
およそ​二分探索​（バイナリサーチ）​
= 計算量 O(log(n))


# Page. 10

![Page Image](https://bcdn.docswell.com/page/8EDXQW66JG.jpg)

なるほど？
疎な​整数への​switchに​対しては​
いい感
​ じに​if文で​組み替えている​
じゃあ、​
文字列の​switchはど
​ んな賢
​ いこ
​ とをし
​ てる？​


# Page. 11

![Page Image](https://bcdn.docswell.com/page/V7PPLXZZ78.jpg)

文字列の​場合
おや？


# Page. 12

![Page Image](https://bcdn.docswell.com/page/2JV2QLWMJQ.jpg)

コードで​例えると？​
C#
ただの​if文やん……​


# Page. 13

![Page Image](https://bcdn.docswell.com/page/5EGRWXDXJL.jpg)

ちなみに​型switchも​似たような​もん


# Page. 14

![Page Image](https://bcdn.docswell.com/page/4JQV38157P.jpg)

学び
文で​見ると​綺麗だけど、​
実際の処理は泥
​ 臭かったりするんだなあ
​
switch
​


# Page. 15

![Page Image](https://bcdn.docswell.com/page/K74M12RVJ1.jpg)

んで、
なにか問題は​あるの？​
分岐したって​そうそう​パフォーマンス落ちない​
if


# Page. 16

![Page Image](https://bcdn.docswell.com/page/LJ18GMQ4EG.jpg)

あえて​言えば……​
最適化されない​パターンを​
大量に​回したら​
影響あるよね


# Page. 17

![Page Image](https://bcdn.docswell.com/page/GJWZK3MZJ2.jpg)

あえて​言えば……​
なら
使うとか
string switch
Dictionary
型switchなら​Interfaceや​
(純粋)仮想関数に​委任するとか​
いろいろ​考えてみると​楽しいかも​


