自从看了论坛里的那篇文章,‘你还在使用if else
吗’,感触太深了,一方面我觉得,作者说的的确很有道理,原来大量使用if else 是使用了面向过程的思维方式。
原来我使用java面向对象语言却一直使用面向过程的思维方式。更牛逼的是,原来我一直没有觉察到... 难道我中毒已深,无法自拔了吗。
然后我对现实的系统和自己的思维方式剖析了一番,发现了一个问题,或者说得到一个结论吧。不管面向对象还是面向过程吧,不要谈在思维方式上谁更先进,其实
这个东西还真不好说,因为经过我深入的研究,其实这两个思维方式都可以模拟表达现实世界的一些规则和秩序。面向过程的思维注重横向的,纵向的,仿佛是一个
平面结构,在我们的神经网里容易组织出这样子的一个结构,因此面向过程的思维还是很适合一些逻辑的业务思考的。面向对象的思维,则像是一个立体的思维范
式,我表象看到的是个物体,物体里有神马东东,需要进入观摩对象深入了解。正因为如此,面向对象的思维很适合探索类,发散类的业务思考。我不懂这个对象不
要紧,我懂它我关心的一部分就可以了,至于其他的我不想懂,也没啥必要去弄懂,这个思维应该就类似面向对象了。如果说面向过程类似于数学里的代数的话,那
么面向对象则类似于几何了,在本质里是有共同点的。再谈if esle ,不管是面向对象还是面向过程这个语句的使用率觉得可以排上名次,if esle
逻辑判断,很大程度上提高了系统的拓展度,简化了程序的开发。有牛逼的人说,世界上最难的事情就是做决定了。这个if esle
就帮我们做决定了,以不变应万变,极其聪明的策略。再者在实际的开发应用中,如果你要在一个一个电信或者银行的系统增加新的功能,哈哈,你不要告诉我用面
向对象的方法,不然会死的很惨的。最好的方法,还是if esle 。所以,尽管看了那个文章,我觉得文章写的很好,也很扯淡,觉得if
esle应该用,就不要客气的用,管它面向对象啥的,如果系统不行了,需要再次开发,OK,我不用if else 了,哈哈。
-------------------------------------------------------------------------------------------------------------------------------------------------
讲得很有意思,其实这里面分两层含义:
我们分析事物是使用if else,但是表达时,最好不这样用,就象我们心里想的,和写成文章的,不是同一种方式,文章讲究技巧,说话更讲究技巧。
如果说IF ELSE是一种分类思维,那么OO
面向对象属于分类思维的一种具体实现,把你分类包装成对象封装好,划定好彼此界限,然后运行时,以IF ELSE方式运行。
什么叫IF ELSE方式运行呢?就是用AOP动态拦截插拔等概念运行,DCI架构也属于这种。
所以,我们已经知道,如果说IF ELSE是人的朴素思维的话,那么面向对象思维就是软件人员的专业思维了。
IF ELSE这个简单语句中其实包含两个概念,一个分,一个是合,“分”就是IF A ELSE B,可见,A和B分开了;“合”就是先执行A,再执行B,AB都要顺序执行,这个我们可以看成是AB组装合起来的效果。
所以,设计时先“分”,“分”好的代码出来后,然后我们再将这些碎片代码在运行时刻“合”起来。这也是编译型语言的一个好处,能够做到“分合”泾渭分明,也是scala比较受欢迎的原因,相反脚本语言如Ruby on Rails等就不明显了。
--------------------------------------------------------------------------------------------------------------------------------------
从面向过程(也可称为面向变量)与面向对象(也可称为面向消息)的方法论进行比较上面提到的情景也许是一种思路。这里,我提供另一种思路,从代码的可读性、可修改和可扩展进行分析。
当一个类的内部有2个以及2个以上的操作的实现包含了相同的条件结构时,可以考虑使用策略或状态模式进行重构,重构的结果,这个类中的这些操作在界面保持不变的前提下,实现变得简洁了,消除了庞大的条件结构,代价是可能要增加若干个策略类或状态类。
这个代价的付出是否值得?看情景而定。从OCP原则看,
1)修改时,修改一个策略类或状态,比同时在多个庞大的条件结构中修改语句,更轻松一些。
2)扩展时,添加一个策略类或状态,比同时在多个庞大的条件结构中添加语句,更轻松一些。
但是,该类中庞大的条件结构只出现一次,那么在修改与扩展时,使用模式比使用条件语句并没有什么优势,相反,使用条件语句可以减少若干个策略类或状态类。此时,不妨使用原始的条件语句,更直观一些。
正如DCI
消除多重继承,State和Strategy可以消除多重条件语句,但“消除”多重继承或多重条件语句,只是使用DCI
或State/Strategy Pattern带来效果或副作用,应该还不是DCI
和State和Strategy最直接的目标:使代码更清晰,更容易理解和看懂,同时也更容易修改和扩展。
比如当一个对象可以视为一个“状态机”时,使用状态模式,比使用条件语句进行判断要自然、直观得多。代码中出现的“多重继承”或“多重条件语句”可以作为一种“信号”,提醒我们,这代码可能需要重构。对,只是“可能”而已,你可能还要判断重构的代价是否值得付出。
分享到:
相关推荐
在编程语言中,`if-elseif-else`结构是一种用于条件判断的重要工具,它允许程序根据不同的条件执行不同的代码块。这个结构使得我们能够灵活地处理多种可能的情况,是编写逻辑控制流的基础。在这个"if-elseif-else...
IF-ELSE条件语句作为编程语言的基础构造块,其翻译设计至关重要。本文主要关注如何使用LL(1)方法来解析并生成IF-ELSE条件语句的三地址表示。 LL(1)解析是一种自左至右的前递归分析方法,"L"代表Left-to-right,表示...
标题中的“运用IF-else”指的是在编程语言中使用条件语句进行逻辑判断的基本概念。在编程中,IF-else结构是控制流程的一种关键方式,它允许程序根据特定条件执行不同的代码块。当我们需要在满足某种条件时执行特定...
本文将对if-else语句的嵌套关系进行详细的分析和解释,包括if-else语句的基本概念、if-else语句的嵌套关系、if-else语句的执行顺序等方面的内容。通过对if-else语句的分析,可以更好地理解C语言程序设计的基本原理和...
在编程语言的编译原理中,`if-else`条件语句是构建程序逻辑的基础,而三地址码(Three Address Code,TAC)是一种中间表示形式,用于简化编译器的中间阶段处理。本篇文章将深入探讨如何使用递归下降法来设计一个翻译...
在编程领域,`if-else`条件语句是控制流程中的关键组成部分,它允许程序员根据特定条件执行不同的代码块。本项目"if_else翻译程序"专注于设计一个能够解析并翻译`if-else`结构的程序,采用LR方法,并通过输出四元式...
根据给定文件内容,我们可以分析出以下几个关于FPGA编程中if_else和case语句的重要知识点: 首先,if_else语句在FPGA中的实现具有优先级特性。这意味着,当存在多个条件判断时,只有在前一个条件不满足时,才会去...
2. **嵌套的if-else语句**:当if或else内嵌有其他if-else语句时,需要确保正确的嵌套层次。错误的嵌套可能导致逻辑混乱: ```python if (条件1) { if (条件2) { // 代码块3 } else { // 代码块4 } } else {...
在处理条件判断语句时,我们经常会遇到大量的if...else结构,这可能导致代码变得复杂且难以维护。本文将探讨如何使用枚举(Enum)来简化JavaScript中的if...else语句,从而提高代码的可读性和可维护性。 枚举是一种...
C语言中分支结构:if语句、if-else语句和switch语句的使用方法 C语言中分支结构是一种非常基本但非常重要的编程结构,它允许程序根据条件执行不同的代码块。在C语言中,分支结构有三种基本类型:if语句、if-else...
2. **多个`else if`**:在一个`if-else if-else`结构中,可以有任意数量的`else if`子句,但是最多只能有一个`else`子句。 3. **独立性**:`if`语句可以独立存在,即不需要`else if`或`else`子句。然而,`else if`和...
支持if then else 语句的pl0扩展c语言文件
`if-else`语句是其中最基础也是最重要的选择结构,用于根据条件来决定执行哪段代码。在这个主题中,我们将深入探讨`if-else`语句和其他相关的控制流程工具,以及它们在实际编程中的应用。 首先,`if-else`语句用于...
### Java基础if和if-else选择结构 在Java编程语言中,`if` 和 `if-else` 结构是控制流程的重要组成部分,用于根据特定条件执行不同的代码块。本文将详细探讨这些结构,并通过实例帮助读者更好地理解如何使用它们。 ...
本项目关注的是“if-else”结构的LL(1)分析,这是一个在编译器设计中至关重要的部分。让我们深入探讨一下这个主题。 首先,我们要理解什么是编译原理。编译原理是计算机科学的一个分支,研究如何将高级编程语言转化...
代码中大量的 if else 如何优化 在编程中,我们常常会遇到大量的 if else 语句,这些语句会使得代码变得难以维护和阅读。那么,如何优化这些 if else 语句呢?下面我们来讨论一些常见的优化方法。 首先,让我们看...
本篇文章将深入探讨一个特定的编译器设计问题:如何用简单优先法来处理IF-ELSE条件语句,并通过输出四元式来实现这一过程。在编译原理课程设计中,这个主题是理解和实践编译器工作原理的关键部分。 首先,我们来看...
在Python编程语言中,`if-else`语句用于条件判断,它允许我们在满足特定条件时执行一段代码,否则执行另一段代码。然而,为了使代码看起来更简洁、优雅,有时我们会选择将`if-else`语句写在一行内。尽管这并不总是...
### Verilog中多个else_if级联造成的综合电路的低效率及解决办法 #### 概述 在Verilog语言中,条件语句(如if-else)是实现逻辑控制的重要手段之一。然而,在某些情况下,不当的使用这些条件语句可能会导致综合后...
本文将详细讲解SSH框架中涉及到的五个关键标签:`set`、`push`、`if/elseif/else`、`iterator`以及`sort`,并结合它们在实际应用中的用法进行深入探讨。 ### `set`标签 `set`标签在Struts2框架中用于在Value Stack...