「风骚」、「古怪」的代码

「风骚」、「古怪」的代码

写代码要写出什么样子来才叫好?越短越好?越详细、越易读越好?机器执行效率?业务可扩展性?特立独行古古怪怪?

但在知乎总能看到一些寻求“古怪”代码片段的帖子,对我来讲,偶尔写一写“古怪”代码也是很有意思的事情,可以当作一种“自嗨”的方式。而平时写代码时,我自己喜欢的写代码风格/习惯是:

  1. 一个函数/方法尽量不超过30行;
  2. 中规中矩,尽量用if...else...switch,少用三元表达式,除非代码比较短小;
  3. 超过右边距代码也不wrap,这样还带来一个好处,就是可以迫使自己不要写太长的一行代码;
  4. 编辑器主题色系使用率:暗色90%(暗色主题喜欢用“妖娆”一些的色彩),浅色10%。适当调节调节自己;
  5. 喜欢Lambda,Lambda狂人;
  6. 一段自己写出来但又感觉比较曲折的地方,注释可能要写2、3段话;
  7. 用纸和笔勾勾画画;
  8. ......(一时半会儿也想不全)。

比如下面这段代码,我觉看着舒服,这样的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