「风骚」、「古怪」的代码
2gua
☑编程 ☑读书 ☑美食
写代码要写出什么样子来才叫好?越短越好?越详细、越易读越好?机器执行效率?业务可扩展性?特立独行古古怪怪?
但在知乎总能看到一些寻求“古怪”代码片段的帖子,对我来讲,偶尔写一写“古怪”代码也是很有意思的事情,可以当作一种“自嗨”的方式。而平时写代码时,我自己喜欢的写代码风格/习惯是:
- 一个函数/方法尽量不超过30行;
- 中规中矩,尽量用if...else...、switch,少用三元表达式,除非代码比较短小;
- 超过右边距代码也不wrap,这样还带来一个好处,就是可以迫使自己不要写太长的一行代码;
- 编辑器主题色系使用率:暗色90%(暗色主题喜欢用“妖娆”一些的色彩),浅色10%。适当调节调节自己;
- 喜欢Lambda,Lambda狂人;
- 一段自己写出来但又感觉比较曲折的地方,注释可能要写2、3段话;
- 用纸和笔勾勾画画;
- ......(一时半会儿也想不全)。
比如下面这段代码,我觉看着舒服,这样的if...else...就顺着我的思路,虽然有嵌套,但很顺:
平时也偶尔玩点极客、古怪的代码。其实代码写多了,那些什么“风骚”、“古怪”的代码分分钟写一堆出来都不是什么问题。但说实话也没啥意思,权当消遣罢了:
eval(eval('(' + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + 'e' + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + ~~!+[] + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + 'd' + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + -~-~-~-~!+[] + ' ' + '=' + '>' + ' ' + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + -~-~!+[] + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + 'f' + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + 'e' + '\\u' + +[] + +[] + -~-~-~-~-~-~!+[] + -~-~!+[] + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + 'f' + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + 'c' + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + -~-~-~-~!+[] + '.' + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + 'c' + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + 'f' + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + -~-~-~-~-~-~!+[] + '(' + '`' + '\\u' + +[] + +[] + -~-~-~!+[] + -~-~-~-~-~-~-~!+[] + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + -~-~-~-~!+[] + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + 'c' + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + 'c' + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + 'f' + ',' + ' ' + '$' + '{' + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + 'e' + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + ~~!+[] + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + 'd' + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + -~-~-~-~!+[] + '}' + '.' + '`' + ')' + ')' + '(' + '"' + '\\u' + +[] + +[] + -~-~-~!+[] + -~-~-~-~-~-~!+[] + '\\u' + +[] + +[] + -~-~-~-~-~-~!+[] + -~-~-~-~!+[] + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + ~~!+[] + ' ' + '\\u' + +[] + +[] + -~-~-~!+[] + -~-~-~-~-~-~!+[] + '\\u' + +[] + +[] + -~-~-~-~-~-~!+[] + -~-~-~-~!+[] + '\\u' + +[] + +[] + -~-~-~-~-~!+[] + ~~!+[] + '"' + ')' + ';'));
打开浏览器开发者工具Console,输入代码。结果如下图所示[捂脸]:
看起来很稀奇,其实都是雕虫小技,关键还是要把语言特性掌握熟咯才是。
进一步的,如果手写一堆这样古里古怪的代码,不是要写到大天亮去?那就写个生成代码吧?抽点时间简单写个:
const cvtChar = c => {
if (/\w/.test(c)) {
const map = new Map([
["0", "+[]"],
["1", "~~!+[]"],
["2", "-~!+[]"],
["3", "-~-~!+[]"],
["4", "-~-~-~!+[]"],
["5", "-~-~-~-~!+[]"],
["6", "-~-~-~-~-~!+[]"],
["7", "-~-~-~-~-~-~!+[]"],
["8", "-~-~-~-~-~-~-~!+[]"],
["9", "-~-~-~-~-~-~-~-~!+[]"]]);
const p = "0".repeat(4 - c.codePointAt(0).toString(16).length).concat(c.codePointAt(0).toString(16));
// const p = c.codePointAt(0).toString(16).padStart(4, "0");
let str = "'\\\\u'";
for (const pc of p) {
if (/\d/.test(pc)) {
str = str.concat(" + ", map.get(pc));
} else {
str = str.concat(" + ", "'", pc, "'");
}
}
return str;
} else {
return "'".concat(c, "'");
}
}
const joint = s => {
let jointString = Array.prototype.map.call(s, cvtChar).join(" + ");
console.log(eval(eval(jointString)));
return jointString;
}
joint('(name => console.log(`Hello, ${name}.`))("Gua Gua");');
写代码带着「Just for fun」的心,就能保持持久的编程新鲜感。最喜欢用代码说话了,那些瞎逼逼啥语言好、前后端要不要分离、这个框架那个框架、这个名词那个名词的,都很没意思。
发布于 2017-08-24 16:53