শিক্ষানবিস: আউটপুট কমান্ডের মধ্যে অপারেশনগুলি কেন থাকে না?


23

আমি একটি প্রবর্তক প্রোগ্রামিং বইয়ের মধ্য দিয়ে যাচ্ছি এবং এটি সিউডোকোডে একটি সাধারণ উদাহরণ তালিকাবদ্ধ করে:

Start
  input myNumber
  set myAnswer = myNumber * 2
  output myAnswer
Stop

আমরা কেন আর একটি ভেরিয়েবল বলা বাদ দিতে পারি না myAnswerএবং কেবল অপারেশনটিকে আউটপুট কমান্ডের মধ্যে রেখে দিতে পারি:

Start
  input myNumber
  output myNumber * 2
Stop

পূর্বের সঠিক এবং উত্তরটি কেন হয় না?


39
বই বলে যে আপনি পারবেন না?
তুলাইনস কর্ডোভা

2
বইটি বলে না যে আমি পারছি না; এটি সম্পর্কে কিছুই বলে না।
ব্যবহারকারী 1475207

5
আমি মনে করি এটি সংক্ষিপ্ত দ্বিতীয় ব্লক দিয়ে শুরু করা বেশ যুক্তিসঙ্গত, আপনার যদি প্রয়োজন হয় তবে প্রথমে রূপান্তর করুন।
মতিন উলহাক

13
সংক্ষিপ্ত উত্তর: আপনি এটি করতে পারেন, লেখক এটিকে আরও পরিষ্কার করার জন্য এটি করছেন (যদিও সত্যই সত্য, এটি সম্ভবত এটি একেবারেই পরিষ্কার করে না ...)।
জুলে

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

উত্তর:


36

আপনি যা করতে পারেন তা অন্যটি যাতে আপনি দেখতে পাচ্ছেন যা চলছে এবং তাই আপনি myAnswerপ্রোগ্রামটিতে পরে ব্যবহার করতে পারেন । আপনি যদি দ্বিতীয়টি ব্যবহার করেন তবে আপনি পুনরায় ব্যবহার করতে পারবেন না myAnswer

সুতরাং পরে প্রোগ্রামটি আপনি চাইলে নিচে:

myAnswer + 5
myAnswer + 1
etc.

আপনি এটি ব্যবহার করতে চান এমন বিভিন্ন অপারেশন থাকতে পারে।

নম্বর অদলবদল বিবেচনা করুন:

Start
  input myNumber
  set myAnswerA = myNumber * 2
  output myAnswerA
  set myAnswerB = myNumber * 3
  output myAnswerB
  set temp = myAnswerA
  set myAnswerA = myAnswerB
  set myAnswerA = temp
  output myAnswerA
  output myAnswerB
Stop

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


1
সুতরাং এটি বৈধ যুক্তি কিন্তু এটি সর্বোত্তম অনুশীলন নয় কারণ এটি প্রোগ্রামের অন্যান্য অংশগুলিতে অপারেশনটি পুনরায় ব্যবহার করতে দেয় না?
ব্যবহারকারী 1475207

@ ব্যবহারকারী 1475207 আমার সম্পাদনা দেখুন। এই ক্ষুদ্র প্রোগ্রামে এটি কিছু যায় আসে না। লেখক জানেন যে আপনি পরে মান আউটপুট করার চেয়ে আরও অনেক কিছু করছেন। এটি কেবল জটিলতার মধ্যে আপনি এটি দেখতে পান। এটি দিয়ে বিদ্ধ করা.
জননি

আহ ঠিক আছে, আমি দেখছি আমি এই বিষয়টি মাথায় রেখে বইটি চালিয়ে যাব। ধন্যবাদ।
ব্যবহারকারী 1475207

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

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

33

আরেকটি কারণ, অ্যাসাইনমেন্ট set myAnswer = myNumber * 2ফলস্বরূপ মানটিকে একটি নাম দেয় । আপনার কোডের দুটি লাইন সংস্করণ পড়ছেন এমন একজন ব্যক্তি কেবল জানেন যে এটির মান প্রিন্ট করে myNumber * 2। তিন লাইন সংস্করণ পড়া দেখতে পারেন একজন ব্যক্তি myNumber * 2হয় উত্তর

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


10
+1, যদিও এটি কেবল তখনই নামটির অর্থবহ হয়। নামযুক্ত i, resultবা অন্য কোনও অর্থহীন শনাক্তকারী এর মতো অস্থায়ী যুদ্ধগুলি ব্যবহার করা স্পষ্টতা বাড়াতে কিছুই করে না, এবং কেবল কোডটি ক্লিট করে
আলেকজান্ডার -

7
@ আলেকজান্ডার: অর্থহীন নামগুলি এখনও অর্থবহ হতে পারে। iআরও ভাল অ্যারে সূচক হতে পারে। যদি একটি থাকে resultতবে ফাংশনটি শেষ হওয়া উচিত return resultবা নৈতিক সমতুল্য। এবং আরও ...
কেভিন

6
@ কেভিন "অর্থহীন নামগুলি এখনও অর্থবহ হতে পারে" উহ্ ... আপনি কি নিশ্চিত? lol
আলেকজান্ডার - মনিকা পুনরায়

3
@ কেভিন আপনি যদি যাচ্ছেন return resultতবে আপনি ফলাফলের জন্য যা যা নির্ধারিত করেছিলেন তা ফিরিয়ে দিতে আপনি কেবল ইনলাইন করতে পারেন। আমরা দেখতে পাচ্ছি এটির ফলাফল। আপনি এটি ফিরিয়ে দিচ্ছেন, আমরা এটি পেয়েছি।
আলেকজান্ডার -

5
@ আলেকজান্ডার: স্পষ্টতই আপনি ফেরতটি ইনলাইন করতে পারেন যদি এটি একটি সাধারণ অভিব্যক্তি, তবে আপনি যদি একাধিক বিবৃতি দিয়ে এটি তৈরি করতে চান তবে কী হবে? ধারাবাহিক নামকরণের স্কিম ব্যবহার করা আপনাকে এই ক্ষেত্রে কী করছে তা স্পষ্ট করে তোলে।
কেভিন

14

এটি সিউডোকোড। এটি কোনও বিশেষ প্রয়োগকৃত ভাষা বলে মনে হয় না।

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


2
এবং কিছু ভাষা (উদাহরণস্বরূপ সি) উভয়কে একই সাথে অনুমতি দেয় - আপনি যদি সত্যিই চান তবে আপনি "আউটপুট (উত্তর = উত্তর * 2)" র মতো জিনিস লিখতে পারেন! (তবে "আউটপুট (উত্তর == উত্তর * 2)" এর চেয়ে সাবধান থাকুন মানে কিছু অন্যরকম ...
আলেফজেরো

9

অন্য উত্তরগুলি নির্দিষ্ট মেকানিকের বিবরণ এবং কখন এক বা অন্য রূপটি আরও ভাল হবে তার উদাহরণগুলিকে সম্বোধন করেছে, তবে আমি আরও কিছুটা পটভূমি, ধরণের দার্শনিকভাবে উল্লেখ করতে চাই:

আপনি একটি ভাষা শিখছেন।

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

যে কোনও ভাষায় যা কার্যকরভাবে ব্যবহৃত হয়, সেই ভাষায় প্রায় কোনও ধারণা প্রকাশের একাধিক উপায় রয়েছে।


ইংরেজী ভাষায় উপলব্ধ বিভিন্ন ধরণের উপকারের বিষয়টি বিবেচনা করুন। এমনকি একটি সাধারণ বাক্য, যেমন

বিড়ালটি লাফ দিয়ে বক্সের দিকে।

একই সঠিক শারীরিক মহাবিশ্ব ক্রিয়া উল্লেখ করার সময় দৃশ্যের বিভিন্ন অংশে কিছুটা আলাদা ধারণা প্রকাশ করতে বা জোর দেওয়ার জন্য বৈচিত্রময় হতে পারে

ব্যাকরণগত বিভিন্নতা:

বাক্সটি বিড়াল দ্বারা লাফিয়ে উঠেছিল।

বাক্সের মধ্যে বিড়ালটি লাফিয়ে উঠল।

তারপরে আরও বিস্তৃত এবং আরও বিস্তৃত পরিবর্তনগুলি এখনও একই শারীরিক ক্রিয়াকে উল্লেখ করে:

বাক্সটি বিড়ালের প্রভাবে কাঁপল।

বিড়ালটি একটি বাক্সের উপর দিয়ে বাক্সের শীর্ষে নেমে এল।

ক্যালেন্ডারটি হালকাভাবে বাতাসে লাফিয়ে উঠল এবং খুব কাছের একটি বাক্সে ঝরঝরে।

এই শেষ বাক্যে "কাছাকাছি" শব্দের অন্তর্নিহিতগুলি কেবল দেখুন। এর অন্তর্ভুক্তি সম্পূর্ণ নতুন ধারণার ধারণাগুলি প্রকাশ করে যা অন্যথায় উপস্থিত হয় না।


নেই সবসময় একটির বেশি উপায় এটা করতে হবে, বিপরীত পাইথন জেন।


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

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


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

1
@ কেভিন, হ্যাঁ, একমত হয়েছেন মুল বক্তব্যটি হ'ল প্রোগ্রামিংয়ের ক্ষেত্রে একেবারে নতুনের জন্য, প্রয়োজনীয় সিনট্যাক্সের নির্ভুলতা এটি বোধ করতে পারে যে কোনও কিছু সম্পাদন করার একমাত্র উপায় রয়েছে — অর্থাত্, টিউটোরিয়াল ভারব্যাটিয়াম থেকে সঠিক কোডটি অনুলিপি করা, মধ্যম বিদ্যালয়ের গণিতের সমস্যাগুলির মতো similar (573 x 247) এর একটি মাত্র সঠিক উত্তর রয়েছে। " ফাইলগুলি সঙ্কুচিত করার প্রোগ্রাম কী ?" এর মতো প্রশ্নগুলিও দেখুন ? আপনি যদি আমার উত্তরটি পড়েন তবে আমি এলোমেলোভাবে কিছু করতে বলছি না; আমি বলছি যে আপনি হয় সবসময় পছন্দ তৈরীর যখন আপনি প্রোগ্রাম।
ওয়াইল্ডকার্ড

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

4
এক ছদ্মবেশী বলতে পারে 'পাইথনে এটি করার একমাত্র উপায় আছে তবে পাইথনের প্রতিটি নতুন সংস্করণ "এবং এখন সম্পূর্ণ আলাদা কিছু" এর জন্য পূর্ববর্তী সংস্করণটি যেভাবে করেছে তার প্রয়োগ করে;)
আলেফজারো

3
পিইপি 20-এর উদ্ধৃতি: "এটির জন্য একটি মাত্র pre এবং পছন্দসইভাবে একটি সুস্পষ্ট উপায় থাকা উচিত Although যদিও আপনি ডাচ না হলে এই পথটি প্রথমে সুস্পষ্ট নাও হতে পারে।"
ভ্যাক্সকুইস

5

আপনি কেবল সেই myAnswerচলকটি সম্পর্কে জিজ্ঞাসা করছেন যা অপ্রয়োজনীয় বলে মনে হয়। অন্যান্য উত্তরগুলি ইতিমধ্যে কিছুটি কেন এবং কখন এটি বাদ দেওয়া বা ব্যবহার করতে হবে তা বোঝাতে পারে তবে এখানে আরও একটি উত্তর রয়েছে: এটি কীভাবে?

Start
  output input * 2
Stop

বা এমনকি

Start output input * 2 Stop

বেশিরভাগ ভাষায় এটি এখনও কাজ করবে তবে আপনি এটি পড়তে পারেন? এটি কঠিন তাই আমরা প্রায়শই সহায়ক সহায়কগুলি ব্যবহার করি কারণ কম্পিউটারগুলি কেবল কোডটি পড়ে না read আমাদের এটি রক্ষণাবেক্ষণ করতে হবে এবং কয়েক মাসের মধ্যে এটি বুঝতে হবে এবং কোডটি লেখা আরও শক্ত যে আপনি এখনও পরে একটি কার্যক্ষমতার পরে বের করতে পারবেন না ... সাধারণত মাত্র কয়েক দিন পরে আপনি জানতে পারবেন না কেন আপনি একটি নির্দিষ্ট উপায়ে কিছু করেছিলেন? ।


2
... বা এমনকি ঠিক (*2)। তবে আমি আপত্তি জানাব যে, পারফর্মিং ইনপুটটি নিরাপদে কেবল একটি ভেরিয়েবল অ্যাক্সেস করা / পাটিগণিত অপারেশন সম্পাদন করা হিসাবে প্রকাশ করা যায় না: এর পর্যবেক্ষণযোগ্য পার্শ্ব প্রতিক্রিয়া থাকতে পারে।
11:25

2

আপনি উভয় রূপটি করতে পারেন (এই সাধারণ ক্ষেত্রে) তবে প্রথম বৈকল্পিক আরও পাঠযোগ্য এবং আরও জটিল ক্ষেত্রে কাঠামোগত হয়ে যায়। প্রথম রূপটি আইপিও মডেলকে প্রতিটি পদক্ষেপের জন্য এক লাইন দেখায় (ইতিমধ্যে সঠিক নামের সাথে দুজন):

Start
  input myNumber                       // Input
  set myAnswer = myNumber * 2          // Process
  output myAnswer                      // Output
Stop
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.