代码之家  ›  专栏  ›  技术社区  ›  Corbin March

什么是编程习惯用法?

  •  83
  • Corbin March  · 技术社区  · 16 年前

    我看到“编程习惯用法”这个短语被抛来抛去,好像它是普遍理解的。然而,在搜索结果和stackoverflow中,我看到了一切。..

    来自微:

    • 递增变量
    • 表示无限循环
    • 交换变量值

    中等:

    宏:

    “编程习惯用法”有一个统一的、通用的定义吗?由于“编程习惯用法”在许多范围内都有使用:

    • 微观:句法细微差别或常见句法
    • 媒介:常见风格和图案
    • 宏:作为习语的编程范式

    在这些范围内使用该短语有效吗?到目前为止,答案主要集中在句法习语上。其他的也有效吗?

    10 回复  |  直到 15 年前
        1
  •  60
  •   Christian Lescuyer    16 年前

    编程习惯用法是用特定语言编写任务的常用方法。例如,在C中,循环通常是这样写的:

    for (i=0; i<10; i++)
    

    PHP会理解类似的构造:

    for ($i = 1; $i <= 10; $i++)
    

    但在PHP中,不建议在数组上循环。在这种情况下,您将使用:

    foreach ($arr as $value)
    

    而在Ruby中,你会使用:

    (1..10).each
    

    对于循环,或者:

    array.each
    

    用这些语言编写循环有很多种可能性。使用这个成语可以让有经验的读者立即认出它。然后,他们可以把时间花在更重要的问题上。

        2
  •  24
  •   James Curran    16 年前

    (非编程)语言中的“习语”是特定语言特有的说法或表达。一般来说,一些不符合语言“规则”的东西,只是因为母语人士“只知道”它的意思而存在。(例如,在英语中,我们说“in line”但“out” 属于的 行”——这将是惯用语)

    将其转移到编程领域,我们会得到这样的结果:

     if(c=GetValue())
     {...}
    

    这实际上意味着:

     c = GetValue();
     if (c != 0)
     {....}
    

    这是每个C/C++程序员都能理解的,但会让来自不同编程语言的人完全困惑。

        3
  •  14
  •   Sam Hasler zpesk    16 年前

    看见 http://en.wikipedia.org/wiki/Programming_idiom

    编程习惯用法是一种模式、算法或代码结构方式。谈论编程习惯就是谈论代码中频繁出现的模式或提出新的模式。

    熟悉习语,尤其是较大的习语的好处是,在查看代码时,你可以看到几行代码,但由于它是一个特定的习语,你可以在脑海中将代码表示为一个单一的习语,而不必逐一阅读和理解每一行。

    说代码不地道,就是说它没有以允许人类读者有效思考代码的方式构建自己。

        4
  •  3
  •   Jim C    16 年前

    习语是语言学中的一个术语。这是一组没有字面意思的单词。例如,当某人感觉不舒服时,说他“身体不舒服”。这个特别的短语来自水手们谈论乘客时,晕船的乘客会去“天气”甲板下,那里的船只运动较少。但我们大多数人都不是水手,也不知道这个短语的字面意思。

    在编程中,即使是大多数指令都是英语单词,公众也无法理解。例如“for循环”。虽然它们对程序员来说有意义,但对大多数其他人来说却没有意义。

        5
  •  3
  •   Ahmad Ajmi    12 年前

    由于大型程序是从小程序发展而来的,因此至关重要的是,我们要开发一系列标准程序结构,我们已经确定了它们的正确性——我们称之为习语——并学会使用经过验证的组织技术将它们组合成更大的结构。

    程序员应该掌握好的算法和习惯用法。

    Alan J.Perlis- SICP Foreword

        6
  •  2
  •   Mat Nadrofsky    16 年前

    来自 WikiPedia :编程习语是一种在一种或多种编程语言中表达重复构造的方法。

    我猜你已经走上了那条路!

        7
  •  2
  •   Zuu    16 年前

    成语是 可以在几个地方识别的“模式”。

    我不会说这与特定的编程语言有关。

    Iterator foo;
    foo.reset();
    while (foo.next())
    {
        print(foo.value());
    }
    

    这是我所说的“for each”习语的一小部分,在许多语言中表达略有不同。

    成语的另一个很好的例子是 插座 所有声称有套接字的平台,在概念上都以相同的方式工作,也就是说,它们都有大致相同的接口。

        8
  •  1
  •   Aaron Palmer    16 年前

    习语是一种表达特定语言特有事物的方式。例如,这里有几个 english idioms .

    你可以推断出这一点,将这一概念应用于编程。

        9
  •  1
  •   ibm2100    13 年前

    尽早陷入困境:以同样的方式完成同样的过程。积累成语。标准化。莎士比亚和你之间唯一的区别(!)是他的习语列表的大小,而不是他的词汇量。

    • ALAN PERLIS,程序设计中的象形图

    http://www.cs.yale.edu/quotes.html

        10
  •  0
  •   Martin Spamer    6 年前

    它来自 idiomatic 这个词的意思 idiom 在编程中,可以概括为一个短语,它承载的意义和含义超过了单词的总和。在编程中,大多数代码片段实际上都是惯用的。 ' 修饰或符合语言的自然表达方式 '

    编程习语可以被认为是对一类可转移到不同情况的解决方案的描述。考虑 while { ... } 兽医 do {} while 这些都是惯用语,它们包含相同的单词,但顺序有一个重要的区别。确切的措辞会因语言而异,但基本含义和含义会有所不同;例如 do{}while 无论使用什么语言或语句来实现它,它总是会被执行一次。作为一个习语,它是一个想法的可转移形式。它可以在许多情况下使用,并用不同的单词(语句/命令)表示,但基本结果总是相同的。