Напоминание о типах функций

Функция

  1. Принимает значения
  2. Вычисления, возможно с побочными эффектами. Например: печать на экран, измененных глобальных переменных или других переменных, которые видны вне вызова функции.
  3. Возвращает результат.

Чистая функция = функция без побочных эффектов. Т.е. она не влияет на внешнее состояние. Ее можно вызвать несколько раз подряд без изменения поведения.

Пример, функция переворачивания списка. Чистая функция:

List<String> list2 = revert(list1);

и этом list1 не меняется. Результат получен в новом созданном списке list2.

Не чистая функция может быть такой:

List<String> list1 = ...
revertInPlace(list1);

Список list1 изменяется после вызова. Побочный эффект — изменение видимой снаружи функции переменной list1.

Достоинства, недостатки

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

Еще о типах обертках

Вспомним, что было о них в прошлый раз

  1. Коллекции могут хранить значения только объектных типов. Т.е. List<int> писать нельзя. Пишем List<Integer>
  2. int и Integer превращаются друг в друга (автозаворачивания и авторазврорачивания) практически автоматически, есть редкие исключения, когда об этом надо задуматься.
  3. Кстати, оператор приведения типа тоже работает для автозаворачивания и авторазврорачивания: (Integer)5 или можно наоборот (int)i, где i имеет тип Integer.
  4. Поэтому предлагается в программе делать вид, что вы работаете только с int. Избегайте переменных типа Integer. (аналогично с другими типами оберток)
  5. Когда нужно все-таки явно пользоваться Integer:
    1. В типе коллекций: List<Integer>
    2. Integer, в отличие от int, может хранить null
    3. В этих типах есть полезные статические вспопмогательные функции:

вспомогательные функции в типах-обертках

Integer.parseInt("42") превращает строку в число 
Integer.parseInt("42", 16) превращает строку в число в 16-ой системе счисления. Это 66 в 10-ой
Character.toLowerCase('A') получаем 'a'
Character.isDigit('2') проверка на то, что это цифра

Рекомендуется просмотреть документацию по Integer, Character, чтобы просто представлять себе, какие вспомогательные функции там есть.

Другие способы создания коллекций

см. код программы CreateCollectionsExample.java

Ассоциативные массивы

Массивы, у которых в качестве индексов можгут выступать произвольные обеъкты. В наших примерах это чаще всего будут строки. В обычных массивах индексы это числа от 0 до n-1.

В python это dict. По-английски ассоциативные массивы это Map.

см. далее MapsExample.java