সাস (স্টাইল শিট ভাষা)

**সাস** (Sass; পূর্ণরূপ: Syntactically Awesome Style Sheets) হলো একটি প্রিপ্রসেসর স্ক্রিপ্টিং ভাষা যা ইন্টারপ্রেট বা কম্পাইল হয়ে ক্যাসকেডিং স্টাইল শিটসে রূপান্তরিত হয়। এর নিজস্ব স্ক্রিপ্টিং ভাষাকে বলা হয় সাসস্ক্রিপ্ট।

সাস-এর দুটি সিনট্যাক্স বা লেখার রীতি রয়েছে। মূল সিনট্যাক্সটিকে বলা হয় "ইনডেন্টেড সিনট্যাক্স", যা অনেকটা হ্যামল-এর মতো। এটি কোড ব্লকগুলোকে আলাদা করতে ইনডেন্টেশন এবং নিয়মগুলোকে আলাদা করতে নতুন লাইন ব্যবহার করে। অন্যদিকে, অপেক্ষাকৃত নতুন সিনট্যাক্সটি হলো **এসসিএসএস** (SCSS বা Sassy CSS), যা সিএসএস-এর মতো ব্লক ফরম্যাটিং ব্যবহার করে। এটি কোড ব্লক নির্দেশ করতে কার্লি ব্রেস ({ }) এবং ব্লকের ভেতরের নিয়মগুলো আলাদা করতে সেমিকোলন (;) ব্যবহার করে। সাসের ইনডেন্টেড সিনট্যাক্স এবং এসসিএসএস ফাইলের এক্সটেনশন যথাক্রমে .sass এবং .scss হয়ে থাকে।

সিএসএস ৩ সাধারণত কতগুলো সিলেক্টর এবং সিউডো-সিলেক্টরের সমন্বয়ে গঠিত। সাস সিএসএস-কে প্রসারিত করে এমন কিছু মেকানিজম যুক্ত করে যা সাধারণত প্রথাগত প্রোগ্রামিং ভাষায়, বিশেষ করে অবজেক্ট-ওরিয়েন্টেড ভাষায় দেখা যায়, কিন্তু সাধারণ সিএসএস-এ তা নেই। যখন সাসস্ক্রিপ্ট ইন্টারপ্রেট করা হয়, তখন এটি সাস ফাইলে সংজ্ঞায়িত সিলেক্টরগুলোর জন্য সিএসএস রুলস বা নিয়ম তৈরি করে। সাস ইন্টারপ্রেটার এই সাসস্ক্রিপ্টকে সিএসএস-এ রূপান্তর করে। এছাড়া সাস কোনো .sass বা .scss ফাইল পর্যবেক্ষণ করতে পারে এবং ফাইলটি সেভ করার সাথে সাথে তা আউটপুট .css ফাইলে রূপান্তর করে দিতে পারে।

ইনডেন্টেড সিনট্যাক্স হলো একটি মেটা-ল্যাঙ্গুয়েজ। এসসিএসএস হলো একটি নেস্টেড মেটা-ল্যাঙ্গুয়েজ এবং সিএসএস-এর একটি সুপারসেট; অর্থাৎ যেকোনো বৈধ সিএসএস একই সাথে একটি সঠিক এসসিএসএস ফাইল হিসেবে গণ্য হয়।

সাসস্ক্রিপ্ট মূলত নিচের সুবিধাগুলো প্রদান করে:
* ভেরিয়েবল
* নেস্টিং 
* মিক্সিন
* সিলেক্টর ইনহেরিটেন্স

## ইতিহাস
সাস মূলত হ্যাম্পটন ক্যাটলিন ডিজাইন করেছিলেন এবং এটি তৈরি (ডেভেলপ) করেছিলেন নাটালি ওয়েজেনবাম।

## প্রধান ইমপ্লিমেন্টেশনসমূহ
সাসস্ক্রিপ্ট একাধিক প্রোগ্রামিং ভাষায় ইমপ্লিমেন্ট বা প্রয়োগ করা হয়েছে। এর মধ্যে উল্লেখযোগ্য ইমপ্লিমেন্টেশনগুলো হলো:

* দাপ্তরিক ওপেন-সোর্স ডার্ট ইমপ্লিমেন্টেশন।
* এনপিএম-এ দাপ্তরিক "sass" নোড মডিউল, যা মূলত পিউর জাভাস্ক্রিপ্টে কম্পাইল করা ডার্ট সাস।
* দাপ্তরিক "sass-embedded" নোড মডিউল, যা নেটিভ ডার্ট এক্সিকিউটেবল ফাইলের একটি জাভাস্ক্রিপ্ট র‍্যাপার (wrapper) হিসেবে কাজ করে।
* ২০০৬ সালে তৈরি করা মূল ওপেন-সোর্স রুবি ইমপ্লিমেন্টেশন। রক্ষণাবেক্ষণকারীর অভাব এবং কার্যকারিতা শেষ হওয়ায় ২০১৯ সালের মার্চ মাসে এটি বাতিল ঘোষণা করা হয়েছে।
* libSass, যা দাপ্তরিক ওপেন-সোর্স সি++ ইমপ্লিমেন্টেশন। ২০২০ সালের অক্টোবরে এটিকে 'ডেপ্রিকেটেড' (পরিত্যক্ত প্রায়) করা হয় এবং ২০২৫ সালের অক্টোবরে এর কার্যকারিতা সম্পূর্ণ শেষ হয়।
* এনপিএম-এ থাকা "node-sass" মডিউল, যা বর্তমানে বিলুপ্ত libSass-এর ওপর ভিত্তি করে তৈরি। ২০২৪ সালের জুলাই মাসে এর কার্যকারিতা শেষ (end-of-life) হয়েছে।
* JSass, এটি একটি অনানুষ্ঠানিক জাভা ইমপ্লিমেন্টেশন যা libSass-এর ওপর ভিত্তি করে তৈরি।
* phamlp, এটি পিএইচপি-তে (PHP) সাসের একটি অনানুষ্ঠানিক ইমপ্লিমেন্টেশন।
* ভাদিন প্ল্যাটফর্মের জাভাতে তৈরি একটি নিজস্ব সাস ইমপ্লিমেন্টেশন রয়েছে। 
* ফায়ারবাগ, এটি ওয়েব ডেভেলপমেন্টের জন্য ফায়ারফক্সের একটি এক্সটেনশন ছিল। পরবর্তীতে ফায়ারফক্সের নিজস্ব 'ডেভেলপার টুলস'-এর জনপ্রিয়তার কারণে এটি বন্ধ হয়ে যায়।

## বৈশিষ্ট্য
### ভেরিয়েবল
সাস-এ ভেরিয়েবল সংজ্ঞায়িত করা যায়। ভেরিয়েবলগুলো একটি ডলার চিহ্ন (`$`) দিয়ে শুরু হয়। ভেরিয়েবলে মান নির্ধারণের (অ্যাসাইনমেন্ট) কাজ একটি কোলন (`:`) দিয়ে করা হয়।

সাসস্ক্রিপ্ট চারটি ডেটা টাইপ সমর্থন করে:

* নম্বর (এককসহ)
* স্ট্রিং (কোটেশন মার্কসহ বা ছাড়া)
* কালার বা রং (নাম, বা নামসমূহ)
* বুলিয়ান

ভেরিয়েবলগুলো বিভিন্ন ফাংশনের আর্গুমেন্ট হিসেবে ব্যবহৃত হতে পারে বা সেগুলো থেকে ফলাফল হিসেবে আসতে পারে। কম্পাইল করার সময়, আউটপুট সিএসএস (CSS) ডকুমেন্টে ভেরিয়েবলের মানগুলো যুক্ত হয়ে যায়।

### নেস্টিং
সিএসএস লজিক্যাল নেস্টিং সমর্থন করলেও, এর কোড ব্লকগুলো নেস্টেড (একের ভেতর অন্যটি) হয় না। সাস নেস্টেড কোডগুলোকে একটির ভেতর আরেকটি যুক্ত করার সুযোগ দেয়।

নেমস্পেস নেস্টিং এবং প্যারেন্ট রেফারেন্সসহ আরও জটিল ধরনের নেস্টিং নিয়ে সাসের ডকুমেন্টেশনে আলোচনা করা হয়েছে।

#### লুপ

সাস ,  এবং  ব্যবহার করে ভেরিয়েবলগুলোর ওপর ইটারেট (iterate) বা লুপ চালানোর সুবিধা দেয়, যা একই ধরনের ক্লাস বা আইডিযুক্ত উপাদানগুলোতে বিভিন্ন স্টাইল প্রয়োগ করতে ব্যবহার করা যেতে পারে।

#### আর্গুমেন্ট
মিক্সিন (Mixin) আর্গুমেন্টও সমর্থন করে।

#### একত্রে ব্যবহার

### সিলেক্টর ইনহেরিটেন্স
সিএসএস৩ ডকুমেন্ট অবজেক্ট মডেল হায়ারার্কি বা স্তরবিন্যাস সমর্থন করলেও, এটি সিলেক্টর ইনহেরিটেন্স (উত্তরাধিকার) সমর্থন করে না। সাস-এ `@extend` কিওয়ার্ড ব্যবহার করে কোড ব্লকের ভেতর একটি লাইন যুক্ত করে অন্য একটি সিলেক্টরকে রেফার করার মাধ্যমে ইনহেরিটেন্স অর্জন করা হয়। এক্সটেন্ড করা সিলেক্টরের বৈশিষ্ট্যগুলো কলিং সিলেক্টরে প্রয়োগ করা হয়।

সাস মাল্টিপল ইনহেরিটেন্স (একাধিক উত্তরাধিকার) সমর্থন করে।

## লিবসাস
২০১২ সালে এইচটিএমএল৫ ডেভেলপার কনফারেন্সে সাসের স্রষ্টা হ্যাম্পটন ক্যাটলিন `libSass`-এর ১.০ সংস্করণ ঘোষণা করেন। এটি ক্যাটলিন, অ্যারন লেউং এবং মুভওয়েব -এর ইঞ্জিনিয়ারিং দলের তৈরি করা সাসের একটি ওপেন-সোর্স সি++ ইমপ্লিমেন্টেশন।

ক্যাটলিনের মতে, libSass-কে "যেকোনো কিছুর ভেতর যুক্ত করা যায় এবং তাতে সাসের সুবিধা পাওয়া যাবে... আপনি চাইলে আজই এটি ফায়ারফক্সের ভেতর যুক্ত করে ফায়ারফক্স বিল্ড করতে পারেন এবং এটি সেখানে কম্পাইল হবে। এটা যেন সম্ভব হয় তা নিশ্চিত করতে আমরা স্ক্র্যাচ থেকে (একেবারে শুরু থেকে) নিজেদের পার্সার লিখেছি।"

libSass-এর নকশার মূল লক্ষ্যগুলো হলো:
* পারফরম্যান্স বা কর্মক্ষমতা – ডেভেলপাররা জানিয়েছেন যে এটি সাসের রুবি ইমপ্লিমেন্টেশনের তুলনায় ১০ গুণ বেশি গতি প্রদান করে।
* সহজ ইন্টিগ্রেশন (যুক্ত করা) – libSass বিভিন্ন সফটওয়্যারে সাস-কে যুক্ত করা আরও সহজ করে তোলে। libSass-এর আগে, কোনো ভাষা বা সফটওয়্যার পণ্যে সাস-কে শক্তভাবে যুক্ত করার জন্য সম্পূর্ণ রুবি ইন্টারপ্রেটারটি যুক্ত করতে হতো। এর বিপরীতে, libSass হলো কোনো বাহ্যিক নির্ভরতা ছাড়াই স্ট্যাটিকভাবে যুক্ত করার যোগ্য একটি লাইব্রেরি, যার সি-এর মতো ইন্টারফেস রয়েছে। এর ফলে সাস-কে সরাসরি অন্যান্য প্রোগ্রামিং ভাষা এবং টুলের সাথে যুক্ত করা সহজ হয়। উদাহরণস্বরূপ, নোড, গো, এবং রুবি-এর জন্য এখন ওপেন সোর্স libSass বাইন্ডিং বিদ্যমান রয়েছে।
* কম্প্যাটিবিলিটি (সামঞ্জস্যতা) – libSass-এর লক্ষ্য হলো সাসের দাপ্তরিক রুবি ইমপ্লিমেন্টেশনের সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ হওয়া। এই লক্ষ্যটি libsass ৩.৩ সংস্করণে অর্জিত হয়েছে।

## আইডিই ইন্টিগ্রেশন

## আরও দেখুন
* সিএসএস
* স্ক্রিপ্টিং ভাষা

## তথ্যসূত্র

## আরও পড়ুন
* 
* 
* 

## বহিঃসংযোগ
* দাপ্তরিক ওয়েবসাইট

বিষয়শ্রেণী:মুক্ত কম্পিউটার গ্রন্থাগার
বিষয়শ্রেণী:২০০৬-এ তৈরি প্রোগ্রামিং ভাষা
বিষয়শ্রেণী:রুবি (প্রোগ্রামিং ভাষা)
বিষয়শ্রেণী:এমআইটি লাইসেন্স ব্যবহারকৃত সফটওয়্যার
বিষয়শ্রেণী:স্টাইল শীট ভাষা