编程中的术语“上下文”?[关闭]


161

我已经编程了几个月了,在课堂上一个经常使用的词是“ context”。像ServletContext(Java),Activity(Android),Service(Java,Android),NSManagedContext(Objective-C,iOS)。

通过查看字典,我看到这个词的意思是:情况,环境,情况等。但是,由于我不是英语母语人士,所以我不明白我应该将其直接翻译成什么意思。例如,如果我要编写一个名为SomeClassContext或具有上下文参数的方法的类,那么我将不知道何时应为其命名上下文,因为我不理解它。

我一直在寻找有关Stack Overflow的上下文,但是没有任何问题/答案能够帮助我。

如果有人可以向我提供解释,我将非常高兴。


6
上下文在说:该对象在其中起作用的区域。
布伦德尔

7
上下文是某个时间点的对象或系统的状态
Matt

Answers:


190

假设您去看牙医拔出牙齿。

当接待员询问您的姓名时,这就是他们开始约会所需的信息。在此示例中,您的名字是上下文信息。因此,在上下文看牙医,你需要提供您的姓名,让您的牙拔掉。

现在,假设您走到银行。

在银行,您要求提取$ 100。出纳员需要先确定您的身份,然后才能给您钱,因此您可能必须向他们出示驾驶执照或刷ATM卡并输入PIN码。无论哪种方式,您提供的都是context。柜员使用此信息来推动交易前进。然后,他们可能会问您您要从哪个帐户中提款。当您回答“我的储蓄帐户”时,就更能说明问题了

您提供的上下文越多,另一方就必须更多地帮助您处理请求。有时上下文是可选的(例如,在您的Google搜索中键入越来越多的单词以获得更好的结果),有时则是必需的(例如,在ATM上提供您的PIN码)。无论哪种方式,通常都是有助于完成工作的信息。

现在,假设您拿$ 100买了张机票,在嘴巴愈合的时候在温暖的地方飞行。

您到达了一个阳光明媚的目的地,但您的皮包却没有成功。它在机场系统的某个地方丢失了。因此,您将“行李认领票”(带有条形码的不干胶标签)带到“行李寄存处”。桌子后面的人首先要问的是那张票上有您的行李号码。这是一些必需上下文的示例。

但是随后,行李员要求您提供有关您的行李的更多信息以便他们可以更轻松地找到它。他们问:“ 它是什么颜色?它是什么尺寸?它有轮子吗?是硬的还是软的?虽然他们不一定需要这些信息,但如果您提供这些信息,它可以缩小范围。问题的区域。这使得搜索速度更快。这是可选的上下文

这是有趣的部分:对于许多软件和API,所需的上下文通常以方法签名中的实际参数结尾,而可选的上下文则位于其他地方,例如可以包含任何内容(可能为空)的灵活键值映射)或放入线程本地存储中(如果需要,可以在其中进行访问)。

上面的示例来自现实生活,但是您可以轻松地将它们映射到计算机科学领域。例如,HTTP标头包含上下文信息。每个标题都与有关正在发出的请求的信息有关。或者,当您在两阶段提交过程中沿着全局事务ID发送时,该事务ID为上下文。它可以帮助事务经理协调工作,因为它是有关手头总体任务的信息。

希望有帮助。


22
@Brian:从您的帖子以及此处给出的其他答案中,我想我可能会开始理解它。承载有关事件的状态信息的对象是“上下文”对象吗?正确吗?因此,RequestContext对象将携带有关特定请求的信息,对吗?并且当另一个请求到来时,附加到RequestContext对象的信息将更改。说上下文对象有点像DTO(数据传输对象)是错误的吗?但是,上下文包含有关不同的相关“事物”的信息,而DTO包含诸如人之类的对象的信息吗?谢谢
2011年

9
您已将其钉牢,这是完全正确的。一个RequestContext确实会携带有关正在进行的请求的信息(例如,客户端的语言环境)。上下文与DTO / VO相似,但通常不是强类型的。但是您已经知道了这个概念。
布莱恩·凯利

5
@布赖恩:当谈到上下文菜单时,我想到了另一个问题,我从这个答案中学到的上下文的含义在我脑海中是没有意义的。据我了解,上下文是某些事物的携带状态(简称)。那么,以这种方式使用“上下文”一词意味着什么呢?
user772058 2011年

9
好问题。“上下文菜单”中“上下文”的含义是,“在菜单上看到的内容取决于您单击的位置,单击的时间以及应用程序中正在发生的事情”。这些信息(您单击的位置/时间/位置)代表上下文,并将其发送到GUI代码,以便它可以决定菜单上要提供的内容。
布莱恩·凯利

2
因此,该方法的参数是上下文。我错了吗?
CanAydoğan2013年

14

上下文可以看作是传递信息的存储桶。它通常用于传递不一定与方法调用直接相关的东西,但仍可能是相关的。外行描述它的方式可能是“您可能关心的东西”。

例如,如果您正在编写服务来更新db中的值,则可能会传递记录ID和新值。

如果需要通用接口,则还可以定义要传递的上下文,以便该服务可以执行任意业务逻辑。因此,您可以在上下文中包括用户身份验证,用户的会话状态等,因为服务可能依赖于这些值执行其他逻辑。


7
思考它的另一个有用方法是“有关正在发生的事情的信息”。或更学术上讲,它是“元信息”。这是一个很学术的短语,但这是正确的。在这种情况下。
布莱恩·凯利

4
它基本上在某个时间点的状态,没有更复杂的比
马特·

13

这是2015年-此线程开始可能已经好几年了。

尽管如此,我仍在发布此消息,以帮助像我这样努力理解“上下文”的任何人

我决不声称自己在Java程序中使用过Context-因此,完全由您决定以硬编码方式编写Context就是这样:-

“从概念上讲,上下文”与“告诉我更多”相同,当客户端向服务器发出请求时-为了执行请求,服务器会说“给我更多信息,以便我可以帮助您”。因此,客户端与请求一起提供了一堆详细信息。服务器从捆绑中挑选并满足服务请求所需的所有信息。该捆绑包称为“上下文”

例如

病人去看医生说“ treat_me”(“我头疼”),医生办公室给病人填写了一张表格。患者填写表格。医生使用该表格执行“ treat_me”请求。

现在是该请求的外观:

treat_me ( "i have a headache", filled_form_num_23321 ) 

这里是如何filled_form_num_23321 的外观:

问:导致这种情况的原因是什么?A.整齐的苏格兰威士忌最后钉住10
根Q.患者姓名?答:Joe Bigdrinker
问:年龄?98

在此事务中filled_form_num_23321是“上下文”。

希望这有助于阐明“上下文”的概念。


7

我一直认为上下文是与我正在使用的对象或构造相关的特定状态。

例如,当您在视图中使用drawRect时(必须为视图完成所有绘制),必须始终获取currentGraphicsContext,以在其中发布核心图形语句。此上下文包含视图边界,笔触颜色,用于绘制线条的笔触粗细,用于填充闭合Path的填充颜色等内容。此上下文(与大多数其他上下文一样)只是该时间点的当前状态。因此,在这种情况下,可以将图形上下文视为一组状态,例如

笔触变厚为1.5像素填充颜色为黑色视界为(155,200)笔触颜色为红色

它基本上是当前时间点的状态...


5

举一个实际的例子。假设您有一个网页,可以根据用户(已登录)和浏览器的语言来获取/呈现一些信息。提取信息的逻辑与用户和语言无关。您的页面将接收用户和一种语言...对于逻辑而言,无论是我还是您,还是英语还是西班牙语,都没有关系。

一些伪代码:

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 2011年

我在书店里浏览了第二版,并决定坚持使用原版。我不记得为什么。
2011年

2

在这种情况下,上下文是应用程序运行所在的环境。

它提供了应用程序正常运行所需的信息/服务/功能。

高温超导


0

作者常常以为读者对使用“上下文”一词的上下文有详细的了解。

如何在下面的句子中定义上下文?“运行时创建了一个上下文,可以在其中存储可能的注入值。可以修改此上下文,例如,应用程序和框架可以向该上下文中添加元素。

看来作者在使用上下文来表示某种容器,也许是一个堆,用于保存某些内容的上下文。它已经成为一个流行词,具有许多含义和令人困惑的事物。是元素是上下文并且正在存储在上下文中吗?为了减少使用“上下文”一词所引起的上下文的混淆,可以说“运行时创建了一个以元素形式存储上下文的容器”。更好的是,“运行时创建了一个以元素形式存储状态的容器,并且该容器及其状态称为CON​​TEXT。”


0

3年后,因此可能要晚一些,但是,也许此线程可以为您提供帮助。它说明了“上下文”一词在编程中具有技术含义(不仅仅是简单的英语含义)。

哪些编程语言是无上下文的?

不知道是否可以将其用作示例,并从中提取一些信息。我也很想听听对技术编程术语“上下文”的语言不可知的解释

编辑:或至少表明术语“上下文”可以在技术,编程上下文中使用(无双关)。可能在该术语的多个具体应用中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.