之前一直用的vs code写代码,都没有过VS,这几天用了下VS,除了界面还是不习惯以外,写代码是真的爽,后悔没早点用VS了。
智能补全
可能这个已经超出以前的智能补全的范畴了,以前基于语法的补全都能叫做智能补全了(虽然确实比关键字补全和词库补全要智能),但是现在的智能补全可能也是带有一点AI了,不过程度控制得刚好,过量的AI会胡言乱语,太少的AI使用起来可能和语法补全一样麻烦,那就没有体现出它的优势,甚至准确率不如语法补全。
举个例子,我这几天写的都是些简单而又繁琐的东西,比如声明一个类,它有Width
、Height
等属性,当我输入完public uint Width
的时候,当时我也还是第一次写C#,都还不知道{get;set;}
这种写法,它就弹出来了,不过这个写法也算是语言特性,是语言的语法,不足为奇,神奇的是下面这个。
当我按tab补全完Width
那一行换行之后,下面直接出现了public uint Height{get;set;}
来让我确认,这个可不是语法补全能够做到的了,语法补全正如字面上的只能在语法上给你提示,不会预测你想要做什么。
为什么说这个程度控制得非常好呢,它不是直接生成一大块的,一次只是生成一行,虽然可能你按一次tab键之后它生成的下一行可能也是你需要的,但是我也觉得多按两下tab也比让它生成一大段代码之后再改。而且先不说它可能不清楚我想要什么,有时候我自己都不清楚我想要什么,我都不清楚我想要什么的情况下它就生成了一大段代码,那很难说效果会怎么样,比起再去运行再改,还不如每一行我都过目一遍。
等AI什么时候变成万能许愿机,甚至都不需要我描述它就能准确的实现我想要的效果的时候或许就不需要我过目了。
包管理器
之前提到了C#有包管理器,写实用的东西的时候有库来调也是很爽的事情,它可以让你少写很多繁琐的功能实现,比如json文件反序列化成结构体,和把结构体系列化成json字符串,这个非常实用的功能如果调库就可以非常优雅的一行实现,甚至让我有了写python的感觉,不过仅从这一个角度来看,C#的Newtonsoft.Json
用起来比python的json库要优雅。
主要是这个功能也是模板实现的,能够在编译期获取类的属性名,并且转换成字符串,这个肯定用了黑魔法,所以可以直接用结构体来序列化和反序列化,而python则是转为了Map
,从优雅的角度肯定不如结构体。等以后我再学黑魔法的时候我也要写一个这样的库。
总结
在我看来C++是一个纯粹的语言,我用C++大部分都是写算法题或者玩魔法。
python是一个冗杂的语言,我使用它也没有一个准确的目的,基本上就是什么都能做,除了写算法,其他的事情我都是python调库,但是用不同的库又像是一门新的语言,语言本身都不重要了。
C#是一个生产工具语言,可能也是VS的原因,C#能够使用很多系统接口,比如打开文件选择窗口,这个或许C++也能做,但是也像我前面说的我用C++比较纯粹,只用标准库。包管理器也同样扩展了它的实用性,并且加上VS的智能补全,这个是真正的软件开发工具。