코 틀린의 데이터 클래스:코드 라인의 좋은 무리를 저장 10)

우리는 이미 이전 문서에서 클래스를 본 적이 있지만 데이터 클래스는 우리가 우리의 코드를 단순화하는 데 도움이 조금 더 이동합니다.

데이터 클래스란?

데이터 클래스는 상태만 포함하고 작업을 수행하지 않는 클래스입니다.

정규 클래스 대신 데이터 클래스를 사용하는 이점은 코 틀린이 엄청난 양의 자체 생성 코드를 제공한다는 것입니다.

특히,이 모든 것을 무료로 제공합니다:

  • 생성자에 선언 된 속성:기술적으로 데이터 클래스에만 국한되지 않지만 생성자 외에도 게터 및 설정자의 모든 상용구를 피할 수 있습니다.
  • equals() / hashCode()
  • 우리가 나중에 볼 멋진 일을 할 수 있도록componentX()라는 함수의 집합입니다.
  • copy()메서드는 불변의 객체를 사용할 때 매우 유용합니다.

¿자바 코드는 데이터 클래스와 어떻게 비교됩니까?

여기에 놀라움이 온다. 거의 모든 코드가 이드에 의해 생성되지만,자바에서 우리는 데이터 클래스를 구현하기 위해이 필요:

public class Person { private String name; private String surname; private String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } public String getId() { return id; } public void setId(String id) { this.id = id; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; if (name != null ? !name.equals(person.name) : person.name != null) return false; if (surname != null ? !surname.equals(person.surname) : person.surname != null) return false; return id != null ? id.equals(person.id) : person.id == null; } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + (surname != null ? surname.hashCode() : 0); result = 31 * result + (id != null ? id.hashCode() : 0); return result; } @Override public String toString() { return "Person{" + "name='" + name + ''' + ", surname='" + surname + ''' + ", + id + ''' + '}'; }}

그리고 우리는 여전히 코 틀린이 라인으로 제공하는 기능의 동일한 금액을 달성에서 멀리 될 것입니다:

data class Person(var name: String, var surname: String, var id: String)

우리가 정말 코 틀린의 잠재력을 볼 곳이다,우리를 저장 쓸모없는 코드의 양.

클래스 소멸

componentX함수를 사용합니다. 덕분에 이러한 방법으로 데이터 클래스를 변수로 분해 할 수 있습니다:

코 틀린을 배우고 싶으십니까?

15 분 안에 첫 번째 프로젝트를 만들려면 내 무료 가이드를 확인하십시오!

val person = Person("x", "y", "z")val (n, s, i) = person

덕분에 루프 내에서 맵 쌍을 분해하는 것과 같은 작업을 수행 할 수 있습니다:

val map = mapOf(1 to "a", 2 to "b")for ((key, value) in map) { toast("key: $key, value: $value")}

객체 복사

우리가 전에 이야기했듯이,그것은 가능한 모든 상황에서 불변성 우리에게 좋은 연습이다. 이전 클래스를 불변으로 구현하는 경우:

data class Person(val name: String, val surname: String, val id: String)

우리는 지금 성을 변경하려면,우리는 할 수 없습니다.

불변성으로 작업할 때 개체의 상태를 변경하려면 새 값으로 복사해야 합니다. 그리고 그것은copy기능의 사용입니다:

val person = Person("John", "Smith", "123abc")val person2 = person.copy(surname="Rogers")

copy함수는 변경해야 하는 값만큼 매개 변수를 받을 수 있습니다. 보시다시피 함수 매개 변수의 이름을 지정할 수 있으므로 수정할 매개 변수를 지정할 수 있습니다.

결론

데이터 클래스는 자바가 생성하도록 강요하는 많은 상용구를 저장하므로 이해하고 유지하기가 더 쉬운 코드로 끝납니다.

당신은 당신이 본 것을 좋아하는 경우에,나는 당신에게 당신이 처음부터 코 틀린 자신의 안드로이드 애플 리케이션을 만드는 방법에 대해 배울 필요가 모든 것을 말해주지 내 무료 교육에 가입하는 것이 좋습니다.

로드하는 것과 같습니다…

답글 남기기

이메일 주소는 공개되지 않습니다.