바르게 또는 잘못,이 중복 코드 / I 수표에 추가하는 것을 의미하는 경우에도, 현재 나는 항상 가능한 내 코드와 같은 강력한 만들려고한다 신념이야 알고 지금 어떤 소용이되지 않습니다,하지만 그들은 줄 아래로 x 년이 될 수 있습니다.
예를 들어, 현재이 코드 조각이있는 모바일 응용 프로그램을 만들고 있습니다.
public static CalendarRow AssignAppointmentToRow(Appointment app, List<CalendarRow> rows)
{
//1. Is rows equal to null? - This will be the case if this is the first appointment.
if (rows == null) {
rows = new List<CalendarRow> ();
}
//2. Is rows empty? - This will be the case if this is the first appointment / some other unknown reason.
if(rows.Count == 0)
{
rows.Add (new CalendarRow (0));
rows [0].Appointments.Add (app);
}
//blah...
}
섹션 2를 구체적으로 살펴보면 섹션 1이 참이면 섹션 2도 참이라는 것을 알고 있습니다. 왜 섹션 1이 거짓이고 섹션 2가 참인지에 대한 이유를 생각할 수 없으므로 두 번째 if
진술이 중복됩니다.
그러나 앞으로이 두 번째 if
진술이 실제로 필요한 경우와 알려진 이유가있을 수 있습니다.
어떤 사람들은 처음에 이것을보고 미래를 염두에두고 프로그래밍하고 있다고 생각할 수 있습니다. 그러나 나는 이런 종류의 코드가 나로부터 "숨겨진"버그를 가지고있는 몇 가지 사례를 알고있다. 함수 xyz
가 abc
실제로 수행해야 할 때 함수 가 수행 되는 이유를 파악하는 데 시간이 더 오래 걸렸습니다 def
.
다른 한편으로, 이러한 종류의 코드로 인해 새로운 동작으로 코드를 훨씬 쉽게 향상시킬 수있는 수많은 사례가 있습니다. 돌아가서 모든 관련 검사를 수행 할 필요가 없기 때문에.
이런 종류의 코드에 대한 일반적인 규칙 규칙 이 있습니까? (이것이 좋거나 나쁜 실천으로 간주되는지 듣고 싶습니다.)
주의 : 이것은 이 질문 과 비슷한 것으로 간주 될 수 있지만 , 그 질문과 달리 마감일이 없다고 가정 한 답변을 원합니다.
TLDR : 향후 잠재적으로 더 강력 해 지도록 중복 코드를 추가해야합니까?
if(rows.Count == 0)
이 결코 일어나지 않을 것이라는 것을 안다면 , 당신은 예외가 발생할 때 예외를 제기 할 수 있습니다-그리고 당신의 가정이 왜 잘못되었는지 점검하십시오.
rows
널이 아닌가? 컬렉션이 null 인 이유는 적어도 .NET에는 없습니다. 비어 있지만 null은 아닙니다 . rows
호출자가 논리에 결함이 있음을 의미하기 때문에 null 인 경우 예외 가 발생 합니다.