プログラミングにおける「コンテキスト」という用語は?[閉まっている]


161

私はここ数ヶ月プログラミングをしていて、よく使われる言葉はクラスで「コンテキスト」です。同様にServletContext(ジャワ)、 Activity(アンドロイド)、 Service(ジャワ、アンドロイド)、NSManagedContext(のObjective-C、iOS版)。

辞書を見ると、この単語の意味は次のとおりです。状況、環境、状況など。ただし、私は英語を母国語としないので、何を直接翻訳するべきかわかりません。たとえば、次のいずれかの名前のクラスを作成するとします。SomeClassContext、またはコンテキストパラメータを持つメソッドを記述しようとした場合、理解できないため、いつコンテキストに名前を付ける必要があるのか​​わかりません。

私はスタックオーバーフローでコンテキストを検索してきましたが、質問/回答は役に立ちませんでした。

誰かに説明をいただければ幸いです。


6
コンテキストは言っています:このオブジェクトが動作する領域。
Blundell、

7
コンテキストとは、ある時点におけるオブジェクトまたはシステムの状態です
Matt

回答:


190

あなたが歯を抜くために歯科医に行くとしましょう。

受付があなたにあなたの名前を尋ねるとき、それは彼らが約束を始めるために必要な情報です。この例では、名前はコンテキスト情報です。したがって、コンテキストでは、歯科医を訪問では、歯を抜くために名前を提供する必要があります。

今、あなたが銀行に向かったとしましょう。

銀行では、100ドルを引き出すように要求します。窓口係はお金を与える前に本人確認を行う必要があるため、おそらく運転免許証を提示するか、ATMカードをスワイプしてPIN番号を入力する必要があります。どちらにしても、提供しているのはコンテキストです。出納係はこの情報を使用して、トランザクションを進めます。次に、どの口座から引き出すかを尋ねられる場合があります。「私の普通預金口座」と答えると、それはさらに多くのコンテキストになります

あなたが与えるより多くのコンテキスト、あなたの要求に対処するのを助けるために相手が持っているより多くの知識。コンテキストはオプションの場合もあれば(より良い結果を得るためにGoogle検索に入力する単語の数が多い場合など)、必須の場合もあります(ATMでのPIN番号の提供など)。いずれにせよ、それは通常物事を成し遂げるのに役立つ情報です。

今、あなたがあなたの$ 100を持って、口が治っている間に暖かいところへ飛ぶための飛行機のチケットを購入したとしましょう。

日当たりの良い目的地に到着しましたが、バッグではうまく行きません。空港システムのどこかで失われました。だから、あなたは「手荷物受取券」(バーコードが貼られているステッカー)を「ロストバゲッジオフィス」に持っていきます。机の後ろにいる人が最初に尋ねるのは、手荷物番号が書かれたチケットです。これは、必要なコンテキストのです

しかし、その後手荷物者はより多くの情報をお願いしますあなたのバッグについて、彼らはもっと簡単に見つけることができるようにように。彼らは、「それは何色ですか?それはどのサイズですか?ホイールは付いていますか?それは硬いですか、それとも柔らかいですか?彼らは必ずしもこれらの情報を必要としませんが、それらを提供する場合、物事を絞り込むのに役立ちます。問題のある領域です。これにより検索がはるかに高速になります。これはオプションのコンテキストです。

興味深い部分は次のとおりです。多くのソフトウェアとAPIの場合、通常、必要なコンテキストはメソッドシグネチャの実際のパラメータとして終わり、オプションのコンテキストは他の場所に移動します。 )または、必要に応じてアクセスできるスレッドローカルストレージに。

上記の例は実際のものですが、コンピュータサイエンス内の領域に簡単にマッピングできます。たとえば、HTTPヘッダーにはコンテキスト情報が含まれています。各ヘッダーは、行われいる要求に関する情報に関連しています。または、2フェーズコミットプロセスの一部としてグローバルトランザクションIDを送信する場合、そのトランザクションIDはコンテキストです。それは情報ですので、トランザクションマネージャが作業を調整できますについての手元に全体的なタスク。

お役に立てば幸いです。


22
@ブライアン:あなたの投稿とここで与えられた他の答えから、私はそれを理解し始めるかもしれません。イベントの状態情報を運ぶオブジェクトは、「コンテキスト」オブジェクトですか?それは正しいでしょうか?つまり、RequestContextオブジェクトは、特定のリクエストに関する情報を運ぶのですよね?そして、別のリクエストが来ると、RequestContextオブジェクトに添付された情報が変わります。コンテキストオブジェクトがDTO(データ転送オブジェクト)に少し似ていると言うのは間違っていますか?しかし、DTOが人などのオブジェクトの情報を運ぶのに対し、コンテキストはさまざまな関連する「もの」に関する情報を運びますか?ありがとう
user772058 '27

9
あなたはそれを釘付けにしました、それはまさに正しいです。実際、RequestContextは、進行中の要求に関する情報(たとえば、クライアントのロケール)を伝達します。コンテキストはDTO / VOに似ていますが、通常はそれほど強く型付けされていません。しかし、コンセプトは大丈夫です。
ブライアンケリー

5
@ブライアン:もう1つの質問が思い浮かびました。コンテキストメニューについて話すとき、私がこの答えから学んだコンテキストの意味は私の頭では意味がありません。私が今理解しているように、コンテキストは何かについてのキャリー状態の(短い)です。では、このように「コンテキスト」という言葉を使用するとはどういう意味ですか?
user772058 2011年

9
良い質問。「コンテキストメニュー」内の「コンテキスト」の意味は、「メニューに表示されるものは、クリックした場所、クリックしたとき、およびアプリケーションで他に何が起こっているかによって異なります」です。これらの情報(どこで/いつ/何をクリックしたか)はコンテキスト表し、メニューで提供するものを決定できるようにGUIコードに送信されます。
ブライアンケリー

2
したがって、メソッドのパラメーターはコンテキストです。私が間違っている?
缶Aydoğan

14

コンテキストは、情報を渡すためのバケットと見なすことができます。通常は、必ずしもメソッド呼び出しに直接結び付けられているわけではないものを渡すために使用されますが、それでも適切である可能性があります。それを説明する素人の方法は、「あなたが気にするかもしれないもの」かもしれません。

たとえば、dbの値を更新するサービスを作成している場合、おそらくレコードIDと新しい値を渡します。

汎用インターフェースが必要な場合は、サービスが任意のビジネスロジックを実行できるように、渡すコンテキストを定義することもできます。サービスはこれらの値に応じて追加のロジックを実行する可能性があるため、コンテキストにユーザー認証、ユーザーのセッション状態などを含めることができます。


7
それについて考えるもう1つの便利な方法は、「何が起こっているかについての情報」です。より学術的には、それは「メタ情報」です。それはかなり学術的な言い回しですが、正確です。この文脈で。
ブライアンケリー

4
基本的にはある時点での状態で、それ以上複雑ではありません
マット

13

これは2015年です。このスレッドが始まってから数年後です。

それでも、私はこのメッセージを投稿して、「コンテキスト」を理解するのに苦労している私のような誰かを支援します。

決してJavaプログラムでコンテキストを使用したと主張しているわけではありません。つまり、完全にハードコーディングでコンテキストを書き出すのはあなた次第です。

「概念的にはコンテキスト」は「もっと教えてください」と同じです。クライアントがサーバーにリクエストを出すとき-サーバーがリクエストを実行するために「私があなたを助けることができるように、もう少し情報を与えてください」と言います。したがって、要求とともに、クライアントは詳細のバンドルを提供します。サーバーは、要求を処理するために必要なすべての情報をバンドルから選択します。このバンドルは、いわゆる「コンテキスト」です。

例えば

患者は医師のところに行き、treat_me(「頭痛がします」)と言います。医師のオフィスは患者に記入するフォームを提供します。患者はフォームに記入します。このフォームは、「treat_me」リクエストを実行するために医師が使用します。

リクエストは次のようになります。

treat_me ( "i have a headache", filled_form_num_23321 ) 

これがどのようにfilled_form_num_23321 見えるかです:

何が原因ですか?A. 10ペグのきちんとしたスコッチラストナイト
Q.患者名?A. Joe Bigdrinker
Q.Age?98

このトランザクションにfilled_form_num_23321は「コンテキスト」があります。

これが「コンテキスト」の概念を明確にするのに役立つことを願っています。


7

私は常に、コンテキストを、使用しているオブジェクトまたは構成に関連する特定の状態と考えています。

たとえば、ビューでdrawRectを使用している場合(ビューに対してすべての描画を行う必要がある場合)は、コアグラフィックスステートメントを発行するcurrentGraphicsContextを常に取得する必要があります。このコンテキストには、ビューの境界、線の色、線を描画するための線の太さ、閉じたパスを塗りつぶすための塗りつぶしの色などが含まれます。このコンテキスト(他のほとんどの場合と同様)は、現時点での現在の状態にすぎません。この場合のグラフィックスコンテキストは、次のような状態のセットとして考えてください。

ストロークの太さは1.5ピクセル、塗りつぶしの色は黒、ビューの境界は(155、200)ストロークの色は赤

基本的には現時点での状態...


5

実用的な例を挙げます。ユーザー(ログオンしたユーザー)とブラウザーの言語に基づいて情報をフェッチ/レンダリングする特定のWebページがあるとします。情報を取得するロジックは、ユーザーや言語に依存しません。あなたのページはユーザーと言語を受け取ります...論理的には、それが私かあなたか、英語かスペイン語かは関係ありません。

いくつかの擬似コード:

class FooPage
{
    void handleRequest(RequestContext context)
    {
        User user = context.getUser();
        Locale locale = context.getLocale();

        … do some logic based on the context
    }
}

それほど難しいことではありませんが、コンセプトを理解するには少し時間がかかります


5

コンテキストは、コード内の特定のポイントから到達可能なシンボルである実行コンテキストと、その特定の実行におけるそれらのシンボルの値を指します。

コンテキストは次の理由で重要な概念です。

  1. 実行可能ユニット(関数、プロシージャ、命令)は、異なる結果を生成したり、コンテキストによって動作が異なる場合があります。
  2. コンテキストが大きくなるほど、または複雑になるほど、コードの動作を理解することが難しくなります(そのため、グローバル変数は回避されます)。

コンテキストクラスを記述したり、コンテキストパラメータを渡す必要はありません。関数/メソッドに渡されるパラメーターは、呼び出されると実行コンテキストの一部になります。

英語を話さなくても、コンテキストモジュール性結合結合などの概念を穏やかに、かつ完全に紹介するために、コードコンプリートのコピーを読むことをお勧めします。


第二版があるようです。そこにもありますか?
user772058 '27年

本屋で第2版を閲覧し、原作にこだわることにしました。理由は覚えていません。
アパララ

2

あなたの場合のコンテキストは、アプリケーションが実行されている環境です。

それはあなたのアプリケーションが適切に実行するために必要とする情報/サービス/能力を提供します。

HTH


0

多くの場合、「コンテキスト」という単語が使用されているコンテキストを読者が詳細に理解していると著者は想定します。

次の文でコンテキストをどのように定義しますか?「?ランタイムは、注入の可能な値を格納できるコンテキストを作成します。このコンテキストは変更できます。たとえば、アプリケーションとフレームワークはコンテキストに要素を追加できます。

作成者がコンテキストを使用して、何かのコンテキストを保持するある種のコンテナー(おそらくヒープ)を意味しているようです。多くの意味と混乱を招く流行語になりました。コンテキストであり、コンテキストに格納されている要素ですか?コンテキストという単語が使用されているというコンテキストの混乱を減らすために、「ランタイムは、コンテキストを要素の形式で格納するコンテナを作成する」と言えます。さらに良いことに、「ランタイムは状態を要素の形式で格納するコンテナを作成し、その状態を持つこのコンテナはCONTEXTと呼ばれます。」


0

3年後なので多分少し遅れますが、多分このスレッドはあなたを助けるでしょう。これは、「コンテキスト」という言葉がプログラミングにおいて技術的な意味を持っていることを示しています(単なる英語の意味ではありません)。

どのプログラミング言語がコンテキストフリーですか?

例として使用して、そこからいくつかの情報を引き出すことができるかどうかはわかりません。私も、技術プログラミング用語「コンテキスト」の言語にとらわれない説明を聞きたいです

編集:または、少なくとも、「コンテキスト」という用語は、技術的なプログラミングコンテキストで使用できることを示しています(意図されていない)。おそらく、この用語の複数の具体的な適用において。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.