Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
98
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

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

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

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

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
98
Help us understand the problem. What are the problem?