"হাই, অ্যামিগো! আজ আমি আপনাকে কোড শৈলী এবং কোড শৈলীর গুরুত্ব সম্পর্কে বলতে যাচ্ছি।"

"আমি যা সবচেয়ে গুরুত্বপূর্ণ তা দিয়ে শুরু করব।  জাভা কোডটি পড়া সহজ হওয়া উচিত।  কোডের সাধারণ পদ্ধতি হল: কোড একবার লেখা হয় কিন্তু একশ বার পড়া হয়।"

"ধরুন আপনি এবং অন্য 10 জন প্রোগ্রামার একটি অ্যাপ্লিকেশন লিখছেন। আপনি প্রতি তিন মাস অন্তর মধ্যবর্তী রিলিজ সহ, তিন বছর ধরে অ্যাপ্লিকেশনটিতে কাজ করছেন।"

"এটা দীর্ঘ?"

"এটি জাভা, আমার তরুণ ঘাসফড়িং!" কিভাবে একটি এন্টারপ্রাইজ সিস্টেম একটি ডজন সার্ভারে চলমান এবং 6 বছরেরও বেশি সময় ধরে 100 জন মানুষের দ্বারা লেখা? এটাও মাঝে মাঝে হয়।"

"হুও।"

"যাইহোক, প্রধান নিয়ম, কোডের জন্য প্রধান প্রয়োজনীয়তা হল যে এটি অন্যান্য বিকাশকারীদের পড়তে সহজ হতে হবে।"

"অন্যান্য প্রোগ্রামিং ভাষায়, লোকেরা প্রায়শই ছোট ছোট কাজগুলিতে ছোট দল হিসাবে কাজ করে, তাই তাদের আরেকটি প্রধান নিয়ম থাকতে পারে, যেমন 'এটি কাজ করে? চমৎকার'।"

"কয়েক বছর ধরে, আপনার দলের সদস্যরা আপনার লেখা কোডে বেশ কিছু পরিবর্তন আনবে। এবং প্রতিবার তাদের বুঝতে হবে কোডটি কীভাবে কাজ করে।"

"এবং বোধগম্য কোড যা নিখুঁতভাবে কাজ করে তা পরিবর্তন করা কঠিন।  তারা এটি বাতিল করবে এবং এটিকে তাদের নিজস্ব উপায়ে আবার লিখবে।  তাই, এমন কোড লিখুন যা অন্যরা বুঝতে পারে।  আপনি যদি আপনার কোডটি উন্নত করতে পারেন তবে এটিকে উন্নত করুন। যদি এটি উন্নত করা যায়, তাহলে এটি উন্নত করা দরকার !

"আপনি যদি 15 মিনিটের জন্য কোড লেখেন এবং তারপরে এটির উন্নতি করতে দুই ঘন্টা ব্যয় করেন, আপনি এটি ঠিক করছেন। আপনি দলকে কতটা সময় বাঁচাচ্ছেন?"

"আপনার কোড বোঝার জন্য '2 ঘন্টা' x '100 বার যখন লোকেদের এটি বুঝতে হবে' = 200 ঘন্টা।"

"আমি এই পরিসংখ্যানগুলিকে পাতলা বাতাস থেকে টেনে এনেছি, কিন্তু আমি চাই আপনি সমস্যাটি এবং এর সুযোগটি বুঝতে পারেন।  আপনার কোডটি অন্যান্য প্রোগ্রামারদের দ্বারা পড়ার জন্য তৈরি করা হয়েছে।  বাকি সবকিছুই গৌণ।"

"কোডটি কি সঠিকভাবে কাজ করছে না? আমরা এটি ঠিক করব। অপ্টিমাইজ করা হয়নি? আমরা এটি অপ্টিমাইজ করব। নথিভুক্ত নয়? আমরা মন্তব্য যোগ করব।"

" কোডটি কি পড়া কঠিন? এই বাজে কথাটি ট্র্যাশে ফেলে দিন এবং স্ক্র্যাচ থেকে আবার সবকিছু লিখুন! "

"আমি মনে করিনি এটি এত বড় চুক্তি।"

"জাভা একটি নেতৃস্থানীয় প্রোগ্রামিং ভাষা হওয়ার একটি কারণ হল যে সমস্ত জাভা কোড অন্য প্রোগ্রামারদের দ্বারা পড়ার জন্য লেখা হয়।"

"এখন দ্বিতীয় প্রশ্নে যাওয়া যাক: কিভাবে আপনি আপনার কোডটিকে যতটা সম্ভব সহজ করে তুলবেন? "

"কেউ যখন তার মাতৃভাষায় পরিচিত শব্দ বলে তখন যে কেউ বুঝতে পারে। এখানেও একই কথা সত্য। কোডটি পড়া সহজ যখন একজন প্রোগ্রামার সহজেই অনুমান করতে পারে:

ক)  প্রতিটি পদ্ধতি কি করে

খ)  প্রতিটি শ্রেণীর উদ্দেশ্য

গ)  প্রতিটি ভেরিয়েবল ঠিক কি সঞ্চয় করে।

এই সমস্ত নামগুলিতে যোগাযোগ করা হয়: শ্রেণীর নাম, পদ্ধতির নাম এবং পরিবর্তনশীল নাম। উপরন্তু, ভেরিয়েবলের নামকরণের ক্ষেত্রে শৈলী আছে। এবং কোড শৈলী আছে।"

"আমি শুনতে প্রস্তুত।"

" প্রোগ্রামিং ভাল ইংরেজির উপর ভিত্তি করে!  একটি ভাল-লিখিত প্রোগ্রাম সাধারণ প্রযুক্তিগত ডকুমেন্টেশনের মতো পড়ে। "

" আসুন নাম দিয়ে শুরু করা যাক। "

"একটি পদ্ধতির নাম সংক্ষিপ্তভাবে বর্ণনা করা উচিত যে পদ্ধতিটি কী করে। তারপর কোডটি সহজ গদ্যের মতো পড়া যেতে পারে।"

কার্যক্রম
public String downloadPhoto(String url)
{
 String resultFileName = TempHelper.createTempFileName();

 Downloader downloader = new SingleFileDownloader(new Url(url));
 downloader.setResultFileName(resultFileName)
 downloader.start();
 while(downloader.isDone())
 {
  Thread.sleep(1000);
 }

 if (downloader.hasError())
  return null;

 return resultFileName;
}

"এই ধরনের একটি প্রোগ্রাম কিভাবে পড়া হয়।"

লাইন 1.

"পদ্ধতিটিকে 'ডাউনলোডফটো' বলা হয়। মনে হচ্ছে এটি ইন্টারনেট থেকে একটি ফটো ফাইল ডাউনলোড করে। এটি কোথায় ডাউনলোড হয়? আমরা এখনও জানি না। কোথা থেকে? পদ্ধতিটির url নামে একটি প্যারামিটার রয়েছে — সম্ভবত এটির URL ডাউনলোড।"

লাইন 3।

"ভেরিয়েবল ফলাফল ফাইলনাম ঘোষণা করা হয় এবং TempHelper.createTempFileName(); দ্বারা একটি মান বরাদ্দ করা হয়।"

সুতরাং এটি অবশ্যই ফাইলটির স্থানীয় পথ হতে হবে যেখানে আমরা আমাদের ডাউনলোড করা ফাইলটি সংরক্ষণ করব।

"'TempHelper' নামটি আমাদের কিছু বলে না। 'Helper' প্রত্যয়টি বলে যে এটি এমন এক ধরনের ইউটিলিটি ক্লাস যাতে গুরুত্বপূর্ণ ব্যবসায়িক যুক্তি থাকে না, বরং এটি প্রায়শই ঘটে যাওয়া রুটিন কাজগুলিকে সহজ করতে ব্যবহৃত হয়।"

"মেথডের নাম 'createTempFileName' নির্দেশ করে যে এই পদ্ধতিটি একটি অস্থায়ী ফাইল (টেম্প ফাইল) এর নাম তৈরি করে এবং ফেরত দেয়। একটি টেম্প ফাইল হল একটি অস্থায়ী ফাইল যা কিছু সময়ের জন্য তৈরি করা হয় এবং তারপর সাধারণত প্রোগ্রামটি বন্ধ হওয়ার সময় মুছে ফেলা হয়৷ "

লাইন 5।

"একটি SingleFileDownloader অবজেক্ট তৈরি করা হয়েছে এবং পরিবর্তনশীল ডাউনলোডারকে বরাদ্দ করা হয়েছে।"

এটি সেই বস্তু যা ইন্টারনেট থেকে আমাদের ফাইল ডাউনলোড করবে।

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

লাইন 6।

"আমরা ডাউনলোডার অবজেক্টের resultFileName প্রপার্টি পরিবর্তনশীল resultFileName-এর মানের সমান সেট করি। অন্য কথায়, আমরা লোডারকে বলে দিই যে ডাউনলোড করা ফাইলটি কোথায় সেভ করতে হবে। আপনি যেমনটি আশা করবেন। তাই, আমরা মূলত কোডের পূর্বাভাস দিচ্ছি!"

লাইন 7।

"আমরা স্টার্ট মেথডকে বলি। ডাউনলোড শুরু হয়। এটি বোধগম্য হয়। আমি ভাবছি ডাউনলোড কিভাবে হয়: অংশে, একটি আলাদা থ্রেডে, বা পুরো জিনিসটি এখানে? আমরা যদি পুরো জিনিসটি এখানে ডাউনলোড করি তবে এটি একটি সময় নিতে পারে দীর্ঘ সময় এবং ফলাফল আছে।"

লাইন 8-11।

"আহ। এখানে আমরা স্ট্যান্ডার্ড লুপ দেখছি যে কেউ ডাউনলোড শেষ হওয়ার জন্য অপেক্ষা করছে। ডাউনলোডার অবজেক্টের একটি সম্পন্ন প্রপার্টি রয়েছে, যা isDone() পদ্ধতি দ্বারা ফেরত দেওয়া হয়। কারণ পদ্ধতিটিকে getDone() এর পরিবর্তে isDone() বলা হয়। ), আমরা উপসংহারে পৌঁছেছি যে সম্পন্ন ভেরিয়েবলটি একটি বুলিয়ান বা সম্ভবত একটি বুলিয়ান।"

লাইন 13-14।

"ডাউনলোডের সময় যদি একটি ত্রুটি ঘটে, তাহলে ডাউনলোডফটো পদ্ধতিটি শূন্য করে দেয়। এটি ভাল যে এটি ত্রুটিগুলি পরিচালনা করে। এটি খারাপ যে এটি কেবল শূন্য ফেরত দেয়—এটি ত্রুটিটি কী তা পরিষ্কার নয়। এর বিষয়ে তথ্য সহ একটি ব্যতিক্রম নিক্ষেপ করা ভাল হবে ভূল."

লাইন 16।

"আমরা স্থানীয় ফাইলে পাথ ফিরিয়ে দিই যেটিতে ডাউনলোড করা ফাইল রয়েছে।"

"ওহ!"

"এই প্রোগ্রামের কোডটি এটিকে সম্পূর্ণরূপে পরিষ্কার করে দেয় যে এটি কী করে। প্রোগ্রামটি কীভাবে সংগঠিত হয় এবং আমরা অন্য কোন ক্লাস/পদ্ধতিগুলি খুঁজে পাব সে সম্পর্কে আপনি অনুমান করতে পারেন।"

"এখন আমি বুঝি নামগুলো কতটা গুরুত্বপূর্ণ।"

"নামগুলি সম্পর্কে আরও। আপনি প্রায়শই অনুমান করতে পারেন যে কোনও বস্তু/শ্রেণীতে কোন পদ্ধতি রয়েছে। উদাহরণস্বরূপ, যদি একটি বস্তু একটি সংগ্রহ হয়, তবে উপাদানগুলির সংখ্যা পেতে সম্ভবত এটির একটি আকার() বা গণনা() পদ্ধতি থাকবে। এছাড়াও , এটিতে সম্ভবত একটি add() বা insert() পদ্ধতি থাকবে। get/getItem/getElement পদ্ধতি ব্যবহার করে সংগ্রহের ক্লাস থেকে উপাদানগুলি পুনরুদ্ধার করা হয়।"

"যদি একটি ভেরিয়েবলকে i, j, বা k বলা হয়, তাহলে এটি সম্ভবত একটি লুপ কাউন্টার।"

"যদি একটি ভেরিয়েবলকে m বা n বলা হয়, তাহলে এটি সম্ভবত একটি অ্যারে/সংগ্রহের আকার।"

"যদি একটি ভেরিয়েবলকে নাম বলা হয়, তবে এটি সম্ভবত একটি স্ট্রিং যাতে কারো নাম থাকে।"

"যদি একটি ক্লাসকে FileInputStream বলা হয়, তাহলে এটি একই সাথে একটি ফাইল এবং একটি ইনপুট স্ট্রীম।"

"আপনি যত বেশি কোড দেখবেন, অন্যের কোড পড়া তত সহজ।"

"কিন্তু কখনও কখনও এমন কোড আছে যা পড়া খুব কঠিন। এই ক্ষেত্রে, এখানে একটি খুব ব্যবহারিক উপদেশ রয়েছে:"

টিপ
কোড লিখুন যেন এটি একটি হিংস্র সাইকোপ্যাথ দ্বারা রক্ষণাবেক্ষণ করা হবে যিনি জানেন আপনি কোথায় থাকেন

"এটি একই সাথে মজার এবং মজার নয়।"

"এখন ভেরিয়েবলের নাম দেওয়ার জন্য ব্যবহৃত শৈলী সম্পর্কে কিছুটা।"

"জাভা বিকাশকারীরা ভেরিয়েবল এবং পদ্ধতিতে অত্যন্ত তথ্যপূর্ণ নাম দেওয়ার চেষ্টা করে। ফলস্বরূপ, নামগুলি প্রায়শই বেশ কয়েকটি শব্দ নিয়ে গঠিত। যৌগিক নামের ক্যাপিটালাইজেশনের জন্য 4টি শৈলী রয়েছে।"

1) ছোট হাতের  - সমস্ত শব্দ ছোট হাতের অক্ষর দিয়ে লেখা হয়। উদাহরণ স্বরূপ:

'গ্রিন হাউস'  পরিণত হয় 'গ্রিনহাউস'

'হলিউড গার্ল' '  হলিউডগার্ল  '

এই শৈলী প্যাকেজ নামের জন্য ব্যবহৃত হয়.

2) বড় হাতের  - সমস্ত শব্দ বড় হাতের অক্ষর দিয়ে লেখা হয় এবং একটি আন্ডারস্কোর দ্বারা পৃথক করা হয়। উদাহরণ স্বরূপ:

'সর্বোচ্চ মান' MAX_VALUE  হয়ে যায়

'বিড়ালের সংখ্যা'  হয়ে যায় CAT_COUNT

"এই শৈলীটি ধ্রুবকের নামের জন্য ব্যবহৃত হয় (চূড়ান্ত স্ট্যাটিক ক্ষেত্র)।"

3) ক্যামেলকেস  - প্রতিটি শব্দের প্রথম অক্ষরটি বড় হাতের ব্যতীত সমস্ত শব্দ ছোট হাতের অক্ষর দিয়ে লেখা হয়। উদাহরণ স্বরূপ:

'গ্রিন হাউস'  হয়ে গেল  'গ্রিনহাউস'

'হলিউড গার্ল' '  হলিউডগার্ল '

এই শৈলীটি ক্লাস এবং ইন্টারফেসের নামের জন্য ব্যবহৃত হয়।

4) লোয়ার ক্যামেলকেস (মিশ্র কেস)  – সমস্ত শব্দ ছোট হাতের অক্ষর ব্যবহার করে লেখা হয়, প্রথমটি বড় হাতের ছাড়া প্রতিটি শব্দের প্রথম অক্ষর ছাড়া। উদাহরণ স্বরূপ:

'প্রস্থ পান' 'গেটউইথ' হয়ে যায়

'গেট হলিউড গার্ল নেম' হয়ে গেল  'গেটহলিউড গার্লনেম'

"এই শৈলীটি ভেরিয়েবল এবং পদ্ধতির নামের জন্য ব্যবহৃত হয়।"

"সুতরাং, খুব বেশি নিয়ম নেই।"

1)  সবকিছু লোয়ার ক্যামেলকেসে লেখা আছে।

2)  ক্লাস এবং ইন্টারফেসের নাম সবসময় বড় করা হয়।

3)  প্যাকেজের নাম সবসময় ছোট হাতের হয়।

4)  ধ্রুবক সবসময় বড় হাতের হয়।

"এখানে কয়েকটি সূক্ষ্মতা রয়েছে, তবে সাধারণভাবে এটি এমনই।"

"এখন পদ্ধতি সম্পর্কে।  " পদ্ধতির নাম প্রায় সবসময় একটি ক্রিয়া দিয়ে শুরু হয়! 'গণনা' একটি পদ্ধতির জন্য একটি খারাপ নাম। এটাকে getCount() বলাই ভালো। একটি পদ্ধতি বস্তুর উপর কিছু ক্রিয়া সম্পাদন করে:  startDownload , interrupt  , sleep  , loadPirateMusic ।"

"যেমন আপনি ইতিমধ্যেই জানেন, একটি বস্তুর বৈশিষ্ট্য/ক্ষেত্রগুলির সাথে কাজ করার জন্য গেটার এবং সেটার রয়েছে:  getName / setName , getCount / setCount , ইত্যাদি।"

"একমাত্র ব্যতিক্রম হল বুলিয়ানদের জন্য। বুলিয়ানদের জন্য, গেটার নাম 'is' ব্যবহার করে, 'get' নয়, যেমন isDone, isEmpty। এইভাবে এটি সাধারণ বক্তৃতার কাছাকাছি।"

"দিনে ৮ ঘণ্টার পরিবর্তে দুই ঘণ্টা কাজ করলে কেমন হয়? প্রলুব্ধ?"

"হ্যাঁ!"

"আপনার যেমন হওয়া উচিত। একজন জুনিয়র জাভা ডেভেলপারের জন্য, মৌলিক প্রয়োজনীয়তা হল জাভা, অর্থাৎ জাভা কোরের মূল বিষয়গুলির একটি চমৎকার বোঝা।"

"আমার আরেকটি প্রশ্ন আছে। কেন আমাদের উপাদানের সংখ্যা পাওয়ার জন্য এই ভিন্ন পদ্ধতি আছে?"

ক্লাস উপাদানের সংখ্যা পাওয়ার জন্য পদ্ধতি/সম্পত্তি
স্ট্রিং দৈর্ঘ্য ()
অ্যারে দৈর্ঘ্য
অ্যারেলিস্ট আকার ()
থ্রেডগ্রুপ সক্রিয় গণনা ()

"প্রথমত, জাভা উদ্ভাবিত হয়েছিল 20 বছরেরও বেশি আগে, সেটকাউন্ট / গেটকাউন্টের মতো প্রয়োজনীয়তাগুলি প্রতিষ্ঠিত হওয়ার আগে, এবং সি ভাষা থেকে 'যতটা সম্ভব সংক্ষিপ্ত করতে' একটি সাধারণ পদ্ধতি নেওয়া হয়েছিল।"

"দ্বিতীয়, শব্দার্থবিদ্যা এখানে একটি ভূমিকা পালন করে। একটি অ্যারের সম্পর্কে কথা বলার সময়, আমরা তার দৈর্ঘ্যের কথা বলি। একটি সংগ্রহের কথা বলার সময়, আমরা এর আকারের কথা বলি।"

"কি একটি আকর্ষণীয় পাঠ।"

"আমি আপনাকে আরও বলতে চাই, কিন্তু আমি ভয় পাচ্ছি যে আপনি একবারে এটি সব মনে রাখবেন না। এটি ছোট পরিবেশে আপনার কাছে ডিশ করা ভাল।"

"কিন্তু আমি কোঁকড়া বন্ধনীর ব্যবহার সম্পর্কিত শৈলীতে স্পর্শ করতে চাই: {}। দুটি পদ্ধতি আছে:"

1)  বন্ধনী প্রতিবার একটি নতুন লাইনে যায়

2)  খোলার বন্ধনীটি আগের লাইনের শেষে যায়, যখন বন্ধ বন্ধনীটি একটি নতুন লাইনে যায়। এই শৈলীকে 'মিশরীয় ধনুর্বন্ধনী' বলা হয়।

"সত্যি, আপনি কীভাবে কোড করবেন তা বেছে নিতে পারেন। অনেক লোক একই লাইনে একটি খোলার বন্ধনী ব্যবহার করে। অনেকে এটিকে একটি নতুন লাইনে রাখে। এটি ডিমের কোন প্রান্তটি ভাঙতে হবে তা নিয়ে বিতর্কের মতো: ছোট শেষ না বড় শেষ."

" আপনি যে প্রজেক্টে কাজ করছেন সেই প্রজেক্টে ব্যবহার করা যাই হোক না কেন স্টাইল ব্যবহার করার জন্য আমি সুপারিশ করতে পারি । আপনার পছন্দের শৈলীর সাথে মেলে অন্য কারো কোড পরিবর্তন করবেন না।  লোকেরা অসম্পূর্ণ। আমি আপনাকে ডাক্তার বিলাবো হিসাবে বলছি। "

"আকর্ষণীয় পাঠের জন্য ধন্যবাদ, বিলাবো। আপনি যা বলেছেন তা আমি প্রতিফলিত করতে যাব।"