পয়েন্টার / পুনরাবৃত্তি সম্পর্কে এত কঠিন কি? [বন্ধ]


20

ইন জাভা বিদ্যালয় বিপদ জোএল পেন এ তার অভিজ্ঞতা এবং "সেগমেন্টেশন ফল্ট" এর অসুবিধা আলোচনা করা হয়েছে। তিনি বলেন

[আপনি যতক্ষণ না সিগফল্টগুলি কঠিন)] "দীর্ঘ নিঃশ্বাস নিন এবং সত্যিই আপনার মনকে একসাথে বিমূর্ততার দুটি ভিন্ন স্তরে কাজ করতে বাধ্য করার চেষ্টা করুন।"

সেগফাল্টগুলির সাধারণ কারণগুলির একটি তালিকা দেওয়া , আমি বুঝতে পারি না কীভাবে আমাদের বিমূর্তির 2 স্তরে কাজ করতে হবে।

কোনও কারণে, জোয়েল এই ধারণাগুলিটিকে মূলত একটি প্রোগ্রামার বিমূর্ত করার ক্ষমতা হিসাবে বিবেচনা করে। আমি খুব বেশি ধরে নিতে চাই না। সুতরাং, পয়েন্টার / পুনরাবৃত্তি সম্পর্কে এত কঠিন কি? উদাহরণগুলি সুন্দর হবে।


31
জোয়েল আপনার সম্পর্কে কী ভাবতে পারে তা নিয়ে চিন্তাভাবনা বন্ধ করুন। আপনি যদি পুনরাবৃত্তি সহজ মনে করেন, এটি ভাল। অন্য সবাই তা করে না।
হতাশিত

6
পুনরাবৃত্তি সংজ্ঞা দ্বারা সহজ (ফাংশন যা নিজেকে কল করে) তবে এটি কখন ব্যবহার করতে হবে এবং কীভাবে এটি কাজ করবে তা জেনে রাখা শক্ত অংশ।
জেফো

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

4
@ পি ব্রায়ান.ম্যাকি: আমরা ভুল বোঝাবুঝি করছি না। প্রশ্ন আসলে কিছুই জিজ্ঞাসা করে না। এটি নির্মম স্ব-প্রচার। আপনি যদি জানতে চান যে জোল পয়েন্টার / পুনরাবৃত্তি সম্পর্কে কী জিজ্ঞাসা করছে, তাকে জিজ্ঞাসা করুন: Team@stackoverflow.com
জোয়েল ইথারটন

19
এই প্রশ্নের সদৃশ ?
ozz

উত্তর:


38

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

আমার হাইপোথিসিসটি হ'ল পয়েন্টার এবং পুনরাবৃত্তি একই হয় যাতে আপনার একই সাথে আপনার মাথায় দুটি স্তরের বিমূর্ততা রাখা প্রয়োজন। মাল্টিপল-লেভেল অফ অ্যাবস্ট্রাকশন সম্পর্কে এমন কিছু আছে যার জন্য এক ধরণের মানসিক প্রবণতা প্রয়োজন যা কিছু লোকের পক্ষে কখনওই সম্ভব না এটি খুব সম্ভব।

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

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


4
"" বেস কেস + ইনডাকটিভ কেস "" এর দিক থেকে একটি অ্যালগরিদম সম্পর্কে ভাবতে খুব অপ্রাকৃত, - আমি মনে করি এটি কোনওভাবেই অপ্রাকৃত নয়, বাচ্চাদের সেই অনুযায়ী প্রশিক্ষণ দেওয়া হচ্ছে না।
ইনগো

14
যদি এটি প্রাকৃতিক হয় তবে আপনার প্রশিক্ষণের দরকার পড়েনি। : P: P
জোএল স্পলস্কাই

1
শুভ পয়েন্ট :), তবে আমাদের গণিত, যুক্তি, পদার্থবিজ্ঞান ইত্যাদির প্রশিক্ষণের দরকার নেই যা সমস্ত বিস্তৃত অর্থে সবচেয়ে স্বাভাবিক। মজার বিষয় হল, কয়েকটি প্রোগ্রামার ভাষাগুলির সিনট্যাক্সে কোনও সমস্যা আছে, তবুও এটি পুনরাবৃত্তিতে পূর্ণ।
এঙ্গো

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

2
আমি মনে করি পয়েন্টারগুলি বোঝার অক্ষমতা এবং পুনরাবৃত্তি একটি) সামগ্রিক আইকিউ স্তর এবং খ) খারাপ গাণিতিক শিক্ষার সাথে যুক্ত।
কোয়ান্ট_দেব

23

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

পয়েন্টার হিসাবে, আবার, পয়েন্টার ধারণা খুব সহজ: একটি পরিবর্তনশীল যা একটি মেমরি ঠিকানা সঞ্চয় করে। তবে আবারও, যখন আপনার void**নোটিসের নির্দেশকগুলির জটিল জটিল কাঠামোর সাথে কোনও ভুল হয়ে যায় যা বিভিন্ন নোডের দিকে নির্দেশ করে, আপনি দেখতে পাবেন যে কেন আপনার পয়েন্টারগুলির মধ্যে একটি আবর্জনা ঠিকানার দিকে ইঙ্গিত করছে তা নির্ধারণ করার জন্য সংগ্রাম করতে গিয়ে এটি কেন জটিল হতে পারে।


1
পুনরাবৃত্তিযোগ্য শালীন পার্সার প্রয়োগ করা যখন আমি সত্যিই অনুভব করি যে আমার পুনরাবৃত্তির উপর কিছুটা দখল আছে। পয়েন্টারগুলি আপনি যেমন বলেছিলেন তেমন উচ্চ স্তরে বোঝা সহজ; পয়েন্টারগুলির সাথে কাজ করে এমন বাস্তবায়নগুলির বাদাম এবং বল্টগুলিতে না যাওয়া পর্যন্ত আপনি দেখতে পাচ্ছেন না যে তারা কেন জটিল।
ক্রিস

অনেক ফাংশনের মধ্যে পারস্পরিক পুনরাবৃত্তি মূলত হিসাবে একই goto
তারকাব্লু

2
@ স্টারব্লিউ, সত্যই নয় - যেহেতু প্রতিটি স্ট্যাকফ্রেম স্থানীয় ভেরিয়েবলের নতুন উদাহরণ তৈরি করে।
চার্লস সালভিয়া

আপনি ঠিক বলেছেন, কেবল পুচ্ছ পুনরাবৃত্তি একই goto
তারকাব্লু

3
@ উইনয়েজ int a() { return b(); }পুনরাবৃত্ত হতে পারে তবে এটি সংজ্ঞাটির উপর নির্ভর করে b। সুতরাং এটি যতটা সহজ বলে মনে হচ্ছে তত সহজ নয় ...
বিকল্প

14

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

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


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

@ ডেভিড - উম, আমার প্রতিক্রিয়াটির সাথে এর কী সম্পর্ক আছে?
আনন

1
জাভা সমর্থনকারী পয়েন্টার সম্পর্কে আপনার মন্তব্য।
ডেভিড থর্নলি

"যেখানে আপনি একটি পয়েন্টার আপ করেছেন (এটি স্ট্যাকট্রেসের পয়েন্টে খুব কমই পাওয়া যায়)।" আপনি যদি যথেষ্ট ভাগ্যবান হন তবে স্ট্যাকট্র্যাস পাবেন।
ওমেগা সেন্টৌরি

5
আমি ডেভিড থর্নলির সাথে একমত; জাভা পয়েন্টারগুলিকে সমর্থন করে না যতক্ষণ না আমি কোনও ইন্টি পয়েন্টারে একটি পয়েন্টারকে পয়েন্টার করতে পারি না। কোনটি আমি মনে করতে পারি যে আমি 4-5 শ্রেণির মতো করে প্রতিটি রেফারেন্সকে অন্যরকম কিছু করে তৈরি করতে পেরেছি, তবে এটি কি সত্যই নির্দেশক বা এটি একটি কুৎসিত কাজ?
বিকল্প

12

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

একইভাবে, প্রতিবার যখন কেউ ফাইবোনাচি ফাংশন ব্যবহার করে তখন পুনরাবৃত্তিটি চিত্রিত করতে চাই আমি চিৎকার করতে চাই। এটি একটি খারাপ উদাহরণ কারণ পুনরাবৃত্ত সংস্করণটি লেখার পক্ষে আরও শক্ত নয় এবং এটি পুনরাবৃত্তির চেয়ে কমপক্ষে পাশাপাশি বা আরও ভাল অভিনয় করে এবং এটি আপনাকে পুনর্বিবেচনামূলক সমাধান কেন কার্যকর বা কাঙ্ক্ষিত হতে পারে তার কোনও সত্য অন্তর্দৃষ্টি দেয় না। Quicksort বৃক্ষ ট্র্যাভেরসাল ইত্যাদি হয় পর্যন্ত কেন এবং পুনরাবৃত্তির কিভাবে জন্য ভাল উদাহরণ।

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


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

আপনার যদি ফরট্রান চতুর্থে কুইকসোর্টের একটি লিঙ্ক প্রয়োগ করা থাকে তবে আমি এটি দেখতে পছন্দ করব। এটি করা যায় না এমনটি বলছেন না - আসলে, আমি এটি প্রায় 30 বছর আগে বেসিকটিতে প্রয়োগ করেছি - তবে আমি এটি দেখতে আগ্রহী হব।
আনন

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

8

পয়েন্টারগুলির সাথে বেশ কয়েকটি সমস্যা রয়েছে:

  1. Aliasing বিভিন্ন নাম / ভেরিয়েবল ব্যবহার করে কোনও জিনিসের মান পরিবর্তন করার সম্ভাবনা।
  2. অ-লোকালিটি কোনও প্রেক্ষাপটে কোনও বস্তুর মান পরিবর্তনের সম্ভাবনা যার সাথে এটি ঘোষিত হয় (রেফারেন্স দ্বারা পাস হওয়া যুক্তিগুলির সাথেও এটি ঘটে)।
  3. লাইফটাইম মেলেনি ম্যাচ পয়েন্টারের জীবদ্দশায় যে বিষয়টির দিকে লক্ষ্য করা যায় তার জীবনকাল পৃথক হতে পারে এবং এটি অবৈধ রেফারেন্স (সেগফুল্টস) বা আবর্জনা হতে পারে।
  4. পয়েন্টার গাণিতিক । কিছু প্রোগ্রামিং ল্যাঙ্গুয়েজ পয়েন্টারগুলিকে পূর্ণসংখ্যার হিসাবে ম্যানিপুলেশন করতে দেয় এবং এর অর্থ পয়েন্টারগুলি যে কোনও জায়গায় পয়েন্ট করতে পারে (কোনও বাগ যখন উপস্থিত থাকে তখন সবচেয়ে অপ্রত্যাশিত স্থানগুলি সহ)। পয়েন্টার গাণিতিকটি সঠিকভাবে ব্যবহার করতে, একজন প্রোগ্রামারকে অবশ্যই নির্দেশিত বস্তুর মেমরির আকারগুলি সম্পর্কে সচেতন হতে হবে, এবং এটি সম্পর্কে আরও ভাবতে হবে।
  5. টাইপ কাস্টস এক প্রকার থেকে অন্য প্রকারে একটি পয়েন্টার cast ালাইয়ের ক্ষমতা কোনও বস্তুর মেমরির উদ্দেশ্য থেকে পৃথক করে ওভাররাইট করার অনুমতি দেয়।

এজন্য পয়েন্টার ব্যবহার করার সময় কোনও প্রোগ্রামারকে অবশ্যই আরও ভালভাবে চিন্তা করতে হবে ( বিমূর্তির দুটি স্তর সম্পর্কে আমি জানি না )। এটি একজন নবজাতকের দ্বারা করা সাধারণ ভুলগুলির একটি উদাহরণ:

Pair* make_pair(int a, int b)
{
    Pair p;
    p.a = a;
    p.b = b;
    return &p;
}

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

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

লাল-কালো গাছের পদ্ধতিগত বাস্তবায়নের মতো, পয়েন্টারগুলির চারপাশে পাসের সাথে পুনরাবৃত্ত ফাংশনগুলির কথা চিন্তা করুন যেখানে স্থানে ডেটা কাঠামো পরিবর্তিত হয়; চেয়ে আমার মনে হয় আরো কঠিন কিছু একটি কার্মিক সহযোগীর

এটি প্রশ্নের মধ্যে উল্লেখ করা হয়নি, তবে অন্যান্য গুরুত্বপূর্ণ বিষয় যা নিয়ে নবীনদের সমস্যা হয় সম্মতি

যেমনটি অন্যরা উল্লেখ করেছেন, কিছু প্রোগ্রামিং ভাষার কন্সট্রাক্টসগুলির সাথে একটি অতিরিক্ত, অ-ধারণামূলক সমস্যা রয়েছে: এটি হ'ল আমরা যদি বুঝতে পারি তবেও এই কনস্ট্রাক্টগুলির সাথে সহজ এবং সৎ ভুলগুলি ডিবাগ করা অত্যন্ত কঠিন can


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

4
@ রাডেক এস: না, তা হবে না। এটি একটি অবৈধ পয়েন্টারটি ফিরিয়ে দেবে যে কোনও কিছু পরিবেশে কিছুক্ষণ কাজ করা হয় যতক্ষণ না অন্য কিছু এটির ওভাররাইট করে। ( malloc()
বাস্তবে

1
@ রেডেক নমুনা ফাংশনে, পয়েন্টারটি মেমোরিটির দিকে নির্দেশ করে যে প্রোগ্রামিং ল্যাঙ্গুয়েজ (এই ক্ষেত্রে সি) গ্যারান্টি দিয়ে ফাংশন ফিরে আসার পরে মুক্তি পাবে। সুতরাং, ফিরে পয়েন্টার আবর্জনা নির্দেশ করে । আবর্জনা সংগ্রহের ভাষাগুলি যেকোন প্রসঙ্গে যেমন উল্লেখ করা হয় ততক্ষণ অবজেক্টটিকে বাঁচিয়ে রাখে।
অপালালা

যাইহোক, মরিচে পয়েন্টার রয়েছে তবে এই সমস্যাগুলি ছাড়াই। (যখন অনিরাপদ প্রসঙ্গে নয়)
সর্জে বোর্শ

2

পয়েন্টার এবং পুনরাবৃত্তি দুটি পৃথক জন্তু এবং বিভিন্ন কারণ রয়েছে যা প্রত্যেকে "কঠিন" হিসাবে যোগ্য করে তোলে।

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

প্রথম শিখার সময় পুনরাবৃত্তি একটি সামান্য মানসিক লাফ নেয় কারণ আপনি নিজের দিক দিয়ে কোনও ফাংশনটি সংজ্ঞায়িত করছেন। আপনি যখন প্রথমে এটি জুড়ে আসেন এটি একটি বুনো ধারণা, তবে আপনি একবার ধারণাটি ধরে ফেললে এটি দ্বিতীয় প্রকৃতিতে পরিণত হয়।

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


1

আমি পি। ব্রায়ানকে একটি +1 দিই, কারণ আমার মনে হয় যে সে তার মতো করে: পুনরাবৃত্তি এমন একটি মৌলিক ধারণা যে যার সাথে সামান্যতম অসুবিধাগুলি রয়েছে তাকে ম্যাক ডোনাল্ডসে চাকরির সন্ধান করা আরও ভাল বিবেচনা করা উচিত, তবে তারপরেও পুনরাবৃত্তি রয়েছে:

make a burger:
   put a cold burger on the grill
   wait
   flip
   wait
   hand the fried burger over to the service personel
   unless its end of shift: make a burger

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


6
এটি লেজ পুনরুদ্ধার, যা তর্কযোগ্যভাবে লুপিং হয়।
মাইকেল কে

6
দুঃখিত, আমার কাছে লুপিংটি যুক্তিযুক্তভাবে পুনরাবৃত্তি হয় :)
এঙ্গো

3
@ ইঙ্গো: :) কার্যকরী ধর্মান্ধ!
মাইকেল কে

1
@ মিশেল - হেই, সত্যিই !, তবে আমি মনে করি যে কেউ মামলা করতে পারে যে পুনরাবৃত্তি আরও মৌলিক ধারণা।
এঙ্গো

@ ইঙ্গো: আপনি নিশ্চয়ই (আপনার উদাহরণটি এটি ভালভাবে প্রদর্শন করে)। যাইহোক, কোনও কারণে প্রোগ্রামিংয়ে মানুষের সাথে কঠিন সময় কাটাচ্ছে - আমরা মনে করি যে goto topকোনও কারণে আইএমই অতিরিক্ত প্রয়োজন want
মাইকেল কে

1

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

পয়েন্টারগুলি হ'ল, আমি মনে করি, এটি সহজ উদাহরণ to পয়েন্টারগুলির সাথে ডিল করার জন্য প্রোগ্রামের প্রয়োগের একটি মানসিক মডেল প্রয়োজন যা প্রোগ্রামগুলি মেমরির ঠিকানা এবং ডেটা সহ প্রকৃতভাবে কাজ করে। আমার অভিজ্ঞতাটি হ'ল প্রায়শই প্রোগ্রামাররা পয়েন্টার সম্পর্কে জানার আগে এমনকি এ সম্পর্কে চিন্তাও করেনি। এমনকি যদি তারা এটি একটি বিমূর্ত অর্থে জানেন, তবে তারা কোনও প্রোগ্রাম কীভাবে কাজ করে তা তাদের জ্ঞানীয় মডেলটিতে এটিকে গ্রহণ করেন নি। যখন পয়েন্টারগুলি প্রবর্তিত হয় তখন কোড কীভাবে কাজ করে সে সম্পর্কে তারা ভাবেন in

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

বিষয়টি হ'ল আমি মনে করি না যে পয়েন্টার এবং পুনরাবৃত্তি হ'ল দু'টি ক্ষেত্রই অপর্যাপ্ত মানসিক মডেলটিতে আটকা পড়া লোকদের জন্য সমস্যাযুক্ত। প্যারালালিজম এমন একটি ক্ষেত্র বলে মনে হয় যা কিছু লোক সহজেই আটকে যায় এবং তাদের মানসিক মডেলটির জন্য অ্যাকাউন্টে মানিয়ে নিতে অসুবিধা হয়, কেবলমাত্র একটি সাক্ষাত্কারে প্রায়শই পয়েন্টার এবং পুনরাবৃত্তি পরীক্ষা করা সহজ।


1
  DATA    |     CODE
          |
 pointer  |   recursion    SELF REFERENTIAL
----------+---------------------------------
 objects  |   macro        SELF MODIFYING
          |
          |

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

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


-1

আননের উত্তরের সাথে খুব মিল।
Newbies জন্য জ্ঞানীয় সমস্যা বাদে, উভয় পয়েন্টার এবং পুনরাবৃত্তি খুব শক্তিশালী, এবং ক্রিপ্টিক উপায়ে ব্যবহার করা যেতে পারে।

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

একইভাবে পুনরাবৃত্তি। কৌতুকপূর্ণ জিনিসগুলি গোপন করা ডেটা স্ট্রাকচারের (স্ট্যাক) মধ্যে কৌশল পূরণ করার মাধ্যমে এটি শক্তিশালী উপায় হতে পারে।
তবে, যদি কিছু সূক্ষ্মভাবে ভুলভাবে করা হয় তবে কী চলছে তা নির্ধারণ করা কঠিন hard

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