স্ট্রিং ইন্টারপোলেশন বনাম স্ট্রিং.ফর্ম্যাট


113

স্ট্রিং ইন্টারপোলেশন ব্যবহারের মধ্যে একটি লক্ষণীয় পারফরম্যান্স পার্থক্য রয়েছে:

myString += $"{x:x2}";

বনাম স্ট্রিং.ফর্ম্যাট ()?

myString += String.Format("{0:x2}", x);

আমি কেবলই জিজ্ঞাসা করছি কারণ রিশার্পার ঠিক করার অনুরোধ জানায় এবং এর আগে আমাকে বোকা বানানো হয়েছিল।


4
উভয় চেষ্টা করে দেখুন না কেন পার্থক্যটি লক্ষ্য করছেন?
ব্লারগার্ড বাইরে

57
@ ব্লগারবার্ড সত্যি বলতে, আমি অলস। এবং আমি অনুমান করি যে আপনার মধ্যে যদি কেউ পুরুষ বা মহিলাকে উর্ধমুখী করে উত্তর অফ হাতে জানত তবে এটির জন্য কম সময় লাগবে।
ক্রিথিক

26
আমি প্রথম যখন এই প্রশ্নটি জিজ্ঞাসা করি তখন এটি কীভাবে বিস্মৃত হয় এবং দু'বছর পরে, এটি +21 পর্যন্ত হয় তা আমি পছন্দ করি।
ক্রিথিক

46
সিরিয়াসলি। কীভাবে কেউ এই প্রশ্নের কার্যকরতা নিয়ে সন্দেহ করতে পারেন? আপনি কীভাবে মানুষের ঘন্টাগুলি নষ্ট করে ফেলতে পারেন, যদি এই প্রশ্নটি জিজ্ঞাসা করে প্রত্যেককে 'নিজেরাই চেষ্টা করে দেখতে হয়?' এমনকি যদি এটি 5 মিনিট সময় নেয় তবে 10,000+ বিকাশকারী যারা এখনও এই প্রশ্নটি দেখেছেন তাদের মধ্যে এটির গুণ বৃদ্ধি করুন। এবং তারপরে কোনও সহকর্মী আপনার ফলাফলগুলিতে সন্দেহ করলে আপনি কী করবেন? আবার শুরু থেকে কর? অথবা কেবল তাদের এই এসও পোস্টে উল্লেখ করুন। এটা এখানে কি জন্য বাছাই।
বিটাউনটিকেডি

8
@BTownTKD এটি আপনার জন্য আদর্শ স্ট্যাকওভারফ্লো আচরণ। যদি কেউ এটির উদ্দেশ্যে উদ্দেশ্যে সাইটটি ব্যবহার করে তবে তারা তাৎক্ষণিকভাবে বিচ্ছিন্ন হয়ে পড়ে। আমি মনে করি কেন আমাদের সম্মিলিতভাবে অ্যাকাউন্টগুলি নিষিদ্ধ করার অনুমতি দেওয়া উচিত তার একটি কারণ এটি। অনেক লোকই কেবল এই সাইটে থাকার যোগ্য নয়।
Krythic

উত্তর:


72

লক্ষণীয় আপেক্ষিক। তবে: স্ট্রিং ইন্টারপোলেশন string.Format()সংকলন সময়ে রূপান্তরিত হয় যাতে তাদের একই ফলাফলের সাথে শেষ হওয়া উচিত।

যদিও সূক্ষ্ম পার্থক্য রয়েছে: যেহেতু আমরা এই প্রশ্নটি থেকে বলতে পারি , ফর্ম্যাট স্পেসিফায়ারে স্ট্রিং কনটেন্টেশন একটি অতিরিক্ত string.Concat()কলের ফলাফল দেয় ।


4
প্রকৃতপক্ষে, স্ট্রিং ইন্টারপোলেশন কিছু ক্ষেত্রে স্ট্রিং সংমিশ্রণে সংকলন করতে পারে (যেমন যখন একটি intব্যবহৃত হয়)। var a = "hello"; var b = $"{a} world";স্ট্রিং সংক্ষিপ্তকরণ সংকলন। var a = "hello"; var b = $"{a} world {1}";স্ট্রিং বিন্যাসে সংকলন করে।
ওমর মাসকেটেলো

5

স্ট্রিং ইন্টারপোলেশনটি স্ট্রিংয়ে রূপান্তরিত হয় comp সংকলন-সময়ে ফরম্যাট ()।

স্ট্রিং-এও ফর্ম্যাট আপনি একক যুক্তির জন্য বিভিন্ন আউটপুট এবং একক যুক্তির জন্য বিভিন্ন আউটপুট ফর্ম্যাট নির্দিষ্ট করতে পারেন। তবে স্ট্রিং ইন্টারপোলেশনটি আমার ধারণা বেশি পাঠযোগ্য read তাই এটা আপনার উপর নির্ভর করে.

a = string.Format("Due date is {0:M/d/yy} at {0:h:mm}", someComplexObject.someObject.someProperty);

b = $"Due date is {someComplexObject.someObject.someProperty:M/d/yy} at {someComplexObject.someObject.someProperty:h:mm}";

কিছু কার্য সম্পাদনের ফলাফল রয়েছে https://koukia.ca/string-interpolation-vs-string-format-string-concat-and-string-builder-performance-benchmark-c1 داد38032 a


2
স্ট্রিং ইন্টারপোলেশন কেবল কখনও কখনও রূপান্তরিত হয় String::Format। এবং মাঝে মাঝে String::Concat। এবং সেই পৃষ্ঠাটিতে সম্পাদনা-পরীক্ষাটি সত্যই অর্থবহ নয়: আপনি এই পদ্ধতির প্রতিটিটিতে যে পরিমাণ যুক্তি উপস্থাপন করেন তা নির্ভরশীল। কনক্যাট সর্বদা দ্রুত হয় না, স্ট্রিংবিল্ডার সর্বদা স্লো হয় না।
ম্যাথিয়াস বার্গার

3

প্রশ্নটি পারফরম্যান্স সম্পর্কে ছিল, তবে শিরোনামটি কেবল "বনাম" বলে, তাই আমার মনে হয় আরও কয়েকটি পয়েন্ট যুক্ত করতে হবে, তাদের মধ্যে কিছু মতামত প্রকাশ করেছেন।

  • স্থানীয়করণ

    • স্ট্রিং ইন্টারপোলেশনটি ইনলাইন কোড প্রকৃতির কারণে স্থানীয় করা যায় না। স্থানীয়করণের আগে এটি রূপান্তরিত হয়েছে string.Format। তবে, এর জন্য সরঞ্জামদান রয়েছে (যেমন ReSharper)।
  • রক্ষণাবেক্ষণ (আমার মতামত)

    • string.Formatএটি আরও বেশি পঠনযোগ্য, কারণ এটি বাক্যটির উপরে কেন্দ্রীভূত করে আমি কী বলতে চাই, উদাহরণস্বরূপ যখন একটি সুন্দর এবং অর্থবহ ত্রুটি বার্তা তৈরি করার সময়। {N}স্থানধারক ব্যবহার করে আমাকে আরও নমনীয়তা দেয় এবং এটি পরে সংশোধন করা আরও সহজ।
    • এছাড়াও, ইন্টারপ্লোয়েশনে অন্তর্নিহিত ফর্ম্যাট স্পেসিফায়ারটি ভুল পড়া সহজ, এবং পরিবর্তনের সময় অভিব্যক্তির সাথে একসাথে মোছা সহজ।
    • জটিল এবং দীর্ঘ এক্সপ্রেশন ব্যবহার করার সময়, বিরতি দ্রুত পড়া এবং বজায় রাখা আরও শক্ত হয়ে যায়, সুতরাং কোডটি যখন বিকশিত হয় এবং আরও জটিল হয় তখন এই অর্থে এটি ভাল স্কেল হয় না। string.Formatএটি খুব কম প্রবণ হয়।
    • দিনের শেষে সবকিছু উদ্বেগের বিচ্ছেদ সম্পর্কে: আমি যা উপস্থাপন করা উচিত তার সাথে এটি কীভাবে উপস্থাপন করা উচিত তা মেশাতে পছন্দ করি না ।

সুতরাং এর উপর ভিত্তি করে আমি string.Formatআমার বেশিরভাগ কোডের সাথে লেগে থাকার সিদ্ধান্ত নিয়েছি । তবে কোডিংয়ের আরও সাবলীল পদ্ধতিতে আমি একটি এক্সটেনশন পদ্ধতি প্রস্তুত করেছি যা আমি আরও পছন্দ করি। এক্সটেনশনের বাস্তবায়নটি হ'ল এক-লাইনার, এবং এটি ব্যবহারে এটির মতো দেখায়।

var myErrorMessage = "Value must be less than {0:0.00} for field {1}".FormatWith(maximum, fieldName);

ইন্টারপোলেশন একটি দুর্দান্ত বৈশিষ্ট্য, আমাকে ভুল করবেন না। তবে আইএমও এটি সেই ভাষাগুলিতে সর্বোত্তমভাবে জ্বলজ্বল করে যা string.Formatউদাহরণস্বরূপ জাভাস্ক্রিপ্টটি মিস করে feature


এটি যোগ করার জন্য আপনাকে ধন্যবাদ।
ক্রিথিক

1
আমি রক্ষণাবেক্ষণের বিষয়ে একমত নই; অনুমোদিত রিশার্পার তাদের সংশ্লিষ্ট সূচকগুলির সাথে সন্নিবেশিত মানগুলিকে সামঞ্জস্য করা কিছুটা সহজ করে তোলে (এবং বিপরীতে) তবে আমি মনে করি এটি {3}এক্স বা ওয়াই বিশেষত যদি আপনি নিজের ফর্ম্যাটটিকে পুনরায় সাজানো শুরু করেন তবে এটি আরও জ্ঞানীয় বোঝা । মাদলিবসের উদাহরণ: $"It was a {adjective} day in {month} when I {didSomething}"বনাম string.Format("It was a {0} day in {1} when I {2}", adjective, month, didSomething)-> $"I {didSomething} on a {adjective} {month} day"বনামstring.Format("I {2} on a {0} {1} day", adjective, month, didSomething)
ড্রাজাস

@ ড্রজাস আপনার মতামত ভাগ করে নেওয়ার জন্য ধন্যবাদ। আপনার ভাল পয়েন্ট রয়েছে, তবে এটি কেবলমাত্র সত্য যদি আমরা কেবল সহজ, নামযুক্ত স্থানীয় ভেরিয়েবল ব্যবহার করি। আমি বেশ কয়েকবার যা দেখেছি তা হ'ল জটিল এক্সপ্রেশন, ফাংশন কল, যা কিছু অন্তরবিচ্ছিন্ন স্ট্রিংয়ে ফেলেছে। সঙ্গে string.Formatআমি মনে করি আপনি অনেক কম এই সমস্যাটি প্রবণ। তবে যাইহোক, এই কারণেই আমি জোর দিয়েছি যে এটি আমার মতামত :)
জোল্টন তমাসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.