programing

불변의 컬렉션에서 변이 없는 "추가" 메서드의 가장 좋은 이름은 무엇입니까?

codeshow 2023. 4. 17. 22:11
반응형

불변의 컬렉션에서 변이 없는 "추가" 메서드의 가장 좋은 이름은 무엇입니까?

와플한 제목 죄송합니다. 간결한 제목을 생각해 낼 수 있다면 질문을 하지 않아도 될 것 같습니다.

불변의 리스트 타입이 있다고 가정합니다.이 있다.Foo(x)이 명령어는 끝에 지정된 인수를 추가 요소로 하여 새로운 불변 목록을 반환합니다. " 값을 과 같이 입력합니다Hello", "불변", "world" 값을 가진 문자열 목록을 작성하려면 다음과 같이 쓸 수 있습니다.

var empty = new ImmutableList<string>();
var list1 = empty.Foo("Hello");
var list2 = list1.Foo("immutable");
var list3 = list2.Foo("word");

(이것은 C# 코드입니다.언어가 중요하다고 생각되면 C#의 제안에 가장 관심이 있습니다.기본적으로 언어 질문은 아니지만 언어의 숙어가 중요할 수 있습니다.)

중요한 것은 기존 리스트는 다음에 의해 변경되지 않는다는 것입니다.Foo - 래 - -empty.Count 00은 됩니다.

최종 결과를 얻기 위한 또 다른 (좀 더 관용적인) 방법은 다음과 같습니다.

var list = new ImmutableList<string>().Foo("Hello")
                                      .Foo("immutable")
                                      .Foo("word");

질문은 푸의 가장 좋은 이름은 무엇일까?

편집 3: 나중에 설명하겠지만, 이 유형의 이름은 실제로ImmutableList<T>그래서 입장이 명확해 졌어요.그그대 imagine imagine 라고 상상해 .TestSuite그리고 그것이 불변의 일부이기 때문에 그것은 불변의 것이다.

(편집 3의 종료)

지금까지 생각해 낸 옵션:

  • Add 에서 볼 수 있습니다.단, 합니다.
  • Cons언어에서는 이것이 만, 그러한
  • Plus지금까지 내가 가장 좋아했던 건 돌연변이를 의미하는 건 아니야이것은 Haskell에서도 사용되고 있는 것이 분명하지만, 약간 다른 기대치를 가지고 있습니다(Haskell 프로그래머는 하나의 값을 다른 목록에 추가하는 것이 아니라 두 개의 목록을 함께 추가할 것으로 예상할 수 있습니다).
  • With IMO에 "
  • And이지 않습니다 하다
  • + 연산자 오버로드: 저는 이 정도는 별로 좋아하지 않습니다.일반적으로 연산자는 낮은 레벨의 타입에만 적용되어야 한다고 생각합니다.그래도 난 기꺼이 설득할 거야!

선택 기준은 다음과 같습니다.

  • 메서드 호출 결과에 대한 올바른 인상을 줍니다(즉, 추가 요소가 포함된 원래 목록).
  • 가능한 한 기존 목록을 변환하지 않음을 명확히 합니다.
  • 위의 두 번째 예시와 같이 체인으로 연결하면 합리적으로 들립니다.

제 말을 확실히 못 알아들으시면 좀 더 자세히 물어보세요

편집 1: 제가 원하는 이유는 다음과 같습니다.Plus로로 합니다.Add 두합니다. 하다

list.Add(foo);
list.Plus(foo);

제 견해로는 (그리고 이것은 개인적인 것입니다) 후자는 분명히 버그가 있습니다.- 그것은 "x + 5;"를 스스로 스테이트먼트로서 쓰는 것과 같습니다.첫 번째 줄은 괜찮아 보여요 불변이라는 걸 기억하기 전까지는요사실, 플러스 연산자가 그 피연산자를 변환하지 않는 것도 또 다른 이유입니다.Plus하지 않는 등 연산자 오버로드의 약간의 문제가 없는 한 오퍼랜드(또는 이 경우 메서드타깃)를 변환하지 않는 것을 포함한 동일한 의미를 가집니다.

EDIT 2: Add를 좋아하지 않는 이유.

다양한 답변이 효과적입니다. "추가"를 선택해 주세요. 바로 렇그 that that that thatDateTime하고 있습니다.String 있다Replace라는 말에 동감입니다. 여기에는 우선순위가 있습니다.나는 이 지지 however라고 부르는 것을 DateTime.Add ★★★★★★★★★★★★★★★★★」String.Replace돌연변이를 예상합니다.뉴스그룹에 대한 수많은 질문(그리고 제가 자세히 살펴보면 아마도 그렇겠지)이 있습니다.이 질문에는 다음과 같은 답변이 있습니다. "당신은 이 질문의 수익 가치를 무시하고 있습니다.String.Replace; 문자열은 불변하며 새 문자열이 반환됩니다."

이 질문의 미묘한 점을 밝혀야 합니다.유형은 실제로는 불변의 리스트가 아니라 다른 불변의 타입일 수 있습니다.특히, 저는 테스트를 스위트에 추가하여 새로운 스위트를 만드는 벤치마킹 프레임워크에 대해 연구하고 있습니다.다음과 같은 것이 명백할 수 있습니다.

var list = new ImmutableList<string>();
list.Add("foo");

아무것도 달성하지 못할 것입니다만, 이것을 다음과 같이 변경하면, 한층 더 애매해집니다.

var suite = new TestSuite<string, int>();
suite.Add(x => x.Length);

괜찮을 것 같네요.하지만 이렇게 하면 실수가 더 명확해집니다.

var suite = new TestSuite<string, int>();
suite.Plus(x => x.Length);

그건 그냥 빌고 있는 거야:

var suite = new TestSuite<string, int>().Plus(x => x.Length);

이상적으로는 테스트 스위트가 불변이라는 것을 사용자에게 알리지 않았으면 합니다.나는 그들이 성공의 구렁텅이에 빠지길 바란다.불가능할 수도 있지만 시도해보고 싶어요.

불변의 리스트 타입에 대해서만 이야기함으로써 원래의 질문을 지나치게 단순화시킨 것에 대해 사과드립니다.다 자기 설명적인 것은 아니다.ImmutableList<T>

때 나는 럴럴 with with in in로 간다.Concat이는 보통 새로운 오브젝트가 생성되고 있음을 의미합니다.

var p = listA.Concat(listB);
var k = listA.Concat(item);

단점이라면 딱 한 가지 이유로 찬성합니다.그것은 당신이 원하는 그대로의 의미입니다.

  1. 특히 소스코드에서 제 말이 정확히 무슨 뜻인지 말하는 것을 매우 좋아합니다.초보자는 단점의 정의를 한 번만 찾아보면 되지만, 그 다음 천 번을 읽고 사용해야 합니다.장기적인 관점에서 보면 초기 비용이 조금 더 높더라도 일반적인 사례를 쉽게 적용할 수 있는 시스템을 사용하는 것이 더 낫다는 것을 알 수 있습니다.

  2. FP 경험이 없는 사람에게는 '의미 없음'이라는 점이 큰 장점이다.지적하신 것처럼 다른 모든 단어들은 이미 의미가 있고, 그 의미는 조금 다르거나 애매합니다.새로운 개념에는 새로운 단어(이 경우 오래된 단어)가 있어야 합니다.Add가 무엇을 하는지 잘못 알고 있다고 추측하기보다는 누군가가 단점의 정의를 찾아봐야 할 것 같습니다.

  3. 기능적 언어에서 차용된 다른 작업들은 종종 명백한 재앙 없이 원래 이름을 유지합니다.비 FPers에게 더 친숙하게 들리는 "맵"과 "축소"의 동의어를 생각해내라는 압력을 본 적이 없으며, 그렇게 함으로써 얻을 수 있는 혜택도 없습니다.

(완전 공개:저는 리스프 프로그래머이기 때문에 Cons의 의미를 이미 알고 있습니다.)

나는 ★★★★★를And츠미야특히 Empty 목록에는 정적 읽기 전용 속성이 있으며, 항상 빈 목록에서 빌드해야 하는 생성자를 비공개로 만들 수 있습니다.

var list = ImmutableList<string>.Empty.And("Hello")
                                      .And("Immutable")
                                      .And("Word");

나는 명명법에 얽매일 때마다 인터웹에 접속한다.

thesaurus.com은 "add"에 대해 다음 내용을 반환합니다.

정의: 인접, 증가, 추가 코멘트 작성

동의어: 붙이기, 부속, 추가, 추가, 증량, 쇠고기 올리기, 증강, 증가, 계속, 큐인, 피규어, 피규어, 피규어, 피규어, 피규어, 피규어, 피규어, 피규어, 피규어, 피규어, 고기 올리기, 하이킹, 하이킹, 히치업, 연결, 후크업, 후크업, 후크업, 후크업, 후크업, 후크업, 후크업, 후크업, 후크업, 후크업, 후크업, 후크업, 후크업, 후크업, 함께, 잭업, 재즈업,스텝업, 보충, 스위트업, 태그업, 태그업

가 좋다Adjoin는 「」입니다.Join게네네네고고고는는는,,,,,?????은 다른 될 수 .ImmutableList<>의 discriptions

저는 개인적으로 좋아해요.With()를 사용하여 오브젝트를 사용하고 있는 경우 매뉴얼 또는 코드 코멘트를 읽으면 오브젝트의 동작이 명확해지고 소스 코드에는 OK라고 표시됩니다.

object.With("My new item as well");

아니면 '함께'를 붙여서...:)

object.AlongWith("this new item");

BclExtras에 있는 모든 불변의 컬렉션에 대해 Add를 선택하게 되었습니다.그 이유는 쉽게 알 수 있는 이름이기 때문입니다.Add와 변환 Add를 혼동할 염려가 없습니다.유형의 이름 앞에는 Unbound가 붙기 때문입니다.

한동안 나는 Concept와 다른 기능적인 스타일의 이름을 고려했다.잘 알려지지 않았기 때문에 결국 할인해 드렸습니다.물론 기능하는 프로그래머들은 이해하겠지만 대다수의 사용자는 아닙니다.

기타 이름: 말씀하신 내용:

  • 게다가: 나는 이 일을 하고 싶어/빨래할 거야.이것은 Add와 마찬가지로 더 이상 변이되지 않는 조작으로 구별되지 않습니다.
  • 포함: VB에 문제가 발생함(판금 의도)
  • 연산자 오버로드:검출 가능성이 문제가 됩니다.

내가 고려한 옵션:

  • Concat: 문자열은 불변이며 이것을 사용합니다.아쉽게도 마지막을 장식하는 데만 정말 도움이 됩니다.
  • 복사 추가:뭘 복사해?출처, 목록?
  • Add To New List:리스트에게 좋을지도 몰라그러나 수집, 스택, 큐 등은 어떻습니까?

아쉽게도 그런 단어는 없는 것 같아요.

  1. 절대 불변의 조작
  2. 대부분의 사용자가 이해할 수 있는
  3. 4단어 미만으로 표시 가능

List 이외의 컬렉션을 고려할 때는 더 이상합니다.Stack을 예로 들 수 있습니다.Stacks에는 Push/Pop 메서드 쌍이 있다고 첫해 프로그래머도 말할 수 있습니다.ImputableStack을 만들고 완전히 다른 이름(Foo/Fop)을 지정하면 사용자가 컬렉션을 사용할 수 있도록 작업을 추가한 것입니다.

편집: 플러스 편집에 대한 응답

Plus를 어떻게 생각하시는지 알겠습니다.더 강한 케이스는 제거에 마이너스일 것 같아요.만약 내가 다음과 같은 것을 본다면 나는 프로그래머가 도대체 무슨 생각을 하고 있었는지 궁금할 것이다.

list.Minus(obj);

플러스/마이너스 또는 새로운 페어링의 가장 큰 문제는 과잉살상이라는 느낌입니다.컬렉션 자체에는 식별 이름인 불변 접두사가 이미 있습니다.Unmutable prefix와 동일한 구별을 추가하는 것을 목적으로 하는 어휘를 추가하는 것은 어떨까요?

call site 인수를 알 수 있습니다.그것은 하나의 표현으로 볼 때 명확해진다.그러나 전체 기능의 맥락에서 볼 때 이는 불필요해 보입니다.

편집 2

String 때문에 사람들이 확실히 혼란스러워했다는 것에 동의한다.Concat 및 Date Time.게다가 아주 똑똑한 프로그래머들이 이 문제를 해결하는 것도 봤고요

그러나 나는 불변 목록은 다른 주장이라고 생각한다.String이나 Date Time에 대해 프로그래머에게 불변으로 확립하는 것은 없습니다.다른 소스를 통해 불변의 존재라는 것을 알아야 합니다.그래서 혼란은 예상 밖이 아니다.

Unmutable List는 동작을 정의하기 때문에 이 문제는 발생하지 않습니다.당신은 사람들이 불변(不 imm)이 무엇인지 모른다고 주장할 수 있고 나는 그것 또한 타당하다고 생각한다.대학 2학년이 되어서야 알았어요.그러나 Add 대신 선택한 이름에 동일한 문제가 있습니다.

편집 3: TestSuite와 같이 불변하지만 단어를 포함하지 않는 유형은 어떻게 됩니까?

새로운 메서드 이름을 발명해서는 안 된다는 생각을 심어주는 것 같습니다.즉, 병렬 작업을 용이하게 하기 위해 유형을 불변화하려는 욕구가 분명히 존재하기 때문입니다.컬렉션 메서드 이름을 변경하는 데 중점을 둔 경우 다음 단계는 불변하는 모든 유형의 메서드 이름을 변환하는 것입니다.

대신 불변으로 식별할 수 있는 유형을 만드는 데 집중하는 것이 더 가치 있는 노력이라고 생각합니다.그렇게 하면 모든 돌연변이 방법을 재고하지 않고도 문제를 해결할 수 있습니다.

이제 TestSuite를 불변으로 식별하는 방법은 무엇입니까?오늘날의 환경에서는 몇 가지 방법이 있다고 생각합니다.

  1. Prefix에 불변):불변의테스트 슈트
  2. 불변성 수준을 설명하는 속성을 추가합니다.이것은 확실히 발견하기 어렵다.
  3. 다른 건 없어요.

개발 툴은 단순히 보기(색상 차이, 글꼴 강화 등)만으로 불변의 종류를 쉽게 식별할 수 있도록 함으로써 이 문제에 도움이 될 것으로 예상됩니다.하지만 모든 방법 이름을 바꾸는 것이 정답이라고 생각합니다.

은, 「 상황」이 「 상황」에 과부하가 걸려도 좋은 합니다.+로는 ''는 '우리'는 '우리'는 '우리'는 '우리'는 '우리'는 '우리'는 '우리'가 아니라 ''는'+다른 것의 끝에 무언가를 덧붙이지 않습니다.항상 2개의 값을 조합하여 새로운 결과값을 반환합니다.

예를 들어, 직감적으로 말할 때론

x = 2 + 2;

결과 x 값은 22가 아니라 4입니다.

유사하게,

var empty = new ImmutableList<string>();
var list1 = empty + "Hello";
var list2 = list1 + "immutable";
var list3 = list2 + "word";

각 변수가 무엇을 유지할 것인지 명확히 해야 합니다..list2마지막 줄에서 변경되지 않고 대신list3''에 '붙여서 'word'를 붙이는 입니다.list2.

그렇지 않으면 함수 이름을 Plus()로 붙입니다.

한 쉽게 하기 위해서, 에 따라, 단어에 따라, 단어에 따라, 단어에 따라, 단어에 따라, 단어에 따라, 단어에 따라, 단어에 따라, 단어에 따라, 단어에 따라, 에 따라, 단어에 따라, 에 따라, 단어에 따라, 단어에 따라, 단어에 , 단어에 따라, 단어에 따라, 단어에 따라.CopyAndAdd, 예를 들면요.

정말 장황하게 느껴진다면 Extend() 또는 ExtendWith()라고 부르겠습니다.

확장이란 무언가를 변경하지 않고 다른 것에 추가하는 것을 의미합니다.확장 메서드의 개념과 비슷하기 때문에 C#에서는 매우 관련성이 높은 용어라고 생각합니다.클래스 자체를 터치하지 않고 새로운 메서드를 클래스에 추가합니다.

그렇지 않으면 원래 개체를 전혀 수정하지 않는다는 것을 강조하고 싶다면 Get-와 같은 접두사를 사용하는 것은 피할 수 없는 것처럼 보입니다.

추가됨(), 추가됨

나는 불변의 물체에 대한 연산에 과거형을 사용하는 것을 좋아한다.원래 대상을 변경하지 않는다는 생각을 전달하여 보면 쉽게 알아볼 수 있습니다.

또한 메서드 이름을 변환하는 것은 종종 현재 텐스 동사이기 때문에 사용자가 마주치는 대부분의 불변 메서드 이름이 필요한 경우에 적용됩니다.예를 들어, 불변 스택에는 "pushed" 메서드와 "popped" 메서드가 있습니다.

는 Copy And Add의 myers 제안을 좋아합니다.'변성' 테마에 맞춰 버드(무성 생식), 성장, 복제, 진화 중 어느 쪽을 선택해도 될까요?=)

편집: 제 유전적 주제를 계속 말씀드리면, Procreate는 어떨까요? 이전 것을 기반으로 하지만 새로운 것을 추가한 새로운 물체가 만들어진다는 것을 암시합니다.

이것은 아마도 확장일 것입니다만, Ruby 에서는 일반적으로 사용되는 표기가 있습니다.add 않는다.add! 퍼져 있는 가 아닌 변환하지 않는 방법을 위해 )도 합니다.이 문제가 프로젝트에서 광범위하게 발생하는 경우, 이 작업도 수행할 수 있습니다(영문자가 아닌 문자를 반드시 사용할 필요는 없지만 변환/변환되지 않는 방법을 나타내기 위해 표기를 일관되게 사용).

Join적절한 것 같습니다.

한 번에 두 번의 수술을 원하기 때문에 혼란이 발생할 수 있습니다.왜 따로 떼어놓지 않는 거죠?DSL 스타일:

var list = new ImmutableList<string>("Hello");
var list2 = list.Copy().With("World!");

Copy원래 목록의 가변 복사본인 중간 개체를 반환합니다. With새로운 불변의 리스트를 반환합니다.

업데이트:

그러나 중간 정도의 변동 가능한 컬렉션을 주변에 두는 것은 좋은 접근법이 아닙니다.는 '중간'에 .Copy★★★★

var list1 = new ImmutableList<string>("Hello");
var list2 = list1.Copy(list => list.Add("World!"));

이제 ㅇㅇ, ㅇㅇ.Copy작업에서는 복사 결과를 제어할 수 있도록 위임자가 변환 가능한 목록을 수신합니다.요소를 추가하거나 목록을 정렬하는 등 요소를 추가하는 것 이상의 작업을 수행할 수 있습니다. '아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아.ImmutableList중간 불변 리스트 없이 초기 리스트를 조합하는 컨스트럭터.

public ImmutableList<T> Copy(Action<IList<T>> mutate) {
  if (mutate == null) return this;
  var list = new List<T>(this);
  mutate(list);
  return new ImmutableList<T>(list);
}

유저에 의한 오해의 가능성이 없어져, 자연스럽게 성공의 구렁텅이에 빠질 것이다.

또 다른 업데이트:

변경 가능한 목록에 대한 언급이 여전히 마음에 들지 않는 경우, 포함된 경우에도 복사 작업이 목록을 변환하는 방법을 지정하거나 스크립팅하는 지정 개체를 설계할 수 있습니다.용도는 동일합니다.

var list1 = new ImmutableList<string>("Hello");
// rules is a specification object, that takes commands to run in the copied collection
var list2 = list1.Copy(rules => rules.Append("World!"));

할 수 할 수 .Copy 「」의 기능 .IList.

체인을 사용하기 위해 적절한 컨스트럭터를 작성할 수 있습니다(물론 체인을 사용하지 않습니다).

public ImmutableList(params T[] elements) ...

...

var list = new ImmutableList<string>("Hello", "immutable", "World");

또는 다른 생성자에서 동일한 대리자를 사용합니다.

var list = new ImmutableList<string>(rules => 
  rules
    .Append("Hello")
    .Append("immutable")
    .Append("World")
);

경우는 '아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아.rules.Append는 " "를 반환합니다.this.

최신 예에서는 다음과 같이 표시됩니다.

var suite = new TestSuite<string, int>(x => x.Length);
var otherSuite = suite.Copy(rules => 
  rules
    .Append(x => Int32.Parse(x))
    .Append(x => x.GetHashCode())
);

몇 가지 랜덤한 생각:

  • 불변 추가()
  • 추가()
  • 비명 목록<T> (Mobile List>)T> 원본 목록, T> 새 항목) 구성

C#의 날짜 시간을 사용합니다.왜 같은 이름을 사용하지 않나요?수업의 사용자로 분류된 만큼 수업시간이 너무 적다.

표현하기 어려운 것이 비변환이라고 생각하기 때문에, CopyWith()나 InstancePlus()와 같은 생성어가 들어간 것이 아닐까 생각합니다.

영어에서는 Add와 같은 뜻을 가진 동사를 사용하면서 불변의 뜻을 분명히 나타낼 것이라고 생각하지 않는다. Plus는 거의 하지만 사람들은 여전히 실수를 할 수 있다.

사용자가 개체를 변경할 수 있는 것으로 오해하지 않도록 하려면 개체 이름 자체 또는 메서드 이름을 통해 개체를 명시적으로 만드는 방법('GetCopyWith' 또는 'CopyAndAdd'와 같은 자세한 옵션)을 사용합니다.

그러니까 네가 좋아하는 "Plus"로 해

우선, 흥미로운 시작점: http://en.wikipedia.org/wiki/Naming_conventions_(programming)...특히 하단에 있는 "See Also" 링크를 확인하십시오.

저는 플러스나 앤드 둘 중 하나에 찬성합니다. 사실상 동등하게요.

플러스 앤 앤 앤 둘 다 수학에 기반을 둔 어원이다.따라서 둘 다 수학적 연산을 의미하며, 둘 다 자연스럽게 해석되는 식을 만들어 반환값을 갖는 방법에 맞는 값으로 분해할 수 있다. And는 로직적인 의미를 더하지만 두 단어 모두 목록에 직관적으로 적용됩니다. Add오브젝트에 대해 수행된 액션이 메서드의 불변의 의미와 충돌합니다.

둘 다 작아서 작전의 원시성을 고려할 때 특히 중요합니다.단순하고 빈번하게 수행되는 작업에는 더 짧은 이름을 사용해야 합니다.

나는 문맥을 통해 불변의 의미를 표현하는 것을 선호한다.즉, 이 코드 블록 전체가 기능적인 느낌을 가지고 있다는 것을 암시하고 싶습니다. 모든 것이 불변의 것이라고 가정합니다.하지만 그건 나뿐일 수도 있어.저는 불변성이 원칙이 되는 것을 선호합니다. 불변성은 예외입니다.

Chain()이나 Attach()는 어떻습니까?

플러스(및 마이너스)가 좋습니다.이들은 쉽게 이해할 수 있으며 잘 알려진 불변의 유형(숫자)이 포함된 작업에 직접 매핑됩니다.2+2는 2의 값을 변경하지 않고 동일하게 불변한 새로운 값을 반환합니다.

기타 가능성:

스플라이스()

이식편()

적립()

사는 사람들을 위해 짝짓기, 짝짓기, 성교하는 건 어때?번식의 관점에서 포유류는 일반적으로 불변의 동물로 여겨진다.

유니온도 저 밖으로 던질 거야SQL에서 빌렸습니다.

Obj-C/Cocoa에서 이 질문에 대답한 사람은 제가 처음인 것 같습니다.

NNString *empty = [[NSString alloc] init];
NSString *list1 = [empty stringByAppendingString:@"Hello"];
NSString *list2 = [list1 stringByAppendingString:@"immutable"];
NSString *list3 = [list2 stringByAppendingString:@"word"];

이걸로 어떤 코드 골프 게임도 이길 수 없을 거야

'추가'나 '플러스'가 좋을 것 같아요.목록의 이름 자체는 목록의 불변성을 전달하기에 충분해야 합니다.

인스턴스를 변환하는 대신 복사본을 만들고 여기에 내용을 추가하는 것을 더 기억하는 단어가 있을 수 있습니다(예: "연결").하지만 다른 행동을 할 때 그 단어에 대칭성을 갖는 것도 좋을 것 같아요."Remove"와 "Concatenate"와 같은 종류의 "Remove"는 비슷한 단어를 모릅니다.'플러스'가 좀 낯설게 들리네요.나는 그것이 숫자적이지 않은 맥락에서 사용되기를 기대하지 않는다.하지만 그건 내 영어가 아닌 배경에서 나온 것일 수도 있어.

아마도 나는 이 계획을 사용할 것이다.

AddToCopy
RemoveFromCopy
InsertIntoCopy

근데 생각해보면 이게 다 문제가 있는 것 같아요.사람들은 그들이 주어진 논쟁에 무언가를 제거하거나 무언가를 추가한다고 생각할 수 있다.전혀 확신하지 못해요.그런 말들은 사슬에도 맞지 않는 것 같아요.너무 말이 많아서 입력할 수 없습니다.

그냥 '추가'랑 '친구'랑 같이 쓸까?나는 수학에서 사용되는 방식이 좋다.

Add 1 to 2 and you get 3

음, 확실히 2는 2로 남고 당신은 새로운 번호를 얻습니다.이것은 두 숫자에 관한 것이지 목록과 요소에 관한 것이 아닙니다만, 제 생각에 그것은 어느 정도 유사합니다.제제 in in in in in inadd꼭 돌연변이를 의미하는 건 아니에요외로운 진술에 대한 당신의 요점을 확실히 알겠어요add반환된 새 개체를 사용하지 않으면 버그가 발생하지 않습니다.그러나 지금은 '추가'가 아닌 다른 이름을 사용한다는 아이디어에 대해서도 잠시 생각해 보았습니다만, 그 이름이 제가 생각하는 '추가'와 다르기 때문에 '음, 문서를 보고 무엇을 하는지 알 필요가 있겠구나'라는 생각이 들지 않으면 다른 이름을 생각할 수 없습니다. 뿐, 이 안 생각하지 :) 리트비, 리트비, 리트비, 리트비, 리트비, 리트비, 리트비, 리트비, 리트비, 리트비, 리트비, 리트비, 리트비.

http://thesaurus.reference.com/browse/add과 http://thesaurus.reference.com/browse/plus를 보고 게인과 접점을 찾았지만, 그것들이 얼마나 비접촉적인지 잘 모르겠습니다.

는 ★★★★★★★★★★★★★★★★★★★★★★★★」Plus() ★★★★★★★★★★★★★★★★★」Minus()'라고 부르기도 하고,Including(),Excluding()불변의 행동을 암시하는 데 합리적이야

그러나 어떤 명명법도 모든 사람에게 완벽하게 설명하지는 못하기 때문에 개인적으로 좋은 xml 문서의 코멘트는 매우 효과적이라고 생각합니다.VS는 사용자가 IDE에 코드를 쓸 때 이러한 정보를 바로 눈앞에 던집니다. 무시하기 어렵습니다.

Append - 이름, , , 이름, 이름, 이름, 이름, 이름, 이름, 이름, 이름, 이름, , 이름, 이름.System.String메서드는 인스턴스를 변환하지만 변환하지는 않습니다.

는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.AfterAppending:

void test()
{
  Bar bar = new Bar();
  List list = bar.AfterAppending("foo");
}

list.CopyWith(element)

Smalltalk와 마찬가지로 :)

★★★★★★★★★★★★★★★★.list.copyWithout(element)을 모두 원소의 발생을 배제하는 으로서, 원소의 발생을 배제하는 것이 편리합니다.list.copyWithout(null)설정되지 않은 요소를 제거합니다.

더 좋은 이름의 이점을 알 수 있기 때문에 Add를 선택하지만, 문제는 다른 모든 불변의 작업에 대해 다른 이름을 찾는 것입니다. 이 작업이 타당하다면 클래스가 매우 생소해질 수 있습니다.

언급URL : https://stackoverflow.com/questions/521893/whats-the-best-name-for-a-non-mutating-add-method-on-an-immutable-collection

반응형