আমাদের ক্যালকুলেশন সফ্টওয়্যারটিকে ভাল ওল 'ভিবি 6 থেকে রূপান্তর করতে কোনও নতুন ভাষার সন্ধান করার সময় সি # এর জন্য তাত্পর্যপূর্ণ অপারেটরের অভাব আমাদের জন্য একটি বড় বিরক্তি ছিল।
আমি আনন্দিত যে আমরা সি # তে গিয়েছিলাম কিন্তু এটি এখনও আমাকে বিরক্ত করে যখনই আমি এক্সপোজারগুলি সহ একটি জটিল সমীকরণ লিখি। ম্যাথ.পো (পদ্ধতি) আইএমও পড়তে সমীকরণগুলি বেশ শক্ত করে তোলে।
আমাদের সমাধানটি হ'ল একটি বিশেষ ডাবলএক্স ক্লাস তৈরি করা যেখানে আমরা ope-অপারেটরটিকে ওভাররাইড করি (নীচে দেখুন)
আপনি যতক্ষণ না কমপক্ষে একটি ভেরিয়েবলগুলিকে ডাবলএক্স হিসাবে ঘোষণা করেন ততক্ষণ এটি মোটামুটি কার্যকর হয়:
DoubleX a = 2;
DoubleX b = 3;
Console.WriteLine($"a = {a}, b = {b}, a^b = {a ^ b}");
বা স্ট্যান্ডার্ড ডাবলসে স্পষ্ট রূপান্তরকারী ব্যবহার করুন:
double c = 2;
double d = 3;
Console.WriteLine($"c = {c}, d = {d}, c^d = {c ^ (DoubleX)d}"); // Need explicit converter
যদিও এই পদ্ধতির সাথে একটি সমস্যা হ'ল অন্য অপারেটরগুলির সাথে তুলনা করে বেস্টটিকে ভুল ক্রমে গণনা করা হয়। অপারেশনের চারপাশে অতিরিক্ত () লাগিয়ে এড়ানো যায় যা সমীকরণগুলি পড়তে আবার কিছুটা শক্ত করে তোলে:
DoubleX a = 2;
DoubleX b = 3;
Console.WriteLine($"a = {a}, b = {b}, 3+a^b = {3 + a ^ b}"); // Wrong result
Console.WriteLine($"a = {a}, b = {b}, 3+a^b = {3 + (a ^ b)}"); // Correct result
আমি আশা করি এটি অন্যদের পক্ষে সহায়ক হতে পারে যারা তাদের কোডগুলিতে প্রচুর জটিল সমীকরণ ব্যবহার করে এবং সম্ভবত এই পদ্ধতিটি কীভাবে উন্নত করা যায় সে সম্পর্কে কারও ধারণা থাকতে পারে ?! :-)
ডাবলএক্স ক্লাস:
using System;
namespace ExponentialOperator
{
/// <summary>
/// Double class that uses ^ as exponential operator
/// </summary>
public class DoubleX
{
#region ---------------- Fields ----------------
private readonly double _value;
#endregion ------------- Fields ----------------
#region -------------- Properties --------------
public double Value
{
get { return _value; }
}
#endregion ----------- Properties --------------
#region ------------- Constructors -------------
public DoubleX(double value)
{
_value = value;
}
public DoubleX(int value)
{
_value = Convert.ToDouble(value);
}
#endregion ---------- Constructors -------------
#region --------------- Methods ----------------
public override string ToString()
{
return _value.ToString();
}
#endregion ------------ Methods ----------------
#region -------------- Operators ---------------
// Change the ^ operator to be used for exponents.
public static DoubleX operator ^(DoubleX value, DoubleX exponent)
{
return Math.Pow(value, exponent);
}
public static DoubleX operator ^(DoubleX value, double exponent)
{
return Math.Pow(value, exponent);
}
public static DoubleX operator ^(double value, DoubleX exponent)
{
return Math.Pow(value, exponent);
}
public static DoubleX operator ^(DoubleX value, int exponent)
{
return Math.Pow(value, exponent);
}
#endregion ----------- Operators ---------------
#region -------------- Converters --------------
// Allow implicit convertion
public static implicit operator DoubleX(double value)
{
return new DoubleX(value);
}
public static implicit operator DoubleX(int value)
{
return new DoubleX(value);
}
public static implicit operator Double(DoubleX value)
{
return value._value;
}
#endregion ----------- Converters --------------
}
}
**
ইনফিক্স এক্সপেনসিয়েশন অপারেটর হিসাবে ব্যবহার করে ।