我必须用APL编写代码。由于代码要维护很长时间,我想知道是否有一些论文/书籍包含启发式/提示/样本,以帮助设计干净和可读的APL程序。
这是一种与用其他编程语言编码不同的体验。例如,制作一个函数。小的不会有帮助:这样的函数可以包含一行代码,这是完全无法理解的。
发布于 2012-12-14 22:46:22
首先,欢迎来到APL的奇妙世界。
编写可读性和可维护性的APL代码与用任何语言编写可读性和可维护性代码没有太大区别。任何一本关于编写干净代码的好书都和其他语言一样适用于APL,甚至更适用。我推荐Robert C.Martin写的Clean Code。
考虑本书中的指导原则,即函数中的所有代码都应该处于相同的抽象级别。这适用于APL 100多倍。例如,如果你有一个名为APL的函数,它应该有很少的DoThisBigTask基元符号,当然也不会有复杂的一行程序。它应该只是对其他较低级别的函数的一系列调用。如果这些更高级别的函数都是命名良好且定义良好的,那么一般的漂移应该很容易由不了解APL的人确定。最低层的函数将只是原语,对于非APLer来说是不可理解的。取决于它们是如何编写的,对于经验丰富的APLer来说,它们最初可能看起来是难以理解的。然而,这些低级函数应该很短,没有副作用,如果维护程序员不能理解原始的编码技术,可以很容易地重写而不是修改。
通常,保持您的函数简短,命名良好,定义良好,并且切中要害。并保持代码行更短。与拥有编写良好或文档良好的代码行相比,拥有定义良好且文档记录良好的函数要重要得多。
发布于 2016-10-11 00:13:56
既然你要了书和其他参考资料,我可以建议:
作者声明:
,就不是那么好了
在我看来,APL作为一种“只写语言”的名声被夸大了。人们确实需要习惯于原语和用于表示它们的符号。但是,人们需要习惯许多其他语言环境中的语法和各种库函数。我见过用C、C++和Java编写的复杂代码,跟任何APL一样难以理解。当然,即使它很聪明,它也不是很好的C、C++或Java。
一些建议:
如果你愿意,你可以使用类似OOP的风格。但没有必要这样做。如果您这样做了,那么应该在整个应用程序中广泛地使用它,也许低级实用程序除外。但是OOP风格的代码至少可以像非OOP代码一样复杂,而且APL没有内置继承或其他支持OOP的语法。
发布于 2012-11-18 00:55:55
(这里我将使用"A“代替注释,"'”代替符号符号。)
嗯,我开发APL已经一年了,我只用过Aplusdev.org。
你甚至不需要更多。诀窍是尝试像那样OOP。如果我没记错的话,您应该有像{'attribute1‘,{attribute1 'attribute2,{attribute1,value2}}这样的用作类数据值的属性结构化字段,这样您就可以像c++中的obj.attribute1一样轻松地挑选出它们。(这里的'attribute pick object,仅在类函数中使用:)
此外,使用命名空间函数:
namespace_classname.method(this, arg1)
namespace_classname._private_method(this, arg1, arg2)和许多简单的工具函数,而不是漂亮的,长行。性能的下降不是很大,你可以在以后发现一些可以更快的东西时,对数组进行优化。
在此之前:想一想matlab和没有for循环!:)它有很大的帮助。
我对健壮、可维护的代码的建议是:
为了避免使用那些不可读的符号来使你的代码总是被point.
try_begin();
一段尝试过的代码,可能放在额外的括号中,不要忘记最后的try_end()。
try_end();
捕捉( function_here);
可以很好地实现。(您将看到,捕获错误是非常简单的important)
语法:
函数(point2i,ch):{
类型检查({{‘int,1 2},'char});A在类型检查中执行一些断言...
//你的函数在这里
}
namespace_class.method(objects,arg1,arg2)
最后:另外,我编写了inputBox和messageBox,就像Javascript或VisualBasic中的一样,它们可以非常容易地将简单的工具组合在一起或检查状态。messageBox的唯一缺点是,它不能将函数流搁置,因此您需要
AA documentation of f1
f1():
{
A do sth
msgbox.call("Hi there",{'Ok, {'f2}});
}
f2():
{
A continue doing stuff
}您可以使用gawk/sed组合在bash中编写自动文档,将其放入网页中。此外,创建HTML格式的代码有助于打印。;)
我希望这是一个很好的大纲,为适当的建设。在编写自己的工具之前,试着从遗留代码库中挖掘出可用的工具……由于那段时间的混乱,函数经常被用不同的名称实现4次。
https://stackoverflow.com/questions/12909711
复制相似问题