Skip to main content

পাইথন এবং জ্যাঙ্গো কোডিং স্টাইল-১

প্রোগ্রামারদের মধ্যে একটা জোকস আছে যে কোনো একটা প্রোগ্রাম লিখতে যে সময় লাগে, প্রোগ্রামটা ডিবাগ করতে তার থেকে বেশি সময় লাগে।


উপরের ছবিটা সুন্দর না ? আসল কথা হলো আমাদের কোড লেখার থেকে কোড পড়তে হয় বেশি।আন্ডারস্ট্যান্ডএবল কোড আমাদের ব্রেইনের ব্যান্ডউইথ কে ফ্রি করে দেয়।  ক্লিন,রিডএবল কোড লেখা কিন্তু একটা যোগ্যতা। এজন্য আমাদের চেষ্টা করতে হবে যতটা সম্ভব রিবাবলে কোড লেখার যে কোড নিজে কথা বলে। যেমন: আমি যদি কোনো ভ্যারিয়েবল  নাম c_t_num এর পরিবর্তে calculate_total_number নেই তাহলে বেশি রিডেবল হবে।

পাইথন এ পেপ ৮ নামে অফিসিয়াল কোডিং স্টাইল এর গাইড আছে।  পেপ ৮ এর কিছু জিনিশ আমি লিখছি -

পাইথন কোডিং কনভেনশন -

১.  ৪ টা স্পেস / ১ ট্যাব ব্যবহার করতে হবে ইনডেন্ট  হিসেবে
           
২. প্রত্যেক  ক্লাসের মধ্যে ২ টা ব্ল্যান্ক লাইন দিতে হবে

৩. ক্লাসের মধ্যে মেথড ডেফিনেশন করতে ১ তা ব্ল্যান্ক লাইন দিতে হবে।

pycharm পাইথন এর একটা জনপ্রিয় IDE . এতে ডিফল্ট স্টাইল বলা আছে। আপনি ফলো না করলে ইয়েলো কালার এর একটা দাগ আসবে।  তাছাড়া যারা অন্য টেস্ট এডিটর ব্যবহার করেন তারা flake৮ প্যাকেজ ইনস্টল করে নিতে পারেন।

৭৯-Character লিমিট -

pycharm এ দেখবেন লেফট সাইড এর দিকে ভার্টিক্যাল লাইন আছে।  এর মানে হলো কোনো লাইন যদি ৭৯ character এর বেশি হয় তাহলে এই লাইন ক্রস করবে এবং কোডিং স্টাইল গাইড অনুযায়ী পত্তেক লাইন ৭৯ char এর মধ্যে হবে। কিন্তু কোড ৭৯ char  এর মধ্যে ফিট করার জন্য ভ্যারিয়েবল নেম রিডেবল না নেওয়ার কোনো যুক্তিই নেই।


import স্টাইল -

পাইথন ওর জ্যাঙ্গো , ইম্পোর্ট এর ৩ টি অর্ডার  আছে

১. প্রথমে পাইথন এর স্ট্যান্ডার্ড লাইব্রেরি গুলা থাকবে
২. দ্বিতীয়ত রিলেটেড থার্ড পার্টি ( উদাহরণ দিলে বুঝে যাবেন )
৩. লোকাল এপ্লিকেশন অথবা লাইব্রেরি স্পেসিফিক ইম্পোর্ট

এখানে জ্যাঙ্গো এর উদাহরণ দিলে ভালো বোঝা যাবে -

# Std lib import

import requests
from math import sqrt

# Core Django Import

from django.db import models
from django.utils.translation import ugett

# Import from your local app

from .models import Profile
from .froms import LoginForm


আমি বোঝানোর জন্য কমেন্ট(# দিয়ে শুরু লাইন) ব্যবহার করেছি।    

এভোইড ইম্পোর্ট ষ্টার (*)

from math import *
* মানে ওই মডিউলে সবটাই ধরে ইম্পোর্ট করা। এইটা একটব্যাড প্র্যাক্টিস। আমরা শুধু সেইটায় ইম্পোর্ট করবো যেটা আমার দরকার।

from math import math, pow 

পরের পোস্ট এ জ্যাঙ্গো এর কিছু স্টাইল নিয়ে লিখবো। আজ টা টা :)





Comments

Popular posts from this blog

How to set auto save in Sublime text editor

1. Press Ctrl+Shift+P 2 Package install/install package 3.Search autosave 4. Click to install 5. Go to Preference -> Package setting -> Auto Save -> Settings User 6. Paste the code   // Auto save default setting { "auto_save_on_modified": true, "auto_save_delay_in_seconds": 1, "auto_save_all_file": true, "auto_save_current_file": "", "auto_save_backup": false, "auto_save_backup_suffix": "autosave" } 7. Save the file, close the file and finally done :) .

Constructor and Destructor in Python

পাইথন এ ডিফল্ট কিছু  মেথড আছে  যাদেরকে ম্যাজিক মেথড বলা হয়। এই  মেথড গুলা __ মেথড নাম __ দিয়ে লেখা হয় .( আন্ডার স্কোর আন্ডার স্কোর একসাথে ডান্ডার ও বলা যায় ) __init__(): এটাকে  কন্সট্রাক্টর বলা হয়।  কাজ কি ? কাজ হলো যখন কোনো ক্লাস এর ইনস্ট্যান্স create  করা হয় তখন এই মেথড নিজে থেকে কল হয়।  যেমন আমার যদি একটা ক্যাট  ক্লাস নেই। class Cat : def __init__ ( self , legs , colour ): self . legs = legs self . color = color def get_name(self, name): return self.name = name fido = Cat ( 4 , "brown" ) spot = Cat ( 3 , "yellow" ) এই  ক্লাস এ যদি আমরা ক্যাট এর নাম পেতে  চাই তাহলে আমাদের Cat ().get_name ("Mini") কল করতে হবে।  কিন্তু লেগ্স এন্ড কালার এর জন্য কিন্তু Cat ().get_name ("Mini") কল করা লাগসে না।  আমি যখন এ  Cat ( 4 , "brown" )      initializeকরছি  তখনই   __init__   কল হইয়া গেসে । সাধারণত কোনো ক্লাস কল করার সাথে সাথে যদি কোনো ভ্যালু এসাইন করতে চাই তাহলে  __init__ব্যবহার   করা হয়

One-To-One লিংক ব্যবহার করে কিভাবে Django ডিফল্ট User মডেলকে এক্সটেন্ড করতে হয়?

Django User মডেলকে ব্যবহার করে কয়েক ভাবে ইউসার মডেল এর ফিল্ড বাড়ানো যায় ।  One-To-One লিংক তার মধ্যে একটা।  আমি ম্যাক্সিমাম সময় এই পদ্ধতি এপলাই করে থাকি।  এজন্য আমাদের একটা নতুন মডেল বানাতে হবে এক্সট্রা ফিল্ড গুলা অ্যাড করার জন্য যেগুলা ইউসার মডেল এর সাথে সম্পর্কিত।  Profile নামে  একটা মডেল লিখি যেখানে আমরা ইউসার এর birthdate,  এবং address অ্যাড করবো। models.py  from django.db import models from dajngo.contrib.auth.models import User class Profile(models.Model):     user = models.OneToOneField(User, on_delete=models.CASCADE)     birth_date = models.DateField(null=True, blank=True)     address = models.TextField(max_length=500, blank=True)  আমরা এখন কিছু সিগন্যাল অ্যাড করবো যাতে আমরা যখন কোনো ইউসার অ্যাড/আপডেট করবো তখন যেন আমাদের Profile মডেলটা ও অটোমেটিক অ্যাড/আপডেট হয়ে যায় । from django.db import models from django.contrib.auth.models import User from django.db.models.signals import post_save from django.dispatch import receiver class Profile(models.Model):