wangxiaoer
V2EX  ›  问与答

不习惯 变量在前 类型在后 的语法 怎么破

  •  
  •   wangxiaoer · Jan 3, 2018 · 4986 views
    This topic created in 3094 days ago, the information mentioned may be changed or developed.

    主力语言 java,js,但是偶尔做点项目感觉这两种代码保护有限,逆向成本太低,看到 go 直接编译成 exe,而且部署也方便,就像去尝试一下。

    结果看到那些语法简直想跪:

    var a int
    var b,c,d int
    
    func Test(a int,b int) string {
    
    }
    

    特别是数组之类:

    var m map[string]Vertex
    var a [][]int
    

    一眼看过去,这都是啥玩意儿啊。

    正常阅读顺序都是从左到右,看到一个变量如果要看类型要目光要转到最右边,变量和类型又都是小写,感觉看代码的过程首先需要人肉 parse 代码一遍,然后再看业务逻辑,真的习惯不了。

    怎么破

    32 replies    2018-01-04 14:04:20 +08:00
    codermagefox
        1
    codermagefox  
       Jan 3, 2018
    Haskell:"你们先聊,我出去一下."
    cuebyte
        2
    cuebyte  
       Jan 3, 2018
    实际上这样的声明更符合人类语言习惯
    wangxiaoer
        3
    wangxiaoer  
    OP
       Jan 3, 2018
    @cuebyte 刚看到这个回答,感觉很有道理:

    为什么 Go 语言把类型放在后面? - 康晓晓的回答 - 知乎
    https://www.zhihu.com/question/21656696/answer/29593701

    为了满足一些个例,牺牲了整个可读性。
    trys1
        4
    trys1  
       Jan 3, 2018 via Android
    你只因为 go 能编译成 exe 这一个优点就轻易地用 go
    你只因为 go 的“类型在后”这一点就轻易地抱怨
    想要影响你的决定会不会太轻易了
    wangxiaoer
        5
    wangxiaoer  
    OP
       Jan 3, 2018
    @codermagefox 看了这个语言后,我觉得如果老板让我学这个,我宁愿 go die。
    wangxiaoer
        6
    wangxiaoer  
    OP
       Jan 3, 2018
    @trys1 那个优点不是一个可有可无的优势,对我吸引力太大了。类型这个已经在尝试接受了,但是过程感觉很艰难而已。学还是要学的
    trys1
        7
    trys1  
       Jan 3, 2018 via Android
    @wangxiaoer 我接触了几种语言后,对 go 最深的感触是相见恨晚
    trys1
        8
    trys1  
       Jan 3, 2018 via Android
    @wangxiaoer 嗯,共勉
    codermagefox
        9
    codermagefox  
       Jan 3, 2018
    @wangxiaoer #6 主力语言 Java,Js 吗?
    Js 中 typeof class 的结果是啥?
    es6 中 class 的 extend 是怎么实现的?
    new 一个 obj,再赋值,它的.constructor 指向哪里?

    去了解一下,保证你会突然觉得不希望知道这些知识
    kohos
        10
    kohos  
       Jan 3, 2018
    还别说,入门编程语言 VB 还就是类型在后面:Dim i As Integer
    cuebyte
        11
    cuebyte  
       Jan 3, 2018
    @wangxiaoer 不清楚你在说什么,什么个例?

    另外 scala, kotlin, rust, go 都是类型后置。为什么?因为它们都有类型推断啊。变量或不变量的声明放在前面了,次要的类型放在后面。并且其实根本不妨碍阅读,是你自己不习惯。
    gamexg
        12
    gamexg  
       Jan 3, 2018
    我很少这么写,大部分都是直接

    a:=0
    a:=byte(0)
    var a :=0
    azh7138m
        13
    azh7138m  
       Jan 3, 2018
    flow 和 ts 不都是写后面吗.......
    mohoumk2
        14
    mohoumk2  
       Jan 3, 2018 via Android
    VB:"你们先聊,我走了"
    mario85
        15
    mario85  
       Jan 4, 2018 via Android
    SQL:你们先聊,我走了
    muziki
        16
    muziki  
       Jan 4, 2018 via iPhone
    @cuebyte rust 有类型变量名分隔符,其他那几个没看过,貌似也有。有分隔符可读性明显高 go 很多
    blless
        17
    blless  
       Jan 4, 2018 via Android
    有时候类型也巨长的时候其实写在前面也挺恶心的
    rrfeng
        18
    rrfeng  
       Jan 4, 2018 via Android
    习惯而已,只是你先学了类型前置的语言。
    多写写就好了。
    ooops
        19
    ooops  
       Jan 4, 2018 via iPhone
    swift 也放在后面啊,oc 前面,没有觉得很奇怪,大概是有冒号分隔的原因吧
    sunnygaofan
        20
    sunnygaofan  
       Jan 4, 2018 via iPhone
    就以 JavaScript 而言,类型约束 typescript 和 flow 都是放后面,这东西喜欢就好。就像习惯了其他语言驼峰命名,到 python 愣是不自觉写成驼峰,花了好几天才改过习惯。还是那句话,在一个社区就得尊重一个社区的规则和文化
    Mutoo
        21
    Mutoo  
       Jan 4, 2018
    ECMAScript 家族的语言( e.g. javascript, typescript, actionscript, hexo) 就允许这么做,相当于在无类型语言加入了一些限制,可以写出更健壮的代码,也方便语法检查。
    var arr:Array = new Array()
    zhusimaji
        22
    zhusimaji  
       Jan 4, 2018 via iPhone
    Scala 默默看着楼主
    jko123
        23
    jko123  
       Jan 4, 2018 via Android
    python 笑而不语
    naver1
        24
    naver1  
       Jan 4, 2018   ❤️ 1
    为啥还要加个 var,直接 int a 才是正道= =、
    wangxiaoer
        25
    wangxiaoer  
    OP
       Jan 4, 2018
    @muziki 我也这么觉得,感觉满屏看过去有时候会有错觉,比如

    `var a int = 4`

    第一反应是 `int = 4`?
    wangxiaoer
        26
    wangxiaoer  
    OP
       Jan 4, 2018
    @sunnygaofan 驼峰和下划线我感觉切换起来就是无缝的,因为即使 java 里面以驼峰为主,但是涉及到 sql 字段的一般还是下划线,所以这俩感觉适应程度很低。
    sammo
        27
    sammo  
       Jan 4, 2018 via iPhone
    想跪就跪阿!
    toxicant
        28
    toxicant  
       Jan 4, 2018 via iPhone
    去玩 php 啊。 不用声明变量类型
    zorui
        29
    zorui  
       Jan 4, 2018 via Android
    +1 我也是被这写法吓退了。
    0987363
        30
    0987363  
       Jan 4, 2018 via Android
    @wangxiaoer 为毛要这样写。 一般都是 i := 4
    YYYeung
        31
    YYYeung  
       Jan 4, 2018
    我记得刚学编程的时候,看到 C 语言的变量声明,就觉得类型放前面有点别扭
    后来习惯了,再学现在的某些语言,类型放后面,反而又觉得别扭
    所以,还是习惯问题吧
    kenybens
        32
    kenybens  
       Jan 4, 2018
    Delphi 表示很正常
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5267 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 79ms · UTC 07:12 · PVG 15:12 · LAX 00:12 · JFK 03:12
    ♥ Do have faith in what you're doing.