Vivasoft-logo

নামকরণের নিয়মসমূহ

এখন আমরা প্রোগ্রামিং এর মৌলিক বিষয়গুলোর ক্ষেত্রে নামকরণের নিয়মগুলো সম্পর্কে জানব।

ভ্যারিয়েবল

  • ভ্যারিয়েবলের নামের ক্ষেত্রে “ক্যামেল কেস” ব্যবহৃত হয়।
  • ভ্যারিয়েবলের নাম অবশ্যই অর্থবহ হওয়া উচিত।
  • ভ্যারিয়েবলে আন্ডারস্কোর ( _ ) এবং ডলার সাইন ($) ব্যবহার করার জন্য অনুমোদিত হলেও, নেমিং কনভেনশানে না থাকার কারণে, এগুলো ব্যবহার করা উচিত নয়।
  • এক অক্ষরের ভ্যারিয়েবল ব্যবহার করা উচিত নয়। তবে অস্থায়ী “throwaway” ভ্যারিয়েবলের ক্ষেত্রে যেমনঃ i, j, k ইত্যাদি ব্যবহার করা যেতে পারে।

উদাহরণঃ

// Developer-1
int x = 20;
// Developer -2
int age3 = 20;
// Developer-3
int aliceAge = 20;
int index = 2;
string text; //
double length = 3.23D;
char charact

ক্লাস

  • ক্লাসের ক্ষেত্রে “প্যাসকেল কেস” ব্যবহৃত হয়।
  • ক্লাসের নাম অবশ্যই সহজ, বর্ণণামূলক এবং “Noun” হওয়া উচিত।
  • সংক্ষিপ্ত রূপ বা শব্দ ক্লাসের নামে ব্যবহার করা উচিত নয়।

তবে যদি সে সংক্ষিপ্তরূপ অধিক ব্যবহৃত হয়, সেক্ষেত্রে সেই সংক্ষিপ্তরুপ ব্যবহার করা যেতে পারে। যেমনঃ

  • জাভা : HTML, URL, JSON ইত্যাদি
  • সি# : Html, Url, Api, Uuid ইত্যাদি

উদাহরণঃ

public class Main {
  int id = 100;
  public static void main(String[] args) {
    Main myObject = new Main(); // Creating an object
    myObject.id = 1; // id is now 1
    System.out.println(myObject.id);
  }
}
class Student {
  string name = “John”;
  static void Main(string[] args) {
    Student student = new Student(); // Creating an object
    Console.WriteLine(student.name);
  }
}

মেথড

  • মেথডের নাম “Verb” হওয়া উচিত।
  • জাভা : মেথডের নাম, প্যারামিটার, আর্গুমেন্ট পাঠানোর ক্ষেত্রে “ক্যামেল কেস” ব্যবহৃত হয়।
  • সি# : মেথডের নামের ক্ষেত্রে “প্যাসকেল কেস” ব্যবহৃত হয় ; মেথডের প্যারামিটার এবং আর্গুমেন্ট পাঠানোর ক্ষেত্রে “ক্যামেল কেস” ব্যবহৃত হয়।

উদাহরণঃ

static void printName(String name) {
  System.out.println(name);
}
static void PrintName(string name) {
  Console.WriteLine(name);
}

প্যাকেজ

জাভা :

  • প্যাকেজের নাম সর্বদা ছোট হাতের অক্ষরে লিখতে হয়।
  • একাধিক শব্দ থাকলে সেক্ষেত্রে প্রতি শব্দের মাঝে ডট ( . ) দিয়ে প্যাকেজের নামকরণ করা হয়
  • কোম্পানিগুলো তাদের প্যাকেজ নাম শুরু করার ক্ষেত্রে তাদের ডোমেইন নামের বিপরীতভাবে নামকরণ করে। উদাহরণস্বরূপ, example.com-এ কেউ mypackage নামের একটি প্যাকেজে তৈরি করলে তার জন্য প্যাকেজের নামটি হবে com.example.mypackage।
  • ব্যতিক্রম
  • অনেকক্ষেত্রে ইন্টারনেট ডোমেইন নামটি প্যাকেজের একটি সঠিক নাম নাও হতে পারে। নিচের টেবিলটি লক্ষ্য করি।
ডোমেইন নামপ্যাকেজ নামমন্তব্য
my-package.example.orgorg.example.my_packageহাইফেন ( – ) বা অন্যান্য স্পেশাল ক্যারেক্টার এর ক্ষেত্রে সেগুলোর স্থানে আন্ডারস্কোর ( _ ) ব্যবহার করতে হবে।
mypackageexampleintint_.exmaple.mypackageজাভার কীওয়ার্ড দিয়ে ডোমেইন নাম শুরু হলে সেক্ষেত্রে প্যাকেজ নামে ওই কীওয়ার্ডের পরে আন্ডারস্কোর ( _ ) দিতে হবে।
1mypackage.exampleedu.example._1mypaডিজিট অন্যান্য
.educkageঅনুনোমোদিত ক্যারেক্টার ডোমেইন নামে ব্যবহৃত হলে, সেক্ষেত্রে সেই ডিজিট বা ক্যারেক্টারের পূর্বে আন্ডারস্কোর ( _ ) ব্যবহার করতে হবে।

উদাহরণঃ

package com.example.mypackage;
public class Main {
  // Some Code
}

নেমস্পেস

সি#:

  • নেমস্পেস এর ক্ষেত্রে “প্যাসকেল কেস” ব্যবহৃত হয়।
  • একাধিক শব্দের ক্ষেত্রে মাঝে ডট ( . ) দিয়ে আলাদা করা হয়।
  • সি#-তে প্যাকেজ নামে কিছু না থাকলেও, প্যাকেজ এর মত একই উদ্দেশ্যে ব্যবহার করা হয় “namespace”। নেমস্পেস মূলত একটি কীওয়ার্ড যা একটি স্কোপ (scope) তৈরি করে, যা অনেকগুলো রিলেটেড অবজেক্টকে ধারণ করে। কোডবেজে একাধিক লজিক্যাল গ্রুপের মধ্যকার কনফিউশান এড়াতে এবং বিভিন্ন কোড এলিমেন্টকে সুশৃঙ্খল রাখতে ব্যবহৃত হয়।
  • একটি নেমস্পেস এর মধ্যে একই নামের একাধিক ক্লাস থাকতে পারে না।
  • দুটি ভিন্ন নামের নেমস্পেসের ক্ষেত্রে, দুটিতেই একই নামের ক্লাস থাকতে পারে। সাধারণত প্রতিটি ফোল্ডারের একটা namespace থাকে, যা কোডবেজেরhierarchy অনুযায়ী ডট দিয়ে নাম করন হয়।

নেমস্পেস এর সাধারণ রুল হলঃ
(|)[.][.]
যেমনঃ

  • Pihr.Invoice.Report
  • Pihr.Invoice.Generate

(|)[.][.]
যেমনঃ

  • Microsoft.Office.PowerPoint,
  • Vivasoft.Pihr.Invoice.Reports

Vivasoft – company name
Pihr – product name
Invoice – feature or services
Reports – specific section in reports

  • System.Collections ইত্যাদি।

নেমস্পেস এর নাম এবং এর ভেতরকার ক্লাসের নাম একই হওয়া উচিত নয়।

উদাহরণঃ

using System;
namespace First {
   class Hello {
      public void func() {
         // Some Code
      }
   }
  partial class Vivasoft {
      public void GetDhakaOfficeEmployees() {
          …
      }
   }
  // partial class same name possible
  partial class Vivasoft {
      public void GetRajshahiOfficeEmployees() {
          …
      }
   }
}
namespace Second {
   class Hello {
      public void func() {
         // Some Code
      }
   }
}
class Test {
   static void Main(string[] args) {
      First.Hello firstHello = new First.Hello();
      Second.Hello secondHello = new Second.Hello();
      firstHello.func();
      secondHello.func();
   }
}

কনস্ট্যান্ট

জাভা:

  • কনস্ট্যান্টের ক্ষেত্রে সর্বদা “স্ক্রিমিং স্নেইক কেস” ব্যবহৃত হয়।

সি#:

  • কনস্ট্যান্টের ক্ষেত্রে সর্বদা “প্যাসকেল কেস” ব্যবহৃত হয়।

উদাহরণঃ

static final int MIN_WIDTH = 4;
static final string APP_NAME = “inventory”;
public const string StudentType = “Regular”;
public const int MaxCount  = 12;

ইন্টারফেস

জাভা:

  • ক্লাসের নামের মতই ইন্টারফেসের ক্ষেত্রে নাম “প্যাসকেল কেস” হয়।
  • ইন্টারফেসের নামের ক্ষেত্রে “Adjective” ব্যবহৃত হয়। মূলত, ইন্টারফেসকে ইমপ্লিমেন্ট করার মাধ্যমে ওই ক্লাসটি ইন্টারফেস এর সক্ষমতা Additional Capability বা Quality গুলো অর্জন করে। একারণেই ইন্টারফেস এর ক্ষেত্রে “Adjective” ব্যবহার করা উচিত। যেমনঃ Serializable, Printable, Cloneable, Iterable ইত্যাদি।

সি#:

  • ক্লাসের নামের মতই ইন্টারফেসের ক্ষেত্রে নাম “প্যাসকেল কেস” হয়। তবে, ইন্টারফেসের নামের আগে “I” যুক্ত হয়। যেমনঃ IShape, IGroupable ইত্যাদি

ব্যতিক্রম:

  • অনেকক্ষেত্রেই, বিভিন্ন প্রজেক্টে “Adjective” এর পরিবর্তে ইন্টারফেস হিসেবে “Noun” ব্যবহার করা হয়। যদিও best practice convention অনুযায়ী এটি উচিত নয়, তবে অনেক প্রজেক্টেই এভাবে ইন্টারফেস ব্যবহার করা হয়ে থাকে।

উদাহরণঃ

interface Identifiable {
    void identity();
}
class User implements Identifiable {
    public void identity() {
      // Some Code
    }
}
class Main {
  public static void main(String[] args) {
    User user = new User();
    user.identity();
  }
}
interface AuthService {
    void auth(int userId);
}
class AuthServiceImpl implements AuthService {
    public void auth(int userId) {
        // Some Code
    }
}
class Main {
    public static void main(String[] args) {
        AuthService authService = new AuthServiceImpl();
        authService.auth(123);
    }
}
interface IIdentifiable {
    string GetIdentity();
}
class User : IIdentifiable {
  public string GetIdentity() {
     // Some Code
   }
}

এনাম ক্লাস (enum class)

  • সাধারণ ক্লাসের মত এনাম ( enumeratic ) ক্লাসের নাম “প্যাসকেল কেস” এ হয়।
  • এনাম ক্লাসগুলো enum কীওয়ার্ড দ্বারা শুরু হয়।
  • জাভা : এনাম ক্লাসের কনস্ট্যান্টগুলো সাধারণত “স্ক্রিমিং স্নেইক কেস” হয়।
  • সি# : এনাম ক্লাসের আইটেমগুলো সাধারণত “প্যাসকেল কেস” হয়।

উদাহরণঃ

enum Role {
  SUPER_ADMIN,
  ADMIN,
  USER
}
“`C# (সি#)
enum Level {
  Low,
  Medium,
  High
}

কমেন্ট

সিঙ্গেল কমেন্ট:

  • এধরনের কমেন্ট সাধারণত // দ্বারা শুরু হয়। নির্দিষ্ট একটি লাইনকে কমেন্ট করার জন্য এটি ব্যবহৃত হয়।
  • কমেন্ট শুরু করার পর একটি হোয়াইটস্পেস দিয়ে এরপর কমেন্টের লাইনগুলি লিখা উচিত।

মাল্টি-লাইন কমেন্ট :

  • এধরনের কমেন্ট সাধারণত /* দিয়ে শুরু হয় এবং */ দ্বারা শেষ হয়। একের অধিক লাইনকে একসাথে কমেন্ট করার জন্য এটি ব্যবহৃত হয়।
  • এক্ষেত্রে কমেন্ট শুরু করার পর একটি হোয়াইটস্পেস দিয়ে এবং কমেন্ট শেষ করার আগে একটি হোয়াইটস্পেস দিয়ে কমেন্টটি শেষ করা উচিত।

উদাহরণঃ

// This is a single line comment
/*
    This is a multi-line comment
*/