มีความแตกต่างอย่างมากระหว่างฟังก์ชันอะไรและคลาสทำอะไร
ให้ฉันอธิบายตั้งแต่เริ่มต้น (เกี่ยวกับความจำเป็นเท่านั้น)
ประวัติการเขียนโปรแกรมเราทุกคนรู้ว่าเริ่มต้นด้วยคำสั่งพื้นฐานแบบตรง (เช่น -: Assembly)
ถัดไปการเขียนโปรแกรมแบบมีโครงสร้างมาพร้อมกับการควบคุมโฟลว์ (เช่น -: if, switch, while, เป็นต้น) กระบวนทัศน์นี้ช่วยให้โปรแกรมเมอร์สามารถควบคุมการไหลของโปรแกรมได้อย่างมีประสิทธิภาพและยังลดจำนวนบรรทัดโค้ดด้วยการวนซ้ำ
การเขียนโปรแกรมขั้นตอนถัดไปมาและกลุ่มคำสั่งใดเป็นโพรซีเดอร์ (funcions) สิ่งนี้ให้ประโยชน์หลักสองประการสำหรับโปรแกรมเมอร์
1. คำสั่งกลุ่ม (การดำเนินการ) แยกเป็นบล็อก
2. สามารถนำบล็อกเหล่านี้กลับมาใช้ใหม่ได้ (ฟังก์ชัน)
แต่เหนือทุกกระบวนทัศน์ไม่ได้ให้คำตอบสำหรับการจัดการแอปพลิเคชัน การเขียนโปรแกรมขั้นตอนสามารถใช้ได้เฉพาะกับแอปพลิเคชันขนาดเล็กเท่านั้น ที่ไม่สามารถใช้พัฒนาเว็บแอพพลิเคชั่นขนาดใหญ่ (เช่น -: banking, google, youtube, facebook, stackoverflow ฯลฯ ) ไม่สามารถสร้าง frameworks เช่น android sdk, flutter sdk และอื่น ๆ อีกมากมาย ......
ดังนั้นวิศวกรจึงทำการวิจัยเพิ่มเติมเพื่อจัดการโปรแกรมด้วยวิธีที่เหมาะสม
ในที่สุดObject Oriented Programmingมาพร้อมกับโซลูชันทั้งหมดสำหรับการจัดการแอปพลิเคชันทุกขนาด (ตั้งแต่สวัสดีชาวโลกไปจนถึงผู้คนกว่าล้านล้านคนโดยใช้การสร้างระบบเช่น Google, amazon และ 90% ของแอปพลิเคชันในปัจจุบัน)
ใน oop แอปพลิเคชันทั้งหมดสร้างขึ้นรอบ ๆ วัตถุหมายความว่าแอปพลิเคชันคือชุดของวัตถุเหล่านี้
ดังนั้นวัตถุจึงเป็นสิ่งปลูกสร้างพื้นฐานสำหรับแอปพลิเคชันใด ๆ
class (object at runtime) จัดกลุ่มข้อมูลและฟังก์ชันที่เกี่ยวข้องกับตัวแปรเหล่านั้น (data) ดังนั้นวัตถุจึงประกอบด้วยข้อมูลและการดำเนินการที่เกี่ยวข้อง
[ต่อไปนี้ฉันจะไม่อธิบายเกี่ยวกับ oop]
👉👉👉ตกลงตอนนี้มาหากรอบกระพือ
-Dart รองรับทั้งขั้นตอนและขั้นตอน แต่เฟรมเวิร์ก Flutter สร้างขึ้นอย่างสมบูรณ์โดยใช้คลาส (oop) (เนื่องจากเฟรมเวิร์กที่จัดการได้ขนาดใหญ่ไม่สามารถสร้างโดยใช้ขั้นตอน)
ที่นี่ฉันจะสร้างรายการเหตุผลที่พวกเขาใช้คลาสแทนฟังก์ชั่นในการสร้างวิดเจ็ต👇👇👇
1 - เวลาส่วนใหญ่ build method (วิดเจ็ตลูก) หมายเลขการโทรของฟังก์ชันซิงโครนัสและอะซิงโครนัส
เช่น:
- เพื่อดาวน์โหลดภาพเครือข่าย
- รับข้อมูลจากผู้ใช้ ฯลฯ
ดังนั้นวิธีการสร้างจึงจำเป็นต้องเก็บไว้ในวิดเจ็ตคลาสที่แยกจากกัน (เนื่องจากเมธอดอื่น ๆ ทั้งหมดเรียกโดย build () วิธีการสามารถเก็บไว้ในคลาสเดียว)
2 - การใช้คลาสวิดเจ็ตคุณสามารถสร้างจำนวนคลาสอื่นได้โดยไม่ต้องเขียนโค้ดซ้ำแล้วซ้ำอีก (** Use Of Inheritance ** (ขยาย))
และยังใช้การสืบทอด (ขยาย) และความหลากหลาย (แทนที่) คุณสามารถสร้างคลาสที่กำหนดเองได้ (ตัวอย่างด้านล่างในนั้นฉันจะปรับแต่ง (Override) ภาพเคลื่อนไหวโดยการขยาย MaterialPageRoute (เนื่องจากการเปลี่ยนแปลงเริ่มต้นฉันต้องการปรับแต่ง)
class MyCustomRoute<T> extends MaterialPageRoute<T> {
MyCustomRoute({ WidgetBuilder builder, RouteSettings settings })
: super(builder: builder, settings: settings);
@override //Customize transition
Widget buildTransitions(BuildContext context,
Animation<double> animation,
Animation<double> secondaryAnimation,
Widget child) {
if (settings.isInitialRoute)
return child;
// Fades between routes. (If you don't want any animation,
// just return child.)
return new FadeTransition(opacity: animation, child: child);
}
}
3 - ฟังก์ชันไม่สามารถเพิ่มเงื่อนไขให้กับพารามิเตอร์ได้ แต่การใช้ตัวสร้างวิดเจ็ตคลาสคุณสามารถทำได้
ด้านล่าง Code example👇 (คุณลักษณะนี้ถูกใช้อย่างมากโดยวิดเจ็ตเฟรมเวิร์ค)
const Scaffold({
Key key,
this.bottomNavigationBar,
this.bottomSheet,
this.backgroundColor,
this.resizeToAvoidBottomPadding,
this.resizeToAvoidBottomInset,
this.primary = true,
this.drawerDragStartBehavior = DragStartBehavior.start,
this.extendBody = false,
this.extendBodyBehindAppBar = false,
this.drawerScrimColor,
this.drawerEdgeDragWidth,
}) : assert(primary != null),
assert(extendBody != null),
assert(extendBodyBehindAppBar != null),
assert(drawerDragStartBehavior != null),
super(key: key);
4 - ฟังก์ชั่นไม่สามารถใช้ const และวิดเจ็ตคลาสสามารถใช้ const สำหรับตัวสร้างได้ (ที่มีผลต่อประสิทธิภาพของเธรดหลัก)
5 - คุณสามารถสร้างวิดเจ็ตอิสระจำนวนเท่าใดก็ได้โดยใช้คลาสเดียวกัน (อินสแตนซ์ของคลาส / อ็อบเจ็กต์) แต่ฟังก์ชันไม่สามารถสร้างวิดเจ็ตอิสระ (อินสแตนซ์) ได้ แต่สามารถใช้ซ้ำได้
[แต่ละอินสแตนซ์มีตัวแปรอินสแตนซ์ของตัวเองและเป็นอิสระจากวิดเจ็ตอื่น ๆ (อ็อบเจ็กต์) แต่ตัวแปรโลคัลของฟังก์ชันขึ้นอยู่กับการเรียกใช้ฟังก์ชันแต่ละครั้ง * (ซึ่งหมายความว่าเมื่อคุณเปลี่ยนค่าของตัวแปรโลคัลจะมีผลกับส่วนอื่น ๆ ทั้งหมดของ แอปพลิเคชันที่ใช้ฟังก์ชันนี้)]
มีข้อดีหลายอย่างในคลาสมากกว่าฟังก์ชั่น .. (ด้านบนเป็นกรณีการใช้งานเพียงเล็กน้อยเท่านั้น)
🤯ความคิดสุดท้ายของฉัน
ดังนั้นอย่าใช้ฟังก์ชั่นเป็นส่วนประกอบพื้นฐานของแอปพลิเคชันของคุณใช้สำหรับการดำเนินการเท่านั้น มิฉะนั้นจะทำให้เกิดปัญหา unhandable มากเมื่อใบสมัครของคุณได้รับการปรับขนาดได้
- ใช้ฟังก์ชันสำหรับทำงานส่วนเล็ก ๆ
- ใช้คลาสเป็นส่วนประกอบพื้นฐานของแอปพลิเคชัน (การจัดการแอปพลิเคชัน)
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
คุณไม่สามารถวัดคุณภาพของโปรแกรมตามจำนวนข้อความ (หรือบรรทัด) ที่ใช้โดยมัน
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
ขอบคุณที่อ่าน