আমি, জে = 1 আসলেই বিভ্রান্তিকর? [বন্ধ]


11

একটি লাইনারে একাধিক ভেরিয়েবল ইনিশিয়ালাইজেশন সম্পর্কে একটি সাধারণ যুক্তি রয়েছে, তা হ'ল:

উদাহরণস্বরূপ int i, j = 1 বিবেচনা করুন; যা কিছু লোককে ভুলভাবে বিশ্বাস করতে পারে যে উভয় ভেরিয়েবলকে আরম্ভ করা হচ্ছে

আমরা তর্ক করতে পারি যে কারও পক্ষে তার ভাষার ভুল বাক্যটি সঠিকভাবে জানা উচিত যাতে এটি সম্পর্কে ভুল না হয়। আর একটি যুক্তি বিকাশকারী হিসাবে হতে পারে আমরা অনেকগুলি ভাষা শিখি আমরা ভাষার মধ্যে থাকা বৈশিষ্ট্যের মধ্যে ভুল করতে পারি।

তবে সেই সুনির্দিষ্ট ক্ষেত্রে আমি নিম্নলিখিতটি নিয়ে ভাবছি যে এটির এমন একটি ভাষাও বিদ্যমান আছে যেখানে খুব সিনট্যাক্স i, j = 1 উভয় পরিবর্তনশীলকে আরম্ভ করে?

যদি সেই যুক্তি না হয় তবে প্রয়োগ হয় না।


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

4
@ কোডসআইএন চাওস আপনি কি বলছেন যে সি বুদ্ধিমান নয়?
বাল্ড্রিক

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

2
ভিজ্যুয়াল বেসিক 6 Dim Apple, Orange, Pear as Fruitএ আইনী ঘোষণা। ধরুন আপনি ভিবি জানেন না। আপনার প্রথম ছাপ যে Appleটাইপ হয় Fruit? এইটা না. মনে রাখবেন, ভাষাগুলি প্রায়শই লোকেরা পড়েন যারা সেই ভাষায় বিশেষজ্ঞ নন; আপনি যদি বিশেষজ্ঞ হন তবে আপনার উদ্দেশ্যগুলি স্পষ্টভাবে অ-বিশেষজ্ঞদের কাছে জানানোর জন্য ভাষাটি বুদ্ধিমানের সাথে ব্যবহার করুন। আমি কোনও ভাষায় একাধিক সূচনা ব্যবহার করি না।
এরিক লিপার্ট

13
একইভাবে: বিবেচনা এটি var x = 1, y = 1.5; কি একই int x = 1; double y = 1.5;বা এটি একই হিসাবে double x = 1, y = 1.5;? যখন আমরা varসি # 3.0 এ যুক্ত করেছি তখন আমি একটি জরিপ করেছি এবং আবিষ্কার করেছি যে প্রায় অর্ধেক লোক বিশ্বাস করেছিল যে প্রথমটি "স্পষ্টতই" সঠিক এবং বাকী অর্ধেক লোক বিশ্বাস করেছিল যে অন্যটি "স্পষ্টতই" সঠিক, এবং তাই আমরা এটিকে অবৈধ করে দিয়েছি। একটি বৈশিষ্ট্য যা পুরো অর্ধেক জনসংখ্যাকে বিভ্রান্ত করে এটি একটি খারাপ বৈশিষ্ট্য।
এরিক লিপার্ট

উত্তর:


37

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


3
আমি আরও যুক্তি দিয়ে বলব যে যদি এই জাতীয় বিবৃতি উভয় বক্তব্যকে আরম্ভ করে না , তবে কেন এটি বিদ্যমান?
বেরিন লরিটস

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

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

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

6
ভাষা নির্বিশেষে, এক জিজ্ঞাসা করা উচিত "কি উপকার লেখার int i, j=1বনাম int i; int j = 1(অথবা আরও ভাল আলাদা লাইন)?"
চিপনার

2

আমি মনে করি, আপনি উভয় পক্ষের পক্ষে তর্ক করতে পারেন:

  • কন্ট্রা i, j = 0:
    গণিতবিদগণ উভয়ই শূন্য বলে মনে করছেন iএবং এটি ব্যবহার করার জন্য এটি ব্যবহার করেন j

  • প্রো i, j = 0:
    এটি আপনার অপারেটরদের প্রাধান্য জানার একটি সাধারণ বিষয়। এবং যদি আপনি তাদের নজির সম্পর্কে সন্দেহ প্রকাশ করেন তবে এখনই এটি সন্ধানের সময়।

    a.b += c[i]*d[i];বন্ধুত্ব ছাড়াই আমরা স্টাফ লিখি কেন এটি একই কারণ । অবশ্যই এটি সমতুল্য (a.b) += ((c[i])*(d[i]));, তবে প্রোগ্রামাররা আশা করা যায় যে সর্বাধিক ব্যবহৃত অপারেটরগুলির হৃদয় দিয়ে অগ্রাধিকার জানতে পারে এবং যখন তারা নিশ্চিত না হয় তখন অপারেটরগুলির নজিরটি সন্ধান করতে সক্ষম হতে পারে। সুতরাং, প্রথম বন্ধনী সাধারণত অপ্রয়োজনীয় বিশৃঙ্খলা হিসাবে বিবেচিত হয় যদি না তারা অপারেটর অগ্রাধিকারের চেয়ে পৃথক মূল্যায়ন আদেশ জোর করে।

    অবশ্যই, ব্যতিক্রম আছে। এর নজির <<এবং +সাধারণত উভয় ক্ষেত্রেই প্রথম বন্ধনী সতর্ক করার জন্য যথেষ্ট অস্পষ্ট বলে বিবেচিত হয়। তবে সেই নিয়মই প্রমাণ করে ব্যতিক্রম।

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


7
আমি লক্ষ করি যে এটিতে int i, j = 0;কোনও অপারেটর নেই । শুধুমাত্র অভিব্যক্তি যে বিবৃতি হল 0এবং সেইজন্য অপারেটর অগ্রগণ্যতা তা আসে না। পার্সার ,কমা অপারেটর বা =অ্যাসাইনমেন্ট অপারেটর হিসাবে বিবেচনা করে না ; বরং এগুলি ঘোষণাপত্রের ব্যাকরণের অংশ parts
এরিক লিপার্ট

@ এরিকলিপার্ট যতক্ষণ অগ্রাধিকার সংক্রান্ত বিধি সম্পর্কিত, তফাতটি অপ্রাসঙ্গিক: আমার জানা যে কোনও সি-স্টাইলের ভাষা অন্যান্য বিবরণীর মতো ঘোষণায় একই নজির ব্যবহার করে। অন্য যে কোনও কিছুই হতাশাকে আমন্ত্রণ জানায়।
মাস্টার -

but programmers can be expected to know the precedence of the most used operators by heart, তুমি বলো. আপনি যে উদাহরণটি দিয়েছেন তাতে আমি নিশ্চিত নই যে বেশিরভাগ (গড়) প্রোগ্রামাররা সদস্য অ্যাক্সেস অপারেটর বা অ্যারে ইনডেক্স অপারেটরটিকে গাণিতিক অর্থে অপারেটর হিসাবে কল্পনা করেন তবে পরিবর্তে এগুলিকে প্রাকৃতিক ভাষার বিশেষ্য এবং গুণক হিসাবে ভাবেন ক্রিয়া হিসাবে অপারেটর। এ কারণেই int i, j, k = 0;এ জাতীয় রূপক নির্মাণ, কারণ এটি "int ভেরিয়েবল i, j এবং k এর প্রাকৃতিক ভাষার অ্যানালগ হিসাবে ঘোষণা করা হয়েছে এবং এটি 0 তে সেট করা হবে!"
স্টিভ

@ স্টিভ আপনি প্রোগ্রামার হিসাবে কীভাবে অগ্রাধিকারের নিয়মগুলি মনে রাখেন তা পুরোপুরি আপনার উপর নির্ভর করে। যদি এটি আপনাকে ভাষার নাম হিসাবে ভাবতে সহায়তা করে তবে এটি করুন। তবে সেই ক্ষেত্রে আপনি সমস্যার মুখোমুখি হবেন যখন আপনি যখন স্টাফ দেখেন তবে *a[i]আমি মনে করি না যে আপনি "বিশেষ্য" উপমা দিয়ে যথেষ্ট পরিমাণে পার্স করতে পারবেন। যেমনটি int i, j, k = 0;, আপনি যদি নিয়মগুলি না দেখেন তবে এর অর্থ কিছু হতে পারে: তৃতীয় ব্যাখ্যার ঘোষণা হবে int i, তারপরে মূল্যায়ন করুন jএবং শেষ পর্যন্ত নির্ধারণ করুন k = 0। আপনি নিজের ভাষার বাক্য গঠনটি না জানলে আপনি এই ধরনের নির্মাণগুলি পার্স করতে পারবেন না। আপনি যদি যাইহোক করেন তবে এটি আপনার সমস্যা।
মাস্টার -

@ মাস্টার, আমি আমার নির্দিষ্ট মুখস্থ কৌশলটি প্রকাশ করছিলাম না। আমি কোনও সি প্রোগ্রামার নই তাই সিতে অপারেটরের অগ্রাধিকারের সাথে আমার পরিচিতি দ্বিতীয়-হার। আমি যখন আপনার উদাহরণটি দেখেছি তখন আমি যা লক্ষ্য করেছি তা হ'ল আমি গুণফল অপারেটরটিকে অ্যারের সূচক অপারেটরের সাথে তুলনামূলক প্রাধান্য বলে মনে করি নি। এটি হ'ল, আমি a[i]কোনও সূচক অপারেটরের প্রয়োগের জন্য aপড়িনি, বরং উভয়কে একত্রে অপ্রয়োজনীয় সিনট্যাকটিক উপাদান হিসাবে গুণিত অপারেটরের ক্রিয়াকলাপ নির্দিষ্ট করে পাঠ করেছি, এবং এভাবেই আমি প্রাধান্যটি মূল্যায়নের জন্যও অনুরোধ করা হয়নি। (1/2)
স্টিভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.