LoginSignup
206
132

More than 5 years have passed since last update.

プログラミングでよく見かける"コンテキスト(context)って何?

Posted at

サンプルコードを眺めてると

function foo(context){
    //...
}

function foo(ctx){
    //...
}

とか、このcontext|ctxと言うのをよく目にします。

まぁネーミングなんて何でもいいんですが、使われる頻度も多いので少し掘り下げてみました。

コンテキストとは

まずは皆大好きWikipedia先生

(中略)
一般的に文脈(ぶんみゃく)と訳されることが多い。
文脈により「脈絡」、「状況」、「前後関係」、「背景」などとも訳される。

少し抽象的ですね。
次はe-Words先生

(中略)
同じコード記述やプログラム上の要素が、その置かれているプログラム内での位置や、実行される際の内部状態などによって異なる振る舞いをしたり、異なる制約を受けたりすることを指してコンテキストということがある。

分かりやすいですね。

ここまで読むと、Wikipedia先生が「状況」と言っていた意味も何となく分かります。

statecontext

これら先生方の解説を踏まえると、
context ≒ 状態
を表すネーミングと言えそうです。

でも [状態] だったら
stateと被るんじゃ?」
と思うかもしれません。

しかしstatecontextには、大きな違いがあります。

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自体は結構曖昧な表現なので、乱用すると訳が分からなくなります。

ただプログラミングにおいては、関数だったり親階層だったりで強く意味付けされていて、冗長表現になってしまう事もあるかと思います。

つまり
「もうこれ以上は意味付け出来ないよ!」とギブした時や、抽象的な表現が必要な時に使う、同じ処理が行われる [状態] を表すネーミング
と言うことになります。

206
132
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
206
132