วิธีการที่มีคำเตือน "method could be static" ถือว่าเป็นรูปแบบที่ไม่ดีใน JavaScript/TypeScript ไหม?
ฉันสังเกตว่าหากฉันเขียนเมธอดที่ทำงานเฉพาะบนตัวแปรภายในของเมธอดที่เรียกใช้ (ไม่ได้ติดต่อโดยตรงกับตัวแปรของคลาส) ฉันจะได้รับคำเตือนว่าเมธอดนั้นสามารถเป็น static ได้
บางครั้งก็ดีที่จะสรุปโค้ดชิ้นใหญ่เป็นเมธอดแยก การทำเช่นนี้ถือเป็นการปฏิบัติที่ไม่ดีใน JavaScript/TypeScript หรือไม่?
เนื่องจากฉันได้รับคำเตือนเหล่านี้อยู่เรื่อย ๆ ฉันจึงขอลองเสี่ยงว่าตำรวจกระทู้จะเข้าจับฉันเพราะการถามคำถามที่อาจเชิญชวนความคิดเห็น ให้ฉันปกป้องตัวเองโดยบอกว่าคำเตือนที่ฉันได้รับนั้นไม่ใช่ความคิดเห็น มันเป็นคำเตือนที่ชัดเจน ซึ่งแสดงว่ามีคำตอบที่ไม่ใช่ความคิดเห็นอย่างแน่นอน อย่างน้อยก็จากมุมมองของผู้ที่ตัดสินใจสร้างคำเตือนเหล่านั้น
แก้ไข: มีคนขอให้ฉันใส่โค้ดที่นี่เพื่อให้เหตุผลที่ถูกต้องว่าทำไมฉันถึงอยากทำแบบนี้ ส่วนตัวฉันไม่คิดว่าสิ่งนี้จะช่วยเพิ่มความชัดเจนให้กับคำถามที่ฉันถาม แต่ต่อไปนี้คือตัวอย่างของวิธีการที่ทำให้เกิดคำเตือนใน WebStorm
//Change object array in *.content objects to values array
//noinspection JSMethodCanBeStatic
transformData(visibleData) {
const ret: any = {};
ret.headings = visibleData.headings;
ret.checkbox = this.checkBox; //add if the table needs checkboxes
ret.content = [];
for (let i = 0; i < visibleData.content.length; i++) {
ret.content.push(_.values(visibleData.content[i]));
}
return ret;
}
จุดประสงค์ของฟังก์ชันนี้คือการสร้างสำเนาของอินสแตนซ์ เพื่อไม่ให้แก้ไขอินสแตนซ์โดยตรง และสร้างอ็อบเจ็กต์ที่แตกต่างออกไป ซึ่งส่วนใหญ่จะเป็นอาร์เรย์ที่มีค่าเท่านั้น ที่จะถูกใช้เพื่อเชื่อมโยงข้อมูลในเทมเพลต ฉันทำเช่นนี้เพื่อให้เทมเพลตตารางของฉันสามารถนำกลับมาใช้ใหม่ได้ เนื่องจากจำนวนคอลัมน์มีความแตกต่างกัน
คำตอบ #1
โค้ดที่ไม่โต้ตอบกับอินสแตนซ์ควรเป็นฟังก์ชันอิสระหรืออย่างน้อยเป็นเมทอดสแตติกของคลาสเมื่อคุณเชื่อว่ามันเชื่อมโยงอย่างแน่นหนากับ API ของคลาส
วิธีการเพิ่มเติมทุกวิธีที่คุณเพิ่มไปยัง API ต้องได้รับการสนับสนุน ดังนั้นคลาสที่ใหญ่กว่าจะต้องการการสนับสนุนมากกว่าคลาสที่เล็กกว่า ในบางภาษา เช่น Java คุณไม่สามารถมีฟังก์ชันฟรีได้ ดังนั้นคุณต้องแนบฟังก์ชันกับคลาสบางคลาส แต่ TypeScript และ JS มีความยืดหยุ่นมากกว่า ดังนั้นจึงไม่จำเป็นต้องทำให้ API ของคลาสสกปรก
และคุณอาจพิจารณามันจากมุมมองการปรับปรุงประสิทธิภาพ
เมื่อ JS ประเมินวิธีการของคลาส มันจะค้นหาในตัวอย่างวัตถุ จากนั้นในโพรโทไทป์ของวัตถุ จากนั้นในโพรโทไทป์ของพ่อแม่ เป็นต้น การค้นหาแต่ละครั้งใช้เวลา CPU ดังนั้นเมื่อคุณคิดเกี่ยวกับประสิทธิภาพ ฟังก์ชันอิสระคือทางเลือกของคุณ