هل هناك أي أسباب لعدم استخدام "هذا" ("الذات"، "أنا"، ...)؟

StackOverflow https://stackoverflow.com/questions/333291

سؤال

قرأت هذه الإجابة وتعليقاتها وأنا فضولي:هل هناك أي أسباب لعدم استخدام this / Self / Me ?

بالمناسبة:أنا آسف إذا تم طرح هذا السؤال من قبل، يبدو أنه من المستحيل البحث عن الكلمة this على ذلك.

هل كانت مفيدة؟

المحلول

تحذير: الجواب ذاتية بحتة أدناه

وأعتقد أن "السبب" أفضل عدم استخدام هذا / الذات / لي هو الإيجاز. اذا كان بالفعل متغير عضو / وظيفة ثم لماذا بوفرة إضافة البادئة؟

وأنا شخصيا تجنب استخدام هذا / الذات / لي إلا إذا كان من الضروري إزالة الغموض تعبير خاص لمترجم. كثير من الناس لا يتفقون مع هذا ولكن لم تتح لي أي وقت مضى أن يكون نقطة الخلاف الحقيقية في أي مجموعة عملت ل.

نصائح أخرى

وأعتقد أن معظم الحالات الشائعة قد تم تغطيتها في وظيفتين بالفعل استشهد. أساسا الإيجاز والإطناب مقابل وضوح - إضافة طفيفة: في C #، هو مطلوب منها لاستخدام "هذا" من أجل الوصول إلى "طريقة التمديد" لنوع الحالي - أي بمعنى

.
this.Foo();

وحيث أعلن Foo() خارجيا على النحو التالي:

public static void Foo(this SomeType obj) {...}

ويوضح في بعض الحالات، مثل هذا المثال في c #:

public class SomeClass
{
    private string stringvar = "";

    public SomeClass(string stringvar)
    {
        this.stringvar = stringvar;
    }
}

إذا كنت تستخدم StyleCop مع جميع القواعد، فإنه يجعلك وضع this. في، وبما أنني بدأت في استخدامه أجد قانون بلدي هو أكثر قابلية للقراءة، ولكن هذا تفضيل شخصي.

وأنا أعتقد أن هذا هو غير مسألة، لأنه يضيف سوى المزيد من القراءة إلى رمز وهو أمر جيد.

لبعض اللغات، مثل PHP، بل لعله إلزامية بادئة مع هذا- $> إذا كنت بحاجة إلى استخدام حقول فئة أو الأساليب.

وأنا لا أحب أن يجعل بعض الخطوط لا داعي له لفترة أطول من أنها يمكن أن تكون، إذا كان PHP أو بآخر إلى مرجع أعضاء الفئة دون ذلك.

وأنا شخصيا أجد أن this.whatever أقل قابلية للقراءة. قد لا تلاحظ الفرق في طريقة 2-خط، ولكن انتظر حتى تحصل this.variable وthis.othervariable في كل مكان في الصف.

وعلاوة على ذلك، وأعتقد أن استخدام this. تم العثور كبديل لجزء من تدوين المجرية يكره من ذلك بكثير. بعض وجدوا أن هناك من أنه لا يزال أكثر وضوحا للقارئ أن يرى أن المتغير هو عضو الفئة، وthis. لم خدعة. ولكن لماذا نخدع أنفسنا وعدم استخدام "m_" القديم عادي أو ببساطة "_" لذلك، إذا كنا بحاجة إلى وضوح اضافية؟ انها 5 أحرف مقابل 2 (أو حتى 1). أقل الكتابة، وبنفس النتيجة.

وأما وقد قلت ذلك، واختيار الاسلوب هو لا يزال مسألة تفضيل شخصي. من الصعب إقناع شخص ما تستخدم لقراءة رمز بطريقة معينة يمكن أن يكون مفيدا لتغييره.

وكذلك، كسوف يفعل حقول اللون، والحجج والمتغيرات المحلية في ألوان مختلفة، لذلك على الأقل تعمل في بيئة الكسوف ليست هناك حاجة للتمييز نحويا المجالات من اجل وضع علامة عليها خصيصا باسم "الميادين" لنفسك والأجيال القادمة.

وسئل معروضا في الواقع، في سياق "متغير في جافا":

هل بادئة متغير المثيل مع "هذا" في جافا؟

والسبب الرئيسي المتكررة ويبدو أن:

<اقتباس فقرة>   

و"لأنه يزيد من الضوضاء البصرية تحتاج إلى تدقيق من خلال العثور على معنى رمز."

والمقروئية، في كلمة أخرى ... وأنا لا تشتري، وأجد this. مفيدة للغاية.

وهذا يبدو وكأنه هراء بالنسبة لي. استخدام 'هذا' يمكن أن تجعل رمز أجمل، وأستطيع أن أرى أي مشاكل معها. سياسات من هذا القبيل هو غبي (على الأقل عند حتى لا نقول للناس لماذا هم في مكان).

'هذا'. في التعليمات البرمجية يشير دائما لي أن المبرمج قد استخدمت التحسس (أو غيرها من حكمه IDE) للقيام رفعها الثقيل.

وأنا بالتأكيد مذنب هذا، ولكن أفعل، لأسباب الغرور بحتة، إزالتها بعد ذلك.

ووغيرها من الأسباب الوحيدة التي يمكنني استخدامها هي في التأهل متغير غامضة (ممارسة سيئة) أو بناء على طريقة تمديد

وتأهيل متغير

string name; //should use something like _name or m_name

public void SetName(string name)
{
     this.name = name;
}

وبالنسبة لي أنا استخدم this إلى استدعاء الأساليب كائن مثيل في حين self هو لأسلوب ثابت

في VB.NET واحدة من ممارسة شائعة الأول هو استخدام التعليمات البرمجية التالية:

Class Test
    Private IntVar AS Integer
    Public Function New(intVar As Integer)
       Me.Intvar = intvar
    End Function    
End Class

وليس في كل وقت ولكن في الغالب عني / هذا / الذاتي هو مفيد للغاية. يوضح النطاق الذي كنت تتحدث.

بطريقة الضبط النموذجية (مأخوذة من إجابة lagerdalek):

string name;

public void SetName(string name)
{
     this.name = name;
}

إذا لم تستخدمه، فلن يعرف المترجم أنك تشير إلى متغير العضو.
استخدام this. هو إخبار المترجم أنك بحاجة إلى الوصول إلى متغير عضو - وهو خارج النطاق المباشر للطريقة.يعد إنشاء متغير داخل أسلوب يحمل نفس اسم متغير العضو أمرًا قانونيًا تمامًا، تمامًا مثل تجاوز أسلوب في فئة قام بتوسيع فئة أخرى يعد أمرًا قانونيًا تمامًا.
ومع ذلك، إذا كنت لا تزال بحاجة إلى استخدام طريقة الفئة الفائقة، فيمكنك استخدام super. في رأيي استخدام هذا.ليس أسوأ من استخدام السوبر.ويتيح للمبرمج المزيد من المرونة في التعليمات البرمجية الخاصة بهم.

بقدر ما أشعر بالقلق، لا تدخل سهولة القراءة في الأمر، فالأمر كله يتعلق بإمكانية الوصول إلى المتغيرات الخاصة بك.

في نهاية الأمر دائما مسألة اختيار شخصي. شخصيا، وأنا استخدم هذه الاتفاقية الترميز:

public class Foo
{
  public string Bar
  {
    get
    {
      return this.bar;
    }
    /*set
    {
      this.bar = value;
    }*/
  }
  private readonly string bar;

  public Foo(string bar)
  {
    this.bar = bar;
  }
}

وهكذا بالنسبة لي "هذا" هو في الواقع ضروري للحفاظ على منشئ للقراءة.

وتحرير: تم نشر سبيل المثال نفسه بالضبط من قبل "سينجي" بينما كنت أكتب رمز أعلاه

وليس فقط لأنني كثيرا ما تستخدم "هذا". أنا في بعض الأحيان استخدام "ذلك".

class Foo
{
    private string bar;

    public int Compare(Foo that)
    {
        if(this.bar == that.bar)
        {
            ...

وهلم جرا. واضاف "هذا" في قانون بلدي يعني عادة مثيل آخر من نفس الفئة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top