术语“上下文”;在编程吗?

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

通过查字典,我知道这个词的意思是:处境,环境,情况等。然而,因为我的母语不是英语,我不知道我应该直接翻译成什么。例如,如果我要编写一个命名为SomeClassContext的类,或者一个具有上下文参数的方法,我将不理解什么时候应该将其命名为context,因为我不理解它。

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

如果有人能给我解释一下,我将非常高兴。

56594 次浏览

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

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

如果需要通用接口,还可以定义要传递的上下文,这样服务就可以执行任意业务逻辑。因此,您可以包括用户身份验证、用户会话状态等等……在上下文中,因为服务可能根据这些值执行额外的逻辑。

举一个实际的例子。假设你有一个特定的网页来获取/呈现基于用户(登录)和浏览器的语言的一些信息。获取信息的逻辑独立于用户和语言。您的页面将接收一个用户和一种语言…从逻辑上讲,是我还是你,是英语还是西班牙语并不重要。

一些伪代码:

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


… do some logic based on the context
}
}

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

我总是认为上下文是与我正在处理的对象或结构相关的特定状态。

例如,当你在一个视图中使用drawRect(其中所有的绘制都必须为一个视图完成)时,你必须总是获得currentGraphicsContext,你将发出你的核心图形语句。这个上下文包含了视图的边界、笔画颜色、绘制线条的笔画粗细、填充封闭路径的填充颜色等。这个上下文(像大多数其他上下文一样)只是这个时间点的当前状态。在这种情况下,把图形环境看作是一组状态,比如

描边厚度为1.5像素 填充颜色为黑色 视界为(155,200) 笔画颜色为红色

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

假设你去牙医那里拔了一颗牙。

当接待员问你的名字时,这是他们开始约会所需的信息。在这个例子中,你的名字是< >强上下文信息< / >强。所以在拜访牙医的< >强背景下< / >强中,你需要提供你的名字来拔牙。

现在假设你走到银行。

在银行,你要求取100美元。柜员在给你钱之前需要确认你的身份,所以你可能需要向他们出示驾照或刷你的ATM卡并输入你的密码。无论哪种方式,你所提供的是上下文。出纳使用这些信息来推动交易。然后他们可能会问你想从哪个账户中提取。当你回答,“我的储蓄帐户”,那甚至是更多的上下文

你提供的背景信息越多,对方就有越多的知识来帮助处理你的请求。有时上下文是可选的(比如在谷歌搜索中输入越来越多的单词以获得更好的结果),有时它是必须的(比如在自动取款机上提供你的密码)。不管怎样,这些信息通常都有助于完成工作。

现在让我们假设你拿着100美元买了一张机票,在你的口腔愈合期间飞往一个温暖的地方。

你到达了一个阳光明媚的目的地,但你的包没能到达。在机场系统的某个地方丢失了。所以,你拿着你的“行李认领票”(上面有条形码的贴纸)去行李丢失处。柜台后面的人首先要的是那张有你行李号的机票。这是一些所需的上下文的例子。

但是行李员会问你更多的信息,这样他们就可以更容易地找到它。他们会问:“虽然他们不一定需要这些信息,但如果你提供这些信息,就能帮助他们缩小范围。它减少了问题区域。它使搜索速度更快。这是可选的上下文

有趣的是:对于很多软件和api, 所需的上下文通常最终作为方法签名中的实际参数,而可选的上下文则放在其他地方,比如一个灵活的键值映射,可以包含任何内容(可能是空的),或者放入线程本地存储,在需要时可以访问它。

上面的例子来自现实生活,但你可以很容易地将它们映射到计算机科学领域。例如,HTTP报头包含上下文信息。每个报头都与正在发出的请求的信息关于相关。或者当你将全局事务ID作为两阶段提交过程的一部分发送时,该事务ID就是context。它帮助事务管理器协调工作,因为它是手边的总体任务的信息。

希望这能有所帮助。

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

背景是一个重要的概念,因为:

  1. 可执行单元(函数、过程、指令)在不同的上下文中可能产生不同的结果或表现不同。
  2. 上下文越大或越复杂,就越难以理解一段代码的作用(这就是避免使用全局变量的原因)。

你不必编写上下文类或传递上下文参数。传递给函数/方法的任何参数在调用时都成为执行上下文的一部分。

即使你不是说英语的人,我建议你阅读代码完成,对上下文模块化耦合凝聚力等概念进行温和而全面的介绍。

作者常常假定读者对“上下文”这个词所处的语境有详细的了解。

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

似乎作者使用上下文来表示某种容器,也许是堆,它保存了某个东西的上下文。它已经成为一个流行词,具有许多含义和令人困惑的东西。是存储在上下文中的上下文元素吗?为了减少上下文的混淆,可以这样说:“运行时创建了一个容器,以元素的形式存储上下文。”更好的是“运行时创建一个容器来以元素的形式存储状态,这个包含它的状态的容器称为CONTEXT。”

这是2015年,在这篇文章开始的5年之后。

尽管如此,我发布这条消息是为了帮助那些像我一样难以理解“上下文”的人

我绝不声称在Java程序中使用了上下文-因此完全取决于您在硬编码中编写上下文 所以这里是:-

“概念上的上下文”和“告诉我更多”是一样的 向服务器发出请求-以便执行请求 服务员说:“给我更多的信息,这样我可以帮助你。”因此, 除了请求,客户端还提供了一组详细信息。的 服务器从包中选择所需的所有信息 为请求服务。这个bundle就是所谓的Context

如。

病人去看医生,说治疗我(“我头痛”)医生 办公室给了病人一张表格让他们填写。病人填写表格。表单

?

下面是请求现在的样子:

treat_me ( "i have a headache", filled_form_num_23321 )

下面是filled_form_num_23321的样子:

< p >。是什么导致了这种情况?A.昨晚10桶纯苏格兰威士忌
病人姓名?A. Joe Bigdrinker大酒鬼年龄吗?98 < / p >

在这个事务中,filled_form_num_23321是“上下文”。

希望这有助于澄清“上下文”的概念。

在您的案例中,上下文是运行应用程序的环境。

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

HTH