代码之家  ›  专栏  ›  技术社区  ›  Roger Pate

习语与模式

  •  14
  • Roger Pate  · 技术社区  · 15 年前

    在编程环境中,如何 idioms patterns ?

    我交替使用这些术语,通常遵循我听过的最流行的叫法,或者最近在当前对话中的叫法,例如“拷贝交换习惯用法”和“单件模式”。

    我能想到的最好的区别是,几乎按字面意思复制的代码通常被称为 图案 而原本不那么字面意思的代码则更常被调用 习语

    4 回复  |  直到 7 年前
        1
  •  6
  •   Laurence Gonsalves    15 年前

    与模式是语言不可知论的观点相反,两者 Paul Graham Peter Norvig 有人认为,使用模式的需要表明您的语言缺少一个特性(访客模式通常被认为是这方面最突出的例子。)

    我一般认为“模式”和“习语”的主要区别在于大小。习惯用法是一些小东西,比如“为保存集合的变量类型使用接口”,而模式往往更大。我认为习语的微小之处确实意味着它们更多地是特定于语言的(我刚才给出的例子是Java习语),但我不认为这是它们的定义特征。

        2
  •  11
  •   Jon Reid    15 年前

    习语是语言特有的。

    模式是独立于语言的设计原则,通常用“模式语言”(一个统一的模板)编写,描述激励环境、优点和缺点等;缺点、相关模式等。

        3
  •  7
  •   Carl Smotricz    15 年前

    当人们从高层(分析师、顾问、学者、方法论大师等)观察程序开发时,看到开发人员在各种情况和环境中一遍又一遍地做同样的事情,那么从观察中获得的智能可以提炼成一种模式。模式是一种使用手边的软件工具“做事情”的方式,这些工具表示一个通用的抽象。

    • 面向对象编程从开发人员那里拿走了全局变量。对于那些仍然需要全局变量但需要一种方法使其使用看起来干净且面向对象的情况,有 单态模式 .

    • case 陈述通过“工厂”或“工厂方法”模式,以一种面向对象的干净方式实现这一点的公认“优雅”方式。

    有时候,很多开发人员都以某种方式做事情,但这是一种不好的方式,不应该被推荐。这可以在 反模式 .

    new Object Object.new 对图案来说是无关紧要的。

    因为模式有点理论化和形式化,所以通常会有一个正式的模式(呵呵,单词重载!让我们用“模板”)来描述它们。此类模板可包括:

    • 名称
    • 限制和限制
    • 怎么做

    *dst++ = *src++
    

    在C语言中,从 src dst 同时增加指向两者的指针;它通常是在一个循环中完成的。显然,您不会在Java或Object Pascal中看到这个习惯用法。

    while <INFILE> { print chomp; }
    

    是一种Perl习惯用法,用于循环输入文件并打印出文件中的所有行。在那个语句中有很多隐式变量的用法。同样,除了在Perl中,您不会在任何地方看到这种特殊语法;但是一个老的Perl黑客会快速查看该语句,并立即识别您正在做什么。

        4
  •  3
  •   Uri    15 年前

    另一方面,模式更不依赖于语言(尽管它们通常指的是特定的范式)。您可能有一些基础设施来支持它们(例如,Spring for MVC),但它们不是也不会是语言结构,而且您可能需要该范例中的任何语言。