サンプルコードを眺めてると
function foo(context){
//...
}
function foo(ctx){
//...
}
とか、このcontext|ctx
と言うのをよく目にします。
まぁネーミングなんて何でもいいんですが、使われる頻度も多いので少し掘り下げてみました。
コンテキストとは
まずは皆大好きWikipedia先生
(中略)
一般的に文脈(ぶんみゃく)と訳されることが多い。
文脈により「脈絡」、「状況」、「前後関係」、「背景」などとも訳される。
少し抽象的ですね。
次はe-Words先生
(中略)
同じコード記述やプログラム上の要素が、その置かれているプログラム内での位置や、実行される際の内部状態などによって異なる振る舞いをしたり、異なる制約を受けたりすることを指してコンテキストということがある。
分かりやすいですね。
ここまで読むと、Wikipedia先生が「状況」と言っていた意味も何となく分かります。
state
とcontext
これら先生方の解説を踏まえると、
context
≒ 状態
を表すネーミングと言えそうです。
でも [状態] だったら
「state
と被るんじゃ?」
と思うかもしれません。
しかしstate
とcontext
には、大きな違いがあります。
state
ご存知、日本語訳でそのまんま「状態」を表す英語です。
プログラミングだけでなく一般的にも同じ意味で使われているので、こちらは馴染みが深いと思います。
ただプログラミングで使う場合は
(変数)の中身によって異なる処理を行う場合はstate
と解釈します。
例えば...
function today(state){
if(state == "仕事"){
console.log("帰りたい");
}
else if(state == "休日"){
console.log("やったぜ");
}
}
多少の粗相は目を瞑ってもうとして、分かりやすい例かと思います。
state
の「状態」によって異なる「処理」を行っています。
context
では、同じ「状態」を表すこちらは、どのような使い分けをするのでしょうか。
(変数)の中身によらず同じ処理を行う場合はcontext
と解釈します。
例えば...
function shopping(context){
addCart(context);
pos(context);
payment(context);
intoBag(context);
}
こちらも多少の粗相はありますが、そのまんま買物を表した関数です。
context
の「状態」が「りんご」でも「バナナ」でも「グラボ」でも何であっても、カートに入れて、レジ通して、支払して、バッグに入れるという一連の「処理」は変わりません。
そしてこれはcontext
を分かりやすく表現する為に思いついた例ですが、実際にはitem
などもっと具体的なネーミングにすべきです。
そう、context
自体は結構曖昧な表現なので、乱用すると訳が分からなくなります。
ただプログラミングにおいては、関数だったり親階層だったりで強く意味付けされていて、冗長表現になってしまう事もあるかと思います。
つまり
「もうこれ以上は意味付け出来ないよ!」とギブした時や、抽象的な表現が必要な時に使う、同じ処理が行われる [状態] を表すネーミング
と言うことになります。