সরাসরি প্রধান সামগ্রীতে চলে যান

জাভা প্রোগ্রামিংয়ের নতুন চমক: লোকাল ভেরিয়েবল ডিক্লেয়ারেশন এবং ক্লোজিং

Introduction

বন্ধুরা, কেমন আছো সবাই? আজকে আমরা জাভা প্রোগ্রামিংয়ের খুব চমৎকার এবং আধুনিক একটি বিষয় নিয়ে আলোচনা করবো। আমরা যারা কোডিং করি, তারা জানি যে কোড যত ছোট এবং পরিষ্কার (Clean) হয়, কাজ করতে তত সুবিধা হয়। এই ভিডিওতে জাভা ল্যাঙ্গুয়েজ আর্কিটেক্ট ব্রায়ান গ্যাটস (Brian Goetz) আমাদের জানাচ্ছেন যে, জাভাতে এখন ভেরিয়েবল ডিক্লেয়ার করা বা তৈরি করা আরও কত সহজ হতে যাচ্ছে। বিশেষ করে 'Enhanced Local Variable Declarations' বা 'Imperative Pattern Matching' নিয়ে এখানে বিস্তারিত বলা হয়েছে। সহজ কথায়, আগে যে কাজ করতে আমাদের অনেক লাইন কোড লিখতে হতো, এখন তা এক লাইনেই সম্ভব!


১. এনহ্যান্সড লোকাল ভেরিয়েবল ডিক্লেয়ারেশন (Enhanced Local Variable Declarations)

ভিডিওর [42:08] থেকে [46:15] অংশে এই বিষয়টি নিয়ে আলোচনা করা হয়েছে। আগে যখন আমরা কোনো অবজেক্ট বা রেকর্ড থেকে ডাটা বের করতে চাইতাম, তখন আমাদের আলাদা আলাদা করে মেথড কল করতে হতো। কিন্তু নতুন এই ফিচারে আমরা ভেরিয়েবল ডিক্লেয়ার করার সময়ই সরাসরি ডাটাগুলোকে আলাদা করে নিতে পারবো।

ভিডিও রেফারেন্স: [42:58]

সহজ ব্যাখ্যা: মনে করো তোমার কাছে একটা 'Point' নামের রেকর্ড আছে যাতে x এবং y এর মান আছে। আগে আমাদের পুরো পয়েন্টটা নিতে হতো, তারপর point.x() এবং point.y() দিয়ে মান বের করতে হতো। এখন আমরা সরাসরি বলতে পারবো: "এই পয়েন্টের ভেতর থেকে x আর y-কে বের করে দাও"।

কঠিন শব্দের সহজ অর্থ:

  • Enhanced (এনহ্যান্সড): কোনো কিছুর উন্নত বা শক্তিশালী সংস্করণ।

  • Local Variable (লোকাল ভেরিয়েবল): কোডের কোনো নির্দিষ্ট ব্লকের ভেতর (যেমন একটি ফাংশনের ভেতর) যে ভেরিয়েবলগুলো কাজ করে।


২. ইম্পারেটিভ প্যাটার্ন ম্যাচিং (Imperative Pattern Matching)

ব্রায়ান এটাকে 'Imperative Pattern Matching' হিসেবেও উল্লেখ করেছেন। এর মানে হলো, আমরা এখন আর শুধু if বা switch এর ভেতরেই প্যাটার্ন ম্যাচিং সীমাবদ্ধ রাখবো না।

ভিডিও রেফারেন্স: [43:56]

বিস্তারিত আলোচনা: আগে আমাদের লিখতে হতো if (obj instanceof Point p), অর্থাৎ যদি অবজেক্টটি পয়েন্ট হয় তবেই কাজ করো। কিন্তু যদি আমরা নিশ্চিত থাকি যে ডান পাশের ডাটাটি অবশ্যই একটি রেকর্ড, তবে অযথা if ব্যবহার করার দরকার নেই। জাভার নতুন এই আপডেট আমাদের সেই স্বাধীনতা দিচ্ছে।

কোডিং উদাহরণ (সহজ ফরম্যাট):

Java

// ধরি আমাদের একটি রেকর্ড আছে
record Point(int x, int y) {}

// নতুন পদ্ধতিতে এক লাইনে ভেরিয়েবল ডিক্লেয়ার এবং ডাটা বের করা
Point(var x, var y) = getPoint(); 

// এখন আমরা সরাসরি x এবং y ব্যবহার করতে পারবো
System.out.println("X এর মান: " + x);
System.out.println("Y এর মান: " + y); 

এই কোড থেকে আমরা কী পেলাম? আগে আমাদের var p = getPoint(); লিখে তারপর int x = p.x(); লিখতে হতো। এখন সরাসরি Point(var x, var y) লিখে আমরা কোডের লাইন কমিয়ে ফেললাম এবং কোডটি পড়তে অনেক সহজ হয়ে গেল।


৩. কোডের জটিলতা কমানো এবং ক্লিনিং

ভিডিওর এই অংশে বলা হয়েছে যে, তারা প্রায় ১৪ রকমের সিনট্যাক্স (লেখার ধরণ) পরীক্ষা করেছেন যাতে প্রোগ্রামারদের জন্য এটি সবচেয়ে সহজ হয়।

ভিডিও রেফারেন্স: [44:34]

আমার চিন্তাভাবনা: প্রোগ্রামিংয়ের মূল লক্ষ্য হলো কম লিখে বেশি কাজ করা। জাভা আগে অনেক বেশি "Boilerplate code" (একই ধরণের কোড বারবার লেখা) এর জন্য পরিচিত ছিল। কিন্তু এই ফিচারের ফলে জাভা এখন পাইথন বা আধুনিক অন্যান্য ল্যাঙ্গুয়েজের মতোই দ্রুত কোডিং করার সুবিধা দিচ্ছে। একজন বিগিনার হিসেবে তোমার জন্য এটি দারুণ খবর, কারণ তোমাকে এখন অনেক কম টাইপ করতে হবে!

কঠিন শব্দের সহজ অর্থ:

  • Syntax (সিনট্যাক্স): একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ লেখার নির্দিষ্ট নিয়ম বা ব্যাকরণ।

  • Boilerplate (বয়লারপ্লেট): এমন কিছু কোড যা বারবার লিখতে হয় কিন্তু মূল লজিকের সাথে সরাসরি যুক্ত নয়।


Analysis & Final Thinking

ভিডিওর মূল মেসেজ হলো—জাভা দিন দিন আরও বেশি ইউজার-ফ্রেন্ডলি হচ্ছে। ব্রায়ান গ্যাটস বোঝাতে চেয়েছেন যে, প্যাটার্ন ম্যাচিংকে এখন আর শুধু শর্তের (Conditional) মধ্যে আটকে না রেখে সাধারণ কোডিংয়ের অংশ করা হচ্ছে।

বাস্তবসম্মত ধারণা: বাস্তব জীবনে যখন আমরা কোনো বড় প্রজেক্টে কাজ করি, তখন হাজার হাজার লাইনের কোড হ্যান্ডেল করতে হয়। এই নতুন ফিচারটি কোডের "Noise" বা অপ্রয়োজনীয় অংশ কমিয়ে দেবে। এর ফলে অন্য কেউ যখন তোমার কোড পড়বে, সে খুব সহজেই বুঝতে পারবে তুমি কী করতে চেয়েছ।

পরামর্শ: যদি তুমি নতুন জাভা শিখতে চাও, তবে এই ধরণের ছোট কিন্তু শক্তিশালী ফিচারগুলোর দিকে নজর দাও। এটি তোমার কোডিং স্টাইলকে আরও স্মার্ট করে তুলবে। বিকল্প হিসেবে অনেকে এখনও পুরনো স্টাইল ব্যবহার করেন, কিন্তু সময়ের সাথে তাল মিলিয়ে এই 'Enhanced' পদ্ধতিগুলো শিখে রাখা ভালো।


আপনার কি এই টপিক নিয়ে আর কোনো প্রশ্ন আছে? চাইলে যেকোনো কঠিন শব্দ নিয়ে জিজ্ঞেস করতে পারেন!

[

Carrier Classes & Discussing Syntax - Inside Java Podcast 52

Java · 3K views

](http://www.youtube.com/watch?v=b6cXuA84c9g)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

জাভা ফিডব্যাক এবং স্ট্রাকচার্ড কনকারেন্সি: বিবর্তনের গল্প

Introduction এই ভিডিওর নির্দিষ্ট অংশে জাভা ল্যাঙ্গুয়েজ আর্কিটেক্ট ব্রায়ান গোয়েটজ (Brian Goetz) আলোচনা করেছেন কীভাবে জাভার নতুন ফিচারগুলো তৈরি হয় এবং এতে সাধারণ ডেভেলপারদের মতামতের গুরুত্ব কতটুকু। বিশেষ করে Structured Concurrency -এর মতো জটিল ফিচারগুলো কেন বারবার 'Preview' অবস্থায় থাকে এবং কীভাবে কমিউনিটির ফিডব্যাক সেই ফিচারগুলোকে আরও নিখুঁত করতে সাহায্য করে, তা এখানে সহজভাবে বোঝানো হয়েছে। ১. ভালো ফিডব্যাক আসলে কী? ভিডিও রেফারেন্স: [ 34:53 ] ব্রায়ান গোয়েটজ বলছেন যে, জাভা টিম যখন কোনো নতুন ফিচারের খসড়া (Draft) বা প্রস্তাব (JEP) প্রকাশ করে, তখন তারা এমন কিছু জানতে চায় যা তারা নিজেরা আগে ভাবেনি। বিস্তারিত: একজন ডেভেলপার হিসেবে আমরা যখন কোনো নতুন ফিচার দেখি, আমাদের প্রথম প্রতিক্রিয়া হয় সেটার Syntax বা লেখার ধরন নিয়ে। কিন্তু ব্রায়ানের মতে, "এই লেখাটা কেন এমন হলো?" বা "এটা কোটলিন বা স্কালা-র মতো কেন নয়?"—এই ধরনের ফিডব্যাক খুব একটা কাজে আসে না। আসল দামী ফিডব্যাক হলো সেইটা, যা নতুন কোনো বাস্তব সমস্যা (Edge Case) তুলে ধরে। আমার চিন্তা: আপনি যদি কেবল দ...

ইমেজ ক্লাসিফিকেশন মডেল তৈরি ও প্রশিক্ষণ

ভূমিকা এই ভিডিওটিতে আমরা দেখবো কিভাবে একটি ইমেজ ক্লাসিফিকেশন মডেলকে প্রশিক্ষণ (Train) দিতে হয়। সহজ কথায়, আমাদের কাছে থাকা ছবিগুলো থেকে কম্পিউটারকে শেখানো যে, কোন ছবিটিতে কোন ব্যক্তি আছেন। এখানে আমরা ডাটাগুলোকে প্রসেস করা, মডেল নির্বাচন, এবং মডেলটি কতটা নির্ভুলভাবে কাজ করছে তা যাচাই করার প্রক্রিয়া শিখবো। ডাটা প্রিপারেশন বা প্রস্তুতি রেফারেন্স: [ 00:00 ] থেকে [ 01:03 ] মডেলকে প্রশিক্ষণ দেওয়ার আগে ডাটা ঠিকঠাক করা খুব জরুরি। ভিডিওতে দেখানো হয়েছে কিভাবে ছবিগুলো থেকে একটি ডিকশনারি বা তালিকার মতো স্ট্রাকচার তৈরি করা হয়েছে। সহজ ব্যাখ্যা: এখানে ইমেজগুলোকে সংখ্যায় রূপান্তর করা হয়েছে। কম্পিউটার সরাসরি ছবি বোঝে না, তাই সেগুলোকে ছোট ছোট ডাটা পয়েন্টের (Array) তালিকা হিসেবে সাজানো হয়েছে। যাতে মডেল বুঝতে পারে একটি ছবিতে কী কী বৈশিষ্ট্য আছে। মডেল নির্বাচন ও প্রশিক্ষণ (SVM) রেফারেন্স: [ 01:03 ] থেকে [ 04:43 ] এখানে Support Vector Machine (SVM) নামক একটি অ্যালগরিদম ব্যবহার করা হয়েছে। এটি সাধারণত ক্লাসিফিকেশনের কাজে খুব ভালো ফলাফল দেয়। পাইপলাইন (Pipeline): ডাটাকে স্কেল (Scale) করার জন্...