লাইব্রেরি

লাইব্রেরি হলো এমন একটি স্ক্রিপ্ট প্রজেক্ট যার ফাংশনগুলো অন্যান্য স্ক্রিপ্টে পুনরায় ব্যবহার করা যায়।

যে স্ক্রিপ্ট কোনো লাইব্রেরি ব্যবহার করে , তা ততটা দ্রুত চলে না যতটা চলত যদি সমস্ত কোড একটিমাত্র স্ক্রিপ্ট প্রজেক্টের মধ্যে থাকত। যদিও লাইব্রেরি ডেভেলপমেন্ট এবং রক্ষণাবেক্ষণকে আরও সুবিধাজনক করে তুলতে পারে, যেসব প্রজেক্টে গতি অত্যন্ত গুরুত্বপূর্ণ, সেখানে এগুলি পরিমিতভাবে ব্যবহার করা উচিত। এই সমস্যার কারণে, গুগল ওয়ার্কস্পেস অ্যাড-অনগুলিতে লাইব্রেরির ব্যবহার সীমিত রাখা উচিত।

একটি লাইব্রেরিতে প্রবেশাধিকার লাভ করুন

আপনার প্রজেক্টে কোনো লাইব্রেরি অন্তর্ভুক্ত করতে হলে, সেটিতে আপনার অন্তত ভিউ-লেভেল অ্যাক্সেস থাকতে হবে। আপনি যে লাইব্রেরিটি অন্তর্ভুক্ত করতে চান, সেটির লেখক যদি আপনি না হন, তবে লেখকের সাথে যোগাযোগ করুন এবং অ্যাক্সেসের জন্য অনুরোধ করুন।

আপনি যে লাইব্রেরিটি অন্তর্ভুক্ত করতে চান, তার স্ক্রিপ্ট আইডি আপনার প্রয়োজন হবে। লাইব্রেরিতে আপনার অ্যাক্সেস থাকলে, প্রজেক্ট সেটিংস স্ক্রিপ্ট আইডিটি খুঁজে নিন।

আপনার স্ক্রিপ্ট প্রকল্পে একটি লাইব্রেরি যোগ করুন

  1. অ্যাপস স্ক্রিপ্ট এডিটরের বাম দিকে, 'লাইব্রেরি'র পাশে, 'অ্যাড আ লাইব্রেরি' a library) -তে ক্লিক করুন।
  2. "স্ক্রিপ্ট আইডি" ফিল্ডে লাইব্রেরির স্ক্রিপ্ট আইডিটি পেস্ট করুন।
  3. লুক আপ-এ ক্লিক করুন।
  4. ভার্সন ড্রপ-ডাউনে ক্লিক করে লাইব্রেরির যে ভার্সনটি ব্যবহার করতে চান, তা নির্বাচন করুন।
  5. ডিফল্ট "আইডেন্টিফায়ার" নামটি এই লাইব্রেরির জন্য আপনার কাঙ্ক্ষিত নাম কিনা তা যাচাই করে দেখুন। আপনার স্ক্রিপ্ট লাইব্রেরিটিকে উল্লেখ করার জন্য এই নামটিই ব্যবহার করে। উদাহরণস্বরূপ, যদি আপনি এটিকে Test সেট করেন, তাহলে সেই লাইব্রেরির একটি মেথডকে নিম্নরূপে কল করুন: Test.libraryMethod
  6. যোগ করুন ক্লিক করুন।

একটি লাইব্রেরি ব্যবহার করুন

আপনার অন্তর্ভুক্ত লাইব্রেরিটি একটি ডিফল্ট সার্ভিসের মতোই ব্যবহার করুন। উদাহরণস্বরূপ, যদি Test আপনার লাইব্রেরির আইডেন্টিফায়ার হয়, তাহলে লাইব্রেরির মেথডগুলোর তালিকা দেখতে Test টাইপ করে তার ঠিক পরেই একটি ডট (.) দিন।

এই ধাপগুলো অনুসরণ করে অন্তর্ভুক্ত লাইব্রেরির রেফারেন্স ডকুমেন্টেশন খুলুন:

স্ক্রিপ্ট এডিটরের বাম দিকে, লাইব্রেরির নামের পাশে, More > Open in a new tab-এ ক্লিক করুন।

একটি লাইব্রেরি সরান

স্ক্রিপ্ট এডিটরের বাম দিকে, লাইব্রেরির নামের পাশে, More > Remove > Remove library-তে ক্লিক করুন।

যদি লেখক কোনো লাইব্রেরি মুছেও দেন, তবুও আপনাকে আপনার অন্তর্ভুক্ত লাইব্রেরির তালিকা থেকে সেটি সরিয়ে ফেলতে হবে।

একটি লাইব্রেরি আপডেট করুন

লাইব্রেরির সংস্করণ পরিবর্তন করুন অথবা এর শনাক্তকারী হালনাগাদ করুন।

  1. এডিটরের বাম দিকে, 'লাইব্রেরি'র নিচে, লাইব্রেরির নামে ক্লিক করুন।
  2. আপনার পরিবর্তনগুলো করুন এবং সেভ-এ ক্লিক করুন।

একটি লাইব্রেরি তৈরি করুন এবং শেয়ার করুন

আপনার স্ক্রিপ্ট প্রজেক্টটি লাইব্রেরি হিসেবে ব্যবহার ও শেয়ার করতে, এই ধাপগুলো অনুসরণ করুন:

  1. আপনার স্ক্রিপ্টের একটি ভার্সনযুক্ত ডেপ্লয়মেন্ট তৈরি করুন
  2. লাইব্রেরির সকল সম্ভাব্য ব্যবহারকারীকে অন্তত দেখার সুযোগ (ভিউ-লেভেল অ্যাক্সেস) দিন।
  3. সেই ব্যবহারকারীদের স্ক্রিপ্ট আইডিটি দিন, যা প্রজেক্ট সেটিংস পাওয়া যাবে।

সেরা অনুশীলন

লাইব্রেরি লেখার সময় অনুসরণ করার জন্য এখানে কিছু নির্দেশিকা দেওয়া হলো:

  1. আপনার প্রোজেক্টের জন্য একটি অর্থপূর্ণ নাম বেছে নিন, কারণ অন্যরা যখন আপনার লাইব্রেরি অন্তর্ভুক্ত করে, তখন এটিই ডিফল্ট শনাক্তকারী হিসেবে ব্যবহৃত হয়।
  2. আপনার স্ক্রিপ্টের এক বা একাধিক মেথডকে লাইব্রেরি ব্যবহারকারীদের কাছে অদৃশ্য (এবং ব্যবহার অযোগ্য) করতে, মেথডের নামের শেষে একটি আন্ডারস্কোর যোগ করুন। উদাহরণস্বরূপ, myPrivateMethod_
  3. শুধুমাত্র এনুমারেবল গ্লোবাল প্রোপার্টিগুলোই লাইব্রেরি ব্যবহারকারীদের কাছে দৃশ্যমান। এর মধ্যে অন্তর্ভুক্ত রয়েছে ফাংশন ডিক্লারেশন, ফাংশনের বাইরে var দিয়ে তৈরি করা ভ্যারিয়েবল এবং গ্লোবাল অবজেক্টে স্পষ্টভাবে সেট করা প্রোপার্টি। উদাহরণস্বরূপ, enumerable কে ' false সেট করে Object.defineProperty() ব্যবহার করলে এমন একটি সিম্বল তৈরি হয় যা আপনি আপনার লাইব্রেরিতে ব্যবহার করতে পারেন, কিন্তু এই সিম্বলটি আপনার ব্যবহারকারীদের কাছে অ্যাক্সেসযোগ্য নয়।
  4. আপনার লাইব্রেরি ব্যবহারকারীরা যাতে স্ক্রিপ্ট এডিটর অটোকমপ্লিট এবং স্বয়ংক্রিয়ভাবে তৈরি হওয়া ডকুমেন্টেশন ব্যবহার করতে পারেন, তা নিশ্চিত করতে আপনার সমস্ত ফাংশনের জন্য JSDoc-স্টাইলের ডকুমেন্টেশন অন্তর্ভুক্ত করুন। এখানে একটি উদাহরণ দেওয়া হলো:

    /**
     * Raises a number to the given power, and returns the result.
     *
     * @param {number} base the number we're raising to a power
     * @param {number} exp the exponent we're raising the base to
     * @return {number} the result of the exponential calculation
     */
    function power(base, exp) { ... }
    

সম্পদ পরিধি নির্ধারণ

লাইব্রেরি নিয়ে কাজ করার সময় দুই ধরনের রিসোর্স থাকে: শেয়ার্ড এবং নন-শেয়ার্ড। একটি শেয়ার্ড রিসোর্সের অর্থ হলো, লাইব্রেরি এবং অন্তর্ভুক্তকারী স্ক্রিপ্ট উভয়েরই রিসোর্সটির একই ইনস্ট্যান্সে অন্তর্নির্মিত অ্যাক্সেস থাকে। নিচের ডায়াগ্রামটি ইউজার প্রোপার্টিজের উদাহরণ ব্যবহার করে একটি শেয়ার্ড রিসোর্স ব্যাখ্যা করে:

ভাগ করা সম্পদ

একটি নন-শেয়ার্ড রিসোর্স বলতে বোঝায় যে, লাইব্রেরি এবং অন্তর্ভুক্তকারী স্ক্রিপ্ট উভয়েরই শুধুমাত্র রিসোর্সটির নিজ নিজ ইনস্ট্যান্সে বিল্ট-ইন অ্যাক্সেস থাকে। তবে, একটি লাইব্রেরি তার নন-শেয়ার্ড রিসোর্সগুলোর উপর কাজ করার জন্য সুস্পষ্ট ফাংশন তৈরি করে সেগুলোতে অ্যাক্সেস প্রদান করতে পারে। আপনার লাইব্রেরির স্ক্রিপ্ট প্রোপার্টিগুলো প্রকাশ করার জন্য আপনি যে ফাংশনটি অন্তর্ভুক্ত করবেন, তার একটি উদাহরণ নিচে দেওয়া হলো:

  function getLibraryProperty(key) {
    const scriptProperties = PropertiesService.getScriptProperties();
    return scriptProperties.getProperty(key);
  }

নিম্নলিখিত ডায়াগ্রামটি স্ক্রিপ্ট প্রোপার্টিজের উদাহরণ ব্যবহার করে একটি নন-শেয়ার্ড রিসোর্স ব্যাখ্যা করে:

একটি অ-শেয়ারকৃত সম্পদের উদাহরণ

আপনার অবগতির জন্য এই সারণিতে শেয়ার করা এবং শেয়ার না করা রিসোর্সগুলোর তালিকা দেওয়া হলো:

রিসোর্স ভাগ করা* শেয়ার করা হয়নি** মন্তব্য
তালা লাইব্রেরিতে তৈরি করা হলে একই ইনস্ট্যান্সটি স্ক্রিপ্ট সহ সকলের কাছে দৃশ্যমান হয়।
স্ক্রিপ্ট বৈশিষ্ট্য লাইব্রেরিতে তৈরি করা হলে একই ইনস্ট্যান্সটি স্ক্রিপ্ট সহ সকলের কাছে দৃশ্যমান হয়।
ক্যাশে লাইব্রেরিতে তৈরি করা হলে একই ইনস্ট্যান্সটি স্ক্রিপ্ট সহ সকলের কাছে দৃশ্যমান হয়।
ট্রিগার লাইব্রেরিতে তৈরি করা সাধারণ ট্রিগারগুলো অন্তর্ভুক্তকারী স্ক্রিপ্ট দ্বারা সক্রিয় হয় না।
স্ক্রিপ্টঅ্যাপ
UiApp
ব্যবহারকারীর বৈশিষ্ট্য
লগার এবং এক্সিকিউশন ট্রান্সক্রিপ্ট
সাইট, শীট এবং অন্যান্য কন্টেইনার getActive কল করলে অন্তর্ভুক্তকারী স্ক্রিপ্টের কন্টেইনারটি ফেরত আসে।
মেইলঅ্যাপ এবং জিমেইলঅ্যাপ
এর মানে হলো, লাইব্রেরিটির কাছে ফিচার/রিসোর্সটির নিজস্ব কোনো ইনস্ট্যান্স নেই, বরং এটি সেই স্ক্রিপ্ট দ্বারা তৈরি ইনস্ট্যান্সটি ব্যবহার করছে যা এটিকে আহ্বান করেছে।
এর মানে হলো, লাইব্রেরিটির রিসোর্স/ফিচারটির নিজস্ব একটি ইনস্ট্যান্স থাকে এবং যে সমস্ত স্ক্রিপ্ট লাইব্রেরিটি ব্যবহার করে, তারা সেই একই ইনস্ট্যান্সটি শেয়ার করে ও সেটিতে অ্যাক্সেস পায়।

একটি লাইব্রেরি পরীক্ষা করুন

আপনার লাইব্রেরি পরীক্ষা করার জন্য হেড ডিপ্লয়মেন্ট ব্যবহার করুন। স্ক্রিপ্টটিতে এডিটর-লেভেল অ্যাক্সেস আছে এমন যে কেউ হেড ডিপ্লয়মেন্ট ব্যবহার করতে পারেন।

আপনার কাছে লাইব্রেরিটির অন্তত একটি সংস্করণ সংরক্ষিত থাকা প্রয়োজন।

একটি লাইব্রেরি ডিবাগ করুন

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

লাইব্রেরি ভার্সনের জন্য HEAD (ডেভেলপমেন্ট মোড) ব্যবহার করলে লাইব্রেরির ভেতরে স্টেপ ইন করা বা ব্রেকপয়েন্ট সেট করা যায় না।

লাইব্রেরি কোড ডিবাগ করতে, নিম্নলিখিত পদ্ধতিগুলোর মধ্যে একটি ব্যবহার করুন:

  • লাইব্রেরি প্রজেক্ট থেকে ডিবাগ করুন : অ্যাপস স্ক্রিপ্ট এডিটরে লাইব্রেরি স্ক্রিপ্ট প্রজেক্টটি খুলুন। নির্দিষ্ট আর্গুমেন্ট দিয়ে লাইব্রেরি ফাংশন পরীক্ষা করার জন্য, লাইব্রেরি প্রজেক্টের মধ্যে একটি অস্থায়ী "টেস্ট" ফাংশন তৈরি করুন যা আপনার লাইব্রেরি ফাংশনগুলোকে কল করবে, তারপর সেই টেস্ট ফাংশনটি ডিবাগ মোডে চালান।
  • লগিং : আপনার লাইব্রেরি ফাংশনগুলোর মধ্যে console.log() ব্যবহার করে এক্সিকিউশন লগে তথ্য আউটপুট করুন। যখন অন্য কোনো স্ক্রিপ্ট দ্বারা লাইব্রেরিটি কল করা হয়, তখন এই লগগুলো কলকারী স্ক্রিপ্টের এক্সিকিউশন লগে প্রদর্শিত হয়।