优化代码的思路(代码优化分为哪几类优化)

  编者按:

  现在公众号有置顶功能了,大家把微信更新到最新版本,点开“大数据实验室”公众号。点“置顶公众号”键,就可以置顶了,这样。不管我们什么时候更新,您都能容易找到。

  在这篇文章中,我将分享12个非常有用的Java技巧。这些技巧可以帮助你减少并优化代码。

  1) 使用!!将变量转换成布尔类型

  有时,我们需要检查一些变量是否存在,或者它是否具有有效值,从而将它们的值视为true。对于做这样的检查,你可以使用||(双重否定运算符),它能自动将任何类型的数据转换为布尔值,只有这些变量才会返回false:0,null,"",undefined或NaN,其他的都返回true。我们来看看这个简单的例子:

  function Account(cash) {

  this.cash = cash;

  this.hasMoney = !!cash;

  }

  var account = new Account(100.50);

  console.log(account.cash); // 100.50

  console.log(account.hasMoney); // true

  var emptyAccount = new Account(0);

  console.log(emptyAccount.cash); // 0

  console.log(emptyAccount.hasMoney); // false

  在这个例子中,如果account.cash的值大于零,则account.hasMoney的值就是true。

  2) 使用+将变量转换成数字

  这个转换超级简单,但它只适用于数字字符串,不然就会返回NaN(不是数字)。看看这个例子:

  function toNumber(strNumber) {

  return +strNumber;

  }

  console.log(toNumber("1234")); // 1234

  console.log(toNumber("ACB")); // NaN

  这个转换操作也可以作用于Date,在这种情况下,它将返回时间戳:

  console.log(+new Date()) // 1461288164385

从五万走到几千万的交易体系,他敢讲你敢听吗?(内附视频)

上课地点:杭州

优化代码的思路(代码优化分为哪几类优化),优化代码的思路(代码优化分为哪几类优化),优化代码的思路,信息,文章,视频,第1张

培训时间:2017年5月20日09:00—20:00

  咨询电话/微信:13061694649

  3) 短路条件

  如果你看到过这种类似的代码:

  if (conected) {

  login();

  }

  那么你可以在这两个变量之间使用&&(AND运算符)来缩短代码。例如,前面的代码可以缩减到一行:

  conected && login();

  你也可以用这种方法来检查对象中是否存在某些属性或函数。类似于以下代码:

  user && user.login();

  4) 使用||设置默认值

  在ES6中有默认参数这个功能。为了在旧版浏览器中模拟此功能,你可以使用||(OR运算符),并把默认值作为它的第二个参数。如果第一个参数返回false,那么第二个参数将会被作为默认值返回。看下这个例子:

  function User(name, age) {

  this.name = name || "Oliver Queen";

  this.age = age || 27;

  }

  var user1 = new User();

  console.log(user1.name); // Oliver Queen

  console.log(user1.age); // 27

  var user2 = new User("Barry Allen", 25);

  console.log(user2.name); // Barry Allen

  console.log(user2.age); // 25

  5) 在循环中缓存array.length

  这个技巧非常简单,并且在循环处理大数组时能够避免对性能造成巨大的影响。基本上几乎每个人都是这样使用for来循环遍历一个数组的:

  for (var i = 0; i < array.length; i++) {

  console.log(array[i]);

  }

  如果你使用较小的数组,那还好,但是如果处理大数组,则此代码将在每个循环里重复计算数组的大小,这会产生一定的延迟。为了避免这种情况,你可以在变量中缓存array.length,以便在循环中每次都使用缓存来代替array.length:

  var length = array.length;

  for (var i = 0; i < length; i++) {

  console.log(array[i]);

  }

  为了更简洁,可以这么写:

  for (var i = 0, length = array.length; i < length; i++) {

  console.log(array[i]);

  }

  6) 检测对象中的属性

  当你需要检查某些属性是否存在,避免运行未定义的函数或属性时,这个技巧非常有用。如果你打算编写跨浏览器代码,你也可能会用到这个技术。例如,我们假设你需要编写与旧版Internet Explorer 6兼容的代码,并且想要使用document.querySelector()来通过ID获取某些元素。 但是,在现代浏览器中,这个函数不存在。所以,要检查这个函数是否存在,你可以使用in运算符。看下这个例子:

  if ('querySelector' in document) {

  document.querySelector("#id");

  } else {

  document.getElementById("id");

  }

  在这种情况下,如果在document中没有querySelector函数,它就会使用document.getElementById()作为代替。

  7) 获取数组的最后一个元素

  Array.prototype.slice(begin,end)可以用来裁剪数组。但是如果没有设置结束参数end的值的话,该函数会自动将end设置为数组长度值。我认为很少有人知道这个函数可以接受负值,如果你将begin设置一个负数的话,你就能从数组中获取到倒数的元素:

  var array = [1, 2, 3, 4, 5, 6];

  console.log(array.slice(-1)); // [6]

  console.log(array.slice(-2)); // [5,6]

  console.log(array.slice(-3)); // [4,5,6]

  8) 数组截断

  这个技术可以锁定数组的大小,这对于要删除数组中固定数量的元素是非常有用的。例如,如果你有一个包含10个元素的数组,但是你只想获得前五个元素,则可以通过设置array.length = 5来阶段数组。看下这个例子:

  var array = [1, 2, 3, 4, 5, 6];

  console.log(array.length); // 6

  array.length = 3;

  console.log(array.length); // 3

  console.log(array); // [1,2,3]

  9) 全部替换

  String.replace()函数允许使用String和Regex来替换字符串,这个函数本身只能替换第一个匹配的串。但是你可以在正则表达式末尾添加/g来模拟replaceAll()函数:

  var string = "john john";

  console.log(string.replace(/hn/, "ana")); // "joana john"

  console.log(string.replace(/hn/g, "ana")); // "joana joana"

  10) 合并数组

  如果你需要合并两个数组,你可以使用Array.concat()函数:

  var array1 = [1, 2, 3];

  var array2 = [4, 5, 6];

  console.log(array1.concat(array2)); // [1,2,3,4,5,6];

  但是,这个函数对于大数组来说不并合适,因为它将会创建一个新的数组并消耗大量的内存。在这种情况下,你可以使用Array.push.apply(arr1,arr2),它不会创建一个新数组,而是将第二个数组合并到第一个数组中,以减少内存使用:

  var array1 = [1, 2, 3];

  var array2 = [4, 5, 6];

  console.log(array1.push.apply(array1, array2)); // [1,2,3,4,5,6];

  11) 把NodeList转换成数组

  如果运行document.querySelectorAll("p")函数,它会返回一个DOM元素数组,即NodeList对象。但是这个对象并没有一些属于数组的函数,例如:sort(),reduce(),map(),filter()。为了启用这些函数,以及数组的其他的原生函数,你需要将NodeList转换为数组。要进行转换,只需使用这个函数:[] .slice.call(elements):

  var elements = document.querySelectorAll("p"); // NodeList

  var arrayElements = [].slice.call(elements); // 现在已经转换成数组了

  var arrayElements = Array.from(elements); // 把NodeList转换成数组的另外一个方法

  12) 对数组元素进行洗牌

  如果要像外部库Lodash那样对数据元素重新洗牌,只需使用这个技巧:

  var list = [1, 2, 3];

  console.log(list.sort(function() {

  return Math.random() - 0.5

  })); // [2,1,3]

  结论

  现在,你已经学到了一些有用的JS技巧,它们主要用于缩减Java代码量,其中一些技巧在许多流行的JS框架都使用到,如Lodash,Underscore.js,Strings.js等。

  原文:12 Extremely Useful Hacks for Java

  作者:Caio Ribeiro Pereira

  翻译:雁惊寒

  

  李迅雷(中泰证券首席经济学家):2017年宏观策略布局与展望

  陈华良(中泰证券金融市场部总经理):机构经纪服务升级展望

  申毅(上海申毅投资股份有限公司CEO):智能化革命对证券业的裨益

  何波(中泰证券信息技术部副总经理):XTP——为量化而生

  马永谙(理财魔方创始合伙人):FOF管理在智能投顾中的应用探索

  吴旭华(恒生电子私募业务部总经理):i私募数据服务平台对fof业务的支持

  张翔(西南财大金融学院金融工程系主任):私募基金基准指数构建与FOF评价

  圆桌论坛——主题:FOF资产配置中的量化技术

  陆政哲 浙江九章(原幻方量化) 投研部副总经理

  李斌 复兴资本 董事长

  言程序 言起投资管理咨询有限公司 总经理

  池伊华 渤海银行上海分行 副行长

  郭弘仁 歌斐资产管理有限公司 董事总经理

  观看直播费用:100元

  直播时间:2017年5月21日 10:00—15:30

  重播时间:会议结束后立即开始重播,循环播放至5月22日下午17:30

  手机进入直播方式

  3.微信付款后可以随时进入直播。

  电脑端观看

  (通过电脑端进入观看直播,建议在会议开始时再缴费进入,不要提前太早缴费进入)

  https://v.quant-club.com/watch/848831

  将上述网址拷贝入浏览器可直接付费观看。

  特别注意:要用同一个浏览器进入,推荐使用360极速浏览器。

  交费后一直到重播结束都是有效的,随时进出不需要重复交费。

  咨询微信:5424567

  (请收藏本页面,以方便随时进入直播间)

1、本网站名称:源码村资源网
2、本站永久网址:https://www.yuanmacun.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
源码村资源网 » 优化代码的思路(代码优化分为哪几类优化)

1 评论

您需要 登录账户 后才能发表评论

发表评论

欢迎 访客 发表评论