ЙажаСценарий / Говнокод #27300 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
// These are equivalent:
fn`some string here`;
fn(['some string here']);

Джаваскриптеры переизобрели руби (ладно-ладно, скрестили с FormattableString из шарпа)

https://styled-components.com/docs/advanced#tagged-template-literals

Запостил: Fike Fike, (Updated )

Комментарии (17) RSS

  • а точно не printf изобрели?

    когда звезут perl qw или ruby %w -- разбудите
    Ответить
    • Ну это сахар для printf'а, да.

      fn`foo=$foo` это fn(['foo='], [foo]) вроде бы.
      Ответить
      • Прямо как fstrings в питоне, только там не $ как в фу-фу-фу пхп, а {} как в сишке, вроде даже выражения туда можно пропихнуть.
        Ответить
        • fstring'и менее универсальные, они сами подставляют. А здесь тебе просто куски прилетают, насколько я помню. И ты можешь с ними делать всё что хочешь.
          Ответить
          • Ага. Но багор в том, что интерполирууемые выражения всё равно выполнятся. `${2 + 2}` вернет не функцию, а 4.
            Ответить
            • Ну это не такой уж багор пока строка под контролем приложения, а не юзера.

              printf() в сишке тоже не особо безопасен если юзер будет рулить строкой формата.
              Ответить
              • По идее это передача управления интерполяцией под контроль приложения, типа вот тебе строка, которую надо отпроцессить, сам разбирай выражения. Но ты даже не можешь сделать из этого какой-нибудь l10n и заменять ${count} ${count | pluralize 'item'} на l10n.pluralize({noun: 'item', value: coun}), только ебаться с этим снаружи, а не изнутри.
                Ответить
                • В принципе могу: `${count} ${pluralize('item', count)}`

                  А, я понял о чём ты. Параметры никакие не прокинуть и контекст не прицепить чтобы выражения покороче писались.
                  Ответить
                    • Ну dsl хуй бы с ним, если бы можно было this забиндить на что-то своё и позвать формулу.

                      ${pluralize('item', count)} не так уж и ужасно смотрится.
                      Ответить
                    • А вообще, я так понял, они пытались вполне конкретную задачу решить: правильную экранировку во время интерполяции. Чтобы экранировать аргументы, но не трогать окружающую их строку. Вот только для этого оно и работает.
                      Ответить
            • А вообще через эту штуку можно даже что-то безопасное слепить:

              query`select * from test where name=${name}`

              Аргументы можно отправить через параметры запроса, не превращая их в строки. Даже экранировать ничего не придётся.

              С питоньими fstring'ами это невозможно, насколько я понимаю.
              Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8