2016-01-28 4 views
2

Ниже приведен код «Избегайте объявления или назначения переменных в цикле, которые не зависят от условия цикла». (В соответствии с передовой практикой кодирования)Назначение переменных внутри цикла

private void testingLoop() { 
    String var[]= {"java", "code", "review"}; 
    String arr[] = new String[1]; 
    for(String i : var) 
    { 
    arr[0] = i.concat("Script"); 
    } 
    System.out.println("The result is: " +arr[0]); 
} 

Почему это рассматривается как плохая практика, когда отнесем переменные внутри цикла? любое решение для решения этой проблемы?

Примечание: Мое намерение состояло в том, чтобы показать цикл for, поэтому не стоит много думать о цели кода.

+0

Иногда у вас может возникнуть соблазн поспорить в комментариях, а затем вы помните, что никто не изменил чей-либо разум в комментариях. И тогда вы начинаете называть имя, потому что у вас кончились споры. И тогда вы понимаете, что эти слова являются эфемерными и физически не существуют. И тогда вы понимаете, что вся ваша работа заключается в перемещении нефизических бит вокруг. И тогда вы понимаете, что существует целая кустарная индустрия, которая строится вокруг решения проблем, которые на самом деле не существуют в реальном мире. А потом тебе грустно. Не грусти. Не спорьте. –

ответ

0

Я полагаю, что предупреждение означает, что если вы можете объявить/назначить переменную вне цикла с теми же результатами - то лучше делать это 1 раз, чем N раз.

private void testingLoop() { 
    String var[]= {"java", "code", "review"}; 
    String arr[] = new String[1]; 
    for(String i : var) 
    { 
    arr[0] = i.concat("Script"); 
    } 
    System.out.println("The result is: " +arr[0]); 
} 

То же самое,

private void testingLoop() { 
    String var[]= {"java", "code", "review"}; 
    String arr[] = new String[1]; 
    arr[0] = var[var.length - 1].concat("Script"); 
    System.out.println("The result is: " +arr[0]); 
} 
+0

это сработало !! спасибо всем за ценные материалы. – HookUp

0

Try:

private void testingLoop() { 
    String var[]= {"java", "code", "review"}; 
    List<String> arr = new ArrayList<String>(); 
    for(String i : var) 
    { 
     arr.add(i.concat("Script")); 
    } 
    System.out.println("The result is: " +arr[2]); 
} 
+0

Я не хочу менять его в List, потому что позже в моем коде я отправляю его методу, который ожидает String. – HookUp

1

Обратите внимание, что объем локальных переменных всегда должно быть минимально возможным.

С точки зрения обслуживания, объявление или назначение переменных в цикле лучше, чем другой подход. Объявлять и инициализировать переменные в одном и том же месте, в самом узком объеме. Не оставляйте зияющее отверстие между объявлением и инициализацией и не загрязняйте пространства имен, которые вам не нужны.

Для более Referance: Declaring variables inside or outside of a loop

+0

Я прошел через это, я понимаю, почему лучше объявлять переменные за пределами цикла, но здесь я назначаю. – HookUp

+0

Что вы подразумеваете под 'но здесь я назначаю'? – GroundIns

+0

@HookUp * Я понимаю причину, по которой лучше объявлять переменные за пределами цикла *: этот ответ говорит точно о том, что вы понимаете, и это правильно. Объявление переменной внутри цикла лучше, потому что переменная имеет меньшую область действия: это делает код более легким для рефакторинга и оставляет меньше места для ошибок. –

1

Я не слишком уверен, что сам, но я могу попробовать, чтобы иметь трещины на него.

Ваш код в настоящее время заменяет массив arr. Итак, в первый раз вокруг цикла он хранит javaScript, и второй раз, codeScript, и последний раз около reviewScript. Моя единственная проблема заключается в том, что когда вы печатаете его в самом конце, он будет печатать только reviewScript, потому что это последнее значение String, которое вы получили за каждый цикл.

Это мог бы так же легко было:

private void testingLoop() { 
    String var[]= {"java", "code", "review"}; 

    // No need for this anymore 

    // String arr[] = new String[1]; 
    // for(String i : var) 
    // { 
    //  arr[0] = i.concat("Script"); 
    // } 
    // System.out.println("The result is: " +arr[0]); 

    int lastIndex = var.length; 
    System.out.println("The result is: " + var[lastIndex - 1] + "Script"); 
} 

Так что я думаю, что причина, почему это дает сообщение, потому что нет никаких оснований для вас, чтобы назначить что-нибудь внутри для цикла; только чтобы получить последний элемент в вас. var массив. Вы можете concat в конце ПОСЛЕ выяснить индекс последнего элемента в var (хотя это можно сделать через var.length, как я уже упоминал ранее).

Смежные вопросы