语言或多或少都有坑。
// 像 javascript 不小心把字符串和数值加在一起
alert("1"+2);  // "12"
# python 里,把字符串和数值加在一起会报 TypeError,避开了这个坑
# 但是...
def fn(x, L=[]):
  L.append(x)
  return L
print(fn(1))   # [1]
print(fn(7))   # [1, 7]
print(fn(13))  # [1, 7, 13]
// 而 javascript (ES6) 没有上面那个坑
function fn(x, L=[]){
  L.push(x);
  return L.toString();
}
console.log(fn(1))   // "1"
console.log(fn(7))   // "7"
console.log(fn(13))  // "13"
想了想 javascript, python 都是脚本,那考虑 C语言,又发现 C语言变量声明时未赋初值 就拿来使用会跑出随机的垃圾值,反而 python 中的变量不需要声明(或者说,赋值的同时也声明了)避开了这个坑。
既然语言或多或少都有坑,那就有多寡的差别。各位同学接触过(或听过)的语言坑最少的是哪个?
|  |      1skl      2015-01-19 12:48:13 +08:00 Lua, C# | 
|  |      2yakczh      2015-01-19 12:49:03 +08:00 php | 
|  |      3nicodelee      2015-01-19 12:49:27 +08:00  2 语言的坑我不太了解。 自己不坑自己才是 | 
|  |      4tabris17      2015-01-19 12:49:47 +08:00 JAVA、C# | 
|  |      5clino      2015-01-19 12:50:14 +08:00 via Android 估计lua会比较少 第一个不是坑吧,强类型和弱类型 | 
|  |      6zkd8907      2015-01-19 12:52:29 +08:00 西吓破 | 
|      7besto      2015-01-19 12:55:06 +08:00 想了想 javascript, python 都是脚本,那考虑 C语言,又发现 C语言变量声明时未赋初值 就拿来使用会跑出随机的垃圾值,反而 python 中的变量不需要声明(或者说,赋值的同时也声明了)避开了这个坑。 ================================================================= 没赋初始值的变量,在编译的时候没有告警? | 
|      8raincious      2015-01-19 12:56:03 +08:00  1 Go会要求显式类型转换,可以“避开”这样的“问题”吧? 就楼主的问题…… 汇编语言坑最少。(是的,就几个命令,有坑也是人造成的……) 楼主下一个帖子预测:《坑最少的CPU是哪个?》 | 
|      9tini9      2015-01-19 12:56:28 +08:00 python的坑算少的了,一般来说,特色功能越少坑越少。 | 
|  |      10hahastudio      2015-01-19 12:57:26 +08:00 哪个语言表现力弱,坑就少呗 你看谁说过汇编坑= = | 
|  |      11spacewander      2015-01-19 12:58:01 +08:00 功能最少的语言也即坑最少的语言,比如Brainfuck | 
|  |      12arnofeng      2015-01-19 12:58:02 +08:00 via Android  1 php是世界上最好的语言 | 
|  |      13DingSoung      2015-01-19 12:58:57 +08:00 额,我就是汇编的,是不是快绝种了 | 
|  |      15supergrubby      2015-01-19 13:27:38 +08:00 强类型、静态类型检查 :Java/C# | 
|  |      16hjc4869      2015-01-19 13:28:30 +08:00  1 照楼主的意思,C#的坑貌似少。。 | 
|  |      17supergrubby      2015-01-19 13:29:45 +08:00 强类型保证没有untrapped behavior和部分的trapped behavior 静态类型检查保证编译时没有ill behavior | 
|  |      18linuxer      2015-01-19 13:32:11 +08:00 It's not a 坑; it's an undocumented feature! | 
|  |      19xxstop      2015-01-19 13:33:48 +08:00 php+2 | 
|  |      20FrankFang128      2015-01-19 13:35:15 +08:00 你自己不加引号,怪语言? | 
|  |      21alsotang      2015-01-19 13:39:44 +08:00 eclipse 是世界上最好的 ide | 
|  |      23jyootai      2015-01-19 14:08:28 +08:00 HTML 是最富表达力、坑最少的语言 | 
|  |      24infinte      2015-01-19 14:12:28 +08:00  1 坑最少?Standard ML,全部有形式化定义,绝对没坑。 | 
|  |      25icedx      2015-01-19 14:13:46 +08:00 第而个不是坑吧, 类型不同 | 
|  |      26tioover      2015-01-19 14:16:04 +08:00 欢迎来到 Rust。 有坑欢迎提交修改。 | 
|      27dddd1919      2015-01-19 14:22:20 +08:00 多坑程序猿 | 
|  |      28otakustay      2015-01-19 14:39:03 +08:00 C#因为有扩展方法,乱玩也容易有些坑,我看JAVA的坑才少 | 
|  |      30messense      2015-01-19 14:45:08 +08:00 楼主说的 Python 那个能算坑么,是不懂 Python 对函数参数初始化的处理造成的吧.....语言特性不能说成是坑吧,被“坑”到说明对这个语言理解不够啊 | 
|      31aciscoa      2015-01-19 15:02:08 +08:00 java~ | 
|  |      32binjoo      2015-01-19 15:07:15 +08:00 易语言 | 
|  |      33vilic      2015-01-19 15:09:45 +08:00 楼主说的 JavaScript 的特性也不是坑, 而是非常有用的特性. 并且也不是 @linuxer 说得 undocumented feature, 因为这些特性都是非常严谨地写入了 ECMAScript 标准中的. JavaScript 中的 toString() 和 valueOf() 是两个非常有意思的方法, 之前大家经常提到的 [] + [], {} + {}, [] + {}, {} + [] 也是非常好的切入点, 但如果止步于笑笑, 亏的就是自己咯. | 
|  |      34bugeye      2015-01-19 15:11:43 +08:00 C语言那是feature啊,声名就给初值要浪费CPU的啊。 | 
|  |      35loading      2015-01-19 15:15:27 +08:00 via Android 汇编,几乎没有你不知道的东西,实在不行,机器码 | 
|  |      36imwower      2015-01-19 15:28:57 +08:00  1 | 
|  |      37hooluupog      2015-01-19 15:36:23 +08:00 Lisp。 | 
|  |      38thinkif      2015-01-19 15:41:43 +08:00 从这个角度说,Swift 比 C# 坑更少 | 
|  |      40otakustay      2015-01-19 16:15:08 +08:00 @jyootai 区别在于java少个分号连compile都过不了更别说运行,HTML则直接跑起来了各种错乱还要找好久错误在哪……所以我倾向于非强类型的语言坑都会相对多 | 
|  |      41Monad      2015-01-19 16:17:47 +08:00 函数式大法好 | 
|  |      42dallaslu      2015-01-19 16:27:42 +08:00 javascript:alert("1"-0+2) 输出:3 | 
|  |      43wheatcuican      2015-01-19 16:30:11 +08:00  12 一天我路过一座桥,碰巧看见一个人想跳河自杀。我跑过去对他大喊道:“别跳,别死啊。” “为什么不让我跳?”他说。 “因为还有很多东西值得我们活下去啊。” “有吗?比如说?” “呃……你做什么工作?” “程序员。” 我说:“我也是!瞧,有共同点了吧。你是软件还是硬件?” “软件。” “我也是!PC 还是 Web?” “PC。” “我也是!Windows 还是 Linux 平台?” “Linux。” “我也是!那你使用 C 还是 C++?” “C++。” “我也是。1998 年的 C++ 98 还是 2011 年的 C++ 11?” “2011 年的 C++ 11。” “我也是。大括号写在后面还是写在下一行?” “下一行。” “去死吧!你这个异教徒人渣!”我一把将他推下桥去。 | 
|      44shadyxu      2015-01-19 16:30:37 +08:00 Python里面不要用[], {}作为默认参数。 | 
|  |      45jyootai      2015-01-19 16:41:23 +08:00  1 @otakustay 不能这么说,在编译时检查错误是属于非脚本语言的特点,与是否是强类型无关。 即使在java中少一个分号能立刻发现,那这也是借助强大IDE的特性,在vim(未装相关插件)或者记事本这类编辑器中写的话,真的会遇到这个坑。如果使用写HTML的IDE的话,也能即使发现标签问题。 | 
|  |      46happywowwow      2015-01-19 17:34:21 +08:00 python 遇到最大的坑 类动态绑定属性-->当然这是特性 但是。。。 曾经遇到一个bug, 最后竟然是写错了类的属性变量名。。。一个字母 r 变成了 n | 
|  |      47ichou      2015-01-19 17:41:28 +08:00 php+3 | 
|  |      48tracebundy      2015-01-19 17:54:46 +08:00 haskell | 
|  |      49otakustay      2015-01-19 18:13:09 +08:00 @jyootai 是,我经常把脚本/非脚本和强类型/弱类型搞混 但我觉得java的坑少的重点在于有错易定位且错误不易到线上,而不是不容易出错。一个javac我就知道哪个文件哪一行少了分号,但是HTML……昨天我才一个标签闭合问题找了整整10分钟,整个页面就是乱的根本没有提示,一大片的标签也看得想睡着 当然我可以用很强大的Htmllint类工具,但至今没有发现这么好的工具,特别是custom tag出现以后 | 
|  |      50lincanbin      2015-01-19 18:28:42 +08:00 via Android  1 这不算坑,弱类型语言需要注意类型隐式转换,当一方为字符串,+号则作为字符串拼接符,实际使用中按规范编程不会踩到坑。 这种都算坑只能说基础不扎实,像Python的字符串编码,你要说算坑吧,也不能算,只能是说不够傻瓜化,对菜鸟照顾不周,算不上语言缺陷。 JavaScript的坑是像没有命名空间之类的天生缺陷。 | 
|  |      51mulog      2015-01-19 18:37:11 +08:00 楼主这个例子..无力吐槽啊 这么基础的语言特性搞不清楚我觉得就不要谈坑不坑的了 恩 我就搞不清楚 所以从来不吐槽语言 XD | 
|      529tyi      2015-01-19 18:47:54 +08:00 你可以试一试IFTTT. --------------------------------------- 真心话:你要是嫌麻烦就别学,除了IFTTT就没有不坑的 | 
|  |      53zythum      2015-01-19 19:12:12 +08:00 这些如果你觉得算坑的话。请使用强类型的语言。就没有这种坑了。 | 
|  |      54lincanbin      2015-01-19 19:16:14 +08:00 python没有隐式转换,应该这么写 print "1"+str(2) JavaScript可以这么写 alert("1"+2); 实际上支持隐式转换,应该是个Feature,增强了鲁棒性,而且减少了输入量。 人生苦短,我用隐式转换! 这在弱类型解释型语言中是个相当不错的特性,当然孰优孰劣我不引战,这些几十年的老语言里,说是坑的真的不多,很多都是自己水平还不到,当然有的就真的是坑,例如Python自带的那些库的命名。 | 
|  |      55lincanbin      2015-01-19 19:19:18 +08:00 我再开个地图炮吧,我见过的很多用Python入门或者长期用Python的程序员码力都明显不足,C/C++入门的,平均水平上就明显高一级。 人生苦短,多打好基础。 | 
|  |      56spacewander      2015-01-19 19:26:20 +08:00 @lincanbin 貌似大部分高校教的第一门语言就是C/C++(无论是计算机系还是什么电力机械自动化)。难道大部分人的平均水平上就明显高一级? | 
|  |      57cst4you      2015-01-19 19:28:43 +08:00 是中文 | 
|  |      58lincanbin      2015-01-19 19:30:53 +08:00 | 
|  |      60hahastudio      2015-01-19 20:09:13 +08:00 @lingo233 写过 CPU 岂不是就要到宇宙外了= = | 
|  |      62lingo233      2015-01-19 20:20:34 +08:00 via Android @hahastudio 如何写一个CPU😦求指导 | 
|  |      63acgeo      2015-01-19 20:25:52 +08:00 rust欢迎你 | 
|  |      64Lentin      2015-01-19 20:26:57 +08:00 手语? | 
|  |      65hahastudio      2015-01-19 20:30:09 +08:00  1 @lingo233 Verilog= = | 
|  |      66lingo233      2015-01-19 20:40:55 +08:00 @hahastudio 竟然还有这个先make,如果以后有机会会看一看^^ | 
|  |      67GhostFlying      2015-01-19 20:45:54 +08:00 via Android @hahastudio 还是更喜欢VHDL | 
|  |      68wenketel      2015-01-19 20:50:20 +08:00 _(:3」∠)_ 小害羞 | 
|      69yqt      2015-01-19 21:01:48 +08:00 via iPad 老有人说js到处是坑,只能说坑都是人都人挖。Just use the good parts. | 
|  |      70wezzard      2015-01-19 21:53:46 +08:00 Swift | 
|      72shyangs OP | 
|      76xdf331      2015-01-20 00:59:46 +08:00 via Android Basic,n年前的老物 | 
|      78xieyudi1990      2015-01-20 01:52:40 +08:00 @hahastudio 正在弄CPU的飘过, 毕业论文, 乱序超标量... 刚刚把DRAM内存控制器调通了... 接下来: 缓存是哪种结构的呢? 发射宽度要定位多少? 要多少个功能单元... | 
|  |      81CrispElite      2015-01-20 08:48:39 +08:00 js 这不算坑吧………… | 
|  |      82bjzhush      2015-01-20 09:24:31 +08:00 坑多少无所谓,主要看你能跳过多少 | 
|  |      85lch21      2015-01-20 10:34:01 +08:00 难道你不用lint 吗? | 
|  |      86flynngao      2015-01-20 11:05:07 +08:00 又来开战? | 
|  |      87snopy      2015-01-20 13:28:26 +08:00 用python做开发的多么? | 
|  |      88oimotis      2015-01-20 14:02:56 +08:00 我所知道的C#是比较少坑,静态强类型,大部分问题编译器都说给你听了。 | 
|  |      89laomutuo      2015-01-31 19:32:12 +08:00 楼歪了 | 
|  |      90jedihy      2015-02-04 20:04:24 +08:00 这个必然是汇编了。。。 | 
|  |      91DingSoung      2015-02-08 22:22:50 +08:00 写汇编的路过 | 
|  |      92gbooks      2015-10-14 20:48:57 +08:00 java 学生撸过 | 
|      93XuAaron      2018-07-15 02:50:44 +08:00 怎么能说坑呢,这是 feature,是 feature 啊。 | 
|      94charlie21      2023-03-18 07:00:57 +08:00 via Android |