终于从艺术学习中找到了我一直念叨的一个关键词,优雅。
优雅这个词有点抽象,用一个这两天看到的电视广告来说明一下:
一个小朋友谈古琴,
奶奶坐在旁边说你为啥谈得这么快呢?
小姑娘说弹得快才能显得熟练啊。
奶奶摇摇头亲自来示范了一边,说慢下来才能把基础打牢,打牢基础才能走得更远。
虽然广告的点在基础上,但实际上奶奶慢下来示范的一遍是能品出优雅的,不急不缓,收放有度,每一个音都清清楚楚,一切尽在掌握。
编程也应该追求这样的境界。
书上给了个例子,说给两个区间,都是前闭后开,[start,end),怎么样判断这两个区间有没有重叠,这是一个非常简单的算法。但是要找到优雅的写法并不一定容易。
写法一,(start1≥start2并且start1≤end2)或者(end1≥start2并且end1≤end2)
这个写法的理论依据是判断第一个区间的起点或终点是不是落在第二个范围内。思路没错,但是比较复杂。按照情况展开,一共有八种情况。
这并不是一个优雅的解,不过要找到这个问题的优雅解,只靠改写法是无济于事的,要改变的是思路。
有没有更简洁的思路,当然是有的,就是
第一个区间在第二个区间开始前结束,或者第一个区间在第二个区间结束后开始
写法二 start1≥end2 或者 end1≤start2 (因为都是左闭右开所以等于是不重叠的。)
如果再写得可读性好一点就是:
非常美好,不过要想到这样优雅的改法往往是需要一点灵感的。
不过即使需要点灵感,这也该是我们应该追求的,我把这个方法写得更可操作一点,可以分为几步:
1,意识到复杂度和潜在风险(这步可能是最难的),需要有意思的思考。
2,思考更优雅的解法(可以是自己思考,更好的是和人讨论讨论,碰撞出灵感)
3,如果2还未找到答案,建议找BA或者我聊聊,看是不是能简化需求,通常我们程序员想不明白的逻辑,用户肯定也是用不明白的。