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

switch case,一个糟糕设计!!!

因为switch case内部逻辑控制清晰原因,当业务判断超过三个以上,我们比较建议使用switch case。...3 fall through弊端 switch case设计之初目的是便于编译器设计和优化,以及能够满足一些特殊使用场景,但是平时很难碰到这种场景,通常程序员在写代码过程中,大多借助break或者...return帮忙,以保持代码逻辑结构清晰性,此情况下,若使用fall through特性反而可能会破坏掉这种局部结构性。...对于简单控制逻辑还行,有时case具体业务逻辑中可能存在for循环之类逻辑,这个时候即使在for循环写了break,但是对于整个swtich case来说没什么影响。...,如果此时你没有灵活使用break或者return ,从此将埋下不定时炸弹,在意向不到地方引爆。

1.1K30

C++是不是一门设计糟糕语言?

从事软件开发多年,经常使用编程语言有C语言和C++,使用次数多了做项目多了之后,最多感觉是编程语言其实就是工具存在,不同编程语言在不同场景有不同用处,没有所谓最佳编程语言只是使用场景不一样而已...对于初学者刚开始学习C++语言时候都没有特别深刻印象,因为面向对象编程语言起码从概念理解上还是非常清晰,没有感觉到专门编程语言深奥之初,在最基础部分学习起来还是非常流畅,但进入基础晋级部分特别是从泛型编程开始就会觉得非常吃力...C++做项目的感受 前前后后用C++做过十几个项目,在最初几个项目中还是真真切切感受到这门编程语言繁琐,但是经历过之后又会有上瘾感觉,随着时间推移越来越想着把里面的编程思想和设计理念给搞清楚,所以...C++在客户端框架设计方面还是有着非常大发言权,像安卓底层框架以及谷歌浏览器基础编程语言有很大一部分是C++来完成,证明其还是有很强生命力,在很多领域还是首选编程语言,所以在选择第一门编程语言时候...能够批评一门编程语言是不是糟糕需要站在很高角度上分析,而不是看到网络上有人评论人云亦云,首先用这种编程语言做上几个项目或者产品之后再去思考其语言特性,对于普通程序员来讲在没有经历过项目的历练只是去做口头上评述还是缺乏足够说服力

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

    糟糕策略梯度

    对于各种强化学习问题,人们第一个想到通用解决方案就是策略梯度(Policy Gradient)。不过让我震惊是 1993 年时候人们并没有把策略梯度看作一个糟糕方法并且弃之不用。...这里,我们就来到了策略梯度中第一个逻辑跳跃地方了。相比于对所有可能分布构成空间做优化,我们优化是一组参数分布 p(u;ϑ)。...我们还需要看到,当我们在动态系统中考虑这些因素时候情况只会变得更糟糕。线性二次调节器策略梯度更新里会含有非常多噪声,而且它方差会随着模拟步数 L 增大。...尤其当你看到另外一批论文里基因算法和你算法得到了近似的成果时候,你需要明白这并不代表着基因算法有了新发展,它更可能是在告诉你,你方法只不过是随机搜索一次糟糕实现而已。...策略梯度和强化学习并没有什么神奇魔力,我想我已经强调得够多了。不过我还是要继续说,策略梯度和它各种变体真的是糟糕得很合理算法。想让它们顺利运行得出结果需要很多技巧。

    1.1K50

    糟糕 Kotlin 语法糖

    这几天在 review 同事代码时候,发现一块有意思代码,我将其写成对应伪代码如下: class UserViewModel(val userUsecase: UserUsecase) {...,觉得十分反人类,在 Kotlin 中,对象初始化可以省略 new 操作符,也即类后面再配个 () 即可,为啥一个初始化对象还能继续用 (),在直观感受下,我以为是初始化了一个对象,唯一让我觉得不像是初始化就是...在我想点进去看下根据 userId 获取 User 过程,我无论追踪代码,都无法跳转到真正逻辑代码调用处,点击 userUsecase 会直接跳转到 UserViewModel 构造方法,点击 name...上面的示例给已足够简单,但实际在我们业务中,比这还复杂,invoke 函数被封装到了父类,当我点进去时候根本找不到 invoke 函数,只能往上查看父类有没有,在找到 invoke 函数时才发现,...我也很理解大家对 Jetpack 热爱,这种写法在官方也有出现,可以参考 Domain Layer 这章。但我想说是,省略方法名这个过程真的有必要吗?

    67221

    糟糕程序员面试

    “谷歌式”面试真心是让人又爱又恨,它糟糕透了:好应聘者落选,坏应聘者背背答案就能通过,呵呵。 这是真的。 但是,这也是真的:所有的面试过程都很糟糕。 ?...但这并不意味着他们就一定是糟糕编码人员。稍微培训一下就可以改善他们编码风格。 这种方法很难识别智力/解决问题能力。 最佳做法: 可以看看他们代码,但是要有保留地接受对代码风格解释。...如果一个程序员标榜自己是特定编程语言使用者,那么他解决问题能力通常更弱。所以这是一个糟糕属性。优秀开发人员不太愿意将自己定性为“Java开发者”或“PHP开发人员”,更愿意自称是开发人员。...有些技能是很难掌握,即使那人真的很聪明。 都是糟糕面试,那有没有不糟糕? 上面讲述所有的面试方法都有问题。是的,没错,都有问题。...但是,都很糟糕,都有问题。 那么……你能做什么? 接受一点:任何面试方法都是有缺陷,都是糟糕。 所以,我们需要找出最不那么糟糕一种。然后好好实现。

    30020

    修复糟糕代码气味

    修复糟糕代码气味 原文链接:https://www.arjancodes.com/blog/best-practices-for-eliminating-python-code-smells/ 文章列举了多种糟糕代码模式...这些糟糕代码气味是: 1. 万能对象:一个类具有太多功能,违背了单一责任原则。这个类会变得复杂,难以测试和维护。 解决方法:根据任务拆分成多个类。 2....# Logic to manage inventory and update the database pass # Many more methods “上帝对象”是整体设计...,处理了太多任务和责任,违反了SOLID设计单一责任原则(SRP, Single Responsibility priciple)。...相反,我们可以引入一个名为 PER_MILE_SHIPPING_RATE 常量,它清楚地表明 1.25 表示每英里运输成本。这个简单更改使我们代码更易于理解,也简化了将来对此值更改。

    8010

    【题解】糟糕一天

    定义 图片 为第i头牛所能看到别的牛头发数量。...样例 #1 样例输入 #1 6 10 3 7 4 12 2 样例输出 #1 5 题目分析 仔细阅读题目,题目要求没头牛能看到数量总和。分析下样例。...看起来只要从后往前扫,求出比h[i]小数即可。但是这样做存在一个问题,该问题在样例中也有体现,即会出现“遮挡”情况,比如样例中2会被12给遮挡。而如果加入“遮挡”计算起来会过于复杂。...此时可以更换一个思路,从原来统计比h[i]小、且未被遮挡元素个数改为统计能未遮挡看到h[i]元素个数。 更换思路之后,问题就变成了统计1∼i−1范围内未遮挡单调减元素个数。...s.empty()&&s.top()<=x){ s.pop(); } 最终答案就是累加每个元素能被看到元素数量总和。

    40810

    PHP 是最糟糕编程语言?

    这门语言确实有很多不好地方。搁在以前,这门语言还有更多糟糕问题。...像 Laminas 和 Symfony 这样框架就使用了面向对象编程最佳实践,使开发者可以用这些框架编写结构正确代码。 PHP 是怎么做到这些?这是因为 PHP 是最糟糕编程语言。...PHP 很简单 设计一定要简单,不论是它实现还是接口。 PHP 底层使用了 C 语言,我们之前已经说过,这部分是“最糟糕”。...Gabriel 承认,“更糟就是更好”哲学指的是设计看起来很糟糕,也许不应该作为更好选择。...下次再听到有人骂 PHP 时候,就随他喷去吧。这门语言确实很糟糕。但从许多方面来看,PHP 长寿和广泛使用证明了这样一个事实:用“正确方式”做事并不总是比用“最糟糕方式做事好。

    1.8K20

    pandas作者当年遇到了什么麻烦,才设计出如此糟糕警告机制

    今天我们换一个角度,尝试成为 pandas 作者,看看当时作者到底遇到了什么样难题,使得他做出这样子设计。 为什么我不把文章发布在 pandas 专栏中?...因为本文涉及是 python 非初级知识点 ---- 从零开始 假设我们是 pandas 作者,现在要设计数据表(DataFrame)定义: 名字叫 MyFrame 初始化时候需要传入字典数据...因为我们不希望后续操作会影响原来数据 现在可以条件筛选: 现在问题是,筛选总是用 where 显得太啰嗦。在 python 中对集合物件取出元素,是有专门语法 [...] 。...行2:语法 对象[切片范围] 这不也是一种数据筛选方式吗?我们自定义类也能有这样子语法支持吗? ---- 魔法方法 从对象角度来说,它只不过是数据与函数结合体。...这就是为什么在我 pandas 专栏中明确告诉大家,只要你明确知道需要修改数据表对象,那就可以不用管这警告 你觉得这种设计思路是不是挺巧妙,同时又让人有点无语?

    33420

    请停止编写糟糕提交消息!

    他们试图理解你所做更改细节,但是由于你提交消息不是描述性,因此他们无法获取任何信息。 然后,他们尝试去查看每个提交差异。但是,即使这样做了,他们仍然无法确定你在实现中选择背后思考过程。...理想情况下,良好提交消息将被分为三部分:主题,正文和结尾。 主题 主题应该是简洁一行,总结你所提交更改。 下面例举一个很好提交信息,例如“feature:查询项目应用率功能”。...一个错误提交消息,例如“fix bug”,在其他人看到这条提交信息时候就会不知所措。 正文 正文包含你要传达信息,你可以在其中详细了解有关更改信息。...请注意,对于一些很小提交,例如修正错字,你可能不需要正文,因为主题行应该足够有信息性。 在正文中,你应该深入了解正在进行更改,并说明正在执行操作前因后果。...你可以解释为什么要进行这些更改,为什么要选择以这种特定方式实施更改以及可以帮助人们理解你提交背后思维过程其他任何原因。

    55820

    18000 台服务器整整瘫痪了三天:因 BoltDB 糟糕设计

    由Roblox工程师和HashiCorp工程师组成联合团队最终查明,在Consul核心一个名为BoltDB开源日志记录项目在设计上所做选择导致了瓶颈,而这完全是因Roblox独特架构而暴露出来...衷心感谢Roblox对这起可能是该公司发展史上最严重事件之一进行了如此详尽细致分析。不过幸运是,其核心受众很快就忘了这荏事。 BoltDB问题似乎直接归咎于糟糕设计。...我是BoltDB开发者。是的,这是糟糕设计。该项目从未打算投入到生产环境中,而是作为LMDB移植版,因此我可以理解其内部结构。我简化了空闲链表处理,因为这是一个小儿科项目。...当时(2014年前后)Shopify在LMDB或Go驱动程序方面遇到了一些严重问题,几个月后我们还是无法解决,于是我们换成了Bolt。遗憾是,我这个糟糕设计仍然存在。...在负载非常高情况下(具体来说,读取负载和写入负载都非常高),流式传输设计加剧了单单一条Go通道上资源争用程度,这导致写入期间出现阻塞,从而大幅降低效率。

    68830

    《赢》第18章 糟糕老板

    第18章 糟糕老板 不管遇到多么糟糕老板,你都不能让自己表现为一名受害者 一般说来,老板们对于他们所喜欢、尊重和需要的人态度并不差 你必须要找他谈,因为没有其他途径可以绕过去。...记住,你目标只是找出那些你老板基于某种原因而没有公开告诉过你东西。也许他对你有抵触,也许他只是太忙。无论如何,你目标是找到他对你态度和业绩疑问 ?...类型1老板,你希望褒奖和提升他们,并且希望他们成为公司其他人榜样 类型2:他们必须走人,越快越好,实际情况也是如此 类型3:他们真正信仰公司价值观,也在尽力付诸实践,但他们并没有良好业绩。...这些人可以得到培训和指导,在公司其他部门给他们一两次新机会 类型4:处理起来最为棘手。他们通常可以在自己位置上待很长时间,尽管举止不那么友善,却有出色业绩。...在你等待时候 ,则应该继续努力,为工作贡献自己所能 在你开始自己下一份工作时,要记住原来老板为什么让你讨厌,你对他感受如何——有朝一日当你成为老板,就要引以为戒

    52710

    我见过糟糕程序代码

    这事发生在很多年前,在一个相当大公司里,公司名我就不说了。那个软件有一大堆程序,是一个商业系统核心模块,由一个、单独一个小伙维护着,这个家伙不久前被炒了。...程序员代码里通常体现着自己对幽默理解以及对‘工作保密’这个词认识。...这个家伙留下来软件里没有任何逻辑炸弹或下流阴谋,编译很正常,除了有一个bug外,一切都工作很好。但是,你需要想像一下:程序中所有函数、变量名都是以食物命名。...一点一点,我把这些函数名和变量名改成具有意义命名,开始很麻烦,之后慢慢变得容易些。...当然,如果你脑子里还在想:你不能因为我变量名没有什么意义就把我开除了(或应该招我回来改程序),那你是在妄想,不管这个家伙用意是什么,他做法十分错误(我很难想象他前任老板还会推荐他),不管怎样

    66950

    Alien Swarm中糟糕远程代码执行

    我们将在Alien Swarm:Reactive Drop中探索一个现代例子。...客户端服务器文件上传 任何异形丛生客户端可以上传使用文件到游戏服务器(并且反之亦然)CNetChan->SendFileAPI,但仍存在一些可疑约束:客户端检查在游戏阻止某些扩展,例如上载文件服务器...是可以做到"/\\",因为那里是FixSlashes一个电话,让适当斜杠后完整性检查,并在".."该"/\\"会路径设置为驱动器根,这样我们就可以写入系统上任何地方,如果我们知道路径。"...远程执行代码 使用前面提到远程文件包含,我们可以上传有可能执行任意代码Source Engine配置文件。...糟糕示范 由于这两种漏洞利用都适用于服务器和客户端,因此我们可以感染服务器,这可以感染所有播放器,当播放其他服务器时,这些播放器可能会继续感染病毒。

    1.1K80

    JS 设计准则和设计原则

    而这些设计模式,代表是一种解决问题思想。我们在解决问题和设计这些模式时候本身也是有原则可循,甚至可以制定一些需要强制遵守准则。 1....Lnix/Uinux 设计准则 Linux 是一个伟大操作系统,在深入我们学习之前,我们来了解一下其设计哲学。...这其实是单一职责在接口设计体现。不过实际设计中我们很少说拆那么细,需要根据实际情况设计大小合适接口。...小结 事实上 js 是天然多态,没有抽象,重写也非常方便,这种优势带来了编程极简体验,也产生了理解和维护难副作用。所以在使用 oop 设计时建议用 ts 来代替 js 进行编程。...设计模式与六大原则 web前端进阶之js设计模式之设计原则篇 Java设计模式-六大原则 js 面向对象七大原则 JavaScript面向对象之七大基本原则实例详解 百度百科-单一职责原则

    84430

    那些糟糕面试和那些屎问题

    不同公司和人,有不同面试策略,有的考察视野、有的深入细节、有的则是评估解决问题能力。...朋友们和我开玩笑时候说:“你就是爱折腾,不同地点之间、不同领域之间,说,2011 年最后两个月里,多少钱捐给铁道部了?” 下面叙述,来自我自己经历,或者是朋友告诉我他/她亲身经历。...我不知道她时间标准是哪里来,事实上,我经历中也只有极少数公司会提这样要求,也许是程序员们太弱势、太卑躬屈膝给惯? 如果你需要一个人才,就需要互相考虑,不是只有你世界里才有种种限制。...允许面试者用自己喜欢方式完成表述,白纸、电脑、白板,如果方便的话,选择自己熟悉 IDE。面试考察应当是这些途径和介质背后东西,和最真实工作状态,让他用生疏东西,难免会扭曲他真实水平。...面试官需要做是发现他们身上闪光点,感受他们热情,也评估一下如果应聘者来工作,可能会发生问题。 请给出反馈。即便他没有达到你要求,也请告诉他,优秀、欠缺,哪些方面不满足。

    31810

    Vue.js设计思路

    这是我参与「掘金日新计划 · 8 月更文挑战」第3天,点击查看活动详情 前言 今天是学习学习理解《Vue.js设计与实现》第三篇,第一章到此结束 第一章三篇主要宏观得介绍了框架设计思路和纲领,首先介绍前端框架中关于命令式...,声明式,虚拟dom,运行时和编译时权衡理念,然后介绍了前端框架设计需要考虑因素,比如体积,开发体验,特性开关,错误处理等,最后介绍Vue.js在这些理念中做了哪些设计和权衡。...详细情况可以查看专栏学习理解《Vue.js设计与实现》 声明式地描述UI Vue是一个声明式UI框架。前端页面包括,DOM元素,属性,事件,元素层级结构。..., 使用与HTML标签一致方式来描述层级结构 vue.js3除了支持使用模板描述UI外,还支持虚拟DOM描述UI。...其实我们在vue.js组件中手写渲染函数就是使用虚拟DOM来描述UI

    1.3K10
    领券