V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wangxiaoer
V2EX  ›  问与答

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

  •  
  •   wangxiaoer · 2018-01-03 21:51:23 +08:00 · 4247 次点击
    这是一个创建于 2512 天前的主题,其中的信息可能已经有所发展或是发生改变。

    主力语言 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 条回复    2018-01-04 14:04:20 +08:00
    codermagefox
        1
    codermagefox  
       2018-01-03 21:52:17 +08:00
    Haskell:"你们先聊,我出去一下."
    cuebyte
        2
    cuebyte  
       2018-01-03 21:54:40 +08:00
    实际上这样的声明更符合人类语言习惯
    wangxiaoer
        3
    wangxiaoer  
    OP
       2018-01-03 21:58:46 +08:00
    @cuebyte 刚看到这个回答,感觉很有道理:

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

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

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

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

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

    `var a int = 4`

    第一反应是 `int = 4`?
    wangxiaoer
        26
    wangxiaoer  
    OP
       2018-01-04 08:28:55 +08:00
    @sunnygaofan 驼峰和下划线我感觉切换起来就是无缝的,因为即使 java 里面以驼峰为主,但是涉及到 sql 字段的一般还是下划线,所以这俩感觉适应程度很低。
    sammo
        27
    sammo  
       2018-01-04 09:00:36 +08:00 via iPhone
    想跪就跪阿!
    toxicant
        28
    toxicant  
       2018-01-04 09:16:37 +08:00 via iPhone
    去玩 php 啊。 不用声明变量类型
    zorui
        29
    zorui  
       2018-01-04 09:34:30 +08:00 via Android
    +1 我也是被这写法吓退了。
    0987363
        30
    0987363  
       2018-01-04 09:37:57 +08:00 via Android
    @wangxiaoer 为毛要这样写。 一般都是 i := 4
    YYYeung
        31
    YYYeung  
       2018-01-04 09:48:45 +08:00
    我记得刚学编程的时候,看到 C 语言的变量声明,就觉得类型放前面有点别扭
    后来习惯了,再学现在的某些语言,类型放后面,反而又觉得别扭
    所以,还是习惯问题吧
    kenybens
        32
    kenybens  
       2018-01-04 14:04:20 +08:00
    Delphi 表示很正常
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1343 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:54 · PVG 01:54 · LAX 09:54 · JFK 12:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.