坑最少的语言是哪个?

2015-01-19 12:40:37 +08:00
 shyangs

语言或多或少都有坑。

// 像 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 中的变量不需要声明(或者说,赋值的同时也声明了)避开了这个坑。

既然语言或多或少都有坑,那就有多寡的差别。各位同学接触过(或听过)的语言坑最少的是哪个?

9952 次点击
所在节点    编程
94 条回复
Monad
2015-01-19 16:17:47 +08:00
函数式大法好
dallaslu
2015-01-19 16:27:42 +08:00
javascript:alert("1"-0+2)

输出:3
wheatcuican
2015-01-19 16:30:11 +08:00
一天我路过一座桥,碰巧看见一个人想跳河自杀。我跑过去对他大喊道:“别跳,别死啊。”

“为什么不让我跳?”他说。

“因为还有很多东西值得我们活下去啊。”

“有吗?比如说?”

“呃……你做什么工作?”

“程序员。”

我说:“我也是!瞧,有共同点了吧。你是软件还是硬件?”

“软件。”

“我也是!PC 还是 Web?”

“PC。”

“我也是!Windows 还是 Linux 平台?”

“Linux。”

“我也是!那你使用 C 还是 C++?”

“C++。”

“我也是。1998 年的 C++ 98 还是 2011 年的 C++ 11?”

“2011 年的 C++ 11。”

“我也是。大括号写在后面还是写在下一行?”

“下一行。”

“去死吧!你这个异教徒人渣!”我一把将他推下桥去。
shadyxu
2015-01-19 16:30:37 +08:00
Python里面不要用[], {}作为默认参数。
jyootai
2015-01-19 16:41:23 +08:00
@otakustay 不能这么说,在编译时检查错误是属于非脚本语言的特点,与是否是强类型无关。

即使在java中少一个分号能立刻发现,那这也是借助强大IDE的特性,在vim(未装相关插件)或者记事本这类编辑器中写的话,真的会遇到这个坑。如果使用写HTML的IDE的话,也能即使发现标签问题。
happywowwow
2015-01-19 17:34:21 +08:00
python 遇到最大的坑 类动态绑定属性-->当然这是特性 但是。。。
曾经遇到一个bug, 最后竟然是写错了类的属性变量名。。。一个字母 r 变成了 n
ichou
2015-01-19 17:41:28 +08:00
php+3
tracebundy
2015-01-19 17:54:46 +08:00
haskell
otakustay
2015-01-19 18:13:09 +08:00
@jyootai 是,我经常把脚本/非脚本和强类型/弱类型搞混

但我觉得java的坑少的重点在于有错易定位且错误不易到线上,而不是不容易出错。一个javac我就知道哪个文件哪一行少了分号,但是HTML……昨天我才一个标签闭合问题找了整整10分钟,整个页面就是乱的根本没有提示,一大片的标签也看得想睡着

当然我可以用很强大的Htmllint类工具,但至今没有发现这么好的工具,特别是custom tag出现以后
lincanbin
2015-01-19 18:28:42 +08:00
这不算坑,弱类型语言需要注意类型隐式转换,当一方为字符串,+号则作为字符串拼接符,实际使用中按规范编程不会踩到坑。
这种都算坑只能说基础不扎实,像Python的字符串编码,你要说算坑吧,也不能算,只能是说不够傻瓜化,对菜鸟照顾不周,算不上语言缺陷。
JavaScript的坑是像没有命名空间之类的天生缺陷。
mulog
2015-01-19 18:37:11 +08:00
楼主这个例子..无力吐槽啊
这么基础的语言特性搞不清楚我觉得就不要谈坑不坑的了
恩 我就搞不清楚 所以从来不吐槽语言 XD
9tyi
2015-01-19 18:47:54 +08:00
你可以试一试IFTTT.







---------------------------------------
真心话:你要是嫌麻烦就别学,除了IFTTT就没有不坑的
zythum
2015-01-19 19:12:12 +08:00
这些如果你觉得算坑的话。请使用强类型的语言。就没有这种坑了。
lincanbin
2015-01-19 19:16:14 +08:00
python没有隐式转换,应该这么写
print "1"+str(2)
JavaScript可以这么写
alert("1"+2);

实际上支持隐式转换,应该是个Feature,增强了鲁棒性,而且减少了输入量。
人生苦短,我用隐式转换!
这在弱类型解释型语言中是个相当不错的特性,当然孰优孰劣我不引战,这些几十年的老语言里,说是坑的真的不多,很多都是自己水平还不到,当然有的就真的是坑,例如Python自带的那些库的命名。
lincanbin
2015-01-19 19:19:18 +08:00
我再开个地图炮吧,我见过的很多用Python入门或者长期用Python的程序员码力都明显不足,C/C++入门的,平均水平上就明显高一级。
人生苦短,多打好基础。
spacewander
2015-01-19 19:26:20 +08:00
@lincanbin 貌似大部分高校教的第一门语言就是C/C++(无论是计算机系还是什么电力机械自动化)。难道大部分人的平均水平上就明显高一级?
cst4you
2015-01-19 19:28:43 +08:00
是中文
lincanbin
2015-01-19 19:30:53 +08:00
@spacewander 如果他们是科班出身,好好学了的话,是如此的,明显基础要好一些。
如果是靠期末以应付考试为目的那就当他们没学。

我们学校一些文科专业是教Python的。
lingo233
2015-01-19 20:05:28 +08:00
@lincanbin 那用汇编会不会飞上天^﹏^
hahastudio
2015-01-19 20:09:13 +08:00
@lingo233 写过 CPU 岂不是就要到宇宙外了= =

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/163431

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX