코드 선명도를 향상시키는 경우 그 시점에 영향을 미치지 않는 함수를 호출하는 것이 더 낫습니까?


60

내 프로그램 (iOS 앱)에 세 가지 견해가 있습니다. 그중 하나만 동시에 활성화되므로 두 가지에 대한 가시성을 끄고 사용자가 버튼을 누를 때 가시성을 전환합니다. 뷰는 표시되는 것으로 초기화되므로 기본 뷰가 표시되기 전에 코드에서 가시성을 해제했습니다.

내가 할 수있는

[view1 setAlpha:0.0f];
[view2 setAlpha:0.0f];

뷰 중 두 개에 대해서는 세 번째 뷰 (앱 시작시 표시되는 뷰)에 대해서는 다루지 않습니다. 나는

[view3 setAlpha:1.0f];

처음 두 개 이후에는 코드를 볼 때 생각할 수있는 두 가지가 아니라 실제로 세 가지 견해가 있음을 분명히하기 때문에 생각합니다. 다른 프로그래머는 어떻게합니까? 순전히 선호합니까 아니면 몇 가지 규칙이 있습니까?

전화가 매우 무거 우면 필요하지 않을 때 전화를하지 않는 것이 좋습니다. 그러나 나는 나의 예와 같은 작은 것들에 대해 궁금했습니다.

답변:


134

당신은 변하지 않습니다 :

단일 뷰 (3 개 중) 만 활성화되어 표시됩니다.

그런 다음 모든 뷰의 활동과 가시성을 한 번에 전환하는 기능을 제공하는 것이 좋습니다.

[setActiveView viewID:2]

이 기능은 다음과 같습니다.

  • 불필요한 작업을 피하면서 뷰가 이미 활성화되어 있는지 확인하십시오.
  • 보기를 활성 및 가시로 설정
  • 다른 2 개의보기를 비활성 및 보이지 않게 설정

원시 호출에 대한 여러 가지 장점이 있습니다 setVisibility.

  • 친숙 : 불필요하게 호출해도 성능 문제가 발생하지 않습니다.
  • 방어 적 : 단일 매개 변수는 보치하기가 훨씬 어렵지만, setVisibility값의 범위가 0.0f - 1.0f하나이고 하나만 설정해야한다는 것을 기억하기가 어렵 습니다.1.0f
  • 탄력성 : 다음 사람은 실수로 하나의 견해를 잊을 수 없습니다
  • 적응 가능 :보기를 추가 / 제거 할 때 스위치의 위치를 ​​찾기 위해 모든 응용 프로그램 코드를 면밀히 조사 할 필요가 없으며 단일 기능 (이 기능)을 업데이트해야합니다.

이상적으로는 불변을 강제하기 위해 다른 함수 가이 설정을 망칠 수 없습니다 ...


좋은 제안. 나는 현재 예제로 이것을 할 것입니다. 그러나 그러한 디자인이 가능하지 않은 경우는 어떻습니까? 아니면 가장 좋은 방법은 그 자리를 결정합니까?
Kevin

4
@ 케빈 : 정말 다릅니다. 때로는 컬렉션을 반복하여 문제를 해결할 수 있지만 때로는 그렇지는 않지만 주요 원칙은 중복을 피하고 불변성을 쉽게 유지하는 것입니다. 일이 제대로 작동하려면 "수동"동작이 더 많이 기억 될수록 일이 제대로 작동 할 가능성이 줄어 듭니다. 나는 여기에 모호한 것을 싫어하지만, "일반적인"규칙이 당신을 타락하게 할까봐 두려운 상황이 너무 많습니다.
Matthieu M.

23
"불변량을 쉽게 보존 할 수 있도록" 은 기억해야 할 일반적인 규칙입니다.
Gusdor

1
@ Tonny : 전역 변수의 사용을 장려하는 것이 "올바른 일인지"모르지만 실제로 이전에 정확히 어떤 것이 활성화되어 있는지 알면 두 가지보기 만 업데이트하면됩니다. 또 다른 해결책은 각보기가 가시성을 기억하고 setVisibility가시성이 이미 요청 된 것이라면 아무것도하지 않는 것이므로 책임이 낮아집니다.
Matthieu M.

1
@MatthieuM. 나는 서두로 썼다. 그러나 실제로 내가 의미하는 바이다. 이전 상태를 알고 있으면 최대 2 개의보기 만 업데이트하면됩니다. 그 상태를 기억하는 방법은 또 다른 문제입니다 ;-). 책임을 아래로 옮기는 경우 : 뷰 클래스가 제공하지 않으면 해당 속성을 추가하기 위해 클래스를 다른 객체로 감싸 야합니다. 그것은 깨끗한 해결책이지만 약간 과잉 일 수 있습니다.
Tonny

12

다른 아이디어 : 사람들이 세 가지 견해를 잊어 버리고 두 가지로만 무언가를 수행하여 버그가 발생하지 않도록 버그를 방지하는 것이 목표라면, 실제로는 잊을 수 없는 기능을 만드십시오 .

setViewVisibilities(0.0f, 0.0f, 1.0f)

지금 당신은 훨씬 더 강력한 컴파일 타임을 보장합니다 . 매개 변수를 잊어 버린 경우 컴파일러에서 소리를 지 릅니다. 이것은 주석이나 불필요한 코드보다 훨씬 유용합니다. 관심있는 속성을 적용하는 엄격한 명명 된 프로토콜을 생성하기 때문입니다.

경우를 들어 view3같은 특별한 값을 전달 곳 가시성이 바뀌 필요가 없습니다, 당신은 몇 가지 동작을 추가 할 수 있습니다 -1.0하거나 nil또는 그 라인을 따라 뭔가 "전혀 뷰 가시성을 변경하지 마십시오"를 의미한다. 이것은 가시성을 불필요하게 설정하는 문제를 해결합니다.


9
OP가 최대 10 회 이상의 조회수를 달성하면 조회 당 매개 변수를 유지할 수 없게됩니다. 컴파일 타임 오류에 대한 요점은 정확하지만 불행히도 유지 관리가 불가능한 솔루션입니다.
크리스 Cirefice

3
@ChrisCirefice : 뷰의 수가 증가하면 일종의 "ViewState"객체 / 클래스를 생성하여이 불변성을 적용 할 수 있습니다. 그런 다음 전환 등에 사용하십시오. 뷰가 너무 많으면 일종의 관리자 객체가 어쩌면 의미가 있습니다.
sleske

8

전화가 불필요하고 왜 그런지 설명하는 의견을 추가하는 것이 가장 좋다고 생각합니다.

(아마도 전화가 불필요하거나 그에 대한 의견이 필요하다는 사실은 코드 냄새 일 수 있습니다)


1
@Niall 가능하다면 어설 션은 주석보다 훨씬 낫습니다.
200_ 성공

9
댓글은 하지 이상 유지할 읽을 코드에 대한 해결책
dj18

2
@Kevin 또는 주석없이 완벽하게 읽을 수있는 코드를 작성할 수 있습니다.
Jan

1
@Jan Comments는 코드의 기능을 설명하는 것 이상입니다 .......
Kevin

2
나는 의견을해야 말을 @Kevin 결코 무엇 코드를 설명하기 위해 존재하지 않는, 오히려 그것을하고있는 이유를 설명 할 수 있습니다. 그리고 그러한 상황에서 종종 리 팩터는 주석을 요구하지 않고 의도를 얻습니다 (Jan의 요점처럼 들립니다).
RJFalconer

4

이 특별한 경우 @Mattieu M.은 올바른 솔루션을 제공합니다.

유사한 어떤 변환이없는 일반적인 경우에, 당신은 당신 자신에게 물어 : 거기에 어떤 기회가 미래의 프로그래머 힘 엉망이를?

대답은 보통 그렇습니다. 즉, 통화를 추가해야합니다. 어쩌면 이후 버전의 프레임 워크는 ON 대신 모든보기를 OFF로 시작합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.