使用条件 ?:(三元)运算符的好处

2023-11-30

与标准 if-else 语句相比,?: 运算符有哪些优点和缺点。显而易见的是:

条件 ?: 运算符

  • 处理直接值比较和赋值时更短、更简洁
  • 似乎不像 if/else 结构那么灵活

标准如果/否则

  • 可以应用到更多的情况(比如函数调用)
  • 通常是不必要的长

每个语句的可读性似乎有所不同。在第一次接触 ?: 操作符之后的一段时间里,我花了一些时间来理解它到底是如何工作的。鉴于我与许多非程序员一起工作,您是否建议尽可能使用它,或者坚持使用 if/else?


我基本上建议仅当生成的语句非常短并且与 if/else 等效项相比显着提高简洁性而不牺牲可读性时才使用它。

好例子:

int result = Check() ? 1 : 0;

不好的例子:

int result = FirstCheck() ? 1 : SecondCheck() ? 1 : ThirdCheck() ? 1 : 0;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用条件 ?:(三元)运算符的好处 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • 按成员序列化

    我已经实现了template
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • C# WebClient 内存使用情况

    我正在使用 WebClient DownloadString http example com string txt 当我调用它时 内存会跳起来 但再也不会下降 而且由于我需要从网上下载 2 3 个不同的字符串 所以内存会跳得很多 我是 C
  • 无法使用 fopen (php) 打开文件

    我正在尝试打开一个文件以在 php 脚本中读取 但遇到问题 这是我的代码 fileHandle fopen 1234 main csv r or die Unable to open if file exists fileHandle ec
  • 播放系统声音而不导入自己的声音

    是否可以在不导入自己的系统声音的情况下播放现有的系统声音 我发现这个 systemSoundID 列表对于直接访问声音 ID 非常有用 http iphonedevwiki net index php AudioServices 例如 播放
  • 如何从文件中读取变量,每行多个变量?

    我正在尝试从一个文件中读取数据 该文件有多行 每行都有 3 个我想要分配给变量并使用的信息 我想出了如何在终端上简单地显示它们 但无法弄清楚如何实际将它们分配给变量 while read i do for j in i do echo j
  • 使用 graphviz 绘制大图的最佳方法是什么

    我需要在图像上绘制大型数据集 我使用 graphvis 命令行和所有可用的工具 dot neato twopi 等 但结果不可读并且包含重叠 我需要的是显示边缘带有标签的节点 重叠最小化 以便图形可读并且可以打印在 A4 或 A3 纸上 我
  • jquery Ajax 使用 Internet Explorer 响应“未定义”

    我遇到了 jquery ajax 请求的情况
  • 'WCHAR* 类型的参数与“const char*”不兼容'

    DWORD ProcMem Module LPSTR ModuleName HANDLE hModule CreateToolhelp32Snapshot TH32CS SNAPMODULE dwPID MODULEENTRY32 mEnt
  • 为什么Java 8提供方法引用?

    打电话用什么比较好 names stream forEach System out println Than names stream forEach n gt System out println n 尽管事实上你必须编写更少的代码 在
  • sizeof 以及当一个字节大于 8 位时?

    Since sizeof是一个运算符 为什么我们可以使用sizeof something 就像函数调用一样 什么时候一个字节不是8位 此上下文中的字节与无符号字符相同 并且可能大于 8 位 字节有可能小于8位吗 既然 sizeof 是一个运
  • js 异步/等待返回承诺

    只做一个简单的功能 async function doAsync return await test console log doAsync 输出 承诺 PromiseStatus pending PromiseValue undefine
  • Delphi Chromium - 迭代 DOM

    我正在尝试使用 TChromium 迭代 DOM 并且因为我使用 Delphi 2007 所以我无法使用匿名方法 所以我创建了一个继承 TCEFDomVisitorOwn 的类 我的代码如下 但由于某种原因 访问 过程从未被调用 所以什么也
  • 使用bunyan logger登录nodejs

    我正在我的nodejs代码中初始化bunyan记录器 如下所示 var log bunyan createLogger name myapp stream process stdout level info 这是来自 Bunyan 文档ht
  • 将嵌套字典转换为 IReadOnlyDictionary

    我正在尝试给出一个IReadOnly 内部参考Collection对象 这在大多数情况下效果很好 但如果我想将包含集合的字典转换为IReadOnlyDictionary含有一个IReadOnlyCollection 这是一个代码示例 var
  • Python Outlook 获取来自发件人的所有电子邮件

    我正在尝试使用 python 来浏览 Outlook 并获取发件人的所有电子邮件 我已经看过但不知道如何做到这一点 我可以按主题获取电子邮件并返回发件人 但我希望获取所有发件人然后返回主题 这就是我用来按主题获取发件人的方法 import
  • 如何从浏览器保存 .pdf?

    我尝试使用在 stackoverflow 上找到的不同方法来保存 pdf 文件 包括FileUtils IO然而 我总是会把它弄坏 当我使用记事本打开损坏的文件时 我得到以下内容
  • 将gridview转换为图像

    我想将 gridview 转换为图像并将其保存到 asp net 3 5 中的本地磁盘 我不知道该怎么做 任何人都可以建议一些东西 提前致谢 以下链接可能对您有帮助 将 DataGridView 转换为位图 使用 Reporting Ser
  • 点击时设置 PHP cookie

    所以我宁愿不使用 JS jQuery 但我似乎无法让它工作 我有一个链接 a href hideupdates hide Hide Updates a 我正在尝试用它来设置 cookie if GET hideupdates hide se
  • 将新值写入数组

    这是我的代码片段 typedef float point2 2 point2 a 90 90 point2 b 90 90 point2 c 90 90 point2 d 90 90 glBegin GL POLYGON glVertex2
  • SQL Developer 不显示 dbms_output

    我正在尝试在 SQL Developer 中编写 PL SQL 代码 但它没有显示输出 我的程序编译成功 这是代码 set serveroutput on declare begin dbms output put line Hi end
  • 使用条件 ?:(三元)运算符的好处

    与标准 if else 语句相比 运算符有哪些优点和缺点 显而易见的是 条件 运算符 处理直接值比较和赋值时更短 更简洁 似乎不像 if else 结构那么灵活 标准如果 否则 可以应用到更多的情况 比如函数调用 通常是不必要的长 每个语句