ফাংশনগুলির প্রিন্টফ পরিবারের জন্য ফর্ম্যাট স্পেসিফায়ার হিসাবে শতাংশ চিহ্ন (%) কেন বেছে নেওয়া হয়েছিল?


27

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

আমার প্রশ্ন হ'ল, এটির মূলত কারণ ছিল বা ভবিষ্যতে ফর্ম্যাট স্পেসিফায়ার হিসাবে নির্বাচিত হওয়ার কোনও বিশেষ কারণ আছে কি?

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

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

string output = String.Format("In {0}, the temperature is {1} degrees Celsius.",
                              "Texas", 37);
Console.WriteLine(output);

// Output:
//     In Texas, the temperature is 37 degrees Celsius.

String.Formatপদ্ধতির ডকুমেন্টেশনে আরও তথ্য রয়েছে যেমন সাধারণভাবে সম্মিলিত বিন্যাস সম্পর্কিত এই নিবন্ধটি রয়েছে তবে সঠিক বিবরণটি গুরুত্বহীন। মুল বক্তব্যটি হ'ল তারা %বিন্যাস নির্দিষ্টকরণের সূচনা করার জন্য ব্যবহারের দীর্ঘকালীন অনুশীলনটি ত্যাগ করে । সি ভাষাটি সহজেই ব্যবহার করতে পারত {d}এবং {u}, তবে তা হয়নি। কেন এই সিদ্ধান্তটি পূর্ববর্তী ক্ষেত্রে অর্থবোধ করে, এবং নতুন বাস্তবায়নগুলি এটিকে অনুসরণ করা উচিত কিনা সে সম্পর্কে কারও কোনও ধারণা আছে?

স্পষ্টতই এমন কোনও চরিত্র নেই যা বেছে নিতে পারা যায় যা এড়াতে পারা না হয় যাতে এটি নিজেই স্ট্রিংয়ের মধ্যে অন্তর্ভুক্ত করা যায়, তবে তাদের মধ্যে দুটি ব্যবহার করেই সমস্যাটি ইতিমধ্যে বেশ সমাধান হয়ে গেছে । অন্যান্য কি বিবেচনা প্রাসঙ্গিক?


5
পালানোর সমস্যা দুটি অক্ষর ব্যবহার করে সমাধান করা যায় না । এর অর্থ কেবলমাত্র আপনার পালাতে আরও একটি চরিত্র রয়েছে।
জেজেজে

2
আমি আগ্রহী. অবশ্যই, এর {u}পরিবর্তে %uএটি ব্যবহার করা সম্ভব হবে তবে এর কোনও উল্লেখযোগ্য সুবিধা থাকবে? এটি বেশিরভাগ স্বেচ্ছাসেবী পছন্দ বলে মনে হচ্ছে।
সিবি বেইলি

12
@ জারোদরবারসন তাই আপনি বলছেন যে তারা ইচ্ছাকৃতভাবে {}বাক্য গঠনটি বেছে নিয়েছে যাতে সি # শিখার লোকেরা অন্য কিছু শিখতে শুরু করে না? আমার বিশ্বাস করা খুব কঠিন যে এটি তাদের ডিজাইনের সিদ্ধান্তের একটি অংশ ছিল, এমনকি যদি কোনও হয় তবে was আপনি কি আপনার বক্তব্যটি কোনওভাবে ব্যাকআপ করতে পারবেন?
stijn

6
মজার বিষয় হচ্ছে পাইথন .NET এর ফর্ম্যাটিংয়ের অনুরূপ কোনও কিছুর পক্ষে %ফর্ম্যাটিংটি পরিত্যাগ করেছে (অনেক উচ্চতর রূপের) কারণ পরবর্তীটি আরও নমনীয়তার প্রস্তাব দেয়। {}
কনরাড রুডল্ফ

3
আকাশ নীল কেন, এবং কেন "নীল" শব্দটির নাম নীল? তাদের কিছু বাছাই করতে হয়েছিল।

উত্তর:


12

@ সিকিউর নোট হিসাবে, সি এর printfফাংশন বিসিপিএলের writefফাংশন দ্বারা অনুপ্রাণিত হয় । এবং যদি আপনি বিসিপিএল- এর উইকিপিডিয়া পৃষ্ঠার দিকে তাকান , এটির একটি উদাহরণ রয়েছে যা দেখায় যে বিসিপিএল একটি ফর্ম্যাট স্পেসিফায়ারও প্রবর্তন writefকরত %

সুতরাং আমরা সেই সিটি %বিসিপিএল, বা বিসিপিএল একই কারণে ব্যবহার করেছি বলে নির্ধারণ করতে পারি । আমার অন্ত্র অনুভূতিটি হ'ল এটি কেবলমাত্র %ASCII চরিত্রগুলির মধ্যে সবচেয়ে কম ব্যবহৃত হয় ... বা তাই লেখকরা ভেবেছিলেন। এটিও সম্ভবত যে বিভিন্ন বিকল্পের ওজনে তারা প্রচুর সময় ব্যয় করেনি। সেই সময়, বিসিপিএল এবং সি উভয়ই অস্পষ্ট ভাষা ছিল এবং সম্ভবত লেখকরা আরও বেশি গুরুত্বপূর্ণ বিষয়গুলি মোকাবেলা করতে পারেন।

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


3
"আসলে, আমি মনে করি আমি জানি যে সে সম্পর্কে কে জানবে" ... এবং? ... এবং? .. শুধু আমাদেরকে একটি ক্লিফ-
ফাঁসির

2
@ মাওগ - ব্রায়ান নাইট সম্ভবত। আয়ান উইলসন সম্ভবত। মার্টিন রিচার্ডস অবশ্যই করবেন। আছে HTH।
স্টিফেন সি

6

উইকিপিডিয়া এন্ট্রি তে খুব বেশি historicalতিহাসিক তথ্য ধারণ করে না, যা নির্দিষ্ট নয় printf, তবে সাধারণভাবে চরিত্রগুলি থেকে বাঁচতে পারে।

http://en.wikipedia.org/wiki/Escape_character

"পালানো চরিত্র" শব্দের প্রারম্ভিক উল্লেখটি বব বেরারের আইবিএম প্রযুক্তিগত প্রকাশনাগুলিতে পাওয়া যায়। স্পষ্টতই, তিনিই এএসসিআইআই চরিত্রের সেটটিতে কাজ করার সময় এই যান্ত্রিকটি আবিষ্কার করেছিলেন।

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

বিটিডাব্লু, এর সাথে সম্পর্কিত আরও একটি নিবন্ধ এর সাথে একটি শব্দ যুক্ত হয়েছে যা আমি এর আগে শুনেছি:

http://en.wikipedia.org/wiki/Leaning_toothpick_syndrome

এর জন্য নিবন্ধটিতে printfআরও কিছু তথ্য স্নিপেট রয়েছে তবে কারণগুলি সম্পর্কে নয়।

http://en.wikipedia.org/wiki/Printf

সি এর ভেরিয়াদিক প্রিন্টফের উৎপত্তি বিসিপিএল এর রাইটিংফ ফাংশনে রয়েছে।

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