- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
之前不记得是在哪里看到的这个不嵌套主义,貌似是在B站上看到的,算是我看了这么多和编程相关的meme里面对我影响最大的.
什么是不嵌套主义?准确的说 不嵌套主义 并不是不让你缩进,而是针对代码的结构而言,要尽量少使用嵌套关系,而尽量去使用断言,或者说将其当成一个单独的代码块去操作.
比较常见的方式是将报错提前,而不是用“未报错则继续运行”的模式去进行.
什么意思?让我们来阅读一段代码 。
//嵌套1
if (clsTeachServerInfo)
{
strValue = clsTeachServerInfo->WsSvrAddr;
//嵌套2
if (!System::String::IsNullOrEmpty(strValue))
{
intValue = strValue->IndexOf(":");
//嵌套3
if (intValue > 0)
{
strTeachServerIp = strValue->Remove(intValue);
strTeachServerPort = strValue->Substring(intValue + 1);
this->DebugMessage("CloudPreparation.Initialize " + strTeachServerIp + " " + strTeachServerPort);
PublicObjects::CloudPreparation->Initialize(strTeachServerIp, strTeachServerPort);
}
}
}
我们可以看到这一段代码,里面有三层嵌套的代码,这就会导致整个代码变得非常的庞大和臃肿,不仅对写代码的用户不友好,对维护代码的用户更是压力山大.
或者我们换一个角度来看这段代码,如果是不满足嵌套的条件,会发生什么?实际上什么都不会发生对不对?也就是说我们从上往下走代码,这个嵌套唯一代表的含义就是:如果在几个判断中有一个失败了,则代码不会走到下一步去.
那我们能不能换一种思路,我们把判定失败的情况提前,让它单独去进行判断,然后用一个bool值去做判断,或者精简一点直接return掉,那这样代码的可读性会不会好很多呢?
让我们来看一段功能类似的代码:
QString strValue;
QString title = "InitTeachServerInfo";
if (SysID.isEmpty()) {
this->eLog(title, "SysID is Empty");
return;
}
CloudPlatformSubsystem_cpp cls_TeachServerInfo;
cls_TeachServerInfo = ptr->GetSubSysAddr(SysID.toStdString());
if (cls_TeachServerInfo.SubjectID.empty()) {
//判定这个是否为空
this->eLog(title, "cls_teachServerInfo return null");
return;
}
strValue = QString::fromStdString(cls_TeachServerInfo.WsSvrAddr);
if (strValue.isEmpty()) {
this->eLog(title, "WsSvrAddr return Error");
return;
}
QStringList list = strValue.split(':');
if (list.size() == 0) {
this->eLog(title, "list's size is zero");
return;
}
虽然这也写可能代码稍微会长一点,但是其可读性比之前算的上是显著性地高上了不少.
就我个人而言,有时候代码写的时候可以稍微啰嗦一点多写一点,但是这也写的代码逻辑结构清晰很多,可读性也强,不管是维护也好还是调试也好,都会大大降低查错的难度 。
最后此篇关于编程的艺术:不嵌套主义的文章就讲到这里了,如果你想了解更多关于编程的艺术:不嵌套主义的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
无论是谁读到这篇文章,我都感谢您花时间阅读。 本质上,我试图通过调用 x 个方法来生成这个精确的 ASCII 艺术,我个人考虑了 3 个: * * ** ** ***
这太琐碎了,听起来很傻,但请多多包涵。 我以前会画ASCII艺术笑脸similar to this post通过做类似的事情: Console.Write((char)1); 当我在 Windows
这样的图像转换算法是如何工作的? 我想将位图转换为 ASCII 艺术。谁能帮我看看我应该使用哪种算法? . W ,
我正在尝试为 android 制作游戏。我目前已将所有美术资源加载到 drawables 文件夹中,但我的问题是如何实际引用特定资源来渲染它? 我知道每个文件都有一个唯一的@id,我可能必须在onDr
我试图垂直反射(reflect)这门艺术。 示例: 但这是我最终得到的: 代码如下: String reverse; for(int i=1;i=0;j--) // probably the wors
我正在尝试使用 JavaScript 函数在我的网站上获取一些 ASCII 艺术作品,但结果并不是我现在想要的...... 它应该是这样的: 这是我用来尝试实现该目标的代码: function log
我正在尝试创建一个脚本,该脚本将接受用户输入(仅字母)并向用户输出 ASCII 艺术。两种输出方法是水平或垂直。我遇到的问题是如何水平打印字典值。 这是我到目前为止所拥有的: def convert(
下面的代码(用 patorjk.com Text to ASCII Art Generator 生成)给出了预期的结果(“TEST”ASCII 艺术文本): Windows:Firefox、Chrom
我正在尝试像这样打印 ascii 艺术: print(("""\ ._ o o
所以..这是(无论如何对我来说)这个程序最重要的功能。我需要这个才能工作。请不要笑..(好吧你可以笑)但是当我的程序出错时,我希望它显示这个: _ _,---._ ,
我正在尝试输入 ASCII art在 C++ 程序中,并通过手动打印每一行来实现,但结果与 ASCII 艺术完全不同。就像: 出现这种情况是因为提示无法识别字符还是我没有正确操作? 这是我正在尝试做的
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我有一个很长的多行 ascii 艺术字符串,我想使用 Python curses 模块将其呈现给用户。我对此有点困惑,因为在 curses 中打印字符串的唯一方法是 addstr(y,x,string
目前我正在尝试读取可能包含 ASCII 艺术的 .txt 文件并使用 JQuery 在我的 HTML 文档中显示它们。简单的文本显示正确,但我有艺术格式问题。 我该如何解决这个问题? $(docume
我正在用 optparse 模块制作一个 shell 脚本,只是为了好玩,所以我想打印一个漂亮的 ascii 图来代替描述。 原来这段代码: parser = optparse.OptionParse
我是 python 的新手,把它作为一种兴趣爱好,通过一些搜索,我自己找到了一堆来自“计算实践”的练习,其中一个是关于写作的一个 ASCII 数字,如下所示。 这似乎是一个足够简单的练习,但我似乎无法
这个问题在这里已经有了答案: Render a string in HTML and preserve spaces and linebreaks (7 个答案) 关闭 9 个月前。 我该怎么做才能
我曾经为一项工作做过编程测试,其中涉及用 C# 制作 ASCii 艺术。我在这方面做得并不好,因为我对在 C#(或任何编程知识)中这样做的想法或经验知之甚少。 .NET 中是否有任何值得了解/练习的资
我正在编写一个小程序,想知道是否有办法在 R 中包含 ASCII 艺术。我在 python 中寻找等效的三个引号( """ 或 ''' )。 我尝试使用 cat或 print没有成功。 最佳答案 不幸
因此,对于我的 Java 入门类(class),我想用 ASCII 创建一个 Gingerbread 人。这是第一个作业,所以到目前为止,该类(class)仅涵盖了 println 语句。我在 OSX
我是一名优秀的程序员,十分优秀!