我有兴趣阅读一些最近的语言与语言问题... Perl与Python,Python与Java,一种语言可以比另一种语言更好吗?
我注意到的一件事是我们很多人都有不喜欢语言的非常肤浅的理由.我们乍看之下注意到了这些事情,他们拒绝了我们.如果我们烦恼的话,我们可以避免在2秒内学会爱或忽略的功能,这些功能可能是完美的语言.
好吧,我和下一个人一样愧疚,如果不是更多的话.开始:
Ruby:我看到的所有Ruby示例代码都使用puts
命令,这是一种幼稚的意第绪语解剖术语.因此,即使我应该,也不能认真对待Ruby代码.
Python:我第一次看到它时,我对整个重要的空白事物假笑.我在接下来的几年里避免了它.现在我几乎不用任何其他东西.
Java:我不喜欢identifiersThatLookLikeThis.我不确定为什么.
Lisp:我的所有括号都有问题.不同的重要性和目的(函数声明,变量赋值等)在语法上没有区别,我懒得学习什么.
Fortran:大写的一切都会伤到我的眼睛.我知道现代代码不必像这样写,但大多数示例代码是......
Visual Basic:它让我知道Dim
用于声明变量的东西,因为我记得当它仅用于维度数组时,GW-BASIC的好日子.
什么语言没有看我的权利乍一看?Perl,C,QBasic,JavaScript,汇编语言,BASH shell,FORTH.
好的,既然我已经播放了我的脏衣服......我想听你的. 你的语言挂断是什么?什么肤浅的功能打扰你?你是如何克服它们的?
我讨厌Hate HATE"End Function"和"End IF"以及"If ... Then"部分的VB.我更愿意看到一个大括号.
PHP的函数名称不一致.
// common parameters back-to-front in_array(needle, haystack); strpos(haystack, needle); // _ to separate words, or not? filesize(); file_exists; // super globals prefix? $GLOBALS; $_POST;
我从来没有真正喜欢在一些脚本shell中拼写的关键字
if-then- fi是不够糟糕的,但是case-in- esac只是变得愚蠢
我只是想到了另一个......我讨厌在XML中用来定义名称空间的无意义的URL,例如 xmlns="http://purl.org/rss/1.0/"
帕斯卡Begin
和End
.太冗长,不受括号匹配的影响,更糟糕的是,并不是Begin
每一个End
,例如.
Type foo = Record // ... end;
虽然我主要是一个PHP开发人员,但我不喜欢那些不能让我在线内做足够事情的语言.例如:
$x = returnsArray(); $x[1];
代替
returnsArray()[1];
要么
function sort($a, $b) { return $a < $b; } usort($array, 'sort');
代替
usort($array, function($a, $b) { return $a < $b; });
我喜欢面向对象的风格.因此,我在Python中看到len(str)获取字符串的长度,或者将split(str,"|")等字符串拆分为另一种语言.这在C中很好; 它没有物体.但Python,D等确实有对象,并使用obj.method()等其他地方.(我仍然认为Python是一种很棒的语言.)
不一致对我来说是另一个重要的问题.我不喜欢在同一个库中使用不一致的命名:length(),size(),getLength(),getlength(),toUTFindex()(为什么不toUtfIndex?),Constant,CONSTANT等.
.NET中的长名有时会困扰我.他们不能以某种方式缩短DataGridViewCellContextMenuStripNeededEventArgs吗?那么ListViewVirtualItemsSelectionRangeChangedEventArgs呢?
而且我讨厌深层目录树.如果一个库/项目有一个5级深度目录树,我将遇到麻烦.
C和C++的语法有点古怪.他们将操作符重用于不同的东西 你可能已经习惯了它,你没有考虑它(我也不是),但考虑括号有多少含义:
int main() // function declaration / definition printf("hello") // function call (int)x // type cast 2*(7+8) // override precedence int (*)(int) // function pointer int x(3) // initializer if (condition) // special part of syntax of if, while, for, switch
如果你在C++中看到了
foo(baz(),baaz)
你会不知道没有定义的含义foo
和bar
.
<和>可能是模板实例化,或者可能是小于和大于(不寻常但合法)
()可能是一个函数调用,或者可能只是围绕逗号运算符(即.执行大小效果的baz(),然后返回baaz).
愚蠢的是,其他语言已经复制了其中一些特征!
Java及其检查的异常.我离开Java一段时间,住在.NET世界,然后最近又回来了.
感觉有时,我的throws
条款比我的方法内容更加庞大.
世界上没有什么比仇恨更多的东西了.
带有$的变量,这是每个变量的一个额外奇数字符.
使用 - >访问成员,没有明显的原因,每个成员访问一个额外的字符.
真是一种语言表演.
没有名称空间.
字符串与..连接
语言的怪异表演.
我厌恶Java的锅炉板冗长.
写属性的getter和setter
检查异常处理和所暗示的所有措辞
很长的进口清单
那些与Java使用惯例有关的东西veryLongVariableNames
,有时会让我觉得我回到80年代,写IDENTIFICATION DIVISION.
在我的程序的顶部.
提示:如果您可以在IDE中自动生成部分代码,那么这是一个很好的提示,即您正在生成样板代码.使用自动化工具,写入并不是一个问题,但每次有人必须阅读该代码时,这是一个障碍 - 这更常见.
虽然我认为在类型官僚机构方面有点过分,但Scala已成功解决了其中一些问题.
目标C中的所有[] s和@s.它们的使用与底层C的原生语法有很大的不同,我第一次看到它时给人的印象是所有的面向对象都是笨拙地拴在后面.