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