不计代价的简化代码

开博的第一篇总要有些诚意,分享一个自己写的远程桌面工具:https://github.com/wang9563/RemoteDesktopManage

这也是一年前写的代码了,公司里有很多云主机要管理,同事们找不到合适的工具只好自己写一个,代码并不复杂,只是质量就不敢恭维了。起码这一年来的进步还是有的,只是少了一些志同道合的朋友,这一年中的业余时间也没干啥正事。仅仅是开篇就忘了如何去写,索性罗列下自己的积累,想以补拙。

我一般习惯简化代码,但多数是盲目的简化,也偶尔会反编译查下自己是否简化合理。

比如解决ToString()时,防止NullReferenceException我习惯用变量加上一个空字符串。

曾今的我必然是这么写的:

public string GetResult(string str)
{
    return str ?? "";
}

当是有些情况下并不能入如常所愿:

public string GetResult(object obj)
{
    //return obj ?? "";
    return obj == null ? "" : obj.ToString();
}

用三元运算符总是不爽,虽然自己写了CodeSnippet,但依旧不甘!

所以我开始这么写了:

public string GetResult(object obj)
{
    return obj + "";
}

编译后是这样的:

下面形参是string类型的还好理解,但是上面的 return (obj) 又是什么鬼?

只好转成IL再看:

哦,string.Concat !!!

哈哈,伟大的编译器!

还有一次被某位未知大神的代码惊艳到了:

后面加  的两行是另一位加的,哼?加个整会拉低逼格?我也顺道改了一下。

public string ConvertToChinese(decimal number)
{
    var format = number.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A").Replace("0B0A", "@");
    var simplify = Regex.Replace(format, @"((?<=-|^)[^1-9]*)|((?‘z‘0)[0A-E]*((?=[1-9])|(?‘-z‘(?=[F-L\.]|$))))|((?‘b‘[F-L])(?‘z‘0)[0A-L]*((?=[1-9])|(?‘-z‘(?=[\.]|$))))", "${b}${z}");
    var result = Regex.Replace(simplify, ".", match => "负元空零壹贰叁肆伍陆柒捌玖空空空空空空整分角拾佰仟万亿兆京垓秭穰"[match.Value[0] - ‘-‘].ToString());
    return result;
}

综上所述,我是个不计代价来简化代码的人,运行/开发效率有时候确实慢了点,但是看着爽啊~

倒是写出了那些无法再删除的代码,我也只好用 #region #endregion 包起来,并标注上1234,顺便学会了快捷键:Ctrl + M , Ctrl + O

第一篇博客,有点张口结舌,望看客见谅,我仅希望结识些志同道合的朋友。

时间: 2024-10-05 09:55:22

不计代价的简化代码的相关文章

用block做事件回调来简化代码,提高开发效率

我们在自定义view的时候,通常要考虑view的封装复用,所以如何把view的事件回调给Controller就是个需要好好考虑的问题, 一般来说,可选的方式主要有target-action和delegate,以及这次要强烈推荐的block. target-action和delegate方式有个很不方便的地方,就是配置代码和action代码不在同一个地方,你肯定要多写一个selector方法或者delegate方法,这就带来一个问题,一旦代码比较长或者selector方法比较多,找起来就很不方便.

链表中用标兵结点简化代码

标兵结点(头结点)是在链表中的第一个结点,不存放数据,仅仅是个标记 利用标兵结点可以简化代码.下面实现双向链表中的按值删除元素的函数,分别实现 带标兵结点和不带标兵结点两版本,对比可见标兵结点的好处. 结点声明如下: struct Node { int value; Node *prev; Node *next; } int del_doublelist(Node*&h,int v)//不带标兵结点 { Node*p=h; while(p!=NULL&&p->value!=v

Scala学习笔记——简化代码和柯里化

1.简化代码 package com.scala.first import java.io.File import javax.management.Query /** * Created by common on 17-4-5. */ object FileMatcher { def main(args: Array[String]) { for (file <- filesHere) println(file) println() for (file <- filesMatching(&q

.NET技术-1.0.使用反射、特性简化代码(验证Model类)

使用反射.特性简化代码 参考项目:利用反射验证Model类/AssemblyVerification 假设现在有一个学生类(Student) /// <summary> /// 学生类 /// </summary> public class Student { /// <summary> /// 名字 /// </summary> private string name; public string Name { get { return name; } s

【Butter Knife】依赖注入方式简化代码提高开发效率

Butter Knife是一款非常不错的开源框架,其目的是简化代码,提高项目的开发效率. 以往的开发我们经常需要用findViewById(R.xx.xxx);几乎没个页面都会涉及到,无论Activity还是Fragment甚至listView.GridView中的 Adapter.这些重复性的代码会让人觉得很枯燥,因为闭上眼都不会敲错的代码,每天重复几百遍是有点耗时,尽管有代码提示.而且可能会因为不同field的忘记书写而导致NullPoint空指针. 那么还是直接进入主题: 步骤: 第三方框

&lt;include&gt;标签和BaseActivity联合使用简化代码结构

include标签可以简化布局文件结构,方便维护,可以使用BaseActivity作为所有activity的父类,在里边做一些公共代码或者做一些公共布局的初始化工作供子类调用,简化代码结构,两者的结合使Android代码逻辑结构清晰并且更便于维护. 父类的activity由于没有setContentView属性,所以在BaseActivity中要想获得控件需要得到子类实例 在BaseActivity的onResume方法中加入方法 protected void onResume() { <spa

Java简化代码神器-Lombok

一.背景 前段时间在开源社区中发现了一个比较牛逼的简化Java代码的神器-Lombok,接着自己写了demo进行测试和练习,感觉真的很不错,特此分享给需要的小伙伴们~ 二.开发之前的准备 1.lombok的官方网站:http://projectlombok.org/ 2.lombok IDE插件安装 要想在IDE中使用lombok是需要安装相关插件的.如果不安装,IDE 则无法解析 lombok 注解.安装之前需要首先在官方网站下载相关jar包,现在官网版本是:1.16.8. [1].使用jav

[14-03] 示例:利用匿名内部类简化代码

内部类的其中一个优势就是可以简化代码,现在以一个常用的JDBC获取数据封装对象的例子,来简单谈谈如何使用匿名内部类来简化代码. 下面这段代码,是用JDBC连接,到数据库查询到数据之后,将数据封装到对象中进行返回,很常见的场景: public List<DepartmentMember> getMemberByDepartmentId(long departmentId) { List<DepartmentMember> memberList = new ArrayList<D

Android开发学习之路-让注解帮你简化代码,彻底抛弃findViewById

本文主要是记录注解的使用的学习笔记,如有错误请提出. 在通常的情况下,我们在Activity中有一个View,我们要获得这个View的实例是要通过findViewById这个方法,然后这个方法返回的是一个Object类型,我们还需要进行强制的类型转换,但是相信很多人都遇到过,当我们的一个布局中有很多个控件的时候,每一个控件都要进行上面的这个操作其实是很烦躁的,特别是强制类型转换,即使是用Alt+Enter,多按几次都累了.而今天要用的是通过注解的方式来简化这一个复杂的步骤,在我们编写好相应的代码