你试过无需if写编码吗?

2021-04-04 18:51


你试过无需if写编码吗?


你试过无需if写编码吗? 试着无需 if 写编码,是件很趣味的事,并且,万1你领悟了甚么是“数据信息即编码,编码即数据信息”呢?

译者按: 试着无需 if 写编码,是件很趣味的事,并且,万1你领悟了甚么是 数据信息即编码,编码即数据信息 呢?

我在教初学者程序编写时,喜爱给她们1些小小的的挑戰,例如:不应用if句子(或3元运算符、switch句子等)处理1些程序编写难题。

这样做有甚么实际意义吗?

客观事实上,它能够驱使你从不一样的角度找寻处理方式,或许能够寻找更好的方式。

自然,应用if句子沒有任为何不对的地区。可是,不应用if的话,有时能够提升编码的可读性。这1点其实不是肯定的,假如彻底不应用if句子的话,编码可读性或许会更差。这必须你依据不一样状况去分辨。

并且,无需if的话不只是危害可读性。在这身后暗含着更为刻骨铭心的道理。根据掌握本文的编码示例,你能够发现,假如不应用if句子的话,你的编码会更为贴近编码即数据信息的定义。

此外,当你尝试不应用if句子去程序编写时,也是1件十分成心思的事儿。

示例1: 统计分析数字能量数组中的单数

假定大家有1个整数金额数字能量数组arrayOfIntegers,如今必须统计分析在其中单数的个数:

const arrayOfIntegers = [1, 4, 5, 9, 0, ⑴, 5]; 

应用if

let counter = 0;  arrayOfIntegers.forEach((integer) =  {   const remainder = Math.abs(integer % 2);   if (remainder === 1) {   counter++;   }  });    console.log(counter); 

console.log(counter);

无需if

let counter = 0;    arrayOfIntegers.forEach((integer) =  {   const remainder = Math.abs(integer % 2);   counter += remainder;  });    console.log(counter); 

无需if时,大家恰当地利人和用了单数与偶数的特点,它们除以2的余数各自是0和1。

示例2: 分辨工作中日和周末

给定1个时间(例如new Date()),分辨它是工作中日還是周末,各自回到 weekend 和 weekday 。

应用if

const weekendOrWeekday = (inputDate) =  {   const day = inputDate.getDay();     if (day === 0 || day === 6) {   return 'weekend';   }     return 'weekday';     // Or, for ternary fans:   // return (day === 0 || day === 6) ? 'weekend' : 'weekday';  };    console.log(weekendOrWeekday(new Date())); 

无需if

const weekendOrWeekday = (inputDate) =  {   const day = inputDate.getDay();     return weekendOrWeekday.labels[day] ||   weekendOrWeekday.labels['default'];  };    weekendOrWeekday.labels = {   0: 'weekend',   6: 'weekend',   default: 'weekday'  };    console.log(weekendOrWeekday(new Date())); 

你是不是发现if句子中实际上暗含着1些信息内容呢?它告知大家哪1天是周末,哪1天是工作中日。因而,要去掉if句子的话,大家只必须把这些信息内容写入weekendOrWeekday.labels目标,随后立即应用它就行了。

广告宣传: 假如你必须监管网上JavaScript编码的不正确的话,欢迎完全免费应用Fundebug!

示例3: doubler涵数

写1个doubler涵数,它会依据主要参数的种类,开展不一样的实际操作:

假如主要参数是数据,则乘以2(i.e. 5 = 10, ⑴0 = ⑵0); 假如主要参数是标识符串,则每一个标识符反复2次 (i.e. 'hello' = 'hheelloo'); 假如主要参数是涵数,则启用2次; 假如主要参数是数字能量数组,则将每个元素做为主要参数,启用doubler涵数 假如主要参数是目标,则将每一个特性值做为主要参数,启用doubler涵数

应用switch

const doubler = (input) =  {   switch (typeof input) {   case 'number':   return input + input;   case 'string':   return input   .split('')   .map((letter) =  letter + letter)   .join('');   case 'object':   Object.keys(input)   .map((key) =  (input[key] = doubler(input[key])));   return input;   case 'function':   input();   input();   }  };    console.log(doubler(⑴0));  console.log(doubler('hey'));  console.log(doubler([5, 'hello']));  console.log(doubler({ a: 5, b: 'hello' }));  console.log(   doubler(function() {   console.log('call-me');   }),  ); 

无需switch

const doubler = (input) =  {   return doubler.operationsByType[typeof input](input);  };    doubler.operationsByType = {   number: (input) =  input + input,   string: (input) =    input   .split('')   .map((letter) =  letter + letter)   .join(''),   function: (input) =  {   input();   input();   },   object: (input) =  {   Object.keys(input)   .map((key) =  (input[key] = doubler(input[key])));   return input;   },  }; 

可知,我将每种主要参数种类对应的实际操作关联到了doubler.operationsByType,这样不必须switch句子,便可以完成doubler涵数了。

注:以便确保可读性,本文彩作用译而非直译。此外,本文版权归原作者全部,汉语翻译仅用于学习培训。


2019-03⑴1 14:01:52 销售市场情报 人生苦短,Python之父要解开这个疑惑 那末有木有1种語言能够像 C 語言那样可以全面操控测算机的資源,另外又能像 Shell 語言那样简易易用呢?Guido 这样想——或许别的许多程序流程员都这样想过。


扫描二维码分享到微信

在线咨询
联系电话

020-66889888