ฉันถูกสอนมาตลอดว่าการมีผลข้างเคียงในif
สภาพที่ไม่ดี ที่ฉันหมายถึงคือ;
if (conditionThenHandle()) {
// do effectively nothing
}
... ตรงข้ามกับ;
if (condition()) {
handle();
}
... และฉันเข้าใจว่าและเพื่อนร่วมงานของฉันมีความสุขเพราะฉันไม่ได้ทำและเราทุกคนกลับบ้านเวลา 17:00 น. ในวันศุกร์และทุกคนมีวันหยุดสุดสัปดาห์ที่มีความสุข
ตอนนี้ ECMAScript5 แนะนำวิธีการเช่นevery()
และsome()
เพื่อArray
และฉันพบว่าพวกเขามีประโยชน์มาก พวกมันสะอาดกว่าfor (;;;)
ให้ขอบเขตกับคุณและทำให้องค์ประกอบเข้าถึงได้โดยตัวแปร
แต่เมื่อตรวจสอบการป้อนข้อมูลผมมากขึ้นบ่อยกว่าไม่พบตัวเองโดยใช้every
/ some
อยู่ในสภาพที่จะตรวจสอบการป้อนข้อมูลแล้วใช้every
/ some
อีกครั้งในร่างกายการแปลงการป้อนข้อมูลในรูปแบบที่ใช้งานได้;
if (input.every(function (that) {
return typeof that === "number";
})) {
input.every(function (that) {
// Model.findById(that); etc
}
} else {
return;
}
... เมื่อสิ่งที่ฉันต้องการจะทำคือ;
if (!input.every(function (that) {
var res = typeof that === "number";
if (res) {
// Model.findById(that); etc.
}
return res;
})) {
return;
}
... ซึ่งทำให้ฉันมีผลข้างเคียงในif
เงื่อนไขซึ่งไม่ดี
ในการเปรียบเทียบนี้เป็นรหัสจะดูด้วยเก่าfor (;;;)
;
for (var i=0;i<input.length;i++) {
var curr = input[i];
if (typeof curr === "number") {
return;
}
// Model.findById(curr); etc.
}
คำถามของฉันคือ:
- นี่เป็นวิธีปฏิบัติที่ไม่ดีอย่างแน่นอนหรือไม่?
- ฉันกำลังใช้ (mis | ab)
some
และevery
( ฉันควรใช้สิ่งfor(;;;)
นี้หรือไม่) - มีแนวทางที่ดีกว่านี้ไหม?
some
ฉันต้องการทำบางสิ่งกับองค์ประกอบถ้าฉันใช้every
ฉันต้องการทำบางสิ่งกับองค์ประกอบทั้งหมดเหล่านั้น ... some
และevery
อย่าให้ฉันเข้าถึงข้อมูลนั้นดังนั้นฉันจึงไม่สามารถ ใช้พวกเขาหรือฉันต้องเพิ่มผลข้างเคียง
some
ในif
เงื่อนไขของฉันเพื่อตรวจสอบว่าองค์ประกอบบางอย่างในอาร์เรย์แสดงคุณสมบัติบางอย่าง 9/10 ฉันจำเป็นต้องทำงานกับองค์ประกอบนั้นในif
ร่างกายของฉัน; ตอนนี้เป็นsome
ไม่ได้บอกฉันซึ่งองค์ประกอบการจัดแสดงทรัพย์สิน (เพียงแค่ "ใครทำ") ผมสามารถใช้some
อีกครั้งในร่างกาย (O (2n)) หรือฉันก็สามารถดำเนินการได้ภายในถ้าสภาพ ( ซึ่งเป็นสิ่งที่ไม่ดีเพราะมันเป็นผลข้างเคียงที่อยู่ภายในหัว)
every
เช่นกันแน่นอน