返回顶部
首页 > 资讯 > 精选 >Java/JavaScript/ABAP代码重构实例分析
  • 148
分享到

Java/JavaScript/ABAP代码重构实例分析

2023-06-05 05:06:46 148人浏览 安东尼
摘要

本篇内容介绍了“Java/javascript/ABAP代码重构实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在方法里引入一个布尔类

本篇内容介绍了“Java/javascript/ABAP代码重构实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在方法里引入一个布尔类型的参数控制方法的行为,这种做法正确吗?

Java/JavaScript/ABAP代码重构实例分析

看看stackoverflow上是怎么说的。

Java里这两种定义常量的方法,哪种更好?

Java/JavaScript/ABAP代码重构实例分析

package one;public interface Constants {  String NAME = "孙悟空";  int BP = 10000;}

package two;public class Constants {   public static final String NAME = "贝吉塔";   public static final int BP = 9000;}

为什么我们不应该在Java 接口中使用Array:

避免Array的原因之一:Array若使用不当,会造成性能问题

Java/JavaScript/ABAP代码重构实例分析

避免Array的原因之一:Array若使用不当,会造成性能问题

Java/JavaScript/ABAP代码重构实例分析

避免Array的原因之二:Array是面向过程编程领域的概念,使用Java面向对象集合类,比如List,而不是Array

Java/JavaScript/ABAP代码重构实例分析

看个具体例子:

String[] array = { "乔布斯", "张小龙" };List list = Arrays.asList( array );System.out.println( list );// 打印输出 [乔布斯, 张小龙]System.out.println( array );// -> [Ljava.lang.String;@6f548414list.equals( Arrays.asList( "乔布斯", "张小龙" ) )// -> truearray.equals( new String[] { "乔布斯", "张小龙" } )// -> false

看出差距了吧?

Arrays不是类型安全的!

下面的代码能通过编译,但是运行时会报ArrayStoreException的异常:

Number[] numbers = new Integer[10];numbers[0] = Long.valueOf( 0 );

而使用jdk的集合类比如List,就能在编译器即检测出这类错误。

Javascript里有趣的逗号

function a() {  console.log("I was called!");  return "Jerry";}var b = a(), a;

然后执行下面的代码:

console.log(b);

会打印出Jerry

再看这段代码:

var d = (function c(){  return a(),a;})();console.log(d);

会打印出:

I was called!function a() {  console.log("I was called!");  return "Jerry";}

再看这段代码呢?

(function() {    var e = f = 1;})();

直接报错:Uncaught ReferenceError: f is not defined

JavaScript里有趣的分号

var b = function(para) {  return {  doSomething: function() {  console.log("hello: " + para);  return para;  }  }}var a = 1, x = 3, y = 4, ss = a + b(x + y).doSomething() // 打印出 hello: 7console.log(s) // 打印出 8function test(i){  var result = i++;  return  result}console.log("test: " + test(3)) // 打印出undefined

继续看这段代码

s = function(x){ console.log("called: " + x ); return x}(1 + 2).toString()s = function(x){ console.log("called: " + x ); return x}(1 + 2).toString()// 打印出 called: 3

小技巧 - 如何把您自己增强逻辑植入到legacy遗留代码中

var bigFunction = function() {      // big logic      console.log("big logic"); // 这句话模拟我们在一段很冗长的遗留代码里植入自己的新逻辑}// 下面这种解决方案不会直接修改遗留函数本身,显得比较优雅var _old = bigFunction;bigFunction = function() {    if ( _old ) {         _old();    }    console.log("our own enhancement");}bigFunction();// 第三种解决方案采用了面向切片编程思想,显得更加高级var bigFunction = function() {  // big logic  console.log("big logic");}bigFunction = ( bigFunction || function() {} ).after( function() {     console.log("our own logic");});bigFunction();

如何优雅的在一个函数里增添性能测试统计的工具代码

var append_doms = function() {    var d = new Date(); // dirty code - nothing to do with application logic!!!    for( var i = 0; i < 100000; i++) {      var div = document.createElement( "div");        document.body.appendChild(div);    }    // dirty code - nothing to do with application logic!!!    console.log(" time consumed: " + ( new Date() - d));};function test() {  append_doms();}

传统方案:在充满了业务逻辑的函数体里强行加入红色标准的搜集性能测试的工具代码,这个实现显得很丑陋:

Java/JavaScript/ABAP代码重构实例分析

再看看采用面向切片编程思路的解决方案:aop - Aspect Oriented Programming

var append_doms = function() {    for( var i = 0; i < 100000; i++) {      var div = document.createElement( "div");        document.body.appendChild(div);    }};var log_time = function( func, log_name) {       return func = ( function() {           var d;           return func.before( function(){                 d = new Date();           }).after( function(){                 console.log( log_name + ( new Date() - d));           });     })(); };function test() { log_time(append_doms, "consumed time: ")();}

Java/JavaScript/ABAP代码重构实例分析

如何避免代码中大量的IF - ELSE 检查

Java/JavaScript/ABAP代码重构实例分析

在调用真正的OData api之前,系统有大量的IF ELSE对API的输入参宿进行检查:

var send = function() {     var value = input.value;     if( value.length === '' ) {           return false;     }     else if( value.length > MAX_LENGTH) {           return false;     }     ... // lots of else     else {        // call OData API     }}

更优雅的解决方案:

把这些不同的检查规则封装到一个个JavaScript函数里,再把这些函数作为一个规则对象的属性:

var valid_rules = {      not_empty: function( value ) {         return value.length !== '';      },      max_length: function( value ) {         return value.length <= MAX_LENGTH  ;      } }

实现一个新的检查函数,变量检查对象的属性,执行校验逻辑:

var valid_check = function() {     for( var i in valid_rules ) {          if ( vali_rules[i].apply( this, arguments) === false ) {                return false;          }     }}

现在的OData调用函数非常优雅了:

var send = function( value ) {       if ( valid_check( value ) === false ) {             return;       }      // call OData API}

Java/JavaScript/ABAP代码重构实例分析

通过这种方式消除了IF ELSE。

另一种通过职责链 Chain of Responsibility 的设计模式 design pattern消除IF ELSE分支的代码重构方式:

先看传统方式的实现:

// Priority: ActiveX > HTML5 > Flash > FORM(default)function isActiveXSupported(){  //...  return false;}function ishtml5Supported(){  //...  return false;}function isFlashSupported(){  //...  return false;}

好多的IF -ELSE啊:

var uploadAPI;if ( isActiveXSupported()) {  // lots of initialization work  uploadAPI = { "name": "ActiveX"};}else if( isHTML5Supported()) {  // lots of initialization work  uploadAPI = { "name": "HTML5"};}else if( isFlashSupported()) {  // lots of initialization work  uploadAPI = { "name": "Flash"};}else {  // lots of initialization work  uploadAPI = { "name": "Form"};}console.log(uploadAPI);

再看职责链设计模式的实现:

Chain of Responsibility

var getActiveX = function() {  try {  // lots of initialization work  return { "name": "ActiveX"};  }  catch (e) {  return null;  }}var getHTML5 = function() {  try {  // lots of initialization work  return { "name": "HTML5"};  }  catch (e) {  return null;  }}

代码整洁优雅:

var uploadAPI = getActiveX.after(getHTML5).after(getFlash).after(getForm)();console.log(uploadAPI);

Java中的String

public class stringTest {public static void main(String[] args) {  String userName = "Jerry";  String skill = "js";  String job = "Developer";  String info = userName + skill     + job;  System.out.println(info);}}

用javap将上面的Hello World程序反编译出来学习:

Java/JavaScript/ABAP代码重构实例分析

“Java/JavaScript/ABAP代码重构实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Java/JavaScript/ABAP代码重构实例分析

本文链接: https://lsjlt.com/news/241328.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java/JavaScript/ABAP代码重构实例分析
    本篇内容介绍了“Java/JavaScript/ABAP代码重构实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在方法里引入一个布尔类...
    99+
    2023-06-05
  • CSS代码重构的示例分析
    小编给大家分享一下CSS代码重构的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 重构和架构重构是指在不改变代码行为...
    99+
    2024-04-02
  • java代码实例分析
    这篇文章主要介绍“java代码实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java代码实例分析”文章能帮助大家解决问题。一、几个坑爹代码的目录这样使用 StringBuffer 的方法有什...
    99+
    2023-06-16
  • javascript入门实例代码分析
    这篇文章主要介绍“javascript入门实例代码分析”,在日常操作中,相信很多人在javascript入门实例代码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java...
    99+
    2024-04-02
  • JavaScript中null实例代码分析
    这篇“JavaScript中null实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这...
    99+
    2024-04-02
  • JavaScript闭包实例代码分析
    这篇文章主要介绍了JavaScript闭包实例代码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript闭包实例代码分析文章都会有所收获,下面我们一起来看看吧。什么是闭包?闭包的概念是有很多版本...
    99+
    2023-07-05
  • JavaScript面试题实例代码分析
    这篇文章主要介绍了JavaScript面试题实例代码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript面试题实例代码分析文章都会有所收获,下面我们一起来看看...
    99+
    2024-04-02
  • PHP和Java代码实例分析
    这篇文章主要介绍“PHP和Java代码实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP和Java代码实例分析”文章能帮助大家解决问题。命名案例1function getGood...
    99+
    2023-06-16
  • Java代理模式实例代码分析
    今天小编给大家分享一下Java代理模式实例代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、动态代理模式动态代理的特...
    99+
    2023-06-29
  • JavaScript代码优化技巧实例分析
    这篇文章主要介绍“JavaScript代码优化技巧实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript代码优化技巧实例分析”文章能帮助大家解决...
    99+
    2024-04-02
  • Python程序的分支结构实例代码分析
    这篇文章主要讲解了“Python程序的分支结构实例代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python程序的分支结构实例代码分析”吧!单分支结构:if 语句Python 中 i...
    99+
    2023-07-06
  • JavaScript单行代码示例分析
    这篇文章主要介绍JavaScript单行代码示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是单行代码?单行代码是一种代码实践,其中我们仅用一行代码执行某些功能。01-随机获取布尔值此函数将使用Math.r...
    99+
    2023-06-15
  • JavaScript代码块和关键词实例分析
    本篇内容主要讲解“JavaScript代码块和关键词实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript代码块和关键词实例分析”吧! J...
    99+
    2024-04-02
  • JavaScript代码优化的技巧实例分析
    本篇内容主要讲解“JavaScript代码优化的技巧实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript代码优化的技巧实例分析”吧!写在前面想要做到JavaScript的代...
    99+
    2023-07-02
  • Java代码编写技巧实例分析
    这篇文章主要讲解了“Java代码编写技巧实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java代码编写技巧实例分析”吧!开发工具不知道有多少”老”程序员还在使用 Eclipse,这些...
    99+
    2023-06-30
  • Java的位运算实例代码分析
    今天小编给大家分享一下Java的位运算实例代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。位运算很久以前学习过位运算,...
    99+
    2023-07-06
  • Redis数据结构类型实例代码分析
    这篇“Redis数据结构类型实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Redis数据结构类型实例代码分析”文...
    99+
    2023-07-05
  • JavaScript中怎么重构代码
    这篇文章给大家介绍JavaScript中怎么重构代码,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. 提炼函数在JavaScript开发中,我们大部分时间都在与函数打交道,所以我们希...
    99+
    2024-04-02
  • css代码实例分析
    这篇文章主要介绍“css代码实例分析”,在日常操作中,相信很多人在css代码实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”css代码实例分析”的疑惑有所帮助!接下来,...
    99+
    2024-04-02
  • css实例代码分析
    今天小编给大家分享一下css实例代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作