前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >浅谈 var 关键字

浅谈 var 关键字

作者头像
用户1608022
发布于 2018-04-11 06:40:03
发布于 2018-04-11 06:40:03
1K0
举报

提起 var关键子,程序员的第一反应就是JavaScript, 事实上这个关键子在其他语言中也有被采用。

比如说C#, 比如说kotlin, 用法和JavaScript中使用差不多,作为要声明变量的前缀

var myInt = 1;

var myList = new List<String>();

var myValue = getValue();

在其他语言中也有与var作用类似的关键字,比说C++中的auto,比如TypeScript中的let,比如kotlin中的val

auto myInt = 1;

let myValue = getValue();

val myString = "kotlinlanguage"

var以及与其同意的关键字被使用的如此广泛,看起来用这些关键字的代码都长一个样, 然而, JavaScript中的var关键字与其它语言中的var关键字有本质的不同。

在JavaScript中,var关键字最重要的作用是控制变量的作用域, 其中细节我们不在这里讲解,除此之外,它最大的作用可能就是使代码美观而已。

而在其它语言中, 这个关键之是大大的有门道, 在这些语言中,这个关键字背后有一项称之为“类型推导”的技术支持着这个关键字的运行。

Java语言中,我们常常这样写代码。

Integer myInt = 1;

String strSql = "select * fromtableName";

在声明一个变量时, 都会在变量名前加上这个变量的类型信息, 编译器是通过这个类型批注来判断变量类型的,如果代码中有对变量进行不符合类型规范的操作,编译器就会报错, 这便是静态类型语言代码不易出错的基础。

这样写表面上看起来挺和谐, 但如果是这样的代码呢

不要怀疑,比这更加操蛋的代码都有。 声明这个变量会耗费我们不少时间,我们要仔细检查语句两边的类型是否一致。var关键字, 确切的说是类型推导技术, 可以简化这条语句。

代码变得简洁,而且编译器通过类型推导技术可以确定myList的类型就是

ArrayList<TreeMap<String,HashMap<String,ArrayList<String>>>>

而不用通过变量前面那一长串长长的类型批注信息来确定。

再来一个更加明显的, 代码如下

在不带类型推导机制的语言里, 调用这个函数需要这样写

你不得不根据这个函数的返回值写一串长长的类型代码, 而且, 当这个函数的返回值改变时,这个变量前面的类型批注也要跟着变,假如这个函数被调用一百次,那么修改这些调用代码将是一件异常头疼的事情,当然,你可以借助IDE的能力来批量转换,但这属于外力, 有种横冲直撞使用蛮力的味道。

如果使用类型推导技术,这个问题能被很好的解决,甚至于这根本不是个问题。

var myList = getMyList();

var myList1 = getMyList();

var myList1 = getMyList();

不但代码简短,而且没有类型依赖。 可惜这么好的特性,宇宙第一的Java居然不支持,令人遗憾。 所幸, Java以外的其它主流静态类型编程语言都已经支持。如上面所说, C++的auto, C#的var,kotlin的var和val,都有类型推导的功能。

而JavaScript中的var关键字却和类型推导没有半毛钱关系,甚至JavaScript代码根本没有类型一说, JavaScript的类型都是在运行期确定的,那个时候的JavaScript已经不再是我们所看到的JavaScript代码。

所以说, 当我们在其它语言中见到var关键字的时候,千万不要把他们和JavaScript中的var混淆,因为它们背后完全是两种不同的运行机制。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 带你撸出一手好代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++ auto 关键字的使用
早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期,这是多余的,因为就算不使用auto声明,变量依旧拥有自动的生命期:
狼啸风云
2020/07/14
4.9K0
C/CPP中的auto关键字对比分析
auto是C语言的一个关键字,关键字主要用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变量默认就是auto的。
CtrlX
2022/11/14
9160
C/CPP中的auto关键字对比分析
C++中auto关键字的用法详解
在C语言中auto修饰的变量,是具有自动存储器的局部变量,但因为局部变量默认类别默认是auto修饰导致一直没有人去使用它。
薄荷冰
2024/04/30
4040
C++中auto关键字的用法详解
深入理解final关键字
通常我们对Java中final关键字的理解是“用final修饰的变量是不可变的”,如果尝试对final变量多次赋值,编译器将报错。似乎final的作用就是保证变量不可变,这没有错,但是如果我们在Java中灵活应用final的被修饰目标不可变的特性,往往能发掘出很多令人意想不到的效果,而非仅仅保证变量不可变这么粗浅而已。下面我们来说说final关键字的多重用法 一 用final修饰普通变量通常分为两种情况,修饰普通基本类变量和修饰引用类型变量,也就是对象类型变量。 修饰普通基本类型变量最能清楚直白的表现出fi
用户1608022
2018/04/11
7180
01. Kotlin 标识符、关键字和注释
标识符就是变量、常量、函数、属性、类、接口和扩展等由程序员指定的名字。构成标识符的字符均有一定的规范,Kotlin 语言中标识符的命名规则如下:
acc8226
2023/02/02
4010
你真的懂 Kotlin 中的 by 关键字吗?3分钟搞懂精髓
在Kotlin中,by 关键字主要用于实现委托模式。委托模式是一种设计模式,它允许一个对象将部分职责委托给另一个对象。在Kotlin中,by 关键字提供了一种简洁的语法,使得委托的实现变得更加轻松。
Rouse
2024/02/06
9770
你真的懂 Kotlin 中的 by 关键字吗?3分钟搞懂精髓
100天精通Golang(基础入门篇)——第22天:深入探讨Go中的‘type‘关键字
亲爱的读者,你好!今天,我们再次踏上了Golang的神奇之旅。在前文中,我们已经一同探索了Go中的type关键字,了解了其强大的定义能力。但事实上,这只是冰山一角。接下来,我会带领大家深入挖掘type的更多奥秘,确保你能够更加得心应手地使用Go。所以,如果你对Go的type关键字充满好奇,或者想要进一步掌握其精髓,那么,请继续阅读!
猫头虎
2024/04/09
1170
【C++入门】auto关键字
在C语言中auto修饰的变量,是具有自动存储器的局部变量,但因为局部变量默认类别默认是auto修饰导致一直没有人去使用它。
薄荷冰
2024/01/22
1470
【C++入门】auto关键字
Java 8之后的那些新特性(一):局部变量var
在IDEA中2021年的一个调查中,程序员中使用Java的版本中,Java 8仍是主流。新的长期支持版Java 11,Java 17并未有Java 8流行。
御剑
2022/04/15
2.2K0
Java 8之后的那些新特性(一):局部变量var
Go语言关键字解析:深入了解Go语言中的关键字
为了更加深入地介绍Go语言以及与C#语言的比较,本文将会从多个维度出发进行详细的阐述。首先,将从Go语言的关键字方面介绍Go与C#在语言特性上的异同,并且探讨两种语言在关键字方面的优化和不足之处。其次,本文将通过代码示例展示展示Go语言与C#之间关键字的不同。除此之外,为了更好地帮助读者理解Go语言,本文还将介绍一些优秀的Go语言工具和社区资源,供读者进一步学习和探索。相信通过这些内容的全面介绍,读者们会对Go语言有更全面深入的认识和了解。
葡萄城控件
2023/10/11
2890
Go语言关键字解析:深入了解Go语言中的关键字
《C++11》`auto`关键字:简化类型推导的强大工具
在C++11中,auto关键字的引入为程序员提供了一种简化类型声明的方式。它允许编译器根据初始化表达式自动推导变量的类型,从而减少了代码的冗长性和复杂性。本文将深入探讨auto的概念、用法、优缺点以及一些实际示例,帮助你更好地理解和应用这一特性。
码事漫谈
2025/01/02
1080
《C++11》`auto`关键字:简化类型推导的强大工具
终于明白 Java 为什么要加 final 关键字了!
在开发过程中,由于习惯的原因,我们可能对某种编程语言的一些特性习以为常,特别是只用一种语言作为日常开发的情况。但是当你使用超过一种语言进行开发的时候就会发现,虽然都是高级语言,但是它们之间很多特性都是不太相同的。
芋道源码
2019/09/12
9120
终于明白 Java 为什么要加 final 关键字了!
C# 中比较实用的关键字,基础高频面试题!
在C#编程中关键字是构建逻辑和实现功能的基石,它承载着编程语言的语法规则和编程智慧。熟练掌握这些基础高频关键字对提升编程能力和面试表现至关重要,它们是日常开发和解决复杂问题的关键。
追逐时光者
2025/03/22
340
C# 中比较实用的关键字,基础高频面试题!
【C语言】 C 语言 关键字分析 ( 属性关键字 | 常量关键字 | 结构体关键字 | 联合体关键字 | 枚举关键字 | 命名关键字 | 杂项关键字)
>**auto不能修饰全局变量** : auto 关键字不能修饰全局变量, 因为 ***auto 修饰的变量存储在栈内存中, 全局变量存储在全局区, 此时出现了冲突***. 如果使用auto修饰全局变量, 编译时会报错.
韩曙亮
2023/03/27
2.4K0
【C语言】 C 语言 关键字分析 ( 属性关键字 | 常量关键字 | 结构体关键字 | 联合体关键字 | 枚举关键字 | 命名关键字 | 杂项关键字)
从 Java 和 JavaScript 来学习 Haskell 和 Groovy(类型系统)
接上文 《从 Java 和 JavaScript 来学习 Haskell 和 Groovy(引子)》。
四火
2022/07/19
5510
终于明白 Java 为什么要加 final 关键字了!
在开发过程中,由于习惯的原因,我们可能对某种编程语言的一些特性习以为常,特别是只用一种语言作为日常开发的情况。但是当你使用超过一种语言进行开发的时候就会发现,虽然都是高级语言,但是它们之间很多特性都是不太相同的。
业余草
2020/10/10
6730
终于明白 Java 为什么要加 final 关键字了!
C#关键字常见面试题
不仅仅为了面试而学习,更多的是查漏补缺、扩充知识面和大家共同学习进步(文章中有描述不当的地方欢迎文末留言指正,我会及时改正🤞)。
追逐时光者
2024/02/22
1780
C#关键字常见面试题
From Java To Kotlin:空安全、扩展、函数、Lambda很详细,这次终于懂了
Kotlin 出自于捷克一家软件研发公司 JetBrains ,这家公司开发出很多优秀的 IDE,如 IntelliJ IDEA、DataGrip 等都是它的杰作,包括 Google 官方的 Android IDE -- Android Studio ,也是 IntelliJ IDEA 的插件版。
Seachal
2023/05/20
1.3K0
From Java To Kotlin:空安全、扩展、函数、Lambda很详细,这次终于懂了
Kotlin快速上手
val 用于值从不更改的变量。您不能为使用 val 声明的变量重新赋值。 var 用于值可以更改的变量。 在以下示例中,count 是一个 Int 类型的变量,为其赋予的初始值为 10:
AnRFDev
2021/02/01
1.2K0
转向Kotlin——对象
在Java中又匿名类的概念,也就是说,在创建类的时候,无需指定类的名字。匿名类一般用于方法参数。基本理念就是方法需要接收一个类或者接口的实例,而这个实例只是在该方法中使用,没有必要单独再定义一个类,或者创建一个对象变量。因此,就在传入方法参数值的同时创建了该类的实例。代码例子如下:
蜻蜓队长
2018/08/14
7430
推荐阅读
相关推荐
C++ auto 关键字的使用
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文