关于语言不可知:编程中的术语“上下文”?

The term “Context” in programming?

我已经编程几个月了,一个常用的词是"上下文"类。如EDCOX1,0,(Java),EDCOX1,1,(Android),EDCOX1,2,(Java,Android),EDCOX1,3,(Objul-C,IOS)。

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

我一直在寻找堆栈溢出的上下文,但没有任何问题/答案能够帮助我。

如果有人能给我解释,我会很高兴的。


假设你去看牙医拔牙。

当接待员问你的名字时,这是他们开始约会所需要的信息。在这个例子中,您的名字是上下文信息。所以在看牙医的时候,你需要提供你的名字来拔牙。

现在假设你走到银行。

在银行,你要求提取100美元。出纳员在给你钱之前需要确认你的身份,所以你可能需要给他们出示驾驶执照,或者刷卡,然后输入你的密码。不管怎样,你提供的都是上下文。出纳员使用这些信息将交易向前移动。然后他们可能会问你想从哪个账户取款。当你回答"我的储蓄账户"的时候,这是更具体的情况。

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

现在让我们假设你拿着100美元买了一张飞机票飞到温暖的地方,而你的嘴在愈合。

你到达了一个阳光明媚的目的地,但你的包没法到达。它在机场系统的某个地方丢失了。所以,你把"行李认领单"(带条形码的贴纸)带到"行李寄存处"。桌子后面的人要的第一件事就是你的行李号上的那张票。这是一些必需的上下文的例子。

但是行李员会询问你有关袋子的更多信息,这样他们就可以更容易地找到行李。他们问:"它是什么颜色的?"它是多大尺寸的?它有轮子吗?它是硬的还是软的?虽然他们不一定需要这些信息,但如果您提供这些信息,它有助于缩小范围。它减少了问题区域。它使搜索速度更快。这是可选的上下文。

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

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

希望有帮助。


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

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

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


这是2015年5月,也就是这条线开始的几年之后。

尽管如此,我发布这条信息是为了帮助像我这样难以理解"背景"的人。

我决不要求在Java程序中使用上下文——所以完全由你来编写硬编码中的上下文。所以这里是:

"Conceptually context" is the same"as tell me more" When a client
makes a request to server - in order to carry out the request the
server says"give me some more info so that i can help you". Thus,
alongwith the request, the client provides a bundle of details. The
server picks and chooses from the bundle all pieces of info required
to serve the request. This bundle is what is called"Context"

例如。

Patient goes to doc and says treat_me ("I have a headache" ) Doc
office gives the patient a form to fill. Patient fills form. The form
is used by the doctor to carry out the"treat_me" request.

下面是这个请求现在的样子:

1
treat_me ("i have a headache", filled_form_num_23321 )

下面是EDOCX1的0个样子:

Q.What lead to the condition ? A. 10 pegs of neat Scotch last nite
Q.Patient name ? A. Joe Bigdrinker
Q.Age ? 98

在本次交易中,filled_form_num_23321是"上下文"。

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


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

例如,在视图中使用drawrect(必须为视图绘制所有图形)时,必须始终获取将在其中发布核心图形语句的当前图形上下文。此上下文包含诸如视图边界、笔划颜色、用于绘制线条的笔划粗细、用于填充闭合路径的填充颜色等内容。此上下文(与大多数其他上下文一样)只是此时的当前状态。因此,在本例中,将图形上下文视为一组状态,例如

笔划加厚为1.5像素填充颜色为黑色视界是(155200)笔划颜色为红色

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


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

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

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

    尽管你不是一个讲英语的人,但我建议你仔细阅读一份完整的代码副本,对诸如上下文、模块化、耦合、内聚等概念进行温和而全面的介绍。


    举例说明。假设您有一个特定的网页,可以根据用户(登录的用户)和浏览器的语言来获取/呈现某些信息。获取信息的逻辑独立于用户和语言。您的页面将接收用户和语言…从逻辑上讲,不管是我、你、英语还是西班牙语。

    一些伪代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class FooPage
    {
        void handleRequest(RequestContext context)
        {
            User user = context.getUser();
            Locale locale = context.getLocale();

            … do some logic based on the context
        }
    }

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


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

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

    高温高压


    3年后,也许会晚一点,但是,也许这条线会对你有所帮助。它说明了"上下文"这个词在编程中具有技术意义(而不仅仅是简单的英语意义)。

    什么编程语言是无上下文的?

    不确定是否可以将其作为示例并从中提取一些信息。我也很想听到对技术编程术语"上下文"的语言不可知论解释。

    编辑:或者它至少表明了术语"上下文"可以应用于技术和编程上下文中(不打算使用双关语)。可能在该术语的多个具体应用中。


    作者常常假定读者对"context"这个词所用的上下文有一个详细的理解。

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

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