V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shyangs
V2EX  ›  编程

坑最少的语言是哪个?

  •  1
     
  •   shyangs · 2015-01-19 12:40:37 +08:00 · 9573 次点击
    这是一个创建于 3356 天前的主题,其中的信息可能已经有所发展或是发生改变。

    语言或多或少都有坑。

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

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

    94 条回复    2023-03-18 07:00:57 +08:00
    skl
        1
    skl  
       2015-01-19 12:48:13 +08:00
    Lua, C#
    yakczh
        2
    yakczh  
       2015-01-19 12:49:03 +08:00
    php
    nicodelee
        3
    nicodelee  
       2015-01-19 12:49:27 +08:00   ❤️ 2
    语言的坑我不太了解。
    自己不坑自己才是
    tabris17
        4
    tabris17  
       2015-01-19 12:49:47 +08:00
    JAVA、C#
    clino
        5
    clino  
       2015-01-19 12:50:14 +08:00 via Android
    估计lua会比较少

    第一个不是坑吧,强类型和弱类型
    zkd8907
        6
    zkd8907  
       2015-01-19 12:52:29 +08:00
    西吓破
    besto
        7
    besto  
       2015-01-19 12:55:06 +08:00
    想了想 javascript, python 都是脚本,那考虑 C语言,又发现 C语言变量声明时未赋初值 就拿来使用会跑出随机的垃圾值,反而 python 中的变量不需要声明(或者说,赋值的同时也声明了)避开了这个坑。
    =================================================================
    没赋初始值的变量,在编译的时候没有告警?
    raincious
        8
    raincious  
       2015-01-19 12:56:03 +08:00   ❤️ 1
    Go会要求显式类型转换,可以“避开”这样的“问题”吧?

    就楼主的问题……

    汇编语言坑最少。(是的,就几个命令,有坑也是人造成的……)

    楼主下一个帖子预测:《坑最少的CPU是哪个?》
    tini9
        9
    tini9  
       2015-01-19 12:56:28 +08:00
    python的坑算少的了,一般来说,特色功能越少坑越少。
    hahastudio
        10
    hahastudio  
       2015-01-19 12:57:26 +08:00
    哪个语言表现力弱,坑就少呗
    你看谁说过汇编坑= =
    spacewander
        11
    spacewander  
       2015-01-19 12:58:01 +08:00
    功能最少的语言也即坑最少的语言,比如Brainfuck
    arnofeng
        12
    arnofeng  
       2015-01-19 12:58:02 +08:00 via Android   ❤️ 1
    php是世界上最好的语言
    DingSoung
        13
    DingSoung  
       2015-01-19 12:58:57 +08:00
    额,我就是汇编的,是不是快绝种了
    club
        14
    club  
       2015-01-19 13:23:32 +08:00
    @arnofeng 呵呵
    supergrubby
        15
    supergrubby  
       2015-01-19 13:27:38 +08:00
    强类型、静态类型检查 :Java/C#
    hjc4869
        16
    hjc4869  
       2015-01-19 13:28:30 +08:00   ❤️ 1
    照楼主的意思,C#的坑貌似少。。
    supergrubby
        17
    supergrubby  
       2015-01-19 13:29:45 +08:00
    强类型保证没有untrapped behavior和部分的trapped behavior
    静态类型检查保证编译时没有ill behavior
    linuxer
        18
    linuxer  
       2015-01-19 13:32:11 +08:00
    It's not a 坑; it's an undocumented feature!
    xxstop
        19
    xxstop  
       2015-01-19 13:33:48 +08:00
    php+2
    FrankFang128
        20
    FrankFang128  
       2015-01-19 13:35:15 +08:00
    你自己不加引号,怪语言?
    alsotang
        21
    alsotang  
       2015-01-19 13:39:44 +08:00
    eclipse 是世界上最好的 ide
    yingluck
        22
    yingluck  
       2015-01-19 13:55:59 +08:00
    @dingsoung 汇编飘过
    jyootai
        23
    jyootai  
       2015-01-19 14:08:28 +08:00
    HTML 是最富表达力、坑最少的语言
    infinte
        24
    infinte  
       2015-01-19 14:12:28 +08:00   ❤️ 1
    坑最少?Standard ML,全部有形式化定义,绝对没坑。
    icedx
        25
    icedx  
       2015-01-19 14:13:46 +08:00
    第而个不是坑吧, 类型不同
    tioover
        26
    tioover  
       2015-01-19 14:16:04 +08:00
    欢迎来到 Rust。
    有坑欢迎提交修改。
    dddd1919
        27
    dddd1919  
       2015-01-19 14:22:20 +08:00
    多坑程序猿
    otakustay
        28
    otakustay  
       2015-01-19 14:39:03 +08:00
    C#因为有扩展方法,乱玩也容易有些坑,我看JAVA的坑才少
    otakustay
        29
    otakustay  
       2015-01-19 14:40:06 +08:00
    @jyootai HTML真不行,一个标签闭合就能玩死
    messense
        30
    messense  
       2015-01-19 14:45:08 +08:00
    楼主说的 Python 那个能算坑么,是不懂 Python 对函数参数初始化的处理造成的吧.....语言特性不能说成是坑吧,被“坑”到说明对这个语言理解不够啊
    aciscoa
        31
    aciscoa  
       2015-01-19 15:02:08 +08:00
    java~
    binjoo
        32
    binjoo  
       2015-01-19 15:07:15 +08:00
    易语言
    vilic
        33
    vilic  
       2015-01-19 15:09:45 +08:00
    楼主说的 JavaScript 的特性也不是坑, 而是非常有用的特性. 并且也不是 @linuxer 说得 undocumented feature, 因为这些特性都是非常严谨地写入了 ECMAScript 标准中的.

    JavaScript 中的 toString() 和 valueOf() 是两个非常有意思的方法, 之前大家经常提到的 [] + [], {} + {}, [] + {}, {} + [] 也是非常好的切入点, 但如果止步于笑笑, 亏的就是自己咯.
    bugeye
        34
    bugeye  
       2015-01-19 15:11:43 +08:00
    C语言那是feature啊,声名就给初值要浪费CPU的啊。
    loading
        35
    loading  
       2015-01-19 15:15:27 +08:00 via Android
    汇编,几乎没有你不知道的东西,实在不行,机器码
    imwower
        36
    imwower  
       2015-01-19 15:28:57 +08:00   ❤️ 1
    C#是语法最优美的语言;
    语法、语法糖、lambda等,
    现在.net 4.5 和5.0就算很完美了,以后再演化,也只是小内容更新
    hooluupog
        37
    hooluupog  
       2015-01-19 15:36:23 +08:00
    Lisp。
    thinkif
        38
    thinkif  
       2015-01-19 15:41:43 +08:00
    从这个角度说,Swift 比 C# 坑更少
    jyootai
        39
    jyootai  
       2015-01-19 16:06:41 +08:00
    @otakustay 照这样说,Java 少一个分号也玩死
    otakustay
        40
    otakustay  
       2015-01-19 16:15:08 +08:00
    @jyootai 区别在于java少个分号连compile都过不了更别说运行,HTML则直接跑起来了各种错乱还要找好久错误在哪……所以我倾向于非强类型的语言坑都会相对多
    Monad
        41
    Monad  
       2015-01-19 16:17:47 +08:00
    函数式大法好
    dallaslu
        42
    dallaslu  
       2015-01-19 16:27:42 +08:00
    javascript:alert("1"-0+2)

    输出:3
    wheatcuican
        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。”

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

    “下一行。”

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

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

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

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







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

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

    我们学校一些文科专业是教Python的。
    lingo233
        59
    lingo233  
       2015-01-19 20:05:28 +08:00 via Android
    @lincanbin 那用汇编会不会飞上天^﹏^
    hahastudio
        60
    hahastudio  
       2015-01-19 20:09:13 +08:00
    @lingo233 写过 CPU 岂不是就要到宇宙外了= =
    lincanbin
        61
    lincanbin  
       2015-01-19 20:13:27 +08:00
    @lingo233 汇编是低级语言,用来为高级语言奠基没什么作用。
    lingo233
        62
    lingo233  
       2015-01-19 20:20:34 +08:00 via Android
    @hahastudio 如何写一个CPU😦求指导
    acgeo
        63
    acgeo  
       2015-01-19 20:25:52 +08:00
    rust欢迎你
    Lentin
        64
    Lentin  
       2015-01-19 20:26:57 +08:00
    手语?
    hahastudio
        65
    hahastudio  
       2015-01-19 20:30:09 +08:00   ❤️ 1
    @lingo233 Verilog= =
    lingo233
        66
    lingo233  
       2015-01-19 20:40:55 +08:00
    @hahastudio 竟然还有这个先make,如果以后有机会会看一看^^
    GhostFlying
        67
    GhostFlying  
       2015-01-19 20:45:54 +08:00 via Android
    @hahastudio 还是更喜欢VHDL
    wenketel
        68
    wenketel  
       2015-01-19 20:50:20 +08:00
    _(:3」∠)_ 小害羞
    yqt
        69
    yqt  
       2015-01-19 21:01:48 +08:00 via iPad
    老有人说js到处是坑,只能说坑都是人都人挖。Just use the good parts.
    wezzard
        70
    wezzard  
       2015-01-19 21:53:46 +08:00
    Swift
    luo123qiu
        71
    luo123qiu  
       2015-01-19 21:58:45 +08:00
    @zkd8907 我很认真的念了三遍。。。
    shyangs
        72
    shyangs  
    OP
       2015-01-19 22:16:06 +08:00
    @lincanbin 有一些弱類型語言,比如說 PHP ,數值加法運算符 和 字串連接符 用了不同符號。

    "5" + 5 == 10
    "5" . 5 == 55
    shyangs
        73
    shyangs  
    OP
       2015-01-19 22:21:17 +08:00
    @wenketel 妳来灌水的吗?
    wenketel
        74
    wenketel  
       2015-01-19 23:25:48 +08:00
    @shyangs 好无情,说得我是个水笔一样。
    xpol
        75
    xpol  
       2015-01-19 23:50:19 +08:00
    @skl Lua + 1
    xdf331
        76
    xdf331  
       2015-01-20 00:59:46 +08:00 via Android
    Basic,n年前的老物
    shyangs
        77
    shyangs  
    OP
       2015-01-20 01:00:48 +08:00
    @wenketel 因为我知道妳唯一有在使用的是汉语,显然不能讨论这个主题←_←
    xieyudi1990
        78
    xieyudi1990  
       2015-01-20 01:52:40 +08:00
    @hahastudio 正在弄CPU的飘过, 毕业论文, 乱序超标量... 刚刚把DRAM内存控制器调通了... 接下来: 缓存是哪种结构的呢? 发射宽度要定位多少? 要多少个功能单元...
    ffffwh
        79
    ffffwh  
       2015-01-20 03:10:12 +08:00
    @clino
    动态类型/静态类型是设计不同。而弱类型是公认的坑。
    clino
        80
    clino  
       2015-01-20 07:20:10 +08:00 via Android
    @ffffwh 我猜浏览器这种场合,为了尽量能正常跑,弱类型可能是比较好的选择
    CrispElite
        81
    CrispElite  
       2015-01-20 08:48:39 +08:00
    js 这不算坑吧…………
    bjzhush
        82
    bjzhush  
       2015-01-20 09:24:31 +08:00
    坑多少无所谓,主要看你能跳过多少
    Taosky
        83
    Taosky  
       2015-01-20 10:22:13 +08:00 via Android
    @wenketel 文科?
    zztczcx
        84
    zztczcx  
       2015-01-20 10:31:39 +08:00
    @shadyxu 这个真的是个要注意的地方
    lch21
        85
    lch21  
       2015-01-20 10:34:01 +08:00
    难道你不用lint 吗?
    flynngao
        86
    flynngao  
       2015-01-20 11:05:07 +08:00
    又来开战?
    snopy
        87
    snopy  
       2015-01-20 13:28:26 +08:00
    用python做开发的多么?
    oimotis
        88
    oimotis  
       2015-01-20 14:02:56 +08:00
    我所知道的C#是比较少坑,静态强类型,大部分问题编译器都说给你听了。
    laomutuo
        89
    laomutuo  
       2015-01-31 19:32:12 +08:00
    楼歪了
    jedihy
        90
    jedihy  
       2015-02-04 20:04:24 +08:00
    这个必然是汇编了。。。
    DingSoung
        91
    DingSoung  
       2015-02-08 22:22:50 +08:00
    写汇编的路过
    gbooks
        92
    gbooks  
       2015-10-14 20:48:57 +08:00
    java 学生撸过
    XuAaron
        93
    XuAaron  
       2018-07-15 02:50:44 +08:00
    怎么能说坑呢,这是 feature,是 feature 啊。
    charlie21
        94
    charlie21  
       2023-03-18 07:00:57 +08:00 via Android
    python 那个行为是什么编程语言的通用语言特性吗? or 此君独有的
    搜了一下,好似很新颖
    https://developer.aliyun.com/article/727952
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3439 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:11 · PVG 19:11 · LAX 04:11 · JFK 07:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.