首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在动态语言中进行不同的编程?

如何在动态语言中进行不同的编程?
EN

Stack Overflow用户
提问于 2008-12-18 20:24:22
回答 15查看 2K关注 0票数 30

一个真正知道如何利用动态编程语言的人如何以不同于使用静态语言的人的方式进行编程?

我很熟悉关于静态类型和动态类型的整个争论,但这不是我要说的。我想讨论在动态语言中实用但在静态语言中不实用的问题解决技术。

我见过的大多数用动态编程语言编写的代码与用静态编程语言编写的代码没有太大区别。俗话说得好,你可以用任何语言写FORTRAN,很多人都是这样做的。但是有些人使用动态编程语言来解决问题,而这种方法很难转换为C++。他们的一些技术是什么?

有哪些讨论如何使用动态编程语言的好资源?不是关于语言语法或API参考的书籍,而是关于利用动态语言功能的问题解决方法的资源。

编辑(2009年1月5日):我很欣赏下面的答案,但它们似乎没有考虑到动态语言倡导者所说的生产力的巨大提高。

EN

回答 15

Stack Overflow用户

发布于 2009-04-09 04:15:46

我喜欢斯利姆的回答。我确实在Java和C++上花费了大量的时间来制作定制的数据结构,这些数据结构在Python/Ruby中是免费的。并制作专门的函数来处理这些自定义数据结构。是的,在C++中,STL真的很不错。是的,Java中的泛型很好。它们有助于更快地创建自定义数据结构,但它们仍然需要大量的思考和考虑。

然而,还有一个更根本的原因,为什么动态语言更容易使用。这是一个很深的想法,叫做“鸭子类型”。上面的一些评论提到了鸭子类型,但请花点时间思考一下什么是鸭子类型。这是一种根本不同的看待世界的方式。与Java和C++等语言不兼容的视图。

鸭子类型意味着你不会浪费时间去定义什么是鸭子。由于不必正式定义对象,您节省了大量的时间和精力。正确的定义是很难的。请看我的这篇博客文章,其中我给出了例子:Formal definitions are less useful than you think

事实证明,鸭子类型非常有用。正是"Must Ignore" principle in XML让XML在网络上变得如此重要和有用。但这只是一个鸭子类型的实例。

表达鸭子类型的另一种方式是通过Web口头语“严格对待所发送的内容,慷慨对待所接受的内容”。这也是一个非常基本的想法。

最后,您可能想回到我的一篇长篇博客文章中,在那篇文章中,我解释了鸭子类型以及它与AI和建模等事物的关系:Duck Typing, Artificial Intelligence and Philosophy

票数 9
EN

Stack Overflow用户

发布于 2008-12-18 20:38:20

我通常发现自己利用动态编程语言的一种方式是简化和澄清语法。例如,如果我表示一个数据库,如果我可以动态地为它的表、表和行的列等在数据库对象上加载属性和方法,那么我用来与它交互的语法就会清晰得多。不同之处可能在于:

代码语言:javascript
运行
复制
$row = $db->getTable('user')->getRow(27);
$row->setValue('name', 'Bob');

代码语言:javascript
运行
复制
$row = $db->user->getRow(27);
$row->name = 'Bob';

当你在做复杂的事情时,第二种形式的“视觉噪音节省”真的开始积累起来。

票数 4
EN

Stack Overflow用户

发布于 2009-02-05 20:07:48

动态语言可以在运行时更改对象,您可以添加方法、属性...

动态语言魔力的一个很好的例子是这个Groovy代码片段,它只需两行代码就可以调用One服务上的方法:

代码语言:javascript
运行
复制
def proxy = new SoapClient("http://localhost:6980/MathServiceInterface?wsdl");
def result = proxy.add(1.0, 2.0);

这是另一个从XML中提取数据的Groovy代码片段:

代码语言:javascript
运行
复制
def contacts = new XmlParser().parseText("<contacts><name>Bahaa Zaid</name></contacts>");
def myName = contacts.name[0].text();

在静态语言中不能做到这一点。动态语言可以改变对象以反映实际的运行时条件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/379128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档