আমি সি # এর সাথে জিজ্ঞাসা করছি, তবে আমি অন্যান্য ভাষাতে এটির একই ধারণা করি।
মতামত এবং বিবৃতি এবং পার্থক্য কি একটি ভাল সংজ্ঞা আছে?
আমি সি # এর সাথে জিজ্ঞাসা করছি, তবে আমি অন্যান্য ভাষাতে এটির একই ধারণা করি।
মতামত এবং বিবৃতি এবং পার্থক্য কি একটি ভাল সংজ্ঞা আছে?
উত্তর:
অভিব্যক্তি: এমন কিছু যা মূল্যকে মূল্যায়ন করে। উদাহরণ: 1 + 2 / এক্স
বিবৃতি: কোডের একটি লাইন যা কিছু করে। উদাহরণ: গোটো 100
ফোরট্রানের মতো প্রথম দিকের সাধারণ-উদ্দেশ্যমূলক প্রোগ্রামিং ভাষায়, পার্থক্যটি স্ফটিক-স্পষ্ট ছিল। ফরটারনে, একটি বিবৃতি কার্যকর করার এক ইউনিট ছিল, যা আপনি করেছিলেন। একে "লাইন" না বলা একমাত্র কারণ হ'ল কখনও কখনও এটি একাধিক লাইন বিস্তৃত ছিল। নিজস্বভাবে একটি অভিব্যক্তি কিছুই করতে পারে না ... আপনাকে এটি একটি ভেরিয়েবলের জন্য নির্ধারণ করতে হয়েছিল।
1 + 2 / X
ফরটারনে একটি ত্রুটি, কারণ এটি কিছুই করে না। আপনাকে এই অভিব্যক্তিটি দিয়ে কিছু করতে হবে:
X = 1 + 2 / X
ফরটারনের ব্যাকরণ ছিল না কারণ আমরা জানি এটি আজ — আলগোল -60 সংজ্ঞার অংশ হিসাবে ব্যাকাস-নওর ফর্ম (বিএনএফ) সহ সেই ধারণাটি আবিষ্কার করা হয়েছিল। সেই মুহূর্তে শব্দার্থক পার্থক্য ("একটি মান" বনাম "কিছু করতে" থাকে) সিনট্যাক্সে অন্তর্ভুক্ত ছিল : এক ধরণের বাক্যটি একটি প্রকাশ ছিল এবং অন্যটি ছিল একটি বিবৃতি এবং পার্সার তাদের আলাদা করে বলতে পারত।
পরবর্তী ভাষার ডিজাইনাররা এই পার্থক্যটি অস্পষ্ট করেছেন: তারা সিনট্যাক্টিক এক্সপ্রেশনগুলিকে জিনিসগুলি করার অনুমতি দেয় এবং তারা সিন্থেটিক বক্তব্যগুলিকে মঞ্জুরি দেয় যার মান রয়েছে। প্রাচীনতম জনপ্রিয় ভাষার উদাহরণ যা এখনও বেঁচে আছে সি হ'ল সি এর ডিজাইনাররা বুঝতে পেরেছিল যে আপনাকে কোনও অভিব্যক্তি মূল্যায়ন করতে এবং ফলাফলটি ফেলে দিতে দেওয়া হলে কোনও ক্ষতি করা হয়নি। সি-তে, প্রতিটি সিন্ট্যাক্টিক এক্সপ্রেশনটি কেবলমাত্র একটি প্রান্তে সেমিকোলনটি টেক করে একটি বিবৃতিতে পরিণত করা যেতে পারে:
1 + 2 / x;
সম্পূর্ণরূপে বৈধ বিবৃতি যদিও সম্পূর্ণ কিছুই ঘটবে না। একইভাবে, সি-তে, একটি এক্সপ্রেশনটির পার্শ্ব-প্রতিক্রিয়া থাকতে পারে .এটি কিছু পরিবর্তন করতে পারে।
1 + 2 / callfunc(12);
কারণ callfunc
কেবল দরকারী কিছু করতে পারে।
একবার আপনি কোনও অভিব্যক্তিকে বিবৃতি হিসাবে মঞ্জুরি দেওয়ার পরে আপনি অ্যাসাইনমেন্ট অপারেটরটিকে (=) এক্সপ্রেশন হিসাবে অনুমতি দিতে পারেন। এজন্য সি আপনাকে পছন্দ মতো কাজ করতে দেয়
callfunc(x = 2);
এটি এক্স = 2 (2 থেকে x এর মান নির্ধারণ করে) এক্সপ্রেশনটি মূল্যায়ন করে এবং তারপরে (2 )টিকে ফাংশনে পাস করে callfunc
।
অভিব্যক্তি এবং বিবৃতিগুলির এই অস্পষ্টতা সমস্ত সি-ডেরিভেটিভস (সি, সি ++, সি #, এবং জাভা) এ দেখা যায়, যার এখনও কিছু বিবৃতি রয়েছে (যেমন while
) তবে যা প্রায় কোনও প্রকাশকে বিবৃতি হিসাবে ব্যবহার করতে দেয় (সি # কেবলমাত্র অ্যাসাইনমেন্টে, কল, ইনক্রিমেন্ট এবং হ্রাস অভিব্যক্তি বিবৃতি হিসাবে ব্যবহার করা যেতে পারে; স্কট উইসনিউস্কির উত্তর দেখুন )।
দুটি "সিনট্যাকটিক বিভাগ" (যা জিনিস বিবরণ এবং প্রকাশের সাজানোর প্রযুক্তিগত নাম) হ'ল প্রচেষ্টা অনুলিপি হতে পারে। উদাহরণস্বরূপ, সি এর দুটি শর্তসাপেক্ষ রয়েছে, বিবৃতি ফর্ম
if (E) S1; else S2;
এবং এক্সপ্রেশন ফর্ম
E ? E1 : E2
এবং কখনও কখনও লোকেরা সেই অনুলিপি চায় যা সেখানে নেই: উদাহরণস্বরূপ, স্ট্যান্ডার্ড সিতে, কেবলমাত্র একটি বিবৃতি একটি নতুন স্থানীয় ভেরিয়েবল ঘোষণা করতে পারে — তবে এই ক্ষমতাটি যথেষ্ট কার্যকর যে GNU সি সংকলক একটি GNU এক্সটেনশন সরবরাহ করে যা একটি ঘোষণার জন্য একটি এক্সপ্রেশনকে সক্ষম করে স্থানীয় পরিবর্তনশীল পাশাপাশি।
অন্যান্য ভাষার ডিজাইনাররা এই জাতীয় সদৃশ পছন্দ করেন নি এবং তারা তাড়াতাড়ি দেখেছিল যে যদি অভিব্যক্তিগুলির পাশাপাশি পার্শ্ব প্রতিক্রিয়াগুলির পাশাপাশি মানগুলিও থাকতে পারে তবে বিবৃতি এবং অভিব্যক্তির মধ্যে সিনট্যাক্টিক পার্থক্য এতটা কার্যকর নয় — তাই তারা এ থেকে মুক্তি পেয়েছে they । হাস্কেল, আইকন, লিস্প এবং এমএল হ'ল এমন ভাষা যা সিনট্যাকটিক স্টেটমেন্ট দেয় না — তাদের কেবল প্রকাশ রয়েছে। এমনকি শ্রেণিবদ্ধ কাঠামোযুক্ত লুপিং এবং শর্তসাপেক্ষ ফর্মগুলিকে এক্সপ্রেশন হিসাবে বিবেচনা করা হয় এবং তাদের মান রয়েছে - তবে খুব আকর্ষণীয় নয়।
callfunc(x = 2);
পাসের x
করতে callfunc
না 2
। যদি x
একটি ভাসা হয়, callfunc(float)
ডাকা হবে, না callfunc(int)
। আর সি ++ যদি আপনি পাস x=y
করার func
, এবং func
একটি রেফারেন্স লাগে এবং পরিবর্তন, তবে পরিবর্তনটি x
না y
।
where
হেস্কেল-এ ধারাটি একটি বিবৃতি হিসাবে নয়, একটি অভিব্যক্তি হিসাবে বিবেচিত হয়। learnyouahaskell.com/syntax-in-funitions#where
where
যে আসলে ফাংশন ঘোষণার একটি অংশ, প্রকাশ বা বিবৃতি নয়।
নোট করুন যে সি তে, "=" আসলে অপারেটর, যা দুটি কাজ করে:
এখানে এএনএসআই সি ব্যাকরণ থেকে একটি নির্যাস দেওয়া হয়েছে। আপনি দেখতে পাচ্ছেন যে সি এর বিভিন্ন ধরণের স্টেটমেন্ট নেই ... একটি প্রোগ্রামের বেশিরভাগ স্টেটমেন্টই এক্সপ্রেশন স্টেটমেন্ট, অর্থাত্ শেষে একটি সেমিকোলন সহ একটি এক্সপ্রেশন।
statement
: labeled_statement
| compound_statement
| expression_statement
| selection_statement
| iteration_statement
| jump_statement
;
expression_statement
: ';'
| expression ';'
;
একটি এক্সপ্রেশন এমন একটি জিনিস যা একটি মান ফেরত দেয়, যেখানে বিবৃতি দেয় না।
উদাহরন স্বরূপ:
1 + 2 * 4 * foo.bar() //Expression
foo.voidFunc(1); //Statement
দুজনের মধ্যে বড় চুক্তিটি হল আপনি এক সাথে অভিব্যক্তিগুলি শৃঙ্খলাবদ্ধ করতে পারেন, যেখানে বিবৃতি শৃঙ্খলিত করা যায় না।
foo.voidFunc(1);
শূন্য মান সহ একটি অভিব্যক্তি। while
এবং if
বিবৃতি হয়।
return
একটি সাবস্টেটমেন্ট হিসাবে বিবেচিত হয়।
আপনি এটি উইকিপিডিয়ায় খুঁজে পেতে পারেন তবে এক্সপ্রেশনগুলির কিছু মূল্যকে মূল্যায়ন করা হয়, অন্যদিকে বিবৃতিগুলির মূল্যায়নের কোনও মূল্য নেই।
সুতরাং, মতামত বিবৃতিতে ব্যবহার করা যেতে পারে, তবে অন্যভাবে নয়।
মনে রাখবেন যে কয়েকটি ভাষা (যেমন লিস্প, এবং আমি বিশ্বাস করি রুবি, এবং আরও অনেকগুলি) বিবৃতি বনাম প্রকাশের মধ্যে পার্থক্য করে না ... এই জাতীয় ভাষায়, সমস্ত কিছুই একটি অভিব্যক্তি এবং অন্যান্য অভিব্যক্তি দিয়ে শৃঙ্খলিত হতে পারে।
বিবৃতি বনাম বিবৃতিগুলির সামঞ্জস্যতা (চেইনিবিলিটি) -এর গুরুত্বপূর্ণ পার্থক্যের ব্যাখ্যার জন্য, আমার প্রিয় উল্লেখটি জন ব্যাকাসের টুরিং অ্যাওয়ার্ড পেপার, ভ্যান নিউম্যান স্টাইল থেকে প্রোগ্রামিং মুক্ত করা যায়? ।
অপরিহার্য ভাষাগুলি (ফোর্টরান, সি, জাভা, ...) প্রোগ্রামিং কাঠামোগত করার জন্য বিবৃতিগুলিকে জোর দেয় এবং চিন্তা-ভাবনার একধরণের মত প্রকাশ করে। ক্রিয়ামূলক ভাষাগুলি এক্সপ্রেশনকে জোর দেয়। বিবৃতি সম্পূর্ণরূপে নির্মূল করা যায় না তার চেয়ে খাঁটি কার্যকরী ভাষাগুলির মধ্যে এরকম শক্তিশালী এক্সপ্রেশন থাকে।
এক্সপ্রেশনগুলি একটি মান পাওয়ার জন্য মূল্যায়ন করা যেতে পারে, যেখানে বিবৃতিগুলি কোনও মান দেয় না (তারা টাইপ বাতিল করে দেয় )।
ফাংশন কল এক্সপ্রেশন এছাড়াও অবশ্যই বিবৃতি হিসাবে বিবেচনা করা যেতে পারে, কিন্তু যদি না এক্সিকিউশন পরিবেশের প্রত্যাবর্তিত মান ধরে রাখার জন্য একটি বিশেষ অন্তর্নির্মিত চলক না থাকে, এটি পুনরুদ্ধারের কোনও উপায় নেই।
বক্তব্য-ভিত্তিক ভাষাগুলির সমস্ত প্রক্রিয়া বিবৃতিগুলির তালিকা হওয়া প্রয়োজন। এক্সপ্রেশন-ওরিয়েন্টেড ভাষাগুলি, যা সম্ভবত সমস্ত কার্যকরী ভাষা হ'ল এক্সপ্রেশনগুলির তালিকা বা এলআইএসপি-র ক্ষেত্রে, একটি দীর্ঘ এস-এক্সপ্রেশন যা অভিব্যক্তির একটি তালিকা উপস্থাপন করে।
যদিও উভয় প্রকারই রচনা করা যায়, যতক্ষণ না টাইপগুলি মেলে ততক্ষণ বেশিরভাগ প্রকাশগুলি নির্বিচারে রচনা করা যায়। প্রতিটি বিবৃতিতে অন্য বিবৃতি রচনা করার নিজস্ব পদ্ধতি রয়েছে, যদি তারা এগুলি করতে পারে তবে। অগ্রণী এবং যদি বিবৃতিগুলির মধ্যে একটি একক স্টেটমেন্টের প্রয়োজন হয় বা সমস্ত অধীনস্থ বিবৃতিগুলি একের পর এক স্টেটমেন্ট ব্লকে চলে যায়, যদি না সাবস্টেটমেন্টগুলি তার নিজস্ব সাবস্টেটমেন্টগুলির অনুমতি দেয়।
বিবৃতিতে প্রকাশগুলিও অন্তর্ভুক্ত থাকতে পারে, যেখানে কোনও অভিব্যক্তি সত্যই কোনও বিবৃতি অন্তর্ভুক্ত করে না। যদিও একটি ব্যতিক্রম ল্যাম্বডা এক্সপ্রেশন হবে যা কোনও ফাংশনকে উপস্থাপন করে এবং এতে ফাংশনটি আইক্লিট করতে পারে এমন কিছু অন্তর্ভুক্ত করতে পারে যদি না ভাষা কেবল পাইথনের একক-এক্সপ্রেশন ল্যাম্বডাসের মতো সীমিত ল্যাম্বডাসের অনুমতি দেয়।
একটি এক্সপ্রেশন-ভিত্তিক ভাষায়, আপনার সমস্ত প্রয়োজন একটি ফাংশনটির জন্য একক অভিব্যক্তি, যেহেতু সমস্ত নিয়ন্ত্রণ কাঠামো একটি মান দেয় (তাদের অনেকগুলি শূন্যস্থান ফেরত দেয়)। ফাংশনটিতে সর্বশেষ-মূল্যায়ন করা এক্সপ্রেশনটি রিটার্নের মান হওয়ায় কোনও রিটার্নের বিবৃতি দেওয়ার দরকার নেই।
Void
নীচের ধরণের নয়। আমার উত্তর দেখুন ।
null
)? ইউনিট প্রকারেরvoid
মতো আর হবে না (তবে এর একক মানটি অ্যাক্সেসযোগ্য)?
void
কোনও ফাংশনের রিটার্ন টাইপ হয় যা কখনই ফিরে আসে না (উদাঃ একটি throw
ত্রুটিযুক্ত ফাংশন ) তবে এটি নীচের প্রকার । তা না হলে void
হয় ইউনিট টাইপ । আপনি সঠিক যে একটি বিবৃতি যে পরিবর্তন করতে পারে না, ইউনিট টাইপ আছে। তবে একটি বিবৃতি যা ডাইভারেজ করতে পারে তা হ'ল নীচের প্রকার। হ্যালটিং উপপাদনের কারণে আমরা সাধারণত প্রমাণ করতে পারি না যে কোনও ফাংশন ডাইভার্জ করে না, তাই আমি মনে করি ইউনিটটি ফিকশন। নীচের ধরণের কোনও মান থাকতে পারে না, সুতরাং এর একক মান থাকতে পারে না null
।
null
মান হ'ল একটি ছদ্মবেশ যা বোঝায় যে একটি রেফারেন্স এমন কোনও কিছুকে বোঝায় যা বিদ্যমান নেই।
সহজভাবে: একটি অভিব্যক্তি একটি মানকে মূল্যায়ন করে, একটি বিবৃতি দেয় না।
{}
একটি বিবৃতি। শব্দটিকে ভীতিজনক উক্তিতে রাখলে তা পরিবর্তন হয় না। বিবৃতি শব্দার্থবিজ্ঞান সহ সিনট্যাক্টিক নির্মাণ। "শব্দার্থক স্তর" বলে কোনও জিনিস নেই - আপনি সম্ভবত মৃত্যুদন্ডের কথা উল্লেখ করছেন । আপনি বলছেন আপনি নির্ভুল হওয়ার চেষ্টা করছেন তবে আপনি এতে ব্যর্থ হয়েছেন। "ডাউন ভোটারদের অজ্ঞতা" সম্পর্কে আপনার অভিযোগ খাঁটি বিজ্ঞাপন হোমনেম; অবতীর্ণদের মানসিক অবস্থা সম্পর্কে আপনার কাছে কোনও তথ্য নেই।
{}
সি # ভাষা বর্ণনায় একটি বিবৃতি হিসাবে সংজ্ঞায়িত করা হয়।
এক্সপ্রেশন ভিত্তিক ভাষা সম্পর্কে কিছু জিনিস:
সর্বাধিক গুরুত্বপূর্ণ: সবকিছুই একটি মান দেয়
কোড ব্লক এবং এক্সপ্রেশনকে সীমিত করার জন্য কোঁকড়া বন্ধনী এবং ধনুর্বন্ধনীগুলির মধ্যে কোনও পার্থক্য নেই, যেহেতু সবকিছুই একটি অভিব্যক্তি। এটি যদিও লেজিক স্কোপিং প্রতিরোধ করে না: উদাহরণ হিসাবে উদাহরণস্বরূপ, এর সংজ্ঞাটি যে সংজ্ঞাযুক্ত এবং এর মধ্যে থাকা সমস্ত বিবৃতি রয়েছে তার জন্য একটি স্থানীয় পরিবর্তনশীল সংজ্ঞায়িত করা যেতে পারে।
একটি অভিব্যক্তি ভিত্তিক ভাষায়, সমস্ত কিছুই একটি মান দেয়। এটি প্রথমে কিছুটা অদ্ভুত হতে পারে - কী (FOR i = 1 TO 10 DO (print i))
ফিরে আসে?
কয়েকটি সহজ উদাহরণ:
(1)
আয় 1
(1 + 1)
আয় 2
(1 == 1)
আয় TRUE
(1 == 2)
আয় FALSE
(IF 1 == 1 THEN 10 ELSE 5)
আয় 10
(IF 1 == 2 THEN 10 ELSE 5)
আয় 5
আরও কয়েকটি জটিল উদাহরণ:
OpenADoor(), FlushTheToilet()
বা TwiddleYourThumbs()
কোনও ধরণের জাগতিক মান, যেমন ঠিক আছে, হয়ে গেছে বা সাফল্য ফিরে আসবে।(FOR i = 1 TO 10 DO (print i))
, লুপটির মান "10" হয়, এটি (print i)
প্রতিবার স্ট্রিং হিসাবে ফিরে আসার কারণে 10 বার অভিব্যক্তিটি মূল্যায়িত করে। রিটার্নের মাধ্যমে চূড়ান্ত সময় 10
, আমাদের চূড়ান্ত উত্তরভাবভিত্তিক ভাষার ভিত্তিতে সবচেয়ে বেশি লাভ করার জন্য প্রায়শই এটির মানসিকতার সামান্য পরিবর্তন প্রয়োজন, যেহেতু সবকিছুই একটি অভিব্যক্তি হ'ল এটি অনেক কিছুই 'ইনলাইন' করা সম্ভব করে তোলে
দ্রুত উদাহরণ হিসাবে:
FOR i = 1 to (IF MyString == "Hello, World!" THEN 10 ELSE 5) DO ( LotsOfCode )
অ এক্সপ্রেশন-ভিত্তিকের জন্য একেবারে বৈধ প্রতিস্থাপন
IF MyString == "Hello, World!" THEN TempVar = 10 ELSE TempVar = 5 FOR i = 1 TO TempVar DO ( LotsOfCode )
কিছু ক্ষেত্রে, অভিব্যক্তি-ভিত্তিক কোডের অনুমতি দেওয়া লেআউটটি আমার কাছে অনেক বেশি প্রাকৃতিক বোধ করে
অবশ্যই, এটি পাগল হতে পারে। ম্যাক্সস্ক্রিপ্ট নামে অভিব্যক্তি-ভিত্তিক স্ক্রিপ্টিং ভাষায় শখের প্রকল্পের অংশ হিসাবে, আমি এই দৈত্য লাইনটি নিয়ে আসতে সক্ষম হয়েছি
IF FindSectionStart "rigidifiers" != 0 THEN FOR i = 1 TO (local rigidifier_array = (FOR i = (local NodeStart = FindsectionStart "rigidifiers" + 1) TO (FindSectionEnd(NodeStart) - 1) collect full_array[i])).count DO
(
LotsOfCode
)
একটি বিবৃতি একটি অভিব্যক্তি একটি বিশেষ ক্ষেত্রে, void
টাইপ সঙ্গে একটি। ভাষাগুলির বিভিন্নভাবে আচরণের প্রবণতা প্রায়শই সমস্যার কারণ হয় এবং সেগুলি যথাযথভাবে সাধারণীকরণ করা ভাল।
উদাহরণস্বরূপ, সি # তে আমাদের Func<T1, T2, T3, TResult>
জেনেরিক প্রতিনিধিদের খুব দরকারী ওভারলোডেড সেট রয়েছে। তবে আমাদের পাশাপাশি একটি উপযুক্ত Action<T1, T2, T3>
সেটও রাখতে হবে এবং এই দুর্ভাগ্য বিভাজনকে মোকাবেলার জন্য সাধারণ উদ্দেশ্যে উচ্চতর অর্ডার প্রোগ্রামিংকে নিয়মিত নকল করতে হয়।
তুচ্ছ উদাহরণ - এমন একটি ফাংশন যা অন্য ফাংশনে ফোন করার আগে রেফারেন্সটি বাতিল হয় কিনা তা পরীক্ষা করে:
TResult IfNotNull<TValue, TResult>(TValue value, Func<TValue, TResult> func)
where TValue : class
{
return (value == null) ? default(TValue) : func(value);
}
সংকলক TResult
হওয়ার সম্ভাবনা নিয়ে কাজ করতে পারে void
? হ্যাঁ. এটির জন্য যা করতে হবে তা হল রিটার্নটি অনুসরণ করা একটি মত প্রকাশের মতো void
। ফলাফলটি default(void)
ধরণের হবে void
, এবং যে ফানক পাস হচ্ছে তা ফর্মের Func<TValue, void>
হতে হবে (যা সমান হবে Action<TValue>
)।
অন্যান্য বেশ কয়েকটি উত্তর ইঙ্গিত দেয় যে আপনি মত প্রকাশের সাথে আপনার মত বিবৃতি শৃঙ্খলা করতে পারবেন না, তবে আমি নিশ্চিত নই যে এই ধারণাটি কোথা থেকে এসেছে। আমরা ;
বাইনারি ইনফিক্স অপারেটর হিসাবে বিবৃতি দেওয়ার পরে উপস্থিত হওয়ার কথা ভাবতে পারি , দুটি ধরণের এক্সপ্রেশন নিয়ে void
এবং এগুলিকে একক অভিব্যক্তিতে মিশ্রিত করি void
।
বিবৃতি -> ক্রমানুসারে
অভিব্যক্তিগুলি অনুসরণ করার নির্দেশাবলী -> মূল্যায়ন যা কোনও মান দেয়
বিবৃতিগুলি মূলত পদক্ষেপগুলির মতো বা অ্যালগরিদমের নির্দেশাবলীর মতো, বিবৃতি কার্যকর করার ফলাফলটি নির্দেশ পয়েন্টারের বাস্তবায়ন (এসেম্বলারে তথাকথিত)
এক্সপ্রেশনগুলি বোঝায় না এবং প্রথম দর্শনে মৃত্যুদণ্ড কার্যকর করার আদেশ দেয় না, তাদের উদ্দেশ্য হ'ল মূল্য মূল্যায়ন এবং প্রত্যাবর্তন। অত্যাবশ্যক প্রোগ্রামিং ভাষায় একটি অভিব্যক্তির মূল্যায়নের একটি আদেশ থাকে তবে এটি কেবল আবশ্যক মডেলটির কারণে, তবে এটি তাদের সারাংশ নয়।
বিবৃতি উদাহরণ:
for
goto
return
if
(এঁরা সকলেই অন্য লাইনে মৃত্যুদণ্ড কার্যকর করার লাইন (বিবৃতি) এর অগ্রগতি বোঝায়)
এক্সপ্রেশন উদাহরণ:
2+2
(এটি কার্যকর করার ধারণা বোঝায় না, তবে মূল্যায়নের)
বিবৃতি ,
একটি বিবৃতি একটি প্রক্রিয়াভিত্তিক বিল্ডিং-ব্লক যা থেকে সমস্ত সি # প্রোগ্রাম নির্মিত হয়। একটি বিবৃতি একটি স্থানীয় পরিবর্তনশীল বা ধ্রুবক ঘোষণা করতে পারে, একটি পদ্ধতি কল করতে পারে, একটি বস্তু তৈরি করতে পারে, বা একটি ভেরিয়েবল, সম্পত্তি বা ক্ষেত্রের জন্য একটি মান নির্ধারণ করতে পারে।
কোঁকড়া ধনুর্বন্ধনী দ্বারা বেষ্টিত একটি সিরিজের বিবৃতি কোডের একটি ব্লক গঠন করে। একটি পদ্ধতি বডি কোড ব্লকের একটি উদাহরণ।
bool IsPositive(int number)
{
if (number > 0)
{
return true;
}
else
{
return false;
}
}
সি # এর বিবৃতিতে প্রায়শই প্রকাশ থাকে। সি # তে একটি এক্সপ্রেশন হ'ল কোডের একটি খণ্ড যা আক্ষরিক মান, একটি সাধারণ নাম, বা একটি অপারেটর এবং এর অপারেশন সমন্বিত।
প্রকাশ ,
একটি এক্সপ্রেশন কোডের একটি খণ্ড যা একক মান, অবজেক্ট, পদ্ধতি বা নেমস্পেসে মূল্যায়ন করা যেতে পারে। দুটি সহজ ধরণের অভিব্যক্তি হ'ল আক্ষরিক এবং সাধারণ নাম। আক্ষরিক একটি ধ্রুবক মান যার কোনও নাম নেই।
int i = 5;
string s = "Hello World";
আই এবং এস উভয়ই সহজ নাম যা স্থানীয় ভেরিয়েবলগুলি সনাক্ত করে। যখন এই ভেরিয়েবলগুলি একটি অভিব্যক্তিতে ব্যবহৃত হয়, তখন ভেরিয়েবলের মান পুনরুদ্ধার করা হয় এবং অভিব্যক্তির জন্য ব্যবহৃত হয়।
if(number >= 0) return true; else return false;
আরও ভাল লিখতে চাই bool? IsPositive(int number) { if(number > 0) return true; else if(number < 0) return false; else return null;}
:)
আমি statement
শব্দের আনুষ্ঠানিক যুক্তি অর্থে এর অর্থ পছন্দ করি । এটি এমন একটি যা গণনাতে এক বা একাধিক ভেরিয়েবলের স্থিতি পরিবর্তন করে, তাদের মান (মান) সম্পর্কে সত্য বা মিথ্যা বিবৃতি সক্ষম করে।
আমার ধারণা, কম্পিউটারে বিশ্বে এবং বিজ্ঞানে সর্বদা বিভ্রান্তি থাকবে যখন নতুন পরিভাষা বা শব্দের প্রবর্তন করা হয়, বিদ্যমান শব্দগুলি 'পুনরুদ্ধার' হয় বা ব্যবহারকারীরা যা বর্ণনা করছেন তার জন্য বিদ্যমান, প্রতিষ্ঠিত বা 'যথাযথ' পরিভাষা সম্পর্কে অজ্ঞ
আমি এখানে উত্তরগুলির সাথে সত্যই সন্তুষ্ট নই। আমি সি ++ (আইএসও ২০০ 2008) এর ব্যাকরণের দিকে চেয়েছিলাম । তবে সম্ভবত যুক্তিবাদী ও প্রোগ্রামিংয়ের স্বার্থে উত্তর দুটি উপাদানকে আলাদা করতে যথেষ্ট হতে পারে (যদিও বাস্তবতা আরও জটিল দেখায়)।
একটি বিবৃতি শূন্য বা আরও প্রকাশ করে, তবে এটি অন্যান্য ভাষার ধারণাও হতে পারে। ব্যাকরণের জন্য এটি বর্ধিত ব্যাকাস নওর ফর্ম (বিবৃতিতে অংশ):
statement:
labeled-statement
expression-statement <-- can be zero or more expressions
compound-statement
selection-statement
iteration-statement
jump-statement
declaration-statement
try-block
আমরা অন্যান্য ধারণাটি দেখতে পারি যা সি ++ তে বিবৃতি হিসাবে বিবেচিত হয়।
case
উদাহরণস্বরূপ একটি লেবেলযুক্ত বিবৃতিif
if/else
,case
while
, do...while
,for (...)
break
, continue
, return
(অভিব্যক্তি আসতে পারেন),goto
try/catch
ব্লককে প্রতিনিধিত্বকারী স্টেটমেন্টএটি এক্সপ্রেশনটি প্রকাশের অংশটি দেখায়:
expression:
assignment-expression
expression "," assignment-expression
assignment-expression:
conditional-expression
logical-or-expression assignment-operator initializer-clause
throw-expression
+
, -
, *
, /
, &
, |
, &&
, ||
, ...)throw
দফা একটি অভিব্যক্তি অত্যন্তবিবৃতি ব্যাকরণগতভাবে সম্পূর্ণ বাক্য। এক্সপ্রেশন হয় না। উদাহরণ স্বরূপ
x = 5
"এক্স 5 হিসাবে পাওয়া যায়" হিসাবে পড়ে এটি একটি সম্পূর্ণ বাক্য। কোড
(x + 5)/9.0
"এক্স প্লাস 5 সমস্ত 9.0 দ্বারা বিভক্ত" পড়েছে এটি সম্পূর্ণ বাক্য নয়। বিবৃতি
while k < 10:
print k
k += 1
একটি সম্পূর্ণ বাক্য। লক্ষ্য করুন যে লুপ শিরোনামটি নয়; "যখন কে <10," একটি অধস্তন ধারা।
while
একটি অভিব্যক্তি কিছু ভাষা যেমন স্কালার is আপনি টাইপিংয়ের সাথে ব্যাকরণকে বিবাদ দিচ্ছেন। আমার উত্তর দেখুন ।
while
একটি শরীরের সাথে এখনও Scala একটি অভিব্যক্তি। এটি যদি কোনও পার্শ্ব-প্রতিক্রিয়া তৈরি করে তবে এটি একটি বিবৃতিও হতে পারে, যা আমার প্রচুর নিম্নচিকিত উত্তরটি মঞ্জুরি দেয় (একটি অভিব্যক্তিটি একটি বিবৃতিও হতে পারে)। আমার উত্তরটি একমাত্র সঠিক। যারা বুঝতে পারে না তাদের পাঠকদের জন্য দুঃখিত Sorry
(x + 5)/9.0
অবশ্যই বিবৃতি হিসাবে একা দাঁড়িয়ে থাকতে পারে। এছাড়াও, যদি ব্যাকরণগতভাবে সম্পূর্ণ হয়, আপনি একটি বৈধ প্রোগ্রাম বলতে চাইছেন, সি একক প্রোগ্রাম হিসাবে একা স্টেটমেন্টগুলিকে অনুমতি দেয় না।
এখানে আমি পাওয়া সহজ উত্তরগুলির সংক্ষিপ্তসার।
মূলত অ্যান্ডারস ক্যাসরগ দ্বারা উত্তর দেওয়া হয়েছে
একটি বিবৃতি কোডের একটি সম্পূর্ণ লাইন যা কিছু ক্রিয়া করে, যখন একটি অভিব্যক্তি কোডের এমন কোনও বিভাগ যা কোনও মূল্যকে মূল্যায়ন করে।
অপারেটরগুলি ব্যবহার করে এক্সপ্রেশনগুলি "অনুভূমিকভাবে" আরও বড় এক্সপ্রেশনগুলিতে সংযুক্ত করা যেতে পারে, অন্যদিকে বিবৃতিগুলি কেবল একের পর এক লেখার মাধ্যমে বা ব্লক কনস্ট্রাক্টের সাহায্যে "উল্লম্বভাবে" সংযুক্ত করা যায়।
প্রতিটি অভিব্যক্তি একটি বিবৃতি হিসাবে ব্যবহার করা যেতে পারে (যার প্রভাবটি প্রকাশের মূল্যায়ন করতে এবং ফলস্বরূপ মানটিকে উপেক্ষা করে) তবে বেশিরভাগ বক্তব্যকে এক্সপ্রেশন হিসাবে ব্যবহার করা যায় না।
এই ধারণাগুলির ডি-ফ্যাক্টো ভিত্তিটি হ'ল:
অভিব্যক্তি : একটি সিনট্যাকটিক বিভাগ যার উদাহরণটি একটি মান হিসাবে মূল্যায়ন করা যেতে পারে।
বিবৃতি : একটি সিনট্যাকটিক বিভাগ যার উদাহরণটি একটি অভিব্যক্তির মূল্যায়নের সাথে জড়িত থাকতে পারে এবং মূল্যায়নের ফলাফলের মান (যদি থাকে) উপলভ্য নয় তবে এটি উপলব্ধ।
প্রথম দশকগুলিতে ফরটারনের প্রাথমিক প্রসঙ্গটি ছাড়াও, স্বীকৃত উত্তরে প্রকাশের বক্তব্য এবং বিবৃতি উভয়ই স্পষ্টতই ভুল:
sizeof
অপারেটরের অপারেন্ড হিসাবে ব্যবহৃত একটি এক্সপ্রেশন কখনও মূল্যায়ন হয় না।(বিটিডাব্লু, আমি সি সম্পর্কে উপকরণ সম্পর্কিত উত্তরটিতে [উদ্ধৃতি প্রয়োজন] যুক্ত করতে চাই কারণ ডিএমআর এর মতামত আছে কিনা তা আমি স্মরণ করতে পারি না। মনে হয় না, অন্যথায় সি এর নকশায় কার্যকারিতা সদৃশ করার কোনও কারণ থাকতে হবে না : উল্লেখযোগ্যভাবে, কমা অপারেটর বনাম, বিবৃতি।)
(নীচের যুক্তিটি মূল প্রশ্নের সরাসরি প্রতিক্রিয়া নয়, তবে ইতিমধ্যে এখানে উত্তর দেওয়া কিছু পরিষ্কার করা দরকার বলে মনে করি))
তবুও, এটি সন্দেহজনক যে সাধারণ-উদ্দেশ্যমূলক প্রোগ্রামিং ভাষাগুলিতে আমাদের একটি নির্দিষ্ট "স্টেটমেন্ট" দরকার:
begin
স্কিম) বা monadic কাঠামোর সিনট্যাকটিক চিনি দ্বারা প্রতিস্থাপিত হতে পারে ।++i + ++i
সি-এর অর্থহীন getতাহলে বিবৃতি কেন? যাইহোক, ইতিহাস ইতিমধ্যে একটি জগাখিচুড়ি। দেখে মনে হচ্ছে বেশিরভাগ ভাষা ডিজাইনাররা তাদের পছন্দটি সাবধানতার সাথে নেন না।
সবচেয়ে খারাপ এটি এমনকি কিছু ধরণের সিস্টেম উত্সাহ দেয় (যারা পিএল ইতিহাসের সাথে যথেষ্ট পরিচিত নন) কিছু ভুল ধারণা যে টাইপ সিস্টেমে অপারেশনাল শব্দার্থবিজ্ঞানের নিয়মের আরও প্রয়োজনীয় ডিজাইনের সাথে গুরুত্বপূর্ণ জিনিসগুলি আবশ্যক।
গুরুতরভাবে, প্রকারের উপর নির্ভর করে যুক্তি অনেক ক্ষেত্রে খারাপ হয় না, তবে বিশেষত এই বিশেষ ক্ষেত্রে গঠনমূলক নয়। এমনকি বিশেষজ্ঞরা জিনিসগুলি স্ক্রু করতে পারেন।
উদাহরণস্বরূপ, কেউ অনস্বীকৃত ধারাবাহিকতার ofতিহ্যগত চিকিত্সার বিরুদ্ধে কেন্দ্রীয় যুক্তি হিসাবে ভাল-টাইপিং প্রকৃতির উপর জোর দেয় । যদিও উপসংহারটি কিছুটা যুক্তিসঙ্গত এবং রচিত ফাংশনগুলি সম্পর্কে অন্তর্দৃষ্টি ঠিক আছে ( তবে এখনও প্রয়োজনীয়তার পক্ষে অনেকটা নির্বোধ ), এই যুক্তিটি কার্যকর নয় কারণ এটি _Noreturn any_of_returnable_types
এনকোড করার মতো (সি 11 তে) অনুশীলনে "পার্শ্ব চ্যানেল" পদ্ধতির সম্পূর্ণ উপেক্ষা করে Falsum
। এবং কঠোরভাবে বলতে গেলে, অপ্রত্যাশিত রাষ্ট্রযুক্ত একটি বিমূর্ত মেশিন "ক্র্যাশ হওয়া কম্পিউটার" এর মতো নয়।
একটি বিবৃতি-ভিত্তিক প্রোগ্রামিং ভাষায়, একটি কোড ব্লককে বিবৃতিগুলির তালিকা হিসাবে সংজ্ঞায়িত করা হয়। অন্য কথায়, একটি বিবৃতি সিনট্যাক্সের একটি অংশ যা কোনও সিনট্যাক্স ত্রুটির কারণ না করে আপনি কোনও কোড ব্লকের ভিতরে রাখতে পারেন।
উইকিপিডিয়া একইভাবে শব্দ বিবৃতি সংজ্ঞায়িত করে
কম্পিউটার প্রোগ্রামিংয়ে, একটি বিবৃতি একটি অত্যাবশ্যক প্রোগ্রামিং ভাষার একটি সিনট্যাক্টিক ইউনিট যা সম্পাদিত হওয়ার জন্য কিছু পদক্ষেপ প্রকাশ করে। এই জাতীয় ভাষায় রচিত একটি প্রোগ্রাম এক বা একাধিক বক্তব্যের ক্রম দ্বারা গঠিত হয়
পরবর্তী বিবৃতি লক্ষ্য করুন। (যদিও এই ক্ষেত্রে "একটি প্রোগ্রাম" প্রযুক্তিগতভাবে ভুল কারণ সি এবং জাভা উভয়ই এমন কোনও প্রোগ্রামকে প্রত্যাখ্যান করে যা বিবৃতিতে কিছুই ধারণ করে না।)
উইকিপিডিয়া শব্দ এক্সপ্রেশন হিসাবে সংজ্ঞা দেয়
প্রোগ্রামিং ল্যাঙ্গুয়েজে একটি অভিব্যক্তি একটি সিনট্যাকটিক সত্তা যা এর মূল্য নির্ধারণের জন্য মূল্যায়ন করা যেতে পারে
এটি যাইহোক, মিথ্যা, কারণ কোটলিনে throw new Exception("")
এটি একটি অভিব্যক্তি, তবে যখন মূল্যায়ন করা হয়, এটি কেবল একটি ব্যতিক্রম ছুঁড়ে দেয়, কখনই কোনও মান দেয় না।
স্ট্যাটিক্যালি টাইপড প্রোগ্রামিং ল্যাঙ্গুয়েজে প্রতিটি এক্সপ্রেশনের একটি প্রকার থাকে। এই সংজ্ঞাটি অবশ্য গতিময় টাইপ করা প্রোগ্রামিং ভাষায় কাজ করে না।
ব্যক্তিগতভাবে, আমি একটি বাক্য সংশ্লেষের টুকরো হিসাবে সংজ্ঞায়িত করি যা একটি অপারেটর বা ফাংশন কলগুলির সাথে আরও বড় এক্সপ্রেশন অর্জনের জন্য রচনা করা যেতে পারে। এটি প্রকৃতপক্ষে উইকিপিডিয়া দ্বারা অভিব্যক্তির ব্যাখ্যার অনুরূপ:
এটি এক বা একাধিক ধ্রুবক, ভেরিয়েবল, ফাংশন এবং অপারেটরগুলির সংমিশ্রণ যা প্রোগ্রামিং ভাষা ব্যাখ্যা করে (তার পূর্ববর্তীতা এবং সংস্থার নির্দিষ্ট বিধি অনুসারে) এবং উত্পাদন করতে গণনা ("প্রত্যাবর্তন", রাষ্ট্রীয় পরিবেশে) অন্য মান
তবে, সমস্যাটি সি প্রোগ্রামিং ভাষায়, একটি ফাংশন এক্সিকিউটিভ দেওয়া যেমন:
void executeSomething(void){
return;
}
কি executeSomething()
একটি অভিব্যক্তি বা এটি একটি পুনারাবৃত্তি? আমার সংজ্ঞা অনুসারে, এটি একটি বিবৃতি কারণ মাইক্রোসফ্ট এর সি রেফারেন্স ব্যাকরণে সংজ্ঞায়িত হয়েছে,
আপনি কোনওভাবেই টাইপ শূন্য রয়েছে এমন একটি এক্সপ্রেশনটির (অস্তিত্বহীন) মানটি ব্যবহার করতে পারবেন না, বা শূন্য অভিব্যক্তি (অন্তর্নিহিত বা স্পষ্ট রূপান্তর দ্বারা) শূন্যতা ব্যতীত কোনও প্রকারে রূপান্তর করতে পারবেন না
তবে একই পৃষ্ঠাটি স্পষ্টভাবে নির্দেশ করে যে এই জাতীয় বাক্য গঠনটি একটি অভিব্যক্তি।
আমার পূর্ববর্তী উত্তরটি উন্নত করতে এবং যাচাই করার জন্য, প্রযোজ্য ক্ষেত্রে কম্পিউটার বিজ্ঞানের ধরণের তত্ত্ব থেকে প্রোগ্রামিং ভাষার শর্তগুলির সংজ্ঞা ব্যাখ্যা করা উচিত।
এক্সপ্রেশনের বটম টাইপ ব্যতীত অন্য প্রকার থাকে, অর্থাত এর একটি মান থাকে। একটি বিবৃতিতে ইউনিট বা নীচের প্রকার রয়েছে।
এ থেকে এটি অনুসরণ করে যে কোনও বিবৃতি কেবল তখনই কোনও প্রোগ্রামে প্রভাব ফেলতে পারে যখন এটি কোনও পার্শ্ব-প্রতিক্রিয়া তৈরি করে, কারণ এটি হয় কোনও মান ফেরত দিতে পারে না বা এটি কেবল ইউনিট প্রকারের মান দেয় যা হয় অনির্দিষ্টযোগ্য (কিছু ভাষায় যেমন একটি সি এর void
) বা (যেমন স্কালায়) বিবৃতিটির বিলম্বিত মূল্যায়নের জন্য সংরক্ষণ করা যেতে পারে।
স্পষ্টতই একটি @pragma
বা একটির /*comment*/
কোনও প্রকার নেই এবং এভাবে বিবৃতি থেকে পৃথক করা হয়। সুতরাং একমাত্র বিবৃতি যে কোনও পার্শ্ব প্রতিক্রিয়া থাকবে না একটি অপারেশন হবে। অ-অপারেশন কেবল ভবিষ্যতের পার্শ্ব প্রতিক্রিয়াগুলির জন্য স্থানধারক হিসাবে কার্যকর। একটি বিবৃতি কারণে অন্য যে কোন ক্রিয়া একটি পার্শ্ব প্রতিক্রিয়া হতে পারে। আবার একটি সংকলক ইঙ্গিত, যেমন @pragma
, কোনও বিবৃতি নয় কারণ এর কোনও প্রকার নেই।
@pragma
বা /*comment*/
কথাটি অসঙ্গত হয়।
সর্বাধিক অবিকল এক বিবৃতিতে একটি থাকতে হবে "পার্শ্ব প্রতিক্রিয়া" (অর্থাত হতে অনুজ্ঞাসূচক ) এবং একটি অভিব্যক্তি আবশ্যক আছে একটি মান টাইপ (অর্থাত না নীচে টাইপ)।
এক বিবৃতিতে ধরণ ইউনিট টাইপ, কিন্তু কারণে স্থগিত করার উপপাদ্য ইউনিট কথাসাহিত্য তাই বলে দেয় নীচে টাইপ ।
Void
সঠিকভাবে নীচের ধরণের নয় (এটি সমস্ত সম্ভাব্য ধরণের উপপ্রকার নয়)। এটি এমন ভাষাগুলিতে বিদ্যমান যাগুলির মধ্যে সম্পূর্ণ শব্দ টাইপ সিস্টেম নেই । এটি একটি স্নোবিশ বিবৃতি মত শোনাতে পারে, তবে বৈকল্পিক টিকা হিসাবে সম্পূর্ণতা এক্সটেনসিবল সফ্টওয়্যার লেখার জন্য গুরুত্বপূর্ণ critical
আসুন দেখুন উইকিপিডিয়া এই বিষয়ে কি বলে।
https://en.wikipedia.org/wiki/Statement_(computer_science)
কম্পিউটার প্রোগ্রামিংয়ে একটি বিবৃতি হ'ল একটি অত্যাবশ্যক প্রোগ্রামিং ভাষার সর্বনিম্ন স্ট্যান্ড্যালোন উপাদান যা পরিচালিত হওয়ার জন্য কিছু পদক্ষেপ প্রকাশ করে।
অনেক ভাষা (যেমন সি) বিবৃতি এবং সংজ্ঞাগুলির মধ্যে পার্থক্য তৈরি করে, কেবলমাত্র এক্সিকিউটেবল কোড সম্বলিত একটি বিবৃতি এবং একটি সনাক্তকারী হিসাবে ঘোষণাকারী সংজ্ঞা সহ, যখন একটি অভিব্যক্তি কেবল একটি মানকে মূল্যায়ন করে।
pass
একটি বিবৃতি। এটি কোনও অপশন নয় এবং এটি কোনও কিছুর সাথে মূল্যায়ন করে না।