Что такое строки в языке дартс.
В Dart строка представляет собой упорядоченную последовательность значений UTF-16, заключенную либо в одинарные, либо в двойные
кавычки. Очень приятной особенностью языка является возможность объединения выражений в строки
с помощью ${expr} (сокращение для вызова метода toString()).
// No differences between s and t var s = "Double quoted"; var t = 'Single quoted'; // Interpolate an integer into a string var age = 25; var myAge = "I am $age years old"; // Expressions need '{' and '}' preceeded by $ var test = "${25.abs()}" // This is redundant, don't do it because ${} already calls toString() var redundant = "${25.toString()}";
Строка может быть однострочной или многострочной. Однострочные строки показаны выше с использованием одинарных или
двойных кавычек, а многострочные строки записываются с использованием тройных кавычек. Они могут быть полезны, когда
вы хотите красиво отформатировать код, чтобы сделать его более читабельным.
// Very useful for SQL queries, for example var query = """ SELECT name, surname, age FROM people WHERE age >= 18 ORDER BY name DESC """;
В Dart нет типа char, представляющего один символ, потому что есть только строки. Если
вы хотите получить доступ к определенному символу строки, вы должны использовать оператор []:
final name = "Alberto"; print(name[0]); // prints "A" print(name[2]); // prints "b";
Возвращаемое значение name[0] — это строка, длина которой равна 1. Мы рекомендуем вам посетить 2
онлайн-документацию Dart о строках, которая очень полезна и полна примеров.
var s = 'I am ' + name + ' and I am ' + (23).toString() + ' y.o.';
Вы можете очень легко объединять строки с помощью оператора + классическим способом, поддерживаемым большинством языков программирования. В официальном руководстве Dart 3
предлагается использовать интерполяцию
для составления строк, которая короче и чище:
var s = 'I am $name. I am ${25} years old';
Если строка длиннее одной строки, избегайте оператора + и предпочитайте простой разрыв строки.
Это просто то, что Dart рекомендует из соображений стиля, это не влияет на производительность
вообще. Старайтесь максимально соответствовать правилам языка!
// Ok var s = 'I am going to the' 'second line'; // Still ok but '+' can be omitted var s = 'I am going to the' + 'second line';
Поскольку строки неизменяемы, выполнение слишком большого количества конкатенаций с помощью оператора + может оказаться
неэффективным. В таких случаях было бы лучше, если бы вы использовали StringBuffer, который эффективно объединяет
строки. Например:
var value = ""; for(var i = 0; i < 900000; ++i) { value += "$i "; }
Каждый раз, когда вызывается оператор +, value присваивается новый экземпляр, который объединяет старое
значение и новое. Другими словами, этот код создает 900 000 раз новый объект String,
по одному на каждую итерацию, и это совсем не оптимально. Вот как это сделать:
var buffer = StringBuffer(); for(var i = 0; i < 900000; ++i) buffer.write("$i "); var value = buffer.toString();
Это гораздо лучше, потому что StringBuffer не создает новую строку внутри каждой итерации;
строка создается только один раз в момент вызова toString(). Когда вам нужно
выполнять длинные циклы, управляющие строками, избегайте использования оператора + и предпочитайте буфер. Тот же самый класс
также можно найти, например, в Java и C#.