এটি অপরিজ্ঞাত কারণ এটি x
ক্রম পয়েন্টগুলির মধ্যে দুবার পরিবর্তন করে। মান বলে যে এটি অপরিজ্ঞাত, সুতরাং এটি অপরিজ্ঞাত।
এটাই আমি জানি।
কিন্তু কেন?
আমার বোধগম্যতা এটি নিষিদ্ধকরণ সংকলকদের আরও ভাল অনুকূলিতকরণ করতে দেয়। সি আবিষ্কারের সময় এটি বোধগম্য হতে পারে তবে এখন এটি একটি দুর্বল যুক্তির মতো মনে হচ্ছে।
আমরা যদি আজ সি পুনর্নবীকরণ করতে চাই, আমরা কি এইভাবে এটি করব, না এটি আরও ভাল করা যায়?
অথবা হতে পারে আরও গভীর সমস্যা রয়েছে, যা এই জাতীয় অভিব্যক্তির জন্য ধারাবাহিক নিয়ম সংজ্ঞায়িত করা শক্ত করে তোলে তাই তাদের নিষেধ করা ভাল?
সুতরাং ধরা যাক আমরা আজ সি পুনরায় উদ্ভাবন করা হয়েছে। আমি মত প্রকাশের জন্য সাধারণ নিয়ম প্রস্তাব করতে চাই x=x++
, যা বিদ্যমান নিয়মগুলির চেয়ে আমার কাছে আরও ভাল কাজ করা বলে মনে হয়।
আমি বিদ্যমান নীতিগুলি বা অন্যান্য পরামর্শের তুলনায় প্রস্তাবিত বিধিগুলি সম্পর্কে আপনার মতামত পেতে চাই।
প্রস্তাবিত বিধি:
- সিকোয়েন্স পয়েন্টগুলির মধ্যে, মূল্যায়নের ক্রমটি অনির্ধারিত।
- পার্শ্ব প্রতিক্রিয়া অবিলম্বে সংঘটিত হয়।
জড়িত কোনও অপরিবর্তিত আচরণ নেই। এক্সপ্রেশনগুলি এই মানটি বা এটির মূল্যায়ন করে, তবে অবশ্যই আপনার হার্ড ডিস্কটি ফর্ম্যাট করবে না (আশ্চর্যের বিষয়, আমি এমন কোনও রূপায়ণ দেখিনি যেখানে x=x++
হার্ডডিস্কটি ফর্ম্যাট করে)।
উদাহরণ এক্সপ্রেশন
x=x++
- ভাল সংজ্ঞায়িত, পরিবর্তন হয় নাx
।
প্রথমত,x
বৃদ্ধি করা হয় (তাত্ক্ষণিকভাবেx++
মূল্যায়ন করা হয়), তারপরে এটি পুরানো মান সঞ্চিত থাকেx
।x++ + ++x
-x
দুবার বৃদ্ধি , মূল্যায়ন2*x+2
।
যদিও উভয় পক্ষের প্রথমে মূল্যায়ন করা যেতে পারে তবে ফলাফলটি হয়x + (x+2)
(বাম দিকে প্রথমে) বা(x+1) + (x+1)
(ডান দিকের প্রথমে)।x = x + (x=3)
- অনির্ধারিত,x
হয়x+3
বা সেট করা6
।
যদি ডান দিকটি প্রথমে মূল্যায়ন করা হয় তবে তাx+3
। এটিx=3
প্রথমে মূল্যায়ন করাও সম্ভব , তাই এটি3+3
। উভয় ক্ষেত্রেই নির্ধারিত হলেx=3
অ্যাসাইনমেন্টটি তত্ক্ষণাত্ ঘটেx=3
, সুতরাং সঞ্চিত মানটি অন্য কার্যক্রমে পুনর্নির্দিষ্ট করা হয়।x+=(x=3)
- ভাল সংজ্ঞায়িত,x
6 সেট করে।
আপনি যুক্তি দিতে পারেন যে এটি উপরের অভিব্যক্তিটির জন্য কেবল সংক্ষিপ্তরূপ।
তবে আমি বলব যে+=
অবশ্যই মৃত্যুদন্ড কার্যকর করা উচিতx=3
, এবং দুটি অংশে নয় (পড়ুনx
, মূল্যায়ন করুনx=3
, যুক্ত করুন এবং নতুন মূল্য সঞ্চয় করুন)।
সুবিধা কী?
কিছু মন্তব্য এই ভাল পয়েন্ট উত্থাপন।
আমি অবশ্যই মনে করি না যে মত প্রকাশগুলি x=x++
কোনও সাধারণ কোডে ব্যবহার করা উচিত।
আসলে, আমি তার থেকে অনেক বেশি কঠোর - আমি মনে করি একা x++
হিসাবে x++;
কেবলমাত্র একমাত্র ভাল ব্যবহার ।
তবে আমি মনে করি ভাষার নিয়মগুলি যথাসম্ভব সহজ হতে হবে। অন্যথায় প্রোগ্রামাররা কেবল তাদের বোঝে না। সিকোয়েন্স পয়েন্টগুলির মধ্যে দুবার ভেরিয়েবল পরিবর্তন করতে নিষেধ করা নিয়মটি অবশ্যই একটি নিয়ম যা বেশিরভাগ প্রোগ্রামাররা বুঝতে পারে না।
একটি খুব বেসিক নিয়মটি হ'ল:
যদি এ বৈধ হয়, এবং বি বৈধ হয়, এবং সেগুলি বৈধ উপায়ে একত্রিত হয়, ফলাফলটি বৈধ।
x
একটি বৈধ এল-মান, x++
একটি বৈধ এক্সপ্রেশন এবং =
একটি এল-মান এবং একটি এক্সপ্রেশন একত্রিত করার জন্য একটি বৈধ উপায়, সুতরাং কীভাবে x=x++
আইনী হয় না?
সি স্ট্যান্ডার্ডটি এখানে একটি ব্যতিক্রম করে এবং এই ব্যতিক্রমটি নিয়মগুলিকে জটিল করে তোলে। আপনি স্ট্যাকওভারফ্লো.কম অনুসন্ধান করতে পারেন এবং এই ব্যতিক্রম মানুষকে কতটা বিভ্রান্ত করে তা দেখতে পারেন।
তাই আমি বলছি - এই বিভ্রান্তি থেকে মুক্তি পান।
=== উত্তরের সংক্ষিপ্তসার ===
কেন যে?
আমি উপরের অংশে ব্যাখ্যা করার চেষ্টা করেছি - আমি সি নিয়ম সহজ হতে চাই।অপ্টিমাইজেশনের সম্ভাব্য:
এটি সংকলক থেকে কিছুটা স্বাধীনতা নিয়েছে, তবে আমি এমন কিছু দেখিনি যা আমাকে নিশ্চিত করে যে এটি উল্লেখযোগ্য হতে পারে।
সর্বাধিক অপটিমাইজেশন এখনও করা যেতে পারে। উদাহরণস্বরূপ,a=3;b=5;
স্ট্যান্ডার্ডটি অর্ডার নির্দিষ্ট করে সত্ত্বেও , পুনরায় সাজানো যেতে পারে। যেমন মত প্রকাশa=b[i++]
এখনও এখনও একইভাবে অনুকূলিত করা যেতে পারে।আপনি বিদ্যমান মান পরিবর্তন করতে পারবেন না।
আমি স্বীকার করি, পারি না। আমি কখনই ভাবিনি যে আমি আসলে এগিয়ে যেতে পারি এবং মান এবং সংকলকগুলি পরিবর্তন করতে পারি। আমি কেবল ভাবতে চেয়েছিলাম যে জিনিসগুলি অন্যভাবে করা যেতে পারত।
x
নিজেকে অর্পণ করার পক্ষে খুব একটা পয়েন্ট নেই , এবং আপনি যদি ইনক্রিমেন্ট চান তবে আপনিx
কেবল বলতে পারেনx++;
- অ্যাসাইনমেন্টের প্রয়োজন নেই। আমি বলব যে এটি সংজ্ঞায়িত করা উচিত নয় কারণ এটি ঘটবে বলে মনে রাখা কঠিন।