我们知道C/C++/Java/C#等语言使用类型前置(严格说来C语言有时候还会把变量名夹到中间),Swift/Kotlin/Rust等使用类型后置。

那么类型名写在变量名后面还是前面好呢?

小孩子才做选择,成年人全都要。Fanx 3.0版本同时支持两种写法:

Int age = 12
var age: Int = 12fun foo() : Str { .. }
Str foo() { ... }

fanx的成员声明关键字包括:var, let, const, fun, new。局部变量不需要关键字。

两种风格优缺点

之前回答过类似的问题。两种风格完全是品味问题,没有特别的优缺点。但有很多谣言,需要澄清。

类型前置和后置,不会影响编译器的运行效率。也没有解析难度,解析器超前看一个和喝凉水一样自然。都可以做类型推断,类型后置容易做类型推断就是谣言。

实现过程

因为变量名后置时有个冒号,所以两种风格能共存。编译器只需要超前超看一个token就能知道是那种方式了。如果超前下一个发现是冒号那么当前是变量名,下下一个是类型名。反之当前是类型名下一个是变量名。

本来想按照swift的设计使用func表示函数。但可惜func已经被大量用作标识符了,如果func改为关键字就需要改大量代码,所以使用了fun。

总共修改编译器花了一个多小时时间,改动真的比较小。很多新手看来是很大的区别,在编译器看来是家常。

示例代码

完整的一段示例代码:

  class Person {var age: Intlet name: Strnew make(n: Str) {name = n}fun foo() : Str {return name}static fun main() {p : Person = Person("pick")s := p.fooecho(s)}}

构造体中变量后面的冒号_类型在变量前面还是后面,终于有答案了相关推荐

  1. gmm中隐变量是什么的_机器学习-隐变量模型和期望最大算法

    目录 1 隐变量模型 1.1 隐变量模型意义 1.2 高斯混合模型 GMM 1.3 其他模型(应用) 2 期望最大算法(EM) 2.1 EM算法意义 2.2 EM算法推导 2.3 EM算法 2.4 E ...

  2. java变量无修饰符默认类型,Java变量与修饰符

    Java变量类型 java变量定义:type variablename,[variable name = value]=value ? 局部变量:方法中的变量 ? 局部变量声明在方法中 ? 访问修饰符 ...

  3. matlab向结构体中的数组自动赋值_数组 – 在Matlab结构体数组的每个元素中更新一个字段...

    只是一个说明,交易是不必要的: [arr.val] = newVals{:}; % achieves the same as deal(newVals{:}) 唯一的其他方式我知道如何做(没有foor ...

  4. python变量后面加星号_计算与变量(一)跟杜老师一起,趣学Python编程

    好了,现在你的Python装好了,也知道如何启动PythonShell程序了,那么你就已经准备好用它来做点什么了.我们将从一些简单的计算开始,然后再使用变量.变量是计算机程序中用来保存东西的一种方式, ...

  5. java静态变量需要初始化吗_» Java静态变量初始化顺序浅谈

    Java 类初始化顺序在网上已经有很多文章了,这里不再谈那么多,仅仅谈下Java静态变量的初始化顺序,如果你是Java高手,并且自认为对这个顺序已经掌握到了炉火纯青的境界,请忽视这篇文章. 前天看了Y ...

  6. C# 8: 可变结构体中的只读实例成员

    在之前的文章中我们介绍了 C# 中的 只读结构体(readonly struct)[1] 和与其紧密相关的 in 参数[2]. 今天我们来讨论一下从 C# 8 开始引入的一个特性:可变结构体中的只读实 ...

  7. java 定义全局变量_都说变量有七八种,到底谁是 Java 的亲儿子

    点击蓝色"陈树义"关注我哟 网上罗列了很多关于变量的理解,良莠不齐,不知道哪些是对的,哪些是错的.所以笔者索性就这些博客和自己的理解写出这篇文章,如果有不对的地方,希望读者能够指正 ...

  8. c语言中时间类型的变量,C语言变量的类型

    C语言变量的类型 变量要有变量名,在内存中占据一定的存储单元,存储单元里存放的是该变量的值.不同类型的变量其存储单元的大小不同,变量在使用前必须定义.那么C语言变量的类型有哪些呢,一起来看看! (一) ...

  9. typescript利用接口类型声明变量_TypeScript入门指南(基础篇)

       戳蓝字「前端技术优选」关注我们哦! 作者:慕晨同学 原文地址:https://github.com/USTB-musion/fee-skills/issues/19 写在前面 ts是拥有类型系统 ...

  10. c语言的返回类型是指针变量吗,C语言-指针类型

    改值场景示例 - 改变 n 的值 的函数 void change(int n) { n = 10; } int main() { int a = 20; - 这里只能把 变量a 的值传到 change ...

最新文章

  1. python中的类及self详解_Python类class参数self原理解析
  2. 每天定时打开某个网页_纯技术分享,不借助任何工具下载网页中的视频、音乐等~...
  3. Redis 源码分析之故障转移
  4. url存在宽字节跨站漏洞_【XSS漏洞】XSS漏洞相关总结v1.0
  5. 怎样使用SSH连接OpenStack上的云主机
  6. poj3171 Cleaning Shifts
  7. java B2B2C Springcloud电子商务平台源码 -Feign之源码解析
  8. python之requests模块
  9. 你所不知道的Redis热点问题以及如何发现热点
  10. linux使用samba实现文件共享
  11. hibernate 二级缓存 处理
  12. Linux system PXE网络环境
  13. iOS定位获取城市名
  14. 纠正口呼吸,信医生别信“神器”
  15. Sonarqube 代码检查无法加载出项目,error:Project is not analyzed yet.
  16. html格式如何转换mp4视频,html怎样用格式工厂转换成mp4
  17. macbook重装系统 选择方案_MAC-重新安装系统的四种方法
  18. 【分享】品牌平面广告创意过程与思维技巧
  19. AMCL源码架构讲解与详细分析
  20. 金色传说:SAP-ABAP-VK11/VK12/VK13保存时增强

热门文章

  1. 【python】编程语言入门经典100例--23
  2. Drools workbench kie-server部署和简单使用(全流程
  3. 已经有了Thread为什么还要Runnable
  4. MATLAB获取字符串中两个特定字符之间的内容
  5. 20.并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解
  6. es 1.7 ik 配置
  7. 面向对象思想,简单实例
  8. brave+kafka+zipkin+cassandra搭建分布式链路跟踪系统
  9. SQL Server 用SSMS查看依赖关系有时候不准确,改用代码查
  10. python 学习第十二课