你的语言是什么"挂断"?

Dan*_*ski 16 syntax language-features language-design

我有兴趣阅读一些最近的语言与语言问题... 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.

好的,既然我已经播放了我的脏衣服......我想听你的. 你的语言挂断是什么?什么肤浅的功能打扰你?你是如何克服它们的?

Way*_*yne 32

我讨厌Hate HATE"End Function"和"End IF"以及"If ... Then"部分的VB.我更愿意看到一个大括号.

  • Seiti:你想在功能结束时看到NOITCNUF吗?和ERUDECORP?和SSALC?ECAFRETNI怎么样?对于POO(呃,我的意思是OOP)语言? (14认同)

Dea*_*her 22

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;
Run Code Online (Sandbox Code Playgroud)

  • 除了有时它是`.length`,有时它是`.length()`,而有时它是`.getLength()`〜 (4认同)

lou*_*dej 19

我从来没有真正喜欢在一些脚本shell中拼写的关键字

if-then- fi是不够糟糕的,但是case-in- esac只是变得愚蠢

  • 嘿,我必须同意你的意见......为什么for和while循环以"done"结束而不是"rof"或"elihw":-P (2认同)

Dan*_*ski 12

我只是想到了另一个......我讨厌在XML中用来定义名称空间的无意义的URL,例如 xmlns="http://purl.org/rss/1.0/"


Hug*_*len 9

帕斯卡BeginEnd.太冗长,不受括号匹配的影响,更糟糕的是,并不是Begin每一个End,例如.

Type foo = Record
    // ...
end;
Run Code Online (Sandbox Code Playgroud)


dec*_*eze 9

虽然我主要是一个PHP开发人员,但我不喜欢那些不能让我在线内做足够事情的语言.例如:

$x = returnsArray();
$x[1];
Run Code Online (Sandbox Code Playgroud)

代替

returnsArray()[1];
Run Code Online (Sandbox Code Playgroud)

要么

function sort($a, $b) {
    return $a < $b;
}
usort($array, 'sort');
Run Code Online (Sandbox Code Playgroud)

代替

usort($array, function($a, $b) { return $a < $b; });
Run Code Online (Sandbox Code Playgroud)

  • 后者在php 5.3中可行 (2认同)

Jor*_*ner 8

我喜欢面向对象的风格.因此,我在Python中看到len(str)获取字符串的长度,或者将split(str,"|")等字符串拆分为另一种语言.这在C中很好; 它没有物体.但Python,D等确实有对象,并使用obj.method()等其他地方.(我仍然认为Python是一种很棒的语言.)

不一致对我来说是另一个重要的问题.我不喜欢在同一个库中使用不一致的命名:length(),size(),getLength(),getlength(),toUTFindex()(为什么不toUtfIndex?),Constant,CONSTANT等.

.NET中的长名有时会困扰我.他们不能以某种方式缩短DataGridViewCellContextMenuStripNeededEventArgs吗?那么ListViewVirtualItemsSelectionRangeChangedEventArgs呢?

而且我讨厌深层目录树.如果一个库/项目有一个5级深度目录树,我将遇到麻烦.

  • 认真.为什么要99%面向对象,然后在那里抛出一些随机的非OO东西,没有明显的理由?GAH! (4认同)

Hug*_*len 7

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
Run Code Online (Sandbox Code Playgroud)

如果你在C++中看到了

foo<bar>(baz(),baaz)
Run Code Online (Sandbox Code Playgroud)

你会不知道没有定义的含义foobar.

  • <和>可能是模板实例化,或者可能是小于和大于(不寻常但合法)
  • ()可能是一个函数调用,或者可能只是围绕逗号运算符(即.执行大小效果的baz(),然后返回baaz).

愚蠢的是,其他语言已经复制了其中一些特征!


Mic*_*tta 6

Java及其检查的异常.我离开Java一段时间,住在.NET世界,然后最近又回来了.

感觉有时,我的throws条款比我的方法内容更加庞大.

  • java异常构造函数有一个"cause"参数,以便您可以进行异常链接,正是为了防止这种情况.您应该只抛出与您的类的抽象级别相关的异常. (3认同)

Vas*_*sil 6

世界上没有什么比仇恨更多的东西了.

  1. 带有$的变量,这是每个变量的一个额外奇数字符.
  2. 使用 - >访问成员,没有明显的原因,每个成员访问一个额外的字符.
  3. 真是一种语言表演.
  4. 没有名称空间.
  5. 字符串与..连接
  6. 语言的怪异表演.


Car*_*icz 6

我厌恶Java锅炉板冗长.

  • 写属性的getter和setter
  • 检查异常处理和所暗示的所有措辞
  • 很长的进口清单

那些与Java使用惯例有关的东西veryLongVariableNames,有时会让我觉得我回到80年代,写IDENTIFICATION DIVISION.在我的程序的顶部.

提示:如果您可以在IDE中自动生成部分代码,那么这是一个很好的提示,即您正在生成样板代码.使用自动化工具,写入并不是一个问题,但每次有人必须阅读该代码时,这是一个障碍 - 这更常见.

虽然我认为在类型官僚机构方面有点过分,但Scala已成功解决了其中一些问题.

  • `System.out.Println`对于大多数语言称之为`puts`来说是荒谬的 (3认同)
  • @Earlz至少它与OO调用方法一致.在java的情况下,puts必须是Object上的关键字或静态方法.携带该方法的成本可能很高. (3认同)

Cra*_*rks 5

目标C中的所有[] s和@s.它们的使用与底层C的原生语法有很大的不同,我第一次看到它时给人的印象是所有的面向对象都是笨拙地拴在后面.

  • 它是作为一种事后的想法而狂奔.它基本上是作为C的预处理器开始的.@是的,因为@对于其他任何东西都不合法,所以他们可以确定任何以@(@ interface,@ implementation等)开头的新关键字都不会与之冲突任何C关键字.Objective-C非常难看,这是不幸的,因为底层的面向对象模型和框架非常好. (3认同)