lowcode-engine icon indicating copy to clipboard operation
lowcode-engine copied to clipboard

「讨论」引擎内的模板字符串格式

Open LeoYuan opened this issue 2 years ago • 7 comments

由 https://github.com/alibaba/lowcode-engine/pull/1674 引发的调研和思考~

PR 中认为模板字符串是类似 我是 {name},由 {} 包裹的即为插槽, 看了下 Demo 预览,认可的是 {},看了下出码,认可的是 ${},查看 协议 发现前面写的是 {},后面写的是 ${},大水冲了龙王庙了。。。

于是去调研了一下哪种更好,有如下事实:

到底使用哪种好,我想(yiyin)无非是平衡 易用性功能性,比如是用一百个前后花括号 {{...{{name}}..}} 是不容易跟内容混淆的,但是不易用,使用简单标识,如: (name) 很简单,但是容易跟内容的括号产生冲突,需要用转义等方式才能更好的输出括号,所以业界在权衡两者后,出现了 <%= %> / {{}} / ${} 等多种流行方案。

我个人倾向是使用 ${},大家觉得呢?

LeoYuan avatar Mar 09 '23 07:03 LeoYuan

${}

flgame avatar Mar 10 '23 02:03 flgame

我不推荐${}的原因是:

  • 在模板字符串中使用 ${} 时,需要注意表达式的安全性,特别是当表达式包含用户输入时。
  • 可读性相对弱些

个人倾向{}:

  • 可读性强些
  • 易用性不用过多考虑,{}符号的诞生本来就是用于计算机、数学领域,普通文案基本没人用。

wangzhenxi avatar Mar 10 '23 08:03 wangzhenxi

我不推荐${}的原因是:

  • 在模板字符串中使用 ${} 时,需要注意表达式的安全性,特别是当表达式包含用户输入时。
  • 可读性相对弱些

个人倾向{}:

  • 可读性强些
  • 易用性不用过多考虑,{}符号的诞生本来就是用于计算机、数学领域,普通文案基本没人用。

安全性是指?这里不会涉及 `` 带来的计算行为的,只是一个占位符。

{} 还是容易出现的,如上所言,如何选择是综合易用性和功能性来判断,不然为啥主流模板引擎没人用 {}?

LeoYuan avatar Mar 10 '23 08:03 LeoYuan

作为曾经hbs重度使用者,当然是{{}}了,看着就亲切 XD

fantasysango avatar Mar 10 '23 12:03 fantasysango

${}

AndyJinSS avatar Mar 14 '23 01:03 AndyJinSS

1, 2, 4大家不一定用过,3大家都了解,没有特别的需要当然就3咯,引擎能简单点就简单点。

theFG1998 avatar Mar 15 '23 04:03 theFG1998

@eternalsky @alvarto @liujuping 你们也给点建议?

LeoYuan avatar Mar 15 '23 04:03 LeoYuan

需要考虑一下修改是否 breaking,因为开源以来支持的就是 {} 类型,所以建议默认还是保持 {}。

如果要考虑其他的类型支持,可以通过新增配置,例如 lodash 的 interpolate。

// Use custom template delimiters.
_.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
var compiled = _.template('hello {{ user }}!');
compiled({ 'user': 'mustache' });
// => 'hello mustache!'

如果修改成默认其他的类型,比如 ${},为了兼容,还需要保持 {} 的兼容支持,这种情况下冲突的问题也不能解决。

liujuping avatar Mar 27 '23 09:03 liujuping

所以确认是用{}么?😃

@liujuping

LeoYuan avatar Mar 29 '23 01:03 LeoYuan

https://github.com/alibaba/lowcode-engine/pull/1826/files

LeoYuan avatar Mar 31 '23 03:03 LeoYuan