C#特性杂谈
文中充满了各种C#与我会的语言的对比及吐槽, 希望介意者勿观… 当然, 鉴于太乱, 我怀疑有没有人能看完.
文中充满了各种C#与我会的语言的对比及吐槽, 希望介意者勿观… 当然, 鉴于太乱, 我怀疑有没有人能看完.
首先得说, 一般某种语言的发明人写的关于自己语言的东西都是非常值得阅读的, 从别的牛人那里你也许能学会很多奇技淫巧, 但从语言发明人那里你能学到语言发明人本身设计的初衷, 以及设计时的一些抉择. 这种思路是独一无二, 绝无仅有的. 所以我在学习一个新语言时, 假如语言发明人有写书, 一定优先阅读.
递归是编程中一个相对难以理解但是却又很重要的概念. 对于从命令式语言开始学习编程的程序员天生对此有理解缺陷, 而对于从类似C++这种对函数式编程范式不友好的语言开始学习编程的程序员就更加如此了.(比如我自己) 碰巧(其实不巧)最近在读
语言的界限就是一个人世界的界限 -- 维特根斯坦
很多人会告诉你, 学习不同编程语言能够让你看到新的世界, 改变你思考的方式, 在程序员修炼之道中甚至会建议’每年至少学习一门新语言’, 也有Peter Norvig在十年学会编程中提出的那样, 学会至少半打语言. 我是比较赞同这种观点的.
这次把CSDN的文章移过来的时候, 发生了格式混乱的不愉快体验. 虽然以前的那些文章有些很稚嫩, 早期的文章现在看来甚至很可笑, 但是, 这种记录还是很值得保留, 毕竟是成长的过程.
整理一些文章格式的时候, 还发现一个有趣的故事, 原来我现在这么喜欢Vim, 来自于当时刚到北京, 用一个巨老无比的笔记本, 图形界面几乎没法用, 所以才无奈之下真正的耐下心来学习Vim, 见买了个新显示器. 而这已经是我第3次开始尝试使用Vim了, 从那以后, 我几乎没有Vim就没法工作了.
闲话少说, 综上所述, 我决定好好的管理一下自己的博客, 虽然现在已经用上了自己可以控制的Wordpress, 但是谁知道将来会不会再发生忘记缴费, 数据被删的事情呢, 即使我用上了Wordpress的备份, 我还是需要给自己写的文章做一个自己的备份, 并且可以用Git来管理, 这个才叫真的备份, 连历史记录都备份了. 同时, 因为格式上的原因, 我决定用某种文本格式来保存我的文章, 当然, 我可不准备手写HTML, 这样才不会出现用Windows Live Write写博客那样的悲剧, 并且, 作为离线写博客的方式, 用Vim来处理文本就方便了, 不用再去找各个平台的啥离线工具.
感慨优秀博客的衰落,作者反思了创作困境与“围墙”问题,决定拓宽自己博客的内容,尝试技术与生活分享的新方向。
UnityScript(即javaScript for Unity)的教程网上千千万, 中文的也不少, 但是讲Unity3D界面操作的多, 讲UnityScript这个语言的少, 同时对于UnityScript的描述部分, 也是入门的教程多, 对语言特性的描述少, 能够成系统的我就根本没有找到过. 连续的看了不少的Unity3D的文章, 书籍, 但是发现写代码的时候, 对UnityScript的细节掌握仍然不甚了了, 也就是对怎么写UnityScript效率更高, 更加符合语言设计的目的, 风格等事情并还没有清晰的认识. 这个对于习惯写脚本的人来说, 可能是常态, 对于习惯C++我来说, 简直难以忍受.
看到这样的名字, 学过编程的人都知道我是模仿了经典的C语言教材, 目的也是一样. 本文的目的不是再多写一个教程, 而是希望对UnityScript这个语言进行一个较为深入细节, 并且准确的描述. 也就是说, 相对于教程, 本文会更加像一个语言说明书. 同时, 更不用说的就是, 本文会甚少涉及Unity3D本身的界面操作, 仅仅关注于UnityScript这个语言, 不要希望通过本文学会Unity3D, 但是, 当你对Unity3D有了些基本的了解后, 希望写一个大型游戏时, 本文会对你该怎么写脚本, 怎么写对脚本, 怎么样写好脚本, 并且避免掉进语言的陷阱中有一些帮助.
更进一步的说, 因为UnityScript完全是Unity3D控制的语言, 同时仅在Unity3D中可用, 所以对于UnityScript来说, 甚至于连哪些是属于语言本身的特性, 哪些属于库的扩展, 这些都分不清楚. 这比Objective C还混乱… 在Unity里面想要完全的区分开库和语言几乎不可能, 但是本文还是会尽量做这方面的尝试, 尽量将本文的主要关注点放在语言上, 而不是库上.
Unity3D中的javascript有些特异,和普通的javascript差异很大,其中eval就没法在iOS下使用(其实我在桌面版本也没有使用成功过)使得Json解析这种在javascript中非常原生态的事情变得不那么直接了。
直接使用eval后Unity3D给的错误信息很高端,我是没有看懂,应该是没有找到eval这个通用的函数:
Mono: AssemblyAssets/Scripts/Example/JTianLingExample.js(1,1): BCE0172: `UnityScript.Scripting.IEvaluationDomainProvider’ interface member implementation must be public or explicit.
在网上找到了litjson库,通过这个支持.Net的库来曲线救国,折腾了一下,基本搞定。看网上讲litjson的资料很少,并且以C#居多,我这里就记录一下。
公司最近要开新的Unity3d项目了,Google虽然有JavaScript Style Guide,但是UnityScript和JavaScript的区别实在大到了几乎不是同一种语言的地步,这个只能自己动手了。好在起码还能参考一下Google的style guide。
最近写博客的时间的确是少了,Keynote倒是写了不少,其中的一个是CocosBuilder刚开源时,在公司分享时做的Keynote,关于CocosBuilder的,在这里跟大家分享,内容其实不多。
下载地址:CocosBuilder可用性分析