程序中出现问号(?)跟冒号(:),这是什麽表达方式?

笔者最近在维护前人弃坑的C# 专案的程序码看到?跟:,这是啥东西?

/images/emoticon/emoticon56.gif

一开始以为是lambda 在C#中的应用,後来经查询後才发现是三元运算子

什麽是三元运算子呢?

三元运算子是由 两个表达式 跟一个运算式组成,以C 为例 ,大约是下面的表达方式,但笔者是有看没有懂

/images/emoticon/emoticon04.gif

hello ? monkey: money

以python 的呈现方式如下:


hello = monky if x.sayhello() else money

上面的叙述等同下面的写法

if x.sayhello():
    hello = monky
else:
    hello = money

快速理解:
三元运算式 = 两个表达式 加上一个运算元组成

事件为真 if 条件存在 else 事件为假

缺点:

  1. 条件分支只能为运算式,不支持多条陈述句
  2. 容易被滥用,很多人将其用于替代if陈述句或是简化复杂的if嵌套,这会导致上一条中所描述的结果
    引用自三元运算子缺点

结论:
笔者觉得这可以让原始码变得更简洁,但笔者在比较lambda 及三元运算子後 还是觉得lambda 比较好用跟好阅读。 笔者目前在维护前人弃坑的专案中就发现三元运算式被滥用的情况,让後续维护变成超痛苦。


<<:  Day27 :【TypeScript 学起来】Module 模组

>>:  Day28: 今天来聊一下将syslog 资料连线到 Azure Sentinel

22. 一些关於leadership的事

前言 (Sorry标题取的很烂,但我有点难抓到整个演讲想讲的重点XD|||) 这篇蛮general...

小公司不是一块跳板,小公司本身就是一个伟大的目标

最近在思考,为什麽要雇人呢? 37Signals 的老板写的 Rework 这本书,被奉为 indi...

背包系统详解

//装备药水:实现药水单向(若装备栏内没药水可直接装备)、双向置换(若装备栏内已经有药水,直接点击新...

再来说说物理结构(储存结构) - DAY 3

大话资料结构中物理结构的定义 资料的逻辑结构在电脑中的储存形式 循序储存结构 定义:把资料元素储存在...

Day 21 : SVM

原理说明 SVM (support vector machine 支援向量机),是在特徵空间中找到一...