کد بوی 267 – اشیاء نام مستعار

تغییر ناپذیری را برای حفظ کنترل اشیاء خود ترجیح دهید

TL;DR: از اشیاء تغییرناپذیر برای جلوگیری از تغییرات غیرمنتظره ناشی از aliasing استفاده کنید.

مشکلات

  • جهش های غیر منتظره
  • ردیابی اشکال دشوار
  • رفتار کد غیر قابل پیش بینی
  • کاهش قابلیت پیش بینی کد
  • افزایش جفت
  • ایمنی نخ به خطر افتاده است

راه حل ها

  1. از اشیاء تغییرناپذیر استفاده کنید
  2. اجرای کپی دفاعی
  3. از برنامه نویسی تابعی حمایت کنید

Refactorings

زمینه

نام مستعار زمانی اتفاق می افتد که چندین مرجع به یک شیء قابل تغییر اشاره کنند. این می تواند منجر به تغییرات غیرمنتظره در آنها شود، زمانی که بخشی از کد شی را تغییر می دهد و بر همه مراجع تأثیر می گذارد.

اشیای تغییرناپذیر این خطر را با اطمینان از اینکه نمی توانید پس از ایجاد یک شیء، نمایش داخلی آنها را تغییر دهید، کاهش می دهند.

Collection Aliasing نمونه بارز این موضوع است.

کد نمونه

اشتباه است

public class Person {
  private String name; 
}

public void modifyPerson(Person person) {
  person.setName("Cosmo Kramer");
}

public static void main(String[] args) {
  Person p1 = new Person("Newman");
  Person p2 = p1; // p1 and p2 refer to the same object

  modifyPerson(p1);

  System.out.println(p1.name()); // Output: Cosmo Kramer
  System.out.println(p2.name()); // Output: Cosmo Kramer (unexpected)
}

درسته

public class ImmutablePerson {
  private final String name; 

  public...

Source link