首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

代码可能铲不掉“屎山”,但能让这个它更有「型」

本文作者:知乎 神们自己 原标题:为什么祖传代码被称为「屎山」? 驾驭屎山的唯一方法,不是重构,而是不重构。 为什么有人可以在屎山里加功能?...而某些有洁癖的码农,他们非要强行降低这个复杂系统的熵--不是做不到,但需要巨大的能量,也就是成本。 你想让谁来付这个成本?老板还是客户? 屎山不是一天拉成的。每一代屎山的建设者,都是非常聪明的人。...这个决定对于每一个人都是最优解,因为每一个人只需要对他当下的目标负责。每一次“继续拉屎”的决定都是正确的,不这样做才令人匪夷所思。...这段话可能会让你误以为,微软、谷歌都是垃圾。但实际上,他们是地球上最强的软件公司。世界上最高的屎山,都是最聪明的屁股拉出来的。...所有代码的最终归宿都是坟墓,而绝大多数代码早已死无葬身之地。屎山是不可能重构的,这辈子都不可能重构的。打败屎山的唯一方法,唯有另起炉灶,建一座新的屎山。

90330
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SQL 提取字符串中的字母

    问题描述 我们在进行数据处理时,可能经常需要对不同类型的字符进行抽取。比如一些产品型号,批次之类的会使用字母表示,这个时候该如何提取这些数据呢?...具体解法 我们创建一个函数,通过调用这个函数来找出所有的字母。...CREATE FUNCTION dbo.GET_LETTER (@Str VARCHAR(100)) RETURNS VARCHAR(100) AS BEGIN WHILE PATINDEX('%[^...; END; GO 代码解读 上面的解法主要使用了两个函数,PATINDEX函数和STUFF函数 PATINDEX函数 PATINDEX ( '%pattern%' , expression ) 返回pattern...理解完上面的函数,我们来测试一下我们自定义的函数GET_LETTER () SELECT dbo.GET_LETTER('SQL数1据2库3开4发road') 结果: 这与我们预期的结果一致,证明这个自定义函数是可行的

    12110

    006从零开始学Python—自定义函数

    另外,为了避免重复编写代码并使代码简洁易读,可以将常用的代码块封装为函数,在需要时调用函数即可。...,语法如下: lambda parameters:function_expression 注如上语法中: lambda 为匿名函数的关键起始词; parameters 是函数可能涉及的形参,如有多个参数...3.可变参数 上面讲解的必选参数和默认参数都是在己知这个自定义函数需要多少个形参的情况下构建的。如果不确定该给自定义函数传入多少个参数值时,该如何自定义函数呢?...对于选填项来说,电商平台并不知道用户会不会填,以及可能填多少个信息,而且这些信息都是有对应含义的。...整体感受:自定义函数是一种非常灵活有用的技能,并且可以简化代码,提高可读性。写到这里,顺便分享下如何在VBA以及SQL Server数据库中自定义函数,供大家对照学习。

    76830

    可能不知道的字符比较中的“秘密”

    有时候,一个简单的字符比较,你可能也会被弄得晕头转向。为什么这样说呢?请看下面这个例子(代码就不贴了,因为后来发现页面不支持这两个字符的显示)。猜测一下,会是什么结果?是1还是0?...这个库为每个已经辨识的字符定义了一个权重值(Weight),并以这个权重值进行字符的比较。然而,并不是所有代码点(code point)都已经在排序库中进行了定义。...它们可能被未定义的原因是: 代码点在Unicode标准中未进行定义。 代码点在Unicode标准中已进行了定义,但在Windows中却未进行定义。这需要花费时间和精力为新的字符定义语言语义的排序。...有些字符也许已经具有字体的定义,因此可能会正常地显示,但仍然没有对比较进行定义。比如NCHAR(13144) - NCHAR(13174)。...这也可能导致混淆的结果出现在如CHARINDEX, PATINDEX或LIKE等内置的字符串匹配(功能)中。 虽然这些结果似乎令人迷惑不解,但基本规则其实很简单。即未定义字符和字符串的比较将被忽略。

    1.1K70

    那些年我们写过的T-SQL(上篇)

    常见的,我们在一般的查询中,比如检验数据等,是推荐使用SELECT *,包括加上top 1000的,但在项目代码中,是严禁这样的操作的。...这儿有点需要补充的是,在同样的ORDER BY条件下,可能会得到不一样结果的问题,这个其实和数据结构中排序的概念一样。...那么有没有稳定的情况呢,那么就需要排序条件中的每一项都是独一无二的,比如是主键列,唯一列,这种属性也称之为排序的决胜属性(tiebreaker)。...前者返回子串第一次出现的位置,后者返回匹配的子串第一次出现的位置,SELECT CHARINDEX(' ', 'xiong er 1'), PATINDEX('%[1-9]', 'xiong er 1...DATEDIFF(month, '19000101', CURRENT_TIMESTAMP) + 1, '19000101')) 这部分如果和之前的筛选时间日期的知识点结合在一起就能写出非常灵活的SQL代码

    3.1K100

    5个提升开发效率的必备自定义 React Hook,你值得拥有

    那么,有没有一种简单的方法,可以让我们优雅地处理这个问题呢? 问题与需求 假设我们有一个用户信息表单,需要用户输入姓名并且希望在用户再次访问时保留这个信息。...如果我们每次都从头实现localStorage的读写逻辑,不仅麻烦,还容易造成代码冗余。有没有一种方法,可以既简化代码,又确保数据的持久化呢?...这个自定义Hook不仅简化了媒体查询的处理逻辑,还使代码更具可读性和维护性。...如果每次都手动编写fetch逻辑,不仅代码冗长,而且容易出错。有没有一种方法可以简化这个过程,同时处理好加载状态和错误呢?...如果每次都手动编写状态切换逻辑,不仅代码冗长,还容易出错。有没有一种方法可以简化这个过程呢?

    13710

    怎样避免开发时的深坑

    简化并优化你的代码 ? 你可能已经注意到,简化和优化是经常性的话题。 “简单性是可靠性的先决条件。” ——荷兰计算机科学家Edsger W....selectEvenNumbers(arrayofNumbers) { let evenNumbers = arrayofNumbers.filter(n => n % 2 === 0) return evenNumbers} 简化和优化代码可能需要迭代多次...,以确定进一步简化和优化代码的方法。...这里有一些需要牢记的问题: 简化和优化的目标是什么?目标会被你的团队风格或个人喜好所左右。是尽可能地压缩代码还是使代码更易阅读?...如果是后者,你可能会用单独的代码行来定义变量或计算某些变量,而不是试图在一行中做这些事。 怎样做才能使代码容易阅读? 还有没有多余的步骤可以去掉? 有没有变量或函数始终没有被用到过?

    63320

    怎么让代码更Pythonic?光有技巧可不行,你还需要看这些

    pep8原则,比如命名,每一行代码长度等等,这些细节要处理好 · 函数的重构,返回值、缺省值等等,要保持函数式功能单一原则 · 有没有过多的if else嵌套,是否可以提取 · 全局变量有没有大写,有没有写到开头...所以注释是一个非常重要的东西,有的同学不是很喜欢写注释,觉得很麻烦,那么如果这个代码很短,那么确实可以不写,但是如果你的代码很长,成百上千行,不写注释会让你很懵逼!...尤其在爬虫上更是深有体会,现在可以正常运行的代码,过段时间可能因为网页改版,或者cookie、sql语句等等的变动,都可能会导致你的代码报错,我们要提前将这些问题考虑进去,这就需要异常处理机制了,注意以下几点...· 文件读写是否有try语句,是否考虑存储位置的问题 · 拿到一个句柄,比如SSH,SQL,这样有没有考虑到句柄的有效性 代码所有的异常可能都需要考虑,以此来保证代码的健壮!...是不是需要用一些装饰器来简化代码。 相同类别的函数,进行整合,合并要一个类里面。 多个功能用多个类来表示,方便维护和扩展。 类与类之间,考虑他们的内在关系。

    44230

    安卓软件开发:使用 Hilt 在 Jetpack Compose 和 M3 实现依赖注入App

    无论你有没有开发经验,相信这篇文章对你会非常有所帮助。 思考:为什么选择要讲Hilt和概念?...二者结合起来,可以让代码变得很简洁、清晰。 一、项目背景 Hilt 是 Android 官方推荐的依赖注入框架,简化了组件之间的依赖管理,特别是当项目复杂度增加时,依赖注入可以简化代码。...接下来,还需要一个 Hilt 的 Module 告诉 Hilt 如何提供这个依赖。...在实际Demo中,Jetpack Compose 和 Hilt 的结合很简单,但有几个技术难点需要注意: 3.1 生命周期管理 虽然Hilt可以处理依赖注入的生命周期,但在Compose中,组件的生命周期可能会因为...五、总结 通过这个简单的 Jetpack Compose 和 Hilt 的项目,我希望大家能对两者的结合有一个清晰的很好理解。

    400162
    领券