ChatGPT解决这个技术问题 Extra ChatGPT

什么是编程习语?

我看到“编程成语”这个短语被大家所理解。然而,在搜索结果和stackoverflow中,我看到了一切......

从微:

增加一个变量

代表一个无限循环

交换变量值

中等:

PIMPL

RAII

格式、评论、风格……

宏:

编程范式或常用库功能作为成语

流程模型作为成语

成语集合等于新范式

“编程习语”有一个单一的通用定义吗?由于“编程习语”在许多范围内使用:

微观:句法细微差别或通用句法

介质:常见的样式和图案

宏:作为成语的编程范式

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

编程习语是用编程语言编写的idiom

C
Christian Lescuyer

编程习惯是用特定语言编写任务的常用方法。例如,在 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

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


J
James Curran

(非编程)语言中的“成语”是特定语言独有的说法或表达。通常一些不遵循语言“规则”的东西,只是因为母语人士“知道”它的意思而存在。 (例如,在英语中我们说“in line”但“out of line”——这是惯用语)

将其移至编程领域,我们得到如下内容:

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

这实际上意味着:

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

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


-1 虽然成语可能会受到语法的影响,但我认为它们还有更多。
我喜欢这个答案。在自然语言中,习语是不能从其组成术语的含义中构造出来的东西。换句话说,它在语义上是一个不可分割的原子,尽管在句法上它可以被分割。所以在编程中,习语是你不会质疑的东西,只是死记硬背,可以提高效率。
S
Sam Hasler

请参阅http://en.wikipedia.org/wiki/Programming_idiom

编程习语是一种模式、算法或结构化代码的方式。谈论编程习语就是谈论那些在代码中经常出现的模式或提出新的模式。

熟悉惯用语,尤其是较大的惯用语的好处是,在查看代码时,您可以看到几行代码,但由于它是一个特定的惯用语,因此您可以在心理上将代码表示和思考为单个惯用语,而不是必须单独阅读和理解每一行。

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


J
Jim C

成语是语言学的一个术语。它是一组字面意思不是字面意思的词。例如,当某人感觉不舒服时,说他们“不舒服”。这个特殊的短语来自水手们谈论乘客,晕船的乘客会去到船舶运动较少的“天气”甲板下面。但我们大多数人都不是水手,也不知道这句话的字面意思。

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


-1:编程习惯与非编程变体不同。
……但事实并非如此。
A
Ahmad Ajmi

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

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

艾伦 J. 玻璃市 - SICP Foreword


M
Mat Nadrofsky

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

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


这只是将问题委托给“什么是构造?”是微观的、中等的还是宏观的?
Z
Zuu

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

我不会说它与特定的编程语言有任何关系。

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

这是我称之为“for each”成语的片段,它在多种语言中的表达方式略有不同。

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


当我听到“Socket”时,我想到的是“I/O pattern”。我不认为它是一个成语——模式存在于不同的语言中,而(正如大多数其他回答者所描述的)成语往往是特定于语言的。
我没有给出我的具体答案,试图区分“成语”和“模式”,如果您阅读前五个单词,这应该很清楚。它的目的是提供信息和解释性的答案。
A
Aaron Palmer

成语是一种表达特定语言特定内容的方式。例如,这里有几个 english idioms

您可以推断这一点以将该概念应用于编程。


i
ibm2100

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

ALAN PERLIS,编程中的警句

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


M
Martin Spamer

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

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