理论上说能用 const 的地方尽量用 const 当然是最好的,但发现用了 const 之后有些地方没之前优雅了。比如某个程序有很多这样的代码:
let a = ...
if (a > 0) {
...
}
本来两个 a 都是工整对齐的,换成 const 变成:
const a = ...
if (a > 0) {
...
}
感觉没以前美观了😂
还有本来一堆变量都是 let 定义的,现在有些是 let 有些是 const 定义:
const num = arr.length;
let i = 0;
const map = {};
...
看起来也没有统一用 let 那么整齐了。。。而且有些 let 的初始值依赖 const 的值,也没法分开归类定义。。。强迫症患者表示好纠结这个问题~
1
bajie 2018-12-19 19:49:33 +08:00 7
let 定义变量
const 定义常量 而且。。代码优雅的意思是对齐吗。。。。。 |
2
kba977 2018-12-19 19:51:13 +08:00 via iPhone
变量能用 const?
|
3
shiny 2018-12-19 19:51:19 +08:00 14
|
4
MeteorCat 2018-12-19 19:55:19 +08:00 via Android 1
这戏怎么这么多,黑人问号
|
5
arrow8899 2018-12-19 19:55:35 +08:00 1
你怕不是把 const 和 var 搞混了吧。。。
|
6
Nasei 2018-12-19 19:56:13 +08:00 via Android 1
竟然纠结这种对齐…让我想到了十几年前的 c 代码里,有一种风格是从 = 号对齐的
|
8
qwertyzzz 2018-12-19 19:57:28 +08:00
有点优雅的
|
9
dapang1221 2018-12-19 19:58:23 +08:00
工整对其这 4 个字我想了半分钟才明白是这么个对齐法……
|
10
iiii 2018-12-19 19:58:40 +08:00 via Android
自己代码里基本上全是 const
|
11
codermagefox 2018-12-19 19:59:59 +08:00 via iPhone 1
代码对齐 !==优雅
可读性==优雅 逻辑清晰===优雅 |
12
Kirscheis 2018-12-19 20:00:16 +08:00 via Android
为什么 const 后面还能有分支?
|
13
dd0754 2018-12-19 20:01:40 +08:00
|
14
ShangbaizeDaoye 2018-12-19 20:02:04 +08:00
???
你 const 个 a,然后再让 a 比较大小? 说正经的,const 定义的是常量。。 而且你要是强迫症犯了,为何不让 const 定义的放一起,let 定义的放一起,然后两组用空行隔开呢? |
15
zbinlin 2018-12-19 20:02:30 +08:00
在 js 里,一般 let 用来定义的变量可以改变的,const 用来定义的变量不可改变的。
所以尽量用 const,如果需要用 let,还是要用的。当然,如果 do expression 可以进入标准的话,用 let 的场景就更少了。 |
16
mytry OP |
17
yunye 2018-12-19 20:06:04 +08:00
学点基础再来说优雅吧
|
18
mytry OP 当然最终结果,还是把能用 const 的地方都换成了 const,毕竟不对齐的地方太多了,而已这种小细节比起健壮性算不上什么,只是偶尔觉得有些纠结而已。。。
另外代码里很多地方用了 const 下一行再 await,这下反而更对齐了 233333333 |
19
tabris17 2018-12-19 20:09:32 +08:00
我觉得作为一个优雅的英语使用者,应该用 assign a = ...
|
20
ShangbaizeDaoye 2018-12-19 20:14:05 +08:00
@mytry 这样的话,那还是建议多关注易读性和逻辑,过于纠结这种没必要的对齐,到最后可能会事倍功半。。
大不了也可以像我上面说的 const 放一起,let 放一起。。 |
21
lscho 2018-12-19 20:18:12 +08:00 via iPhone
能用 const 的尽量用 const
|
22
Mutoo 2018-12-19 20:21:09 +08:00
人生苦短,我用 let (可以少打两个字母)
|
23
mytry OP 见过个最极端的,把 for 循环因子都用 const,大概是这么实现的。。。
```js function* range(beg, end, step = 1) { for (let i = 0; i < end; i += step) yield i; } for (const i of range(0, 10, 2)) { console.log(i); } ``` |
24
Jasonwxy 2018-12-19 20:46:37 +08:00
这有什么好纠结的。。我都是用 const,如果某个变量之后可能要变化,就用 let。我之前也强迫症,一下升级了全部项目依赖。。然后,之后升级依赖都小心翼翼的。。
|
25
autoxbc 2018-12-19 21:08:31 +08:00
统计了一下自己的小项目,const 和 let 的用量是 14:1
|
26
aleung 2018-12-19 21:20:50 +08:00 1
代码里尽可能使用 const,而不用 let。
特别是使用 lodash 之类的函数库辅助之后,你会发现很少情况下非用 let 不可。做到这点,是函数式编程的初级阶段。 |
27
AlloVince 2018-12-19 21:26:37 +08:00 1
|
28
dcatfly 2018-12-19 21:28:26 +08:00
看到楼主第一段代码的工整对齐。。我笑了。。
|
29
seki 2018-12-19 21:29:37 +08:00
需要重定义就用 let,不需要重定义就是 const
看了一下楼主的发帖记录,觉得可能是缺铜币了 |
30
Wincer 2018-12-19 21:47:16 +08:00
楼主这么纠结建议使用 Typescript,编译器会告诉你什么时候该用 const
|
32
mytry OP 应该没有 7 8 年,之前用的是一种奇怪的强类型语言叫 haxe...
|
33
airyland 2018-12-19 21:56:42 +08:00
楼主重新定义了代码对齐。。
|
34
Nick66 2018-12-19 21:58:00 +08:00
你该重新学习 es6 语法了
|
35
ydirel 2018-12-19 22:01:42 +08:00
eslint 了解一下
|
36
FakeLeung 2018-12-19 22:01:52 +08:00 via Android
let 是用于定义会修改变量。const 用于定义不会被改变的。改变指的是内存地址。不一定是值。
|
37
a62527776a 2018-12-19 22:04:32 +08:00 via Android
???
|
39
emmmlucky 2018-12-19 23:31:26 +08:00 via Android
建议使用 eslint 或 tslint,let 定义的变量之后没有重新赋值就会报错。
|
40
belin520 2018-12-19 23:35:20 +08:00 via iPhone
建议楼主重新学习下 const 和 let 的用法再来思考你的疑惑
|
41
crazykay 2018-12-19 23:38:37 +08:00
我写的时候的命名通常都比较长, 反正看起来非常不"优雅", 但是很久之后再来改代码, 不至于看不懂
|
42
Everyman 2018-12-19 23:45:13 +08:00
你是不是对优雅和强迫症有什么误解?
严格遵守规范,能用 const 用 const,不能用 const 采用 let,才叫优雅。 能用 const 用了 let,才叫必死强迫症。 |
43
lastpass 2018-12-20 00:00:28 +08:00 via Android
可以试着将对齐交给代码美化工具。自己关注于逻辑嘛。这样写的又快有好看。就有更多时间摸鱼了。(≧▽≦)
|
45
zhuangzhuang1988 2018-12-20 00:14:47 +08:00
lint 打开就好了
|
46
w3cay 2018-12-20 00:16:25 +08:00 2
还是需求太少
|
47
Sivan 2018-12-20 00:19:08 +08:00 via iPhone
是我误会了,代码对齐原来是垂直对齐……🤪
|
48
Vegetable 2018-12-20 00:47:41 +08:00 via Android 1
js 对可变不可变约束的不是那么严格,大家观点不同正常。我是典型的 let 党。
认为应该慎用 const,相比 const 和 let,前者更多了一层约束,这种常量在代码中应该只占很小的一部分,因为他们往往有特别的含义,应该是明确的数值字符串之类或全局唯一的对象等,const 应该提示读代码的人,这是一个很关键的变量,不要尝试在运行时改变他,而不是单纯的告诉 v8 这个不能改。如果能用 const 用的太多,便失去了向人传递信息的能力了。 |
49
zhy0216 2018-12-20 00:57:50 +08:00
我们只用 const
|
50
yanaraika 2018-12-20 01:18:26 +08:00 via Android
@Vegetable 你把编译期已知的常量都用 CAPITAL_LETTER 就好了,js 里的 const 指的就是 immutable,和你说的编译期已知是两个不同的概念
|
52
wdv2ly 2018-12-20 07:34:02 +08:00 via Android
那 let 和 var 区别是啥,我没学过 js,一般都是 var 到底
|
53
passerbytiny 2018-12-20 09:09:15 +08:00
可以做,并不代表你能做。
Java,final static 定义的非不可变类的常量,其内部的属性也是可变的,然而你要是敢这么用,会被打死。 JS 因为万物皆对象,所以你将一个方法赋值给 const 常量,来实现 const 定义可变值的常量的目的,在语法上是允许的。然而你真得能这样用吗? |
55
heyOhayo 2018-12-20 09:21:13 +08:00
都 9102 了,还有人问这么无聊的问题
|
56
Heroy 2018-12-20 09:21:55 +08:00
|
57
ChefIsAwesome 2018-12-20 09:25:12 +08:00 via Android
屁影响没有。现在都分模块写,一个模块文件就写那么点代码,模块导出的变量在引入时又自动变成常量,哪来的乱改常量的可能。
|
58
Terry05 2018-12-20 09:39:15 +08:00
楼主写 JS 肯定是不刷 ESLint 的,鉴定完毕
|
59
fundebug 2018-12-20 09:41:29 +08:00
《代码简洁之道》貌似没有必须对其这个说法吧。。。
|
60
ZehaiZhang 2018-12-20 09:42:13 +08:00
讲究人
|
61
fundebug 2018-12-20 09:43:36 +08:00
@ChefIsAwesome 用 const 至少可以提醒同事不要乱改变量,提高可读性。
|
62
JackyCDK 2018-12-20 09:43:45 +08:00
const 定义常量
let 定义变量 不是 ES6 基础吗.... |
63
tairan2006 2018-12-20 09:46:04 +08:00
楼主脑子里面在想什么。。。感觉难以理解
|
64
SuAlien 2018-12-20 09:48:44 +08:00
楼主,额额额额额额,你有洁癖么?
|
65
UnderTaker666 2018-12-20 09:49:49 +08:00
楼主是个萌新吗,我还是新手的时候也是纠结“代码整洁”
|
66
flyingghost 2018-12-20 09:59:39 +08:00
不要纠结用什么关键字了。以后代码这么写,肯定工整对齐美观优雅。/手动狗头
<table> <tr> <td>const</td><td colspan=2> a = 1</td> </tr> <tr> <td>if</td><td>(a>0)</td><td>{</td> </tr> <tr> <td colspan=3>}</td> </tr> <table> |
67
lwlipuyang 2018-12-20 10:00:54 +08:00
你可能是个傻子...
|
69
YYYeung 2018-12-20 10:08:11 +08:00
能用 const 的地方用了 let, eslint 会骂人的。。。
|
70
frankkai 2018-12-20 10:27:06 +08:00
"本来两个 a 都是工整对齐的"
"感觉没以前美观了" "看起来也没有统一用 let 那么整齐了。。。" 笑出声,let 和 const 的设计初衷,就是为了让你的 js 代码“美观”“整齐”的? 还是补补 let 和 const 的区别吧 |
71
pkoukk 2018-12-20 10:27:33 +08:00
让我想起了前公司以前有过的不成文的奇葩规定:所有函数中需要用的变量,都在函数开头统一声明,哪怕是临时变量。
目的就是为了工整。我内心只有一句 MDZZ |
72
supuwoerc 2018-12-20 10:29:12 +08:00
代码优雅不是风格骚气吗 哪是工整啊
|
73
usedname 2018-12-20 10:46:12 +08:00
请问楼主是闲的每天写 example 吗?
|
74
kingwl 2018-12-20 10:55:55 +08:00
铜币拿好
|
75
qq1009479218 2018-12-20 11:31:28 +08:00
所有变量全用 const,用 fp 写 immutable 代码,那可就特别优雅了
|
76
Sapp 2018-12-20 11:33:16 +08:00
你可以不定义,这样不是更整洁? 仿佛在逗我
|
77
Sapp 2018-12-20 11:33:50 +08:00 1
还有就是 let 最好是一个不用
|
78
rizon 2018-12-20 11:36:57 +08:00
我没有试过,但是制表符应该可以对齐的把。。。制表符不就是解决这种对齐问题的吗。。。
|
80
nino 2018-12-20 11:49:44 +08:00
优先用 const,真的需要再赋值的才改 let
|
81
srx1982 2018-12-20 11:50:55 +08:00
你都说“变量”了,那还用 const ?
|
82
Phariel 2018-12-20 12:23:39 +08:00
你能否把计算机编程语言的基础学习一下,变量和常量分不清吗?
|
83
akatquas 2018-12-20 12:34:57 +08:00 via iPhone
行末的左花括号要不要换到下一行首呢
|
85
alian 2018-12-20 15:39:48 +08:00
使用 eslint 你就会很清楚了
|
86
wangcansun 2018-12-20 16:04:37 +08:00
从我的角度看语义不同:
let 表示后面还会修改 const 表示后面不会修改了 |
87
murmur 2018-12-20 16:09:06 +08:00
highlevel 的都用钦定 let 和 const 是什么东西
|
88
dinjufen 2018-12-20 16:11:22 +08:00
同意 11 楼
|
89
v2lf 2018-12-20 18:49:04 +08:00
代码优雅 = 看起来美?
代码优雅 = 简洁 + 良好的可读性 + 最大化发挥语言的性能? |
90
FrankHB 2018-12-20 18:53:55 +08:00
@tabris17 然而这是英语渣解。Initialization 跟 assign 从来都是两回事,let 跟 assign 甚至和保证可修改也未必有一腿,不要被 C 的渣语法和 BASIC 的渣语义忽悠了。
@Phariel 不说哪来一般人都已经分清什么常量什么变量的自信,你就那么确信“常量”“变量”有“计算机编程语言的基础”的固定含义? PL 里所谓的“变量”什么时候有资格和“常量”并列到一块了? Variable 和 immutable 不矛盾都没几个人拎清吧。像 C 这样的语言其实就没“变量”,估计十有八九也没学清楚吧。 https://github.com/FrankHB/pl-docs/blob/master/zh-CN/variables.md 说起来,学了 BASIC 就举一反三 ALGOL-like 的(例如喜闻乐见的谭×之流)还见得少了嘛? 至于 let 这坨嘛……这里还是简(瞎)单(抄)的,认真打算折腾 PL 里的?搜 administrative normal form 有·真·相。 |
91
wayneshen 2018-12-20 21:02:44 +08:00 via Android
建议看 github 上 airbnb 的代码规范
|
92
S9Yh4wIFsBG7jnE4 2018-12-20 22:20:41 +08:00
我虽然是做测试的 但是之前公司的前端同事在技术分享的时候 专门说过这个 我记得是 let 和 const 对变量的作用域是不同的
|
93
easonl 2018-12-20 22:21:37 +08:00
…… 两者用法不同啊凶弟
|
94
royzxq 2018-12-20 22:32:58 +08:00
you need tslint/eslint.
|
95
hst001 2018-12-20 22:37:47 +08:00
如果是 go,会被格式化成这样对齐:
let a = 1; const b = 2; |
96
reset69 2018-12-20 23:47:56 +08:00
up 说的很有道理 楼上菜鸟太多了 let vs const https://jamie.build/const
|
97
quinoa42 2018-12-21 09:26:40 +08:00
immutable 和 constant 是不一样的……
|
98
daixu 2018-12-21 09:48:32 +08:00
|
99
royzxq 2018-12-21 13:03:46 +08:00
#96 算了,讲不清的,自己理解就完事儿了, 溜了溜了。
|