`
justcss
  • 浏览: 121949 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

反for-if编程模式

阅读更多

这些年来,我看到过大量的反编程模式。我感觉应该向大家分享一些。

今天,我要介绍的是被我称作反for-if编程模式的反模式「如果感兴趣可以查看一下这篇文章:for 循环为何可恨?」,也就是人们所说的”我们卖给你整个座位,但你需要的只是一个边。”

这是一个特殊的反for-case模式,其中所有的情况中只有一次会是null。

for (int i = 0; i < 100; i++) {
  if (i == 42) { do_something(i); }
}

这种情况可以简单的写成

do_something(42);

这个反for-if模式可以表现成各种各样的形式。比如:

foreach (string filename in Directory.GetFiles("."))
{
    if (filename.Equals("desktop.ini", StringComparison.OrdinalIgnoreCase))
    {
        return new StreamReader(filename);
    }
}

它是在一个目录里遍历查找一个指定文件,如果找到了,就返回文件的数据流。这段代码的一种不是那么折腾的写法是

if (File.Exists("desktop.ini"))
{
    return new StreamReader("desktop.ini");
}

请注意,两个版本的代码片段具有相同的竞争条件:如果这个desktop.ini本来是存在的,但在你创建Stream­Reader之前被删掉了, 你就会得到一个File­Not­Found­Exception错误。

再举一个例子:

foreach (object o in hashtable.Keys)
{
    if (o == "target") return hashtable["target"];
}

等同于

return hashtable["target"];

我猜测这些家伙不喜欢在图书馆里通过书名找一本书,因为他们的做法是如此的繁琐:

他们来到图书馆里员面前说,“把你所有的书都给我,”然后他们拿着装满了上千本书的篮子,坐到墙角里自言自语:

“不是,这本书的书名不对”,

“不是,这本也不是”,

“标题还是不对。”

“这本书呢?”

”不是,也不是这本。“

”老天,我要这样一本一本翻到什么时候…“

7
19
分享到:
评论
5 楼 leftcopychenhx 2012-08-14  
justjavac 写道
leftcopychenhx 写道
前些天看到篇差不多的文章。。。

这个:【for 循环为何可恨?】 http://justjavac.com/other/2012/05/15/whats-wrong-with-the-for-loop.html

这世界真小...
4 楼 justjavac 2012-08-14  
leftcopychenhx 写道
前些天看到篇差不多的文章。。。

这个:【for 循环为何可恨?】 http://justjavac.com/other/2012/05/15/whats-wrong-with-the-for-loop.html
3 楼 leftcopychenhx 2012-08-13  
前些天看到篇差不多的文章。。。
2 楼 nodejs 2012-08-13  
justjavac 写道
有函数式编程的影子。

很喜欢lisplike风格。
1 楼 justjavac 2012-08-13  
有函数式编程的影子。

相关推荐

    ----Delphi编程宝典+编程手册----

    1. **基础语法**:介绍Delphi语言的基本语法结构,如变量声明、常量定义、运算符、流程控制语句(如if、for、while)、函数和过程等。 2. **面向对象编程**:讲解类、对象、继承、多态、封装等核心概念,以及如何在...

    商业编程-源码-Shell编程源代码 propsheethandler.zip

    控制结构如if条件语句、for循环和while循环用于根据条件执行不同的代码块。函数则是封装常用操作的代码段,便于复用。输入/输出重定向使得脚本可以读取文件内容、写入输出或者将错误信息导向指定位置。 ...

    windows应用高级编程-C#编程篇.pdf

    首先,书中详细介绍了C#语言的基础知识,包括变量、数据类型、控制结构(如if语句、for循环、while循环)、函数和类等基本概念。这些是所有C#编程的基石,读者需要牢固掌握,以便后续学习更复杂的主题。 其次,书中...

    kotlin-for-android-developers 中文版 PDF

    1. **基础语法**:Kotlin的基础语法包括变量声明(var和val)、数据类型(如Int、Double、Boolean等)、字符串模板、控制流(if-else、when表达式、for循环、while循环)以及函数和属性的定义。此外,Kotlin还有着...

    Python-2018编程面试真题集锦

    1. **基础语法**:Python的基础语法包括变量声明、数据类型(如整型、浮点型、字符串、布尔型、列表、元组、字典、集合等)、流程控制(if-else、for、while循环)、函数定义和调用、类与对象(面向对象编程)。...

    高质量C++-C编程指南.zip

    1. **C++基础**:C++的基础包括变量、数据类型、运算符、流程控制(如if-else、for、while循环)、函数等。了解这些基本概念是编写任何程序的基础。 2. **面向对象编程**:C++的核心特性之一是面向对象编程,包括类...

    C#编程实例与技巧--C#编程实例与技巧

    - if-else语句用于条件判断,for、while和do-while循环处理重复任务。 - 使用switch-case结构进行多条件判断,提高代码清晰度。 3. **方法与函数**: - 方法是代码的重用单元,通过参数传递数据,返回结果。 - ...

    linux -c编程

    - 分支语句:涉及if、if/else、switch等控制流程语句。 - 循环语句:涵盖while、do/while、for循环,以及break、continue的用法和嵌套循环。 3. **结构体和数组** - 结构体:介绍复合数据类型,数据抽象和嵌套...

    H5U-ST 简易编程手册

    默认情况下,程序页面为文本编辑模式,允许用户在子程序、FB(功能块)和FC(功能)中自由选择使用ST或梯形图编程。 2. **ST子程序创建** - 在梯形图工程中插入ST子程序:打开一个梯形图工程,右键点击程序页,...

    linux-shell编程教程pdf完整版.pdf

    列表结构则是shell编程中用来控制脚本执行流程的手段,比如if、for、while等语句。数组则是shell中一种用来存储多个值的数据结构。 在调试、选项、陷阱和脚本编程风格等杂项方面,作者提供了调试技巧、命令行选项、...

    avr单片机basic语言编程及开发

    Basic语言的语法结构与自然语言相似,比如"FOR-NEXT"循环、"IF-THEN-ELSE"条件判断等,使得程序逻辑清晰,学习曲线相对较平缓。此外,Bascom AVR还提供了许多内建函数,可以直接操作硬件资源,如I/O口、定时器、中断...

    蓝桥杯STEMA考试-C++编程专题训练(初级)

    蓝桥杯STEMA考试是针对学生编程能力的一项重要评估,尤其对初级选手而言,C++编程是必修的技能之一。通过这次专题训练,考生可以提升自己的编程逻辑和问题解决能力。以下是对四道C++编程题目的详细解析: 1. **编程...

    CS1-CJ1-CJ1M 编程手册(中文)

    3. **控制结构**: 控制程序流程的关键在于条件语句(如if-else)和循环结构(如for、while)。手册会解释如何使用这些结构进行条件判断和重复执行代码。 4. **函数**: 函数是代码重用和模块化设计的关键。手册会...

    C#windows应用高级编程-编程篇

    - 控制流语句:如条件语句(if-else)、循环(for, while, foreach)和跳转语句(break, continue)。 - 函数和方法:学习如何定义和调用函数,以及参数传递机制。 - 类和对象:深入理解面向对象编程的基本概念,...

    现代C++函数编程模式

    现代C++函数编程模式是C++11及后续版本引入的一种增强编程范式的特性,它使得C++在传统的面向对象编程之外,增加了函数式编程的能力。这种编程风格强调使用不可变数据、高阶函数和惰性计算,尤其适用于处理多线程...

    magic-perl-for-beginner-.rar_magic

    Perl是一种强大的、高级的脚本编程语言,常用于文本处理、系统管理、网络编程和Web开发等领域。在Perl的世界里,"Magic Perl"可能是指它的一些独特特性和强大的功能,这些特性使得Perl对于初学者来说既有趣又富有...

    ------C#.NET编程设计

    在C#.NET编程中,我们首先要理解的是基础语法,包括变量、数据类型、控制流(如if语句、for循环、while循环)、函数等。这些是编写任何程序的基础。同时,C#支持类和对象的概念,这是面向对象编程的核心,使得代码...

    C#经典编程-220例.rar

    - 控制流程:涉及if语句、switch语句、for循环、while循环和do-while循环等。 - 函数与方法:了解如何定义、调用函数以及参数传递机制。 - 类与对象:理解面向对象编程的基本概念,如封装、继承和多态。 - 异常...

    资源专区-课程设计-编程作业-Vue开发-医院管理住院系统的研究与实现

    此外,Vue.js提供了丰富的指令系统,如v-if、v-for、v-bind和v-on等,它们使得我们可以更加便捷地处理条件渲染、循环、属性绑定和事件监听。在医院管理系统中,比如在显示病历时,可以使用v-if指令控制显示已出院或...

    1.5编程基础之循环控制_22津津的储蓄计划-23药房管理.pdf

    - 条件语句可以嵌套使用,文件中的if嵌套在for循环内部,用来判断月度存款后进行特定操作。 4. 累加器模式(累加变量): - 在编程中,累加器是一种常见的模式,用于逐步累加数据值。在津津的储蓄计划和药房管理...

Global site tag (gtag.js) - Google Analytics