UI语言杂集
最适合做 GUI 的是 DSL 或者 XML(以及 XML 的扩展)之类的标记语言,而不是编程语言。
例如 Qt 的 QML,Android 的 XML 或者 WPF 的 XAML 以及大家都再熟悉不过的 HTML/CSS,包括 JavaFX 也有 FXML。
一门编程语言如果想更适合定义界面,那么它的语法就得往 DSL 方面靠拢(或者支持 DSL 风格)。
作者:绅士喵
链接:https://www.zhihu.com/question/276815517/answer/390718261
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
链接:https://www.zhihu.com/question/276815517/answer/402998275
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
GUI这个东西的特性就是变化多端,细节复杂,需要怼大量人力完成。所以适合GUI的语言,必然是可以节省人力的特性。从编程语言角度,越能更快给到编程者反馈,语言写法越接近最终成品的用户界面,基本是更好的。
0. 书写简单。语法简洁,杂音少,不需要写boilerplate。支持function closure是基础了。Kotlin里UI DSL还有大括号实际上也不是特别干净,最好能像CoffeeScript一样用缩进表达。
- tracing Garbage Collection。这一点也是书写简单,比如C/C++/Rust都不适合写GUI,一个视图的生命周期或者归属权需要想清楚在GUI编程里太难了,就算想清楚了明天界面一变就又不对了。连objC的refcount都感觉有点麻烦。
- 类型系统柔韧灵活。GUI编程套路太杂,成天又变。最好是structural typing,像GoLang或者TypeScript一样。能临时定义个类型或者类JSON的对象传出去是最好的。
- 能反映视图的DSL。能通过看代码的视觉形状想象出GUI形态是增加效率的重要手段,过程式地创建UI太啰嗦不直观 。实际上不仅是视觉组件可以对应到DSL,组件上的事件处理(比如click handler)和样式最好也能直接写在DSL上。除了直观的好处,还能结合逻辑代码动态创建视图,这点是写模板(XML/HTML)做起来稍微麻烦点的。
- 能快速反应代码变化。参考webpack的hot module reload和flutter的hot reload。上面说了UI是需要大量人力的,调整细节就是其中一项。hot reload是GUI语言加速开发减少人力最大的利器。
- 语言自带异步编程。UI编程有大量需要等待用户输入/资源请求的场景。语言级别的异步编程非常重要。比如async/await的语法就是一种支持,或者Rx作为标准库也是一种支持。Golang那种CSP的异步模型就不太适合UI编程,还是太罗嗦不直观。异步编程到底怎么支持才好还没想透彻,但是GUI语言自带异步编程肯定是必需品。
总之就是怎么写得快怎么好咯。如果综合上面几点,最好的GUI语言就是
CoffeeScript的语法 + TypeScript的类型系统 + Kotlin的语法糖DSL + Dartlang的热加载 + C#的async/await/Rx
与其问什么语言最适合做 GUI,倒不如问做 GUI 需要语言/框架具有哪些特性。
首先用代码来“画”界面在现在来看是很怪异的,所以用 DSL + 完善的布局系统来写界面一定是趋势。对应的技术有 WPF、Qt Quick、JavaFX、Android Layout XML...
其次,界面不能脱离了数据,而如何将数据与界面之间建立起关系是至关重要的,双向数据绑定无疑是最好的实现方法。对应的技术有 WPF、Cocoa、各种 Web MVVM 框架...
最后还有交互,交互是一件很复杂的事情,不要试图用函数式的思想去解决这个问题,交互一定需要命令式的编程方式,而实现交互最基础的一点就是事件系统,如何将视图里的控件事件与一段逻辑代码联系在一起?看看 Qt Signal/Slot 和 Cocoa 就知道了,这点需要一个语言特性叫反射。
作者:Cyandev
链接:https://www.zhihu.com/question/276815517/answer/401765634
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
链接:https://www.zhihu.com/question/276815517/answer/389957690
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
按照我的理解,适合写gui的语言应当有这些特点
- 自带DSL,这非常重要。MFC可以认为是用c(oo都谈不上。。)来过程式的生成界面,delphi是界面和代码分离,界面是二进制/后来记得是xml。 java swing 也是用代码生成界面,IDE生成的代码上面一堆的警告让你别动也是无奈。。。 语言自带DSL可以极其优雅的用语言本身生成界面并且DSL这玩意更加容易IDE友好
- 面向对象,这个不解释。
- 支持函数式编程,开发GUI过程中挺重要的,函数可以作为一等公民的话可以极大的简化GUI开发中的事件处理,对比js写界面和java(8以前)就深有体会
- MVC,事件驱动,模型传递。
- 简单
- 最好跨平台
大概就这么多,要我说,我认为最适合的语言是
- kotlin 但是目前kotlin没太好的界面库,swing和javafx都是迷之尴尬,而且太重,不过按照jetbrains的野心,用kotlin重构GUI是一定的事情
- 未来的typescript,呃不是ts/js+h5,h5作为DSL还是很破碎和尴尬的。node上要是能搞个界面库,用ts/js来实现原生gui是很不错的。不过貌似没有人蛋疼去做这个事情毕竟有webkit。呃,对了国人有个ide做的挺好的,就是js实现windows界面开发,那个写起来比h5爽多了
ui 的关键部分
我个人觉得应该分为四个部分。
第一:排版(包括布局)
第二:附加属性(外观 颜色 边框 阴影 行高 字体)
第三:事件(交互)
第四:数据
以上主要是对目前前端 这种UI范式进行的总结。
而排版(或布局)需要一些比较自动化得 约定和机制。以便于确保 编程人员不用过多得考虑排版(反面教材就是winform 具体位置点这种的是最差的)。
附加属性这个完全可以参考css 这种 设计模式。
事件和数据 没啥好说的 参考下 类似 angularjs 或者vue 这种双向绑定就是了。
那么到底需不需要标记语言呢?
不一定。
因为也完全可以用 编程语言来布局。关键是api的设计而已。
作者:ggff ss
链接:https://www.zhihu.com/question/276815517/answer/423970001
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
UI语言杂集的更多相关文章
- 跨平台移动开发UI语言 -XAML
Xamarin.Forms 把XAML (Extensible Application Markup Language, XAML) 带进了ios,android的界面开发,也就使得使用Xamarin ...
- [Asp.net 5] Localization-Asp.net运行时多语言
本节介绍的是Microsoft.AspNet.Localization工程.该工程是运行在Asp.net 5环境中的运行时多语言设置. ASP.net 5中间件技术 在新的Asp.net 5中,可以将 ...
- ios获取当前语言
上代码: + (NSString*)getPreferredLanguage { NSUserDefaults * defaults = [NSUserDefaults standardUserDef ...
- windows官方多语言方案
编写 Win32 多语言用户界面应用程序 Windows 2000 针对全球市场制定了新的增强支持标准,提供了许多国际化功能,例如完全支持 Unicode.预设支持数百种语言以及用于从右向左语言的镜像 ...
- 本地化SilverLight应用程序(多语言支持)
原文 http://www.cnblogs.com/seaworm/archive/2010/11/30/1892325.html 利用资源文件(Resources File)使SilverLight ...
- Flex 国际化(中英语言适配)
原文地址:http://www.cnblogs.com/meteoric_cry/archive/2011/01/13/1934404.html(由于此贴时间久远,已做微调) 1.新建Flex Pro ...
- WPF 多语言解决方案 - Multilingual App Toolkit
1.首先安装Multilingual App Toolkit 2.新建项目,在VS中点击"工具" -> "Multilingual App Toolkit&qu ...
- 在SOUI中使用动态多语言切换
动态语言切换是很多国际化产品的需求,SOUI之前的版本支持静态多语言翻译,通过在程序启动时设置好语言翻译模块,在程序中打开的UI都会自动调用该翻译模块进行文字翻译,但是不支持运行进语言切换. 最近几个 ...
- winform 不同语言(中文,英文等)
Visual Studio 对于.NET 程序的本地化提供了完整的支持,这里仅介绍实现多语言版本本地化程序的简单步骤.注意黑体处为关键点.一. 窗体本地化 对于Windows 窗体,你需要做的第 ...
随机推荐
- moogdb操作
本文转载自 https://my.oschina.net/kakakaka/blog/347954 首先,下载mongdb对JAVA的支持,点击这里下载驱动包,这里博主下载的是2.10.1版. mon ...
- 使用 Jenkins 发布 web 应用至 Tomcat
Jenkins 的安装:https://www.cnblogs.com/jhxxb/p/11406805.html 发布流程:Git -> Maven -> Tomcat 一.基本环境 G ...
- centos-Hadoop集群 安装同步时间
1.安装 yum search cache ntpdate xcall.sh "yum install -y ntpdate.x86_64" 2.同步 xcall.sh " ...
- 苹果电脑(Macbook Pro)开机后没有声音的解决
有时候 Mac 从睡眠状态恢复之后没有声音,这是 Mac OS X 系统的一个 Bug.这是因为 Mac OS X 的核心音频守护进程「coreaudiod」出了问题,虽然简单的重启电脑就能解决,但是 ...
- ios wkwebview allowFileAccessFromFileURLs
最近在做 cordova 打包 ios 的项目(webpack 打包 vue项目后,再用 cordova 打包).在加载 file:/// 协议时因为 webview安全机制有一些报错.SK各种找解决 ...
- [Java读书笔记] Effective Java(Third Edition) 第2章 创建和销毁对象
第 1 条:用静态工厂方法代替构造器 对于类而言,获取一个实例的方法,传统是提供一个共有的构造器. 类可以提供一个公有静态工厂方法(static factory method), 它只是一个返回类 ...
- [mybatis]传值和返回结果
一.传值:parameterType的形式:可以传递一个类,也可以是一个map <update id="updateCategory" parameterType=" ...
- R语言与概率统计(六) 主成分分析 因子分析
超高维度分析,N*P的矩阵,N为样本个数,P为指标,N<<P PCA:抓住对y对重要的影响因素 主要有三种:PCA,因子分析,回归方程+惩罚函数(如LASSO) 为了降维,用更少的变量解决 ...
- Linux0.11学习
Linux 0.11虽然不是什么“珠穆朗玛峰”,但它肯定还是“华山”或“泰山”.虽然有路但你还是需要最基本的努力和花费一定的代价才能“攀登”上去.1. PC兼容机硬件工作原理(比如8259A,8253 ...
- 安装zabbix4.0 LTS
一.环境准备 1.https://www.zabbix.com/download?zabbix=4.4&os_distribution=centos&os_version=7& ...