编程中的术语“上下文”?

时间:2011-05-26 21:08:06

标签: language-agnostic programming-languages terminology

我已经编程了几个月了,一个经常使用的词是类中的“上下文”。与ServletContext(Java),Activity(Android),Service(Java,Android),NSManagedContext(Objective-C,iOS)一样。

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

我一直在Stack Overflow上搜索上下文,但没有问题/答案能够帮助我。

如果有人可以向我提供解释,我会很高兴。

9 个答案:

答案 0 :(得分:172)

让我们说你去看牙医拔牙。

当接待员询问您的姓名时,他们需要这些信息才能开始预约。在此示例中,您的名称是 上下文信息 。因此,在访问牙医的 背景 中,您需要提供您的名字以便拔牙。

现在让我们说你走到银行。

在银行,你要求提取100美元。出纳员需要在给您钱之前建立您的身份,因此您可能需要向他们出示驾驶执照或刷卡您的ATM卡并输入您的密码。无论哪种方式,您提供的是上下文。出纳员使用此信息来推进交易。然后,他们可能会询问您要退出的帐户。当您回答“我的储蓄账户”时,甚至更多上下文

您提供的背景越多,对方帮助处理您的请求的知识就越多。有时上下文是可选的(比如在Google搜索中输入越来越多的单词以获得更好的结果),有时需要(例如在ATM上提供您的PIN码)。无论哪种方式,它的信息通常有助于完成工作。

现在让我们假设你花100美元购买机票,在你的嘴痊愈时飞到温暖的地方。

你到达一个阳光明媚的目的地,但你的包没有。它在机场系统的某个地方丢失了。因此,您将“行李认领券”(带有条形码的贴纸)带到“行李丢失办公室”。桌子后面的人要求的第一件事就是带有行李号码的车票。这是一些必需背景的示例。

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

这是有趣的部分:对于许多软件和API,必需的上下文通常最终作为方法签名中的实际参数,可选上下文到达其他地方,像一个灵活的键值映射,可以包含任何东西(可能是空的),也可以包含在线程本地存储中,如果需要可以访问它。

以上示例来自现实生活,但您可以轻松地将它们映射到计算机科学领域。例如,HTTP标头包含上下文信息。每个标题与关于正在进行的请求的信息有关。或者,当您将全局事务ID作为two-phase commit process的一部分发送时,该事务ID是上下文。它有助于事务管理器协调工作,因为它是关于手头的整体任务的信息。

希望有所帮助。

答案 1 :(得分:14)

可以将上下文视为传递信息的桶。它通常用于传递不一定直接绑定到方法调用的东西,但仍然可能是相关的。描述它的非专业方式可能是“你可能关心的东西”。

例如如果你正在编写一个服务来更新数据库中的值,你可能会传入记录ID和新值。

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

答案 2 :(得分:11)

这是2015年 - 也就是这个帖子开始后的几年。

尽管如此,我发布这条消息是为了帮助那些像我一样的人,他们正在努力理解“上下文”

我没有声称在Java程序中使用了Context - 所以完全取决于你在硬编码中编写Context 所以这里: -

  

“概念上下文”与“告诉我更多”是一样的客户   向服务器发出请求 - 以便执行请求   服务器说“给我一些更多的信息,以便我可以帮助你”。从而,   随着请求,客户端提供了一组详细信息。该   服务器从捆绑中挑选并选择所需的所有信息   服务请求。这个包就是所谓的“上下文”

E.g。

  

病人去找医生并说treat_me(“我头疼”)Doc   办公室给病人填写表格。患者填写表格。表格   医生用它来执行“treat_me”请求。

以下是请求现在的样子:

treat_me ( "i have a headache", filled_form_num_23321 ) 

filled_form_num_23321的外观如下:

  问:导致这种情况的原因是什么? A. 10个整齐的苏格兰最后一个钉子   Q.Patient名字? A. Joe Bigdrinker
Q.Age? 98

在此交易中,filled_form_num_23321是“上下文”。

希望这有助于澄清“语境”的概念。

答案 3 :(得分:7)

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

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

笔划粗细为1.5像素 填充颜​​色是黑色 视界是(155,200) 笔触颜色为红色

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

答案 4 :(得分:5)

上下文是指执行上下文,它是从代码中给定点可到达的符号,以及该特定执行中这些符号的值。

上下文是一个重要的概念,因为:

  1. 可执行单元(函数,过程,指令)可能会产生不同的结果,或者在不同的上下文中表现不同。
  2. 上下文越大或越复杂,就越难理解一段代码的作用(这就是全局变量被避开的原因)。
  3. 您不必编写上下文类或传递上下文参数。传递给函数/方法的任何参数在调用时都会成为执行上下文的一部分。

    即使您不是英语使用者,我建议您阅读Code Complete的副本,以便对 context 模块化等概念进行温和而全面的介绍耦合凝聚力,等等。

答案 5 :(得分:4)

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

一些伪代码:

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

        … do some logic based on the context
    }
}

它并不困难,但需要一些时间来理解这个概念

答案 6 :(得分:1)

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

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

HTH

答案 7 :(得分:0)

作者常常假设读者对上下文这个词有详细的理解" context"正在使用。

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

似乎作者使用上下文来表示某种容器,也许是一个堆,它包含某些东西的上下文。它已成为流行词,带来许多意义和令人困惑的事情。是元素是上下文并存储在上下文中。为了减少使用单词上下文的上下文的混淆,可以说"运行时创建一个容器来以元素的形式存储上下文。"更好的是"运行时创建一个容器来以元素的形式存储状态,这个容器的状态称为CON​​TEXT。"

答案 8 :(得分:0)

3年后所以也许有点晚了,但是,也许这个帖子可以帮到你。它说明了" context"在编程中具有技术意义(不仅仅是简单的英语含义)。

What programming languages are context-free?

不确定您是否可以将其用作示例并从中提取一些信息。我也很乐意听到技术编程术语的语言无关解释" context"

编辑:或者它至少显示术语" context"可以应用于技术,编程环境(没有打算)。可能在该术语的多个具体应用中。