前端是否有点卷? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Features
V2EX    问与答

前端是否有点卷?

  Features 2021-11-04 16:25:49 +08:00 7282 次点击
这是一个创建于 1438 天前的主题,其中的信息可能已经有所发展或是发生改变。
应届生,入职某小厂,前端大概 15 人团队,lint 规则令人发指

1.比如禁止使用 for 遍历一个数组

2.缩进必须要两个空格,不能使用 tab

3.禁止使用字符串与变量进行 + 操作,必须使用``

4.禁止使用三目运算符

......

我觉得程序员也是一种创意工作吧?

现在搞得有点像写八股文

本来有些功能写起来就很费劲,好不容易想到一个办法

或者从 stackoverflow 找到答案,复制下来还不能直接用

搞得挺难受的

不知道大家怎么看严苛的 lint 规则的?
103 条回复    2021-11-08 12:13:07 +08:00
1  2  
AoEiuV020
    1
AoEiuV020  
   2021-11-04 16:40:15 +08:00   9
1234 感觉都没什么,普通的统一风格以及禁止一些没啥好处的炫技代码,
ztc
    2
ztc  
   2021-11-04 16:49:47 +08:00   2
第 4 条为什么不能用?
AoEiuV020
    3
AoEiuV020  
   2021-11-04 17:29:23 +08:00
@ztc #2 肯定是要求用 if else 呗,确实会有人觉得三目不直观,
h1104350235
    4
h1104350235  
   2021-11-04 17:52:35 +08:00
没啥问题阿,我觉得有代码规范和约束是好事情。
gaoryrt
    5
gaoryrt  
   2021-11-04 17:53:13 +08:00
从我角度来看确实是为了团队着想
另,这几个 lint 也限制不了程序员发挥的,放宽心~
shakaraka
    6
shakaraka  
PRO
   2021-11-04 17:59:09 +08:00   3
这个是团队规范,和你自个发挥创意是两回事,写出来的东西是给团队的人看的,每个人风格都不统一别人怎么接手你写的代码
pengtdyd
    7
pengtdyd  
   2021-11-04 18:00:09 +08:00
说个笑话:阿里的开源框架不遵守阿里出的 java 开发手册
rabbbit
    8
rabbbit  
   2021-11-04 18:04:23 +08:00
for of 为啥不能用?
xiangyuecn
    9
xiangyuecn  
   2021-11-04 18:04:41 +08:00
只要钱够多,再怎么不合理的要求都是毛毛雨啦。不然嘛,一边呆着去,否则上去就是一巴掌
rabbbit
    10
rabbbit  
   2021-11-04 18:04:57 +08:00
是禁止用 for in 吧?
Hoshinokozo
    11
Hoshinokozo  
   2021-11-04 18:13:24 +08:00
感觉没啥问题,除了禁用三目稍微严苛了点,不过 3 目确实不如直接 if else 语义清晰
SuperManNoPain
    12
SuperManNoPain  
   2021-11-04 18:38:14 +08:00
前端还卷? 请你来我们 java 阵营看看
IvanLi127
    13
IvanLi127  
   2021-11-04 18:42:10 +08:00 via Android
2 和 3 没啥问题,4 还能理解,1 咋了?
yuhangch
    14
yuhangch  
   2021-11-04 18:45:44 +08:00   1
同问一,那怎么遍历啊,foreach ,for in ,for of
cwp374240920
    15
cwp374240920  
   2021-11-04 18:50:49 +08:00   4
lint 规则,prettier 风格,跟卷不卷没有关系,一个项目中如果每个人都有自己的风格,都按照自己的创意来写代码,你写的代码别人也不想看,别人写的代码你也不想读,那跟屎山没什么区别。如果对于 lint 规则与风格有意见,可以提出来到组里面大家一起商议一下。
八股文一般指的是你前端 Vue 说说 computed 跟 watch 的区别,dom-diff 算法是怎么实现的,业务代码怎么也跟八股文沾不上边的。
StackOverflow 上面的答案,复制下来不能用,你是不是得看下别人移植过来的器官在你身体上是不是能完美运行,代码知道逻辑自己写应该会更好吧。

前端卷的定义是:下班时间到了,你跟你同事的活都干完了,但是还赖在公司假装没干完,对着电脑假惺惺的写代码;没有活干了,然后疯狂的写一些没有用的轮子来争取 kpi 。(以上只是举例子,请不要真的这么做。)

小厂还是比较自由的,跟组长关系处好了你想怎么玩都可以,前端最起码的写起代码来还是比后端要舒服自由很多的,后端代码是真的又臭又长。
cwp374240920
    16
cwp374240920  
   2021-11-04 18:51:23 +08:00
@yuhangch [].map/forEach ?
ifreego
    17
ifreego  
   2021-11-04 19:04:59 +08:00   7
for in 会遍历原型链上的 props ,可能会有一些奇怪的 bug

举个例子
const arr = ['a','b','c'];
const indexes = [];

Array.prototype.each = function() {/*blah*/};

for (var index in arr) {
indexes.push(index);
}

indexes; // ['0', '1', '2', 'each']
TomatoYuyuko
    18
TomatoYuyuko  
   2021-11-04 19:08:30 +08:00   8
不让写三目是吧,劳资直接 a = b && 1 || 2 (狗头
molvqingtai
    19
molvqingtai  
   2021-11-04 19:17:26 +08:00 via Android
如果不是写算法,代码中从不用 for 循环,迭代函数写起来方便语意也更强,
learnshare
    20
learnshare  
   2021-11-04 19:21:41 +08:00
定 lint 和卷有啥关系,左舵右行影响了交通效率吗?
lint 必须要有,越细致越好,合作的人越多越能发挥价值。

lint 打的就是你:
>复制下来还不能直接用

lint 规则好不好,这个比较主观,不容易做评价。
但随意搬一个规则来用,甚至啪一下全部 prettier ,那肯定是不对的。
creanme
    21
creanme  
   2021-11-04 19:56:47 +08:00
@cwp374240920 forEach 性能差,感觉 map 并不适用于不需要返回新的数组的遍历。
cwp374240920
    22
cwp374240920  
   2021-11-04 20:06:16 +08:00   1
@creanme foreach/map/reduce/filter/find 都有明确的使用场景啊....这是数组的原生方法啊...你写前端需要多强的性能去处理数据啊...语义性上清晰便于阅读就是最佳实践了
Torpedo
    23
Torpedo  
   2021-11-04 20:20:53 +08:00
这不说明还不够卷么?

这种代码风格的要求,稍微成熟的点的代码库都会要求的
sagaxu
    24
sagaxu  
   2021-11-04 20:21:50 +08:00 via Android
互联网有不卷的吗?
henryhu
    25
henryhu  
   2021-11-04 20:46:42 +08:00
其他还好,3 目运算多好,用 if else ?太丑了
sickoo
    26
sickoo  
   2021-11-04 20:47:09 +08:00
这不也没啥,只是你踩得坑少
statement
    27
statement  
   2021-11-04 20:56:07 +08:00 via iPhone
我记得大学课本上就写 要慎重使用三目。 简单的很优雅。复杂的就很不直观
jiangshanmeta
    28
jiangshanmeta  
   2021-11-04 20:56:20 +08:00
开发 eslint 插件搞更严格的 lint 规则的路过
xylitolLin
    29
xylitolLin  
   2021-11-04 21:06:36 +08:00
你这 1 、2 、3 、4 看着也没啥问题啊,多人协作还是需要一点条条框框的
xiaoming1992
    30
xiaoming1992  
   2021-11-04 22:05:42 +08:00
lint 肯定要严格啊,#18 直接通不过我的 lint: a = b && 1 || 2 (&& 和 || 不能在一起,至少要用括号括起来)

p.s. 一般这种都有一键 fix 的,无法 fix 的才需要手动修改
gauzung
    31
gauzung  
   2021-11-04 22:47:00 +08:00
多人协作开发肯定要 lint
但我个人感觉缩进两格有点太密。。看起来费眼睛
单个三目还好,多个三目嵌套看起来很累
kwrush
    32
kwrush  
   2021-11-04 23:43:08 +08:00 via iPhone
团队协作严格 linting 有好处,再不济可以 disable 嘛,和卷有什么关系呢
禁用 for 难以理解,大概是禁用 for-in ?
编辑器可以设置 tab 键为两空格
字符串模板可读性强
禁用三元是指这种吧 a?b:c?d:e
christin
    33
christin  
   2021-11-05 07:35:18 +08:00 via iPhone   9
学到个词就赶紧用用
cmdOptionKana
    34
cmdOptionKana  
   2021-11-05 08:42:22 +08:00
球球了,网络新词知道意思就行,没必要强行使用。
hst001
    35
hst001  
   2021-11-05 08:55:44 +08:00 via Android   1
跟卷一点关系都没
daimubai
    36
daimubai  
   2021-11-05 09:07:19 +08:00   1
因为你不是团队 leader ,所以你只需要管自己舒不舒服。而 leader 则是要让整个团队舒不舒服。我觉得稍微思考下就不难理解这么做的原因,不值得发帖吐槽
zoffy
    37
zoffy  
   2021-11-05 09:27:11 +08:00
刚好我踩过这些坑

1. for of 限制通常源于 airbnb 的规则,社区里也很多人吐槽,我赞同这个老哥的跟帖
https://github.com/airbnb/Javascript/issues/1271#issuecomment-281716212

解决方法可以复制规则源码到自己的 eslint 配置中,删除 for of 限制
https://github.com/airbnb/Javascript/blob/1eadb93e377da1e56c3f91f26610e5d0a00738a9/packages/eslint-config-airbnb-base/rules/style.js#L339

2 、3. 不是什么问题

4. 可能说的是嵌套三目表达式,那确实应该禁止
PerFectTime
    38
PerFectTime  
   2021-11-05 09:34:06 +08:00   3
Features
    39
Features  
OP
   2021-11-05 11:17:08 +08:00
@rabbbit 就是 for
for in 遍历数组是有缺陷的,肯定不能用。
Features
    40
Features  
OP
   2021-11-05 11:18:17 +08:00
@IvanLi127 是这种:
for(let i=0;i<arr.length;i++){
//do something
}
Features
    41
Features  
OP
   2021-11-05 11:18:52 +08:00
@ifreego 哎呀,不是 for in 啦,就是 for
Features
    42
Features  
OP
   2021-11-05 11:23:13 +08:00
好吧,看来大家都习惯了
自己读书的时候没人管,爱怎么写怎么写
工作了还是得按流水线的规矩来
是我太矫情了
rayaa
    43
rayaa  
   2021-11-05 11:25:07 +08:00
@cwp374240920 有时候白天划水摸鱼过多,然后到下班代码写不完咋办,算不算卷 XD
Features
    44
Features  
OP
   2021-11-05 11:25:17 +08:00
@yuhangch 只能用 forEach 和 map
Originalee
    45
Originalee  
   2021-11-05 11:35:09 +08:00
只能 forEach 的话,for await...of 这种场景怎么办呢?
Originalee
    46
Originalee  
   2021-11-05 11:37:08 +08:00
另外实在不能苟同 4 ,某些场景用三目更直观吧。
rabbbit
    47
rabbbit  
   2021-11-05 11:43:18 +08:00
@Features 强制函数式编程?
Features
    48
Features  
OP
   2021-11-05 11:46:19 +08:00
@rabbbit 只能用 forEach/map
cwp374240920
    49
cwp374240920  
   2021-11-05 11:49:17 +08:00
@rayaa 看来你产品催的还不够急
theprimone
    50
theprimone  
   2021-11-05 11:50:09 +08:00
这跟卷有半毛钱关系吗? lint 规则而已。。。
darknoll
    51
darknoll  
   2021-11-05 11:53:47 +08:00
有些秀儿确实喜欢把几个三目运算叠在一起,看的头疼,禁了也是对的
foolnius
    52
foolnius  
   2021-11-05 11:56:09 +08:00
for(const value of array.values(){} 也不行?
anjianshi
    53
anjianshi  
   2021-11-05 11:56:44 +08:00
真正有创意的内容不是靠语法体现出来的,是算法和奇思妙想,就像唐诗,都是五个字一行七个字一行,不影响每首诗有每首诗的美感
rabbbit
    54
rabbbit  
   2021-11-05 12:01:34 +08:00
@Features 你们用的是 Angular 吗? 要是用 Rxjs 不许用 for 还能理解
要是 Vue React 还不让用 for 三目...
cyrbuzz
    55
cyrbuzz  
   2021-11-05 12:13:42 +08:00   2
纯用`map/forEach/filter/find/reduce`怎么实现一个遍历到某内容之后 break 的情况。
zqx
    56
zqx  
   2021-11-05 12:18:17 +08:00 via Android
eslint 是很没用的东西,只能做到表面很统一,程序的内在逻辑还是程序员本人的思路决定的。
一般的程序员都可以在遵守所有规则的情况下,写出冗余的难以理解的代码。
kidult
    57
kidult  
   2021-11-05 12:51:20 +08:00
创意工作?
walpurgis
    58
walpurgis  
   2021-11-05 12:57:06 +08:00
234 都能理解,不让用 for ,那可以用 while 吗,如果也不让用,那就是强制函数式编程,逐项遍历要写递归了,我不太信初中级程序的能玩的溜,问问你们同事怎么写的

我定 eslint
规则也一大堆,但大部分规则都是 auto fixable 的,不会额外增加使用者的心智负担。
wangyzj
    59
wangyzj  
   2021-11-05 13:31:28 +08:00
为什么不让用 tab ?
用空格这个太难受了
daliusu
    60
daliusu  
   2021-11-05 13:31:48 +08:00
js 本身太灵活了,限制一下是正常情况,接受不了可以去选择 python ,这跟卷不卷有什么关系,几年前大前端时代还没开启的时候 eslint 甚至是面试题,会配置 lint 懂得控制语法使用都算面试优点
daliusu
    61
daliusu  
   2021-11-05 13:34:34 +08:00
@daliusu #60 那个时候找工作基本会个 jquery 都能找到的都要搞这些,充分说明了这跟卷不卷没有半毛钱关系
Features
    62
Features  
OP
   2021-11-05 13:38:28 +08:00
@wangyzj 还有更难受的,不过看大家都这么说,只能改下自己的习惯吧。
Features
    63
Features  
OP
   2021-11-05 13:40:41 +08:00
@daliusu
以前写了个组件不能直接用比较难受有办法吗?
GiftedJarvis
    64
GiftedJarvis  
   2021-11-05 13:55:11 +08:00
@ztc @AoEiuV020 有人会三元运算套三元运算, 我在屎山里见过
Perry
    65
Perry  
   2021-11-05 13:58:41 +08:00 via iPhone
能看出应届生的年轻无知
fox2081
    66
fox2081  
   2021-11-05 13:59:36 +08:00
这个确实有些严格了,tab 这个,一般编辑器也支持 tab 转空格的,1 和 3 无法理解,各有各的使用场景,4 的话,虽然我们没限制,但自己年轻时特别喜欢写一些很复杂的表达式,自己看着很爽,同事看着很难受,确实不是啥好习惯。

eslint+editorconfig+prettier 还是要搞的,最好有 git hooks 检查,要不然团队里有人用 vsc ,有人用 webstorm ,有人 win ,有人 mac ,加一个分号导致十几处修改,提交一下对方全蓝,工作还怎么搞,这些东西又不会限制你的创意。
maichael
    67
maichael  
   2021-11-05 14:05:11 +08:00   1
@cyrbuzz #54
通常来说,要 break 的场景只有 find ,可以使用 every 和 some 来替代( https://stackoverflow.com/questions/6260756/how-to-stop-Javascript-foreach ),当然,这不符合语义化的要求。
其实在某些场景下(不确定有多少),find 的性能要比 for-loop-break 的要高( https://www.measurethat.net/Benchmarks/Show/4261/0/find-vs-forof-vs-for-loop ),你可以测下自己的场景试试。
maichael
    68
maichael  
   2021-11-05 14:09:01 +08:00
不觉得这是啥内卷,Lint 和 Prettier 都是为了减少无意义的内耗。
johnnyNg
    69
johnnyNg  
   2021-11-05 14:18:18 +08:00
我觉得没啥毛病
rongchuan
    70
rongchuan  
   2021-11-05 14:27:12 +08:00
还好吧,如果配置好规则和 git husky,自己还是按自己的写,提交前自动 lint ,没啥感觉。
zhea55
    71
zhea55  
   2021-11-05 14:38:00 +08:00
@cyrbuzz

break 可以用 some 。

for 是命令式编程。

现在前端全部换声明式了。

只能实现功能的代码,早删除了好,不然都是坑。


这还只是 eslint 呢,建议把 stylelint 也加上。


不然产出的代码,都不想看。
0xZhangKe
    72
0xZhangKe  
   2021-11-05 14:38:53 +08:00
连三目运算符都觉得不直观那还是不要做程序员了吧。
cyrbuzz
    73
cyrbuzz  
   2021-11-05 14:48:10 +08:00
@maichael

有意思的代替,单条件用 find 确实是个不错的代替,新技能 Get 。

思考了一下,在与 continue 结合就有点力不从心了,还要做点啥的话也得给变量起个过得去的名字了= =,这样可能没人喷我`for (let i of arrays)`,这样可能会被吊起来锤`let i = arrays.find()`= =。
garlics
    74
garlics  
   2021-11-05 14:51:49 +08:00
eslint 的官网每一条规则都会解释为什么怎么做,刚开始写的时候遇到不理解的规则都会去看下,也学到了很多。http://eslint.cn/docs/rules/
https://eslint.org/docs/rules/
Felldeadbird
    75
Felldeadbird  
   2021-11-05 14:51:58 +08:00
后端来回答:禁用 for 我是无法理解的。 全用 map ,foreach 这些?
cyrbuzz
    76
cyrbuzz  
   2021-11-05 15:01:32 +08:00
@zhea55

some 有点不是绝对代替,用到 break 的地方往往会出现调用其他函数,赋值等操作。用 some 只拿到了状态,我想取那个值还得在迭代一次。要是在 some 的判断函数里加点赋值调用的私货,那这个 some 很不 some ,至少我个人是排斥的= =。
Features
    77
Features  
OP
   2021-11-05 15:04:42 +08:00
@Felldeadbird 是的,因为 ES6 以后提供了很多新语法来替代。
强迫程序员使用新的语法糖呗
wanguorui123
    78
wanguorui123  
   2021-11-05 15:15:39 +08:00
前端后端都一样卷,加上每个人的代码风格,更加混沌
EvilDevilJin
    79
EvilDevilJin  
   2021-11-05 15:28:14 +08:00
这跟卷没啥关系。
这不就是明确规范的编码风格吗。
banricho
    80
banricho  
   2021-11-05 15:32:57 +08:00
除了 4 感觉都挺正常的。。。
wu67
    81
wu67  
   2021-11-05 15:33:42 +08:00
三元运算有点不太理解, 尽管逻辑多的时候三元会带来阅读困难, 但复杂场景可以改用其他写法, 不是禁用三元的理由.

至于 for, 前端的 for 其实有好几种. for( ; ; ) {} 这种确实不直观, for in 确实也不应该用来遍历数组. 但是 for of 可是没毛病的; 再不济还有各个高阶方法, 例如 forEach map filter reduce.

其他两个没啥毛病
xiao109
    82
xiao109  
   2021-11-05 15:34:44 +08:00
虽然是创意工作,但是大多数人都只是在屎山上继续搭建新的屎山而已。所以整越少的幺蛾子最好
360511404
    83
360511404  
   2021-11-05 15:43:17 +08:00
前端这么可怕吗...
我写客户端的,十个 for 里面估计九个用 for in(大多数情况是快速拿数据)
三目运算更是家常便饭,比如根据 bool 返回不同的结果,一行返回就搞定了
yazinnnn
    84
yazinnnn  
   2021-11-05 15:47:47 +08:00
有这种规矩么?
if (bool) return false; else return true;
hereIsChen
    85
hereIsChen  
   2021-11-05 15:54:46 +08:00
for in 我用的不少
三目运算符只有简单的单行会用
其他的我觉得正常
ytll21
    86
ytll21  
   2021-11-05 15:55:36 +08:00
这种 lint 只能产出平庸的程序员。可以让出这个规矩的人看看「黑客与画家」这本书,不要给优秀的程序员套上太多的枷锁,他们懂得怎么写出让人看得懂,又漂亮的代码。
maplelin
    87
maplelin  
   2021-11-05 15:57:37 +08:00
@IvanLi127 #13 generator(误)
Features
    88
Features  
OP
   2021-11-05 16:05:56 +08:00
@kidult 真就只配码畜吗?
mxT52CRuqR6o5
    89
mxT52CRuqR6o5  
   2021-11-05 16:09:00 +08:00
是用的 airbnb 的 eslint 规则吗
SxqSachin
    90
SxqSachin  
   2021-11-05 16:24:51 +08:00
不让 for 遍历那需要 for await of 的场景咋搞啊,遍历出来然后 Promise.all 吗?感觉反而增加了复杂度
lancelock
    91
lancelock  
   2021-11-05 16:25:05 +08:00
这和卷有什么关系
zhea55
    92
zhea55  
   2021-11-05 16:29:29 +08:00
@cyrbuzz

在 some 的 callback 里面,你可以手动控制是否返回 true 的。

你的逻辑处理完了,return true 就相当于 break 了


你的需求都可以满足。 只能说这个方法,理解起来没有那么直观。
jiayong2793
    93
jiayong2793  
   2021-11-05 16:29:45 +08:00
这和卷有什么关系
AoEiuV020
    94
AoEiuV020  
   2021-11-05 17:01:43 +08:00
@TomatoYuyuko #18
> a = b && 1 || 2
我就这么用过,结果遇到 bug ,
(typeof(DEMO_MODE)!="undefined"&&DEMO_MODE === 'true') ||true
&&后面是个 false, 结果走了||里的 true ,
只好改成三目,
yaphets666
    95
yaphets666  
   2021-11-05 17:17:04 +08:00
@ifreego 所以现在自动补全都是自动补一个 hasOwnProperty
PungentSauce
    96
PungentSauce  
   2021-11-05 17:18:56 +08:00
文作写着倒想我哈哈
哈哈我想倒着写作文
口合口合我亻到 zhe 写亻乍文
sugars
    97
sugars  
PRO
   2021-11-05 17:25:56 +08:00
本来觉得「卷」好像有点过了,但看到「令人发指」蚌埠住了哈,最多用「严格」比较合适。
然后其实 1234 都非常正常,15 人的前端团队其实也不算少了,为了统一这是最基本的了
lap510200
    98
lap510200  
   2021-11-05 17:31:13 +08:00
统一的代码机构和风格 项目大了会感觉很有意义 别人接手也快
Leviathann
    99
Leviathann  
   2021-11-05 19:15:58 +08:00 via iPhone
虽然我也几乎不用 forof 但是某些需要 early return 的地方怎么办 try catch ?
还有没有三目的语言他们的 if 本身就是表达式,js 的 if 不是表达式,在一些只能用表达式的地方怎么搞?一定得 let xxx ;然后在 if 里赋值?
huxiaofan1223
    100
huxiaofan1223  
   2021-11-05 22:46:37 +08:00 via iPhone
@AoEiuV020 不是三目不直观,是有的人嵌套三目,恶心死了
1  2  
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2999 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 38ms UTC 00:33 PVG 08:33 LAX 17:33 JFK 20:33
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86