প্রোগ্রামিংয়ে "হুক" শব্দটি কী বোঝায়?


248

আমি সম্প্রতি লিখছি এমন একটি প্রোগ্রাম সম্পর্কে কিছু লোকের সাথে কথা বলার সময় আমি "হুক" শব্দটি শুনেছিলাম। এই শব্দটি ঠিক কী বোঝায় তা সম্পর্কে আমি নিশ্চিত নই যদিও আমি কথোপকথন থেকে অনুমান করেছি যে হুক একধরণের ফাংশন। আমি একটি সংজ্ঞা অনুসন্ধান করেছি কিন্তু একটি ভাল উত্তর খুঁজে পেতে অক্ষম। সংজ্ঞাটি বর্ণনা করার জন্য কেউ এই শব্দটির সাধারণত কী বোঝায় এবং সম্ভবত একটি ছোট্ট উদাহরণ আমাকে দিতে সক্ষম হবেন?


3
দেখুন hooking @ উইকিপিডিয়া । নিম্ন-ভোট দেওয়া উত্তরের একটিতে লিঙ্কটি সমাহিত করা হয়েছে।
প্লেক

উত্তর:


143

মূলত এটি কোডের একটি জায়গা যা আপনাকে আলাদা আলাদা আচরণ সরবরাহ করতে বা কিছু ঘটেছিল তখন প্রতিক্রিয়া জানাতে মডিউলটিতে ট্যাপ করতে দেয়।


7
এটি কি কলব্যাকের মতো?
ক্রিস

19
হুক প্রায়শই (তবে সর্বদা নয়) কলব্যাক ফাংশন ব্যবহার করে। উদাহরণস্বরূপ, আপনি "হুকইভেন্ট (ইভেন্টস.স্টার্টআপ, মাইক্যালব্যাক ফাংশন)" ব্যবহার করে কোনও ইভেন্ট সিস্টেম হুক করতে পারেন। আপনি হুকএভেন্ট ফাংশনে কোনও ফাংশন পয়েন্টারটি অতিক্রম করছেন, সুতরাং ঘটনাটি ঘটে গেলে কোন ফাংশনটি কল করতে হবে তা তা জানে। আশা করি এটি সাহায্য করে :-)
উইলিয়াম ব্রেন্ডেল

6
ঠিক। একটি কলব্যাক হুক একটি "টাইপ"।
মিকাহ

21
উম ... না একটি কলব্যাক একটি কলব্যাক এবং হুকগুলির সাথে কোনও সম্পর্ক নেই, কলব্যাকগুলি হুক-পদ্ধতির প্রয়োগের জন্য কেবল ব্যবহৃত হয়। কলব্যাকগুলি ফাংশন / পদ্ধতি / পদ্ধতিতে (সিএলএল) পয়েন্টার (আরএলজেএমপি) হয়, হুকগুলি অ্যাপ্লিকেশনগুলিতে চলমান পরিবর্তন।
বিশেষায়িত করুন

1
@ সাহিলবাব্বার নং। একটি বাধা বিপত্তির ফলে নির্দিষ্ট কিছু স্থানে (বাধা) নির্দেশাবলী কার্যকর করা হয়েছে। আপনি বাধাপ্রাপ্ত হ্যান্ডলিংয়ের প্রক্রিয়াটিতে ঝুঁকতে সক্ষম হতে পারেন, উদাহরণস্বরূপ, বাধা হ্যান্ডলারের অবস্থানের তালিকাটি সারণীটি সংশোধন করে যাতে আপনার কোডটি প্রথমে বিঘ্নিত হওয়ার পরে কল হয় (এবং তারপরে আপনার কোডটি পূর্বে উপস্থিত বাধা হ্যান্ডলিং কোডকে কল করবে) একটি ডেইজি চেইন পদ্ধতি)
ডেভিড টনহোফার

77

একটি হুক হ'ল সেই সফ্টওয়্যারটির ব্যবহারকারীদের জন্য নির্দিষ্ট পরিস্থিতিতে তাদের নিজস্ব কোড ডেকে আনার জন্য সফ্টওয়্যার দ্বারা কার্যকারিতা সরবরাহ করা হয়। এই কোডটি বর্তমান কোডকে বৃদ্ধি বা প্রতিস্থাপন করতে পারে।

পুরানো দিনগুলিতে যখন কম্পিউটারগুলি সত্যই ব্যক্তিগত ছিল এবং ভাইরাসগুলি খুব বেশি প্রচলিত ছিল (আমি '80 এর দশকে বলছি), তখন আপনার কোডটি কল করার জন্য অপারেটিং সিস্টেম সফ্টওয়্যারটি প্যাচ করার মতোই সহজ ছিল। আমার মনে আছে অ্যাপল দ্বিতীয়টিতে অ্যাপলসফট বেসিক ভাষায় একটি এক্সটেনশান লিখেছিলাম যা লাইনটির কোনও প্রক্রিয়া করার আগে আমার কোডটিতে একটি কল ইনজেকশনের মাধ্যমে কেবল আমার কোডটি বেসিক ইন্টারপ্রেটারে হুক করে ফেলেছিল।

কিছু কম্পিউটারের প্রি-ডিজাইন করা হুক ছিল, এর একটি উদাহরণ অ্যাপল II-এ I / O স্ট্রিম। এটি পুরো ডিস্ক উপ-সিস্টেমটি ইনজেক্ট করার জন্য এই জাতীয় একটি হুক ব্যবহার করেছিল (অ্যাপল দ্বিতীয় রমগুলি মূলত সেই দিনগুলিতে তৈরি হয়েছিল যেখানে পিসিগুলির জন্য ক্যাসেটগুলি প্রাথমিক স্টোরেজ মাধ্যম ছিল)। আপনি ডিস্কগুলিকে ASCII কোড 4 ( ) মুদ্রণ করে নিয়ন্ত্রণ করেছিলেন যার CTRL-Dপরে আপনি ক এর সম্পাদন করতে চেয়েছিলেন CRএবং এটি ডিস্ক উপ-সিস্টেম দ্বারা আটকা পড়েছিল, যা অ্যাপল রম মুদ্রণের রুটিনগুলিতে নিজেকে ঝুঁকে ফেলেছিল।

সুতরাং উদাহরণস্বরূপ, লাইনগুলি:

PRINT CHR(4);"CATALOG"
PRINT CHR(4);"IN#6"

ডিস্কের বিষয়বস্তুগুলির তালিকা তৈরি করে মেশিনটিকে পুনরায় আরম্ভ করতে হবে। এটি আপনার বেসিক প্রোগ্রামগুলিকে সুরক্ষা দেওয়ার মতো কৌশলগুলিকে প্রথম লাইনটি সেট করে মঞ্জুরি দিয়েছে:

123 REM XIN#6

তারপরে অক্ষরটি যেখানে ছিল সেখানে POKEসন্নিবেশ করানোর মাধ্যমে । তারপরে, যে কেউ আপনার উত্সটি তালিকাভুক্ত করার চেষ্টা করছে তা আউটপুট রুটিনগুলির মাধ্যমে পুনরায় আরম্ভের ক্রমটি প্রেরণ করবে যেখানে ডিস্ক সাব-সিস্টেম এটি সনাক্ত করবে।CTRL-DX

আমরা যে আচরণটি চাইতাম তা পেতে প্রায়শই আমাদের সেই ধরণের কৌশল অবলম্বন করতে হয়েছিল।

আজকাল, অপারেটিং সিস্টেমটি আরও সুরক্ষিত হওয়ার সাথে সাথে, এটি হুকগুলির জন্য নিজেই সুবিধা সরবরাহ করে, যেহেতু আপনার আর অপারেটিং সিস্টেমটিকে "ইন-ফ্লাইট" বা ডিস্কে পরিবর্তন করার কথা নেই।

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


41

সাধারণ অর্থে, একটি "হুক" এমন একটি জিনিস যা আপনাকে কোনও প্রোগ্রামার, দেখতে এবং / অথবা সাথে ইন্টারফেস করতে এবং / অথবা ইতিমধ্যে একটি সিস্টেম / প্রোগ্রামে চলছে এমন কিছু পরিবর্তন করতে দেয়।

উদাহরণস্বরূপ, ড্রুপাল সিএমএস বিকাশকারীদের হুক সরবরাহ করে যা তাদের একটি "সামগ্রী নোড" তৈরি হওয়ার পরে অতিরিক্ত পদক্ষেপ নিতে দেয়। যদি কোনও বিকাশকারী একটি হুক প্রয়োগ না করে তবে নোডটি স্বাভাবিকভাবে তৈরি করা হয়। যদি কোনও বিকাশকারী একটি হুক প্রয়োগ করেন, যখনই নোড তৈরি হবে তখন তাদের কিছু অতিরিক্ত কোড চালানো যেতে পারে। এই কোডটি পিছনে ঘূর্ণায়মান এবং / অথবা মূল ক্রিয়ায় পরিবর্তন সহ কিছু করতে পারে। এটি সম্পূর্ণ নোড তৈরির সাথে সম্পর্কযুক্ত কিছু করতে পারে do

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

আরেকটি উদাহরণ. কখনও কখনও ওয়েব বিকাশকারীরা হুক হিসাবে উপাদানগুলির শ্রেণীর নাম এবং / অথবা আইডি উল্লেখ করে। কারণ আইডি / শ্রেণীর নামটি কোনও উপাদানটিতে রেখে, তারা সেই উপাদানটি সংশোধন করতে জাভাস্ক্রিপ্ট ব্যবহার করতে পারে, বা পৃষ্ঠার নথিতে "হুক ইন" করতে পারে। (এটি অর্থ প্রসারিত করছে, তবে এটি সাধারণত ব্যবহৃত হয় এবং উল্লেখযোগ্য)


"পৃষ্ঠা নথিতে হুক ইন" বলতে আপনার অর্থ কী? আপনি একটি উদাহরণ দিতে পারেন? আমি প্রথম উদাহরণটি বুঝতে পেরেছি - এইচটিএমএল উপাদানটি একটি আইডি প্রদান করছি যাতে আপনি উপাদানটি সংশোধন করতে জাভাক্রিপ্ট ব্যবহার করতে পারেন।
প্রতিশ্রুতিবদ্ধ

21

সরল বলেছেন:

হুক হ'ল কাস্টম কোড (ফাংশন) কার্যকর করার আগে বা পরে বিদ্যমান কোডের পরিবর্তে একটি উপায়। উদাহরণস্বরূপ, লগইন প্রক্রিয়াতে কোনও ফাংশন "হুক" এ লিখিত হতে পারে সাধারণ লগইন প্রক্রিয়া চালিয়ে যাওয়ার আগে ক্যাপচা ফাংশন সম্পাদন করতে।


সেরা উত্তর ইমো
ড্যানিয়েল

15

প্রোগ্রামিংয়ে হুকিং একটি ইভেন্ট হ্যান্ডলার হিসাবে প্রক্রিয়াগুলির শৃঙ্খলা তৈরি করার জন্য তথাকথিত হুকগুলিকে নিয়োগ করার একটি কৌশল।


15

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

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

বাস্তবায়নের একটি সাধারণ পদ্ধতি হ'ল কোনও ফাংশনকে কলব্যাকের খালি তালিকা দেওয়া, তারপরে কলব্যাকগুলির তালিকা বাড়ানোর ক্ষমতাটি প্রকাশ করা। বেস কোডটি সর্বদা একই এবং যথাযথ সময়ে ফাংশনটিতে কল করবে তবে খালি কলব্যাক তালিকার সাথে ফাংশনটি কিছুই করে না। এটি নকশা দ্বারা।

তৃতীয় পক্ষের তখন অতিরিক্ত কোড লেখার এবং তাদের নতুন কলব্যাকটি হুকের কলব্যাক তালিকায় যুক্ত করার সুযোগ রয়েছে। উপলভ্য হুকগুলির রেফারেন্স ছাড়া আর কিছুই না দিয়ে, তারা বেস সিস্টেমে ন্যূনতম ঝুঁকিতে কার্যকারিতা বাড়িয়েছে।

হুকগুলি বিকাশকারীদের এমন কিছু করতে দেয় না যা অন্যান্য কাঠামো এবং ইন্টারফেসের সাহায্যে করা যায় না। এগুলি কার্য এবং ব্যবহারকারীদের (তৃতীয় পক্ষের বিকাশকারী) বিবেচনা করে করা পছন্দ।

স্পষ্টতার জন্য: একটি হুক সম্প্রসারণের অনুমতি দেয় এবং কলব্যাক ব্যবহার করে প্রয়োগ করা যেতে পারে। কলব্যাকগুলি সাধারণত ফাংশন পয়েন্টার ছাড়া আর কিছু নয়; একটি ফাংশন এর গণিত ঠিকানা। অন্যান্য উত্তর / মন্তব্যে বিভ্রান্তি দেখা দেয়।


4

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


2

কিছু শর্ত সম্মুখীন হলে হুকগুলি কার্যকর করা যেতে পারে। যেমন কিছু পরিবর্তনশীল পরিবর্তন বা কিছু ক্রিয়াকলাপ ডাকা হয় বা কিছু ঘটনা ঘটে। হুকগুলি প্রক্রিয়াতে প্রবেশ করতে পারে এবং জিনিসগুলি পরিবর্তন করতে পারে বা পরিবর্তনের বিষয়ে প্রতিক্রিয়া জানায়।


1

প্রায়শই হুকিং উইন 32 মেসেজ হুকিং বা লিনাক্স / ওএসএক্স সমতুল্যকে বোঝায় , তবে আরও সাধারণভাবে হুকিং হ'ল অন্য কোনও অবজেক্ট / উইন্ডো / প্রোগ্রাম / ইত্যাদি সম্পর্কে অবহিত করা হয় যে কোনও নির্দিষ্ট ক্রিয়া ঘটলে আপনি বিজ্ঞপ্তি পেতে চান। উদাহরণস্বরূপ: সিস্টেমে সমস্ত উইন্ডো থাকার কারণে তারা বন্ধ হতে চলেছে you

একটি সাধারণ নিয়ম হিসাবে, হুকিং কিছুটা বিপজ্জনক কারণ এটি সিস্টেমকে কীভাবে প্রভাবিত করে তা না বুঝে এটি করা বা অস্থিরতার অপ্রত্যাশিত আচরণের দিকে পরিচালিত করতে পারে understanding এটি নির্দিষ্ট পরিস্থিতিতে খুব দরকারী হতে পারে, চিন্তাভাবনা। উদাহরণস্বরূপ: FrapS এটিকে কোন উইন্ডোতে এটি FPS পাল্টা প্রদর্শিত হবে তা নির্ধারণ করতে এটি ব্যবহার করে।


1

হুকের একটি শৃঙ্খল হ'ল ফাংশনগুলির একটি সেট যেখানে প্রতিটি ফাংশন পরেরটিকে কল করে। হুকের একটি শৃঙ্খলা সম্পর্কে তাত্পর্যপূর্ণ যে কোনও প্রোগ্রামার রান সময় শৃঙ্খলে অন্য ফাংশন যুক্ত করতে পারে। এটি করার একটি উপায় হ'ল কোনও পরিচিত জায়গা সন্ধান করা যেখানে কোনও শৃঙ্খলে প্রথম ফাংশনের ঠিকানা রাখা আছে। তারপরে আপনি সেই ফাংশন পয়েন্টারের মান সংরক্ষণ করুন এবং হুক চেইনে প্রবেশ করতে চান এমন ফাংশনের ঠিকানা দিয়ে প্রাথমিক ঠিকানায় মানটি ওভাররাইট করুন। ফাংশনটি তখন ডাকা হয়ে যায়, তার ব্যবসা করে এবং পরবর্তী ক্রিয়াকে শৃঙ্খলে কল করে (যদি আপনি অন্যথায় সিদ্ধান্ত না নেন)। স্বভাবতই, রুবি বা পাইথনের মতো ভাষার রূপক সুবিধাগুলি ব্যবহার করে সরাসরি মেমরির কাছে লেখা থেকে শুরু করে হুকের একটি শৃঙ্খলা তৈরির বিভিন্ন উপায় রয়েছে।

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


1

ড্রুপাল কন্টেন্ট ম্যানেজমেন্ট সিস্টেমে 'হুক' এর তুলনামূলক নির্দিষ্ট অর্থ রয়েছে। যখন কোনও অভ্যন্তরীণ ইভেন্ট ঘটে (যেমন বিষয়বস্তু তৈরি বা ব্যবহারকারী লগইনের মতো), মডিউলগুলি একটি বিশেষ "হুক" ফাংশন প্রয়োগ করে ইভেন্টটিতে প্রতিক্রিয়া জানাতে পারে। এটি নামকরণ কনভেনশনের মাধ্যমে করা হয় - উদাহরণস্বরূপ, ব্যবহারকারী লগইন ইভেন্টের জন্য [আপনার প্লাগ-ইন-নাম] _user_login ()।

এই সম্মেলনের কারণে, অন্তর্নিহিত ইভেন্টগুলিকে "হুক" হিসাবে উল্লেখ করা হয় এবং দ্রুপালের এপিআই ডকুমেন্টেশনে "হুক_উজার_লগিন" এবং "হুক_উজার_আউথেনসিটেট ()" এর মতো নামগুলি উপস্থিত হয়।


এটি উপরে বর্ণিত ধারণার অনুসরণ করে , "কিছু ঘটলে প্রতিক্রিয়া জানাতে" "কলব্যাক" "। এই ক্ষেত্রে, কলব্যাক সুস্পষ্টভাবে নিবন্ধভুক্ত নয়, তবে "ম্যাজিক নামকরণ" এর উপর ভিত্তি করে। এটি বর্তমানে drupal.org উপর আলোচনা করা হয় দেখতে, ঘটনা আঙ্গুলসমূহ জন্য আপনি এই ব্যবহারটি Symfony EventDispatcher
donquixote

সাধারণকরণের জন্য, হুক / কলব্যাক / শ্রোতাকে "কলিং কোডটি পরিচিত করা যায়" বিভিন্ন উপায়ে (এটি সম্পূর্ণ বলা হচ্ছে না): 1. যাদু-নামক ক্রিয়াকলাপ 2. যাদু-নামযুক্ত ক্লাস 3. স্পষ্টভাবে নিবন্ধিত ফাংশন 4. স্পষ্টত নিবন্ধিত অবজেক্টস (শ্রোতা, গ্রাহক, পর্যবেক্ষক) ৫. স্পষ্টভাবে নিবন্ধিত শ্রেণীর নাম (+ alচ্ছিক নির্মাণকারী আরোগুলি), হুক অগ্নিকাণ্ডের আগে তাত্ক্ষণিকভাবে তৈরি করতে হবে।
The

1

খুব সংক্ষেপে, আপনি একটি API কলের কোডটি পরিবর্তন করতে পারেন যেমন MessageBoxএটি আপনার দ্বারা সম্পাদিত আলাদা ফাংশনটি কোথায় করে (বিশ্বব্যাপী সিস্টেমটি প্রশস্ত কাজ করবে, স্থানীয়ভাবে প্রক্রিয়া প্রশস্ত হবে)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.