Новый язык программирования от Apple - Swift меня сегодня сильно удивил. Строки в этом языке по современному не мутируемы. Логично, с точки зрения безопасности. Каждый раз, когда вы в коде пишете:
s = s + “test”
В реальности для s выделяется новая память, а не добавляется к существующей. Это правильно. Язык Swift объектный и все там объекты. Но внимание - для получения длины строки нужно использовать глобальную функцию countElements, которая подсчитывает количество элементов простой интеграцией по всем символам.
Логично, ведь каждый символ в некоторых Unicode может занимать разное количество памяти. некоторые символы будут занимать только 2 байта, а другие все 4. Можно было бы использовать Unicode версию с фиксированной длиной, но видимо Apple решили выбрать UTF8 (или что-то подобное), при хранении данных в памяти, а в остальные форматы конвертировать. Бог им судья за это, а я буду судьей за сканирование.
Теперь если программисту нужно узнать, сколько символов в строке, он должен надеятся, что все они одной длины и length вернет корректное значение или использовать countElements, который каждый раз будет сканировать массив символов в строке. В случае с большими строками это будет потеря производительности и оптимизация ложиться на плечи программеров.
Apple говорила на презентации, что Swift будет лучше заточен для создания быстрых приложений. Только вот со строками уже косяк. А ведь было бы так легко создать один лишь метод для подсчета символов и лениво подсчитывать его. Не обратился пользователь к методу? Расчета нет. Обратился? Посчитали и сохранили тут же в защищенной переменной. При всех последующих обращением будет возвращаться уже рассчитанное значение. Просто и элегантно, и работать будет хорошо, потому что строки то не мутируемые.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
immutable !== не мутируемые, https://translate.google.ru/#en/ru/immutable
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.