Что такое интерполяция в программировании
Перейти к содержимому

Что такое интерполяция в программировании

  • автор:

Интерполяция строк в C#

В этом руководстве описано, как использовать интерполяцию строк для форматирования и включения результатов выражения в строку результатов. В примерах предполагается, что вам знакомы основные принципы C# и форматирования типов .NET. Если вы не знакомы с интерполяцией строк или форматированием типов .NET, сначала ознакомьтесь с интерактивным учебником по интерполяции строк. Дополнительные сведения о типах форматирования в .NET см. в разделе «Типы форматирования» в .NET.

Введение

Для определения строкового литерала в качестве интерполированной строки добавьте к началу символ $ . Вы можете внедрить любое допустимое выражение C#, возвращающее значение в интерполированной строке. В следующем примере после вычисления выражения его результат преобразуется в строку и включается в строку результатов:

double a = 3; double b = 4; Console.WriteLine($"Area of the right triangle with legs of and is "); Console.WriteLine($"Length of the hypotenuse of the right triangle with legs of and is "); double CalculateHypotenuse(double leg1, double leg2) => Math.Sqrt(leg1 * leg1 + leg2 * leg2); // Output: // Area of the right triangle with legs of 3 and 4 is 6 // Length of the hypotenuse of the right triangle with legs of 3 and 4 is 5 

Как показано в примере, можно включить выражение в интерполированную строку, заключив его в фигурные скобки:

Интерполированные строки поддерживают все возможности составного форматирования строк. Это делает их более удобочитаемыми по сравнению с использованием метода String.Format.

Как указать строку формата для выражения интерполяции

Чтобы указать строку формата, поддерживаемую типом результата выражения, следуйте выражению интерполяции с двоеточием («:») и строкой формата:

В следующем примере показано, как задать стандартные и настраиваемые строки формата для выражений, возвращающих дату и время или числовые результаты:

var date = new DateTime(1731, 11, 25); Console.WriteLine($"On L. Euler introduced the letter e to denote ."); // Output: // On Sunday, November 25, 1731 L. Euler introduced the letter e to denote 2.71828. 

Управление шириной поля и выравниванием в форматированных выражениях интерполяции

Чтобы указать минимальную ширину поля и выравнивание результата отформатированного выражения, следуйте выражению интерполяции с запятыми («,») и константным выражением:

Если значение alignment положительное, форматированное выражение будет выровнено по правому краю, а если отрицательное — по левому.

Если вам нужно задать и выравнивание, и строку формата, начните с компонента выравнивания:

В следующем примере показано, как задать выравнивание. Текстовые поля разграничены символом вертикальной черты («|»):

const int NameAlignment = -9; const int ValueAlignment = 7; double a = 3; double b = 4; Console.WriteLine($"Three classical Pythagorean means of and :"); Console.WriteLine($"|||"); Console.WriteLine($"|||"); Console.WriteLine($"|||"); // Output: // Three classical Pythagorean means of 3 and 4: // |Arithmetic| 3.500| // |Geometric| 3.464| // |Harmonic | 3.429| 

В выходных данных в примере видно, что если длина форматированного результата выражения превышает заданную ширину поля, значение alignment игнорируется.

Как использовать escape-последовательности в интерполированной строке

Интерполированные строки поддерживают все escape-последовательности, которые могут использоваться в обычных строковых литералах. Дополнительные сведения см. в статье Escape-последовательности строки.

Для литеральной интерпретации escape-последовательности используйте строковый литерал verbatim. Интерполированная строка детализации начинается с обоих $ и @ символов. Вы можете использовать $ и @ в любом порядке: $@». » @$». » оба и являются допустимыми интерполированными подробными строками.

В строке результатов указывайте двойную фигурную скобку «>». Дополнительные сведения см. в разделе «Экранирование фигурных скобок » статьи о составном форматировании .

В следующем примере показано, как включить фигурные скобки в строку результата и создать интерполированную строку verbatim:

var xs = new int[] < 1, 2, 7, 9 >; var ys = new int[] < 7, 9, 12 >; Console.WriteLine($"Find the intersection of the <<>> and <<>> sets."); // Output: // Find the intersection of the and sets. var userName = "Jane"; var stringWithEscapes = $"C:\\Users\\\\Documents"; var verbatimInterpolated = $@"C:\Users\\Documents"; Console.WriteLine(stringWithEscapes); Console.WriteLine(verbatimInterpolated); // Output: // C:\Users\Jane\Documents // C:\Users\Jane\Documents 

Как использовать троичный условный оператор ?: в выражении интерполяции

Двоеточие (:) имеет особое значение в элементе выражения интерполяции. Чтобы использовать условный оператор в выражении, заключите это выражение в скобки, как показано в следующем примере:

var rand = new Random(); for (int i = 0; i < 7; i++) < Console.WriteLine($"Coin flip: <(rand.NextDouble() < 0.5 ? "heads" : "tails")>"); > 

Создание строки результата с интерполяцией для определенного языка и региональных параметров

По умолчанию в интерполированной строке используется текущий язык и региональные параметры, определяемые свойством CultureInfo.CurrentCulture для всех операций форматирования.

Начиная с .NET 6, можно использовать String.Create(IFormatProvider, DefaultInterpolatedStringHandler) метод для разрешения интерполированной строки в строку результата, зависят от языка и региональных параметров, как показано в следующем примере:

var cultures = new System.Globalization.CultureInfo[] < System.Globalization.CultureInfo.GetCultureInfo("en-US"), System.Globalization.CultureInfo.GetCultureInfo("en-GB"), System.Globalization.CultureInfo.GetCultureInfo("nl-NL"), System.Globalization.CultureInfo.InvariantCulture >; var date = DateTime.Now; var number = 31_415_926.536; foreach (var culture in cultures) < var cultureSpecificMessage = string.Create(culture, $""); Console.WriteLine($""); > // Output is similar to: // en-US 8/27/2023 12:35:31 PM 31,415,926.536 // en-GB 27/08/2023 12:35:31 31,415,926.536 // nl-NL 27-08-2023 12:35:31 31.415.926,536 // 08/27/2023 12:35:31 31,415,926.536 

В более ранних версиях .NET используйте неявное преобразование интерполированной строки в System.FormattableString экземпляр и вызовите его ToString(IFormatProvider) метод для создания строки результатов, зависяющей от языка и региональных параметров. Следующий пример показывает, как это сделать:

var cultures = new System.Globalization.CultureInfo[] < System.Globalization.CultureInfo.GetCultureInfo("en-US"), System.Globalization.CultureInfo.GetCultureInfo("en-GB"), System.Globalization.CultureInfo.GetCultureInfo("nl-NL"), System.Globalization.CultureInfo.InvariantCulture >; var date = DateTime.Now; var number = 31_415_926.536; FormattableString message = $""; foreach (var culture in cultures) < var cultureSpecificMessage = message.ToString(culture); Console.WriteLine($""); > // Output is similar to: // en-US 8/27/2023 12:35:31 PM 31,415,926.536 // en-GB 27/08/2023 12:35:31 31,415,926.536 // nl-NL 27-08-2023 12:35:31 31.415.926,536 // 08/27/2023 12:35:31 31,415,926.536 

Как показано в примере, можно использовать один экземпляр FormattableString для создания нескольких строк результата для различных языков и региональных параметров.

Как создать строку результата с помощью инвариантного языка и региональных параметров

Начиная с .NET 6, используйте String.Create(IFormatProvider, DefaultInterpolatedStringHandler) метод для разрешения интерполированной строки в результируемую строку для InvariantCultureэтой строки, как показано в следующем примере:

string message = string.Create(CultureInfo.InvariantCulture, $"Date and time in invariant culture: "); Console.WriteLine(message); // Output is similar to: // Date and time in invariant culture: 05/17/2018 15:46:24 

В более ранних версиях .NET вместе с FormattableString.ToString(IFormatProvider) методом можно использовать статический FormattableString.Invariant метод, как показано в следующем примере:

string message = FormattableString.Invariant($"Date and time in invariant culture: "); Console.WriteLine(message); // Output is similar to: // Date and time in invariant culture: 05/17/2018 15:46:24 

Заключение

См. также

  • String.Format
  • System.FormattableString
  • System.IFormattable
  • Строки

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Обратная связь

Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделе https://aka.ms/ContentUserFeedback.

Отправить и просмотреть отзыв по

Дополнительные ресурсы

Значок отказа согласно Закону Калифорнии о защите конфиденциальности потребителей (CCPA)

  • Светлая
  • Темная
  • Высокая контрастность
  • Предыдущие версии
  • Блог
  • Участие в доработке
  • Конфиденциальность
  • Условия использования
  • Товарные знаки
  • © Microsoft 2024

JavaScript: Интерполяция

В уроке про конкатенацию перед нами стояла задача создать заголовок письма из двух констант и знаков препинания. Вы, скорее всего, решили задачу так:

const firstName = 'Joffrey'; const greeting = 'Hello'; console.log(greeting + ', ' + firstName + '!'); // => Hello, Joffrey! 

Это довольно простой случай, но даже здесь нужно приложить усилия, чтобы увидеть, какая в итоге получится строка. Нужно следить за несколькими кавычками и пробелами, и без вглядывания не понять, где что начинается и кончается.

Есть другой, более удобный и изящный способ решения той же задачи — интерполяция. Вот, как это выглядит:

const firstName = 'Joffrey'; const greeting = 'Hello'; // Обратите внимание на ограничители строки, это бектики // Интерполяция не работает с одинарными и двойными кавычками console.log(`$, $!`); // => Hello, Joffrey! 

Мы просто создали одну строку и «вставили» в неё в нужные места константы с помощью знака доллара и фигурных скобок $ < >. Получился как будто бланк, куда внесены нужные значения. И нам не нужно больше заботиться об отдельных строках для знаков препинания и пробелов — все эти символы просто записаны в этой строке-шаблоне.

В одной строке можно делать сколько угодно подобных блоков.

Интерполяция работает только со строками в бэктиках. Это символ `.

Почти во всех языках интерполяция предпочтительнее конкатенации для объединения строк. Строка при этом получается склеенная, и внутри неё хорошо просматриваются пробелы и другие символы. Во-первых, интерполяция позволяет не путать строки с числами (из-за знака +), а во-вторых, так гораздо проще (после некоторой практики) понимать строку целиком.

Задание

Выведите на экран строку Do you want to eat, ? , где вместо должна использоваться константа stark . Вывод должен получиться таким:

Do you want to eat, Arya?

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

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

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

Полезное

Определения

  • Интерполяция — способ соединения строк через вставку значений переменных в строку-шаблон с помощью фигурных скобок. Например, `Hi, $!` .

Python: Интерполяция

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

Базовый способ соединения строк — конкатенация. С помощью конкатенации строки «суммируются» друг с другом, как в примере ниже:

first_name = 'Joffrey' greeting = 'Hello' print(greeting + ", " + first_name + "!") # => Hello, Joffrey! 

Конкатенация работает просто, но выглядит не всегда наглядно. Из-за кавычек сложно разглядеть то, каким будет конечный результат. И чем сложнее устроена строка, тем запутаннее она начнет выглядеть. У конкатенации есть альтернатива — интерполяция. Вот как это выглядит:

first_name = 'Joffrey' greeting = 'Hello' print(f', !') # => Hello, Joffrey! 

Буква f указывает на то, что мы создаем f-строку — шаблон, в который с помощью фигурных скобок подставляются значения переменных. На выходе получается обычная строка.

Рассмотрим такой пример:

school = 'Hexlet' what_is_it = f' - online courses' print(what_is_it) # => Hexlet - online courses 

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

Интерполяция помогает сделать код более понятным для разработчиков. Но это не единственная полезная альтернатива, о которой мы хотели рассказать. Далее в курсе мы разберемся, как объявлять многострочную строку и не использовать \n .

Задание

Выведите на экран строку Do you want to eat, ? . Где вместо должна использоваться переменная stark . Вывод должен получиться таким:

Do you want to eat, Arya?

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

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

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

Полезное

Определения

  • Интерполяция — способ получения сложной строки из нескольких простых с использованием специальных шаблонов

Люблю усложнять, или как работает интерполяция

Люблю усложнять, или как работает интерполяция главное изображение

Batman нужно написать через переменную. При формировании итоговой строки использовать интерполяцию. Вывод должен получиться таким:

_Have you seen this new movie called Batman? Yes, I liked._ 

Интерполяция проще, чем я думала.

Когда мы используем f-строку, вместе с multi-line, не надо уже пихать туда все, что узнала. Я из теории не поняла, что если есть «»», то уже не надо одинарные кавычки, что »’, можно использовать, даже если в предложении есть апостроф. Если у нас есть переменная, то не надо ее выделать +, как в конкатенации и вообще примере не хватило, что бы все понять.

new_film = 'Batman' print (f'''Have you seen this new movie called new_film>? Yes, I liked.''') 

Все очень просто. Решила я задание, конечно после просмотренного решения. Иногда нужно просто расслабиться и попытаться сделать проще. С этим у меня проблемы.

P.S. Я изменила предложения, что я написала, не проверяла на курсе, если найдете ошибки, буду рада их поправить, но вроде бы все верно. В программировании и математике я полный 0 и мне особенно сложно все дается и особенно радостно, когда что то получается, интересно, что будет дальше.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *