কোন ফাংশনগুলি করে এবং কোন শ্রেণিতে কী করে তার মধ্যে একটি বড় পার্থক্য ছিল।
আসুন আমি এটি খুব স্ক্র্যাচ থেকে ব্যাখ্যা করব 🙂 (কেবলমাত্র আবশ্যক সম্পর্কে)
প্রোগ্রামিং ইতিহাস, আমরা সবাই জানি স্ট্রেট বেসিক কমান্ড (যেমন- অ্যাসেম্বলি) দিয়ে শুরু করেছি।
পরবর্তী স্ট্রাকচার্ড প্রোগ্রামিং ফ্লো কন্ট্রোল নিয়ে আসে (উদা:: যদি, স্যুইচ করুন, যখন, ইত্যাদি) এই দৃষ্টান্তটি প্রোগ্রামারগুলিকে কার্যকরভাবে প্রোগ্রামের প্রবাহ নিয়ন্ত্রণ করতে এবং লুপ দ্বারা কোড লাইনগুলির সংক্ষিপ্তকরণের সংখ্যা দেয়।
পরবর্তী কার্যনির্বাহী প্রোগ্রামিং এসেছিল এবং প্রক্রিয়াগুলিতে কোন দলকে নির্দেশ দেয় (ফানকিশন)। এটি প্রোগ্রামারদের জন্য দুটি বড় সুবিধা দিয়েছে।
1. গোষ্ঠী বিবৃতি (অপারেশন) পৃথক ব্লক।
২.এই ব্লকগুলি পুনরায় ব্যবহার করতে পারেন functions
কিন্তু সব পারাদিগ্ম্স উপরে হয়নি না অ্যাপ্লিকেশনের ম্যানেজিং জন্য একটি সমাধান দিতে। পদ্ধতিগত প্রোগ্রামিং কেবলমাত্র ছোট স্কেল অ্যাপ্লিকেশনগুলির জন্যও ব্যবহার করতে পারে। এটি বৃহত্তর ওয়েব অ্যাপ্লিকেশনগুলির বিকাশের জন্য ব্যবহার করা যাবে না (যেমন: ব্যাংকিং, গুগল, ইউটিউব, ফেসবুক, স্ট্যাকওভারফ্লো ইত্যাদি), অ্যান্ড্রয়েড এসডিকে, ফ্লাটার এসডিকে এবং আরও অনেক কিছুর ফ্রেমওয়ার্ক তৈরি করতে পারে না ......
তাই ইঞ্জিনিয়াররা প্রোগ্রামগুলি সঠিকভাবে পরিচালনা করতে আরও অনেক গবেষণা করে।
অবশেষে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংটি যে কোনও স্কেল অ্যাপ্লিকেশন পরিচালনার জন্য সমস্ত সমাধান নিয়ে আসে (
ওপতে সমস্ত অ্যাপ্লিকেশন হ'ল অবজেক্টের চারপাশে নির্মিত হয় t এর অর্থ হল অ্যাপ্লিকেশনটি এই বিষয়গুলির একটি সংগ্রহ।
সুতরাং অবজেক্টগুলি যে কোনও অ্যাপ্লিকেশনের জন্য প্রাথমিক বিল্ডিং।
শ্রেণি (রানটাইম এ অবজেক্ট) গ্রুপ ডেটা এবং সেই ভেরিয়েবলগুলির সাথে সম্পর্কিত ফাংশন (ডেটা)। সুতরাং তথ্য রচনা এবং তাদের সম্পর্কিত ক্রিয়াকলাপ আপত্তি।
[এখানে আমি ওওপ সম্পর্কে ব্যাখ্যা করব না]
Kআক নাউ আসুন বিড়বিড় করে কাঠামোয় আসুন 👈👈👈
-ডার্ট প্রক্রিয়াজাতীয় এবং ওও উভয় সমর্থন করে তবে, বিড়বিড় করে কাঠামো সম্পূর্ণরূপে ক্লাস (ওওপ) ব্যবহার করে তৈরি করে। (কারণ বৃহত পরিচালনাযোগ্য কাঠামো প্রক্রিয়াগত ব্যবহার করে তৈরি করতে পারে না)
এখানে আমি উইজেটগুলি তৈরি করার জন্য ক্লাসের পরিবর্তে ফাংশনগুলি ব্যবহার করার কারণগুলির তালিকা তৈরি করব 👇👇👇
1 - বেশিরভাগ সময় বিল্ডিং মেথড (চাইল্ড উইজেট) সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস ফাংশনের কল নম্বর।
উদা:
- নেটওয়ার্ক ইমেজ ডাউনলোড করতে
- ব্যবহারকারীর কাছ থেকে ইনপুট পান ইত্যাদি
সুতরাং বিল্ড পদ্ধতিতে পৃথক শ্রেণীর উইজেট রাখা দরকার (কারণ বিল্ড দ্বারা কল করা সমস্ত অন্যান্য পদ্ধতি () পদ্ধতিটি একটি শ্রেণিতে রাখতে পারে)
2 - উইজেট শ্রেণীর ব্যবহার করে আপনি বার বার একই কোড না লিখে অন্য শ্রেণীর সংখ্যা তৈরি করতে পারেন (** উত্তরাধিকারের ব্যবহার ** (প্রসারিত))।
এবং উত্তরাধিকার (প্রসারিত) এবং পলিমারফিজম (ওভাররাইড) ব্যবহার করে আপনি নিজস্ব কাস্টম শ্রেণি তৈরি করতে পারেন। (নীচে উদাহরণস্বরূপ, সেখানে আমি মেটেরিয়ালপেজরোট বাড়িয়ে অ্যানিমেশনটি কাস্টমাইজ করব (ওভাররাইড) করব (কারণ এর ডিফল্ট রূপান্তরটি আমি কাস্টমাইজ করতে চাই) 👇
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 - ফাংশনগুলি তাদের পরামিতিগুলির জন্য শর্ত যোগ করতে পারে না, তবে শ্রেণি উইজেটের কনস্ট্রাক্টর ব্যবহার করে আপনি এটি করতে পারেন।
নীচে কোড উদাহরণের নীচে - (এই বৈশিষ্ট্যটি ফ্রেমওয়ার্ক উইজেটগুলি দ্বারা প্রচুর পরিমাণে ব্যবহৃত হয়)
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 - ফাংশনগুলি কনস্ট ব্যবহার করতে পারে না এবং শ্রেণি উইজেট তাদের নির্মাতাদের জন্য কনস্ট ব্যবহার করতে পারে। (এটি মূল থ্রেডের কার্যকারিতা প্রভাবিত করে)
5 - আপনি একই শ্রেণীর ব্যবহার করে যে কোনও স্বতন্ত্র উইজেট তৈরি করতে পারেন (শ্রেণি / বস্তুর উদাহরণ) তবে ফাংশন স্বতন্ত্র উইজেট তৈরি করতে পারে না (উদাহরণস্বরূপ), তবে পুনরায় ব্যবহার করতে পারে using
[প্রতিটি উদাহরণের নিজস্ব উদাহরণ পরিবর্তনশীল রয়েছে এবং এটি অন্যান্য উইজেট (বস্তু) থেকে সম্পূর্ণ স্বতন্ত্র, তবে ফাংশনের স্থানীয় পরিবর্তনশীল প্রতিটি ফাংশন কলের উপর নির্ভরশীল * (যার অর্থ আপনি যখন স্থানীয় ভেরিয়েবলের মান পরিবর্তন করেন এটি অন্যান্য সমস্ত অংশের জন্য প্রভাবিত করে অ্যাপ্লিকেশন যা এই ফাংশনটি ব্যবহার করে)]
ক্লাস ওভার ফাংশনে অনেক সুবিধা ছিল .. (উপরের কয়েকটি ব্যবহারের ক্ষেত্রে কেবলমাত্র)
আমার চূড়ান্ত চিন্তা
সুতরাং আপনার অ্যাপ্লিকেশনটির বিল্ডিং ব্লক হিসাবে ফাংশনগুলি ব্যবহার করবেন না, কেবল অপারেশনগুলি করার জন্য সেগুলি ব্যবহার করুন। অন্যথায় এটি যখন আপনার অ্যাপ্লিকেশনটি স্কেলযোগ্য হয় তখন এটি অবিরাম সমস্যার সৃষ্টি করে ।
- কাজের ছোট অংশ করার জন্য ফাংশন ব্যবহার করুন
- অ্যাপ্লিকেশনটির বিল্ডিং ব্লক হিসাবে শ্রেণি ব্যবহার করুন (অ্যাপ্লিকেশন পরিচালনা করা)
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
আপনি পরিসংখ্যান সংখ্যার (বা লাইন) দ্বারা প্রোগ্রামের মান পরিমাপ করতে পারবেন না এটির মাধ্যমে
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
পড়ার জন্য ধন্যবাদ