Export-import বিজনেস

বেশির ভাগ পোলাপান থাকে অগোছালোর চরম সীমানায়। তাদের বই, খাতা, বিছানা, বালিশ, জামা, কাপড়, ফোন, চার্জার— সব একসাথে দলা ফাকিয়ে থাকে। আর লাখে দুই-একটা লক্ষ্মী বাচ্চা আছে। যাদের সব গুছানো। বইয়ের জায়গায় বই, জামা-কাপড়ের জায়গায় জামা-কাপড়, বিছানা-বালিশের জায়গায় বিছানা-বালিশ। তাদের কোনো কিছু দরকার হলে একজাক্টলি সেই জায়গায় যাবে, আর নিয়ে আসবে। আর এইরকম একটা লক্ষ্মী বাচ্চার জন্য আশেপাশের ৫০ গ্রাম পর্যন্ত বাবা-মারা সন্তানদের বলতে থাকে তার পা ধুয়ে পানি খেতে।
কোডিং করার সময়ও তুই যদি সবকিছু এক জায়গায় জগাখিচুড়ি করে রাখিস, তাহলে কোথায় কী আছে, সেগুলা খুঁজে পাওয়া ভেজাইল্লা একটা অবস্থা হয়ে যাবে।
এইটার সমাধান হচ্ছে, ছোট ছোট করে গুছিয়ে আলাদা আলাদা ফাইলে কোড রাখা। আলাদা আলাদা ফাইলে কোড রাখাকে বলা হয় মডিউলে ভাগ করে কোড রাখা। মডিউল বলতে বড় কোনো একটা জিনিসের ছোট একটা অংশকে বুঝায় এবং জাভাস্ক্রিপ্টের ক্ষেত্রে সাধারণভাবে ধরতে পারস, মডিউল মানে আলাদা আলাদা ফাইল করে তাদের মধ্যে কোড আলাদা হলেও একটা ফাইল আরেকটা ফাইলের মধ্যে যে কোড আছে, সেগুলার কিছু ফাংশনালিটি ইউজ করতে পারবে, এমন একটাভাবে অনেক বড় বড় কোডগুলাকে গুছানো বা অর্গানাইজ করাকে বুঝায়।
যদিও আলাদা ফাইল মানেই আলাদা মডিউল না। তবে বুঝার সুবিধার জন্য প্রাথমিকভাবে ধরতে পারিস। তবে কেউ শক্ত করে ধরলে আবার আমার নাম বলিস না কিন্তু।
আলাদা আলাদা ফাইলে কোড ভাগ করার তিনটা সুবিধা আর তিনটা অসুবিধা আছে। তিনটা সুবিধা হচ্ছে—
১. ফাইলগুলো ছোট ছোট হয়। সিমিলার টাইপের জিনিস এক ফাইলে রাখা যায়। সহজে পড়া এবং বুঝা যায়।
২. কোনো কিছু খুঁজে বের করার দরকার হলে সেই ফাইলে গেলে সহজেই খুঁজে পাওয়া যায়। লম্বা-বিশাল-বড় একটা ফাইল হলে প্যাঁচাপেঁচি লেগে যায়।
৩. কোড ফাইলের মধ্যে আটকে রাখা যায়। বাহির থেকে চাইলেই ইউজ করতে পারবে, তবে চেইঞ্জ করতে পারবে না।
আর আলাদা আলাদা ফাইলে রাখার অসুবিধা হচ্ছে—
১. যেহেতু আলাদা আলাদা ফাইলে আছে, তাই এক ফাইল থেকে অন্য ফাইলে কোড ইউজ করতে হলে এক ফাইল থেকে কোড বাইরে ব্যবহার করার জন্য যে ফাইলে কোড আছে, সেখান থেকে এক্সপোর্ট করতে হবে।
২. যে ফাইল থেকে অন্য ফাইলের কোড ইউজ করবি, সেখানে কোড ইমপোর্ট করতে হবে।
৩. ছোট ছোট করে অনেক অনেক ফাইল হয়ে যায়, তখন ফোল্ডার বানিয়ে অর্গানাইজড করতে হয়।
এক্সপোর্ট-ইমপোর্ট
ধর, বাংলাদেশে কফি উৎপাদন হয় না। এখন যদি আমরা কফি খেতে চাই, তাহলে যেসব দেশে কফি উৎপাদন হয়, তাদেরকে কফি এক্সপোর্ট করতে হবে, আর আমাদের দেশে কফি ইমপোর্ট করতে হবে।
একইভাবে আমাদের দেশে অনেক ইলিশ মাছ আছে। অন্য দেশের দাদারা যদি ইলিশ মাছ খেতে কান্নাকাটি করে, তাহলে আমাদের দেশ থেকে ইলিশ মাছ এক্সপোর্ট করতে হবে এবং অন্যদেশ যারা ইলিশ খেতে চায়, তাদের ইলিশ ইমপোর্ট করতে হবে।
এইটুক বুঝলেই কাজ শেষ।
Export— কোনো ফাইল থেকে কোডের কিছু অংশ (যেমন ফাংশন, ভেরিয়েবল) "export" করতে পারবি। মানে, ওই ফাংশন বা ভেরিয়েবল বাইরে বের করে অন্য ফাইল চাইলে ব্যবহার করতে পারবি। তবে সাধারণত একটা ফাইলের সবকিছু এক্সপোর্ট করে না। কিছু জিনিস বাহির থেকে এক্সেস নেয়া দরকার, সেগুলাকে এক্সপোর্ট করে। আবার কিছু জিনিস ফাইলের ভিতরে সীমাবদ্ধ থাকে।
Import— একটা ফাইল থেকে "import" করে সেই export করা কোডের অংশ নিয়ে আসতে পারবি।
বিশেষ নোটস
মডিউল ইউজ করার জন্য দরকার হয় জাভাস্ক্রিপ্টের কিছু স্পেশাল টুলস, যেগুলাকে bundler বলে। ইউজ করতে হবে, অথবা ব্রাউজারকে module বলে দিতে হবে। যদি কোনো কারণে মডিউল প্র্যাকটিস করতে একটু সমস্যা হয়, তাহলেও কনসেপ্টটা এখন জেনে রাখ। পরে বড় ধরনের প্রজেক্ট সেটাপ করতে গেলে বেশির ভাগ সময় অটোমেটিকভাবেই মডিউল ইউজ করার সিস্টেম পেয়ে যাবি। বাড়তি কোনো কষ্ট করা ছাড়াই।
ধর, তুই একটা math.js ফাইল তৈরি করলি, যেখানে কিছু ম্যাথের সিম্পল যোগ-বিয়োগ আর গুণ করার ফাংশন লিখলি।
// math.js
export function add(a, b) {
return a + b;
}
export function multiply(a, b) {
return a * b;
}এখন তুই এই add আর multiply ফাংশন ডিক্লেয়ার করার আগে export নামের একটা স্পেশাল কি-ওয়ার্ড লিখছিস। তারমানে এই জিনিসগুলো এক্সপোর্ট করা যাবে এবং দরকার হলে অন্য ফাইল থেকে এই ফাংশন দুইটাকে ইমপোর্ট করে ইউজ করতে পারবি।
ইমপোর্ট করার জন্য প্রথমে import লিখবি, তারপর হয় কোনো নাম লিখবি, না হয় অবজেক্ট ডিস্ট্রাকচারিংয়ের মতো করে এক বা একাধিক নাম লিখবি, তারপর from লিখবি, এরপর কোটেশনের মধ্যে স্ট্রিং আকারে লিখবি এবং কোনো ফাইল থেকে ইমপোর্ট করবি। যে ফাইল থেকে ইমপোর্ট করতেছস, আর যে ফাইলে ইমপোর্ট করতেছস, যদি দুইটা একই ফোল্ডারে থাকে, তাহলে ডট চিহ্নের পর ফরওয়ার্ড স্ল্যাশ দিয়ে তারপর ফাইলের নাম লিখে ফেলবি। নিচের মতো করে—
এখন ধর, তুই main.js ফাইল থেকে math.js-এর ফাংশনগুলো ব্যবহার করতে চাস।
// main.js
import { add, multiply } from './math.js';
console.log(add(2, 3));
console.log(multiply(4, 5));
Output:
5
20তুই খেয়াল করলে বুঝবি, main.js ফাইলে কিন্তু add বা multiply ফাংশনগুলো ডিক্লেয়ার করা হয়নি। এইগুলা ইমপোর্ট করা হইছে math.js ফাইল থেকে। নরমালভাবে ইমপোর্ট করতে হলে যেটা যেটা ইমপোর্ট করবি, সেটাকে সেকেন্ড ব্র্যাকেটের { } মধ্যে রাখবি। অনেকটা destructuring-এর মতো। তোর যেটা যেটা দরকার, শুধু সেটার নাম সেকেন্ড ব্র্যাকেটের ভিতর রাখবি।
এইভাবে এক ফাইলের কোড অন্য ফাইল থেকে ইউজ করা যায়।
Named Export আর Default Export
কখনো ইচ্ছামতো নাম দিয়ে ইমপোর্ট করতে চাইলে যে ফাইল থেকে ইমপোর্ট করবি, সেখানে হয় export-এর পর default ইউজ করবি। তখন ইচ্ছামতো নাম দিতে পারবি, আবার সেকেন্ড ব্র্যাকেটের ভিতরেও রাখা লাগবে না। তবে মডিউল (বা একটা ফাইলে) একটার বেশি ডিফল্ট export রাখতে পারবি না।
দরকার হলে ইমপোর্ট করার পর যাকে ইমপোর্ট করা হয়েছে, সেটার নাম চেইঞ্জ করে দিবি। নিচে প্রথমে default এক্সপোর্টের বিষয়টা দেখ।
// greeting.js
export default function greet() {
return "Hello, World!";
}এইটা import করলে এমন হবে—
// main.js
import specialGreet from './greeting.js';
console.log(specialGreet ());
Output: Hello, World!এখন greet ফাংশনটাকে যেকোনো নামে import করতে পারবি, কারণ default একটাই।
ইলিয়াস alias
ইমপোর্ট করার সময় চাইলে যেকোনো ইমপোর্টের নাম চেইঞ্জ করতে পারবি as নামক একটা স্পেশাল কি-ওয়ার্ড ইউজ করে। নিচের মতো করে—
import { add as sum, mult as multiply } from './math.js';
console.log(sum(5, 3));
console.log(mult (5, 3));File path
যে ফাইল থেকে ইমপোর্ট করবি, আর যে ফাইলে ইমপোর্ট করবি, দুইটা যদি সেইম ফোল্ডারে থাকে, তাহলে সোজা সোজা তাদের ইমপোর্ট করতে পারবি। আর যদি ডিফারেন্ট ফোল্ডারে থাকে, তখন রিলেটিভ পাথ ব্যবহার করতে হবে। যখন বড় প্রজেক্টে কাজ করতে যাবি, তখন এই জিনিসটা দেখে নিবি। তখন দেখবি, কিছু ফোল্ডারের নাম আবার কিছু ডট ডট স্ল্যাশ ( ../ ) ইউজ করতেছে।
এতকিছু ঝামেলা মনে হলে জাস্ট দুইটা জিনিস বুঝার চেষ্টা করবি। না বুঝলে ফিউচারে আবার এই জিনিস দেখতে আসবি।
export মানে কোনো কোডকে বাইরের জন্য ওপেন করে রাখা।
import মানে অন্য একটা ফাইলের দরকারি অংশ নিয়ে আসা।
Practice:
- export এবং import-এর মধ্যে পার্থক্য কী? উভয় কীভাবে কাজ করে?
- default export কী? এর মাধ্যমে ইমপোর্ট করার সময় কী সুবিধা হয়?
- as কি-ওয়ার্ড কীভাবে নাম পরিবর্তন করতে সাহায্য করে?
- নাম দিয়ে export আর Default export-এর মধ্যে পার্থক্য কী?
- এক ফাইল থেকে একাধিক default export কি সম্ভব? কিভাবে সম্ভব?