Skip to content
Ider

沉淀我所学习,累积我所见闻,分享我所体验

Primary Navigation Menu
Menu
  • Home
  • About Ider
    • Who Ider?
    • Why Ider?
    • How Ider?
    • Where Ider?
    • What Ider?

Language Tips(语言初试) (Page 3)

2013-06-06
06 June
On June 6, 2013
In Article Collection(聚宝收藏), Knowledge Base(心得笔库), Language Tips(语言初试)

小心程序运算符的陷阱

每一门程序语言都会提供各种运算符(Operator),每个运算符都会有特定的含义和规则,去完成指定操作最后给出相应的结果。有些运算符会普遍出现在各种语言中,比如加减乘除这些算数运算符;有些运算符则为某些语言特有,比如取地址运算符和反引用运算符只在C/C++中用到而Java,C#这类不能直接访问地址的程序语言就不具有;有些运算符因为特定的需要,还会改变其一般的含义,比如加法运算符在很多语言都被作为字符串拼接的操作符。学习一门程序语句,除了学习其语法以外还要了解其所拥有的运算符,但是因为各个语言运算符的相似性,常常让人简单略过对它们的了解。

运算符最主要有两个特性:优先级(Precedence)和结合律(Associativity)。在很早以前我的《两年半大学总结》讲到过自己对运算符, 特别是优先级的问题上的一些理解。在之后的学习和编写程序的过程中,我常常发现原来运算符的这两个特性会给代码带来隐形的意想不到的陷阱。所以我将实际中碰到的一些关于运算符的问题罗列于此,希望能对这些问题提高警惕以免跌入陷阱。
Read More →

2013-03-14
14 March
On March 14, 2013
In Data Structures(数据结构), Knowledge Base(心得笔库), Language Tips(语言初试)

DOM事件触发顺序

对于如何给DOM绑定JavaScript的事件,在之前的文章已经比较详细的介绍了三种方式的区别和优缺点。不过,仍然还有一些遗留问题没有详细讲述,比如addEventListener的第三个参数useCapture有何神奇之处;假如HTML元素的自身和其父结点都绑定了相同类型的事件, 这些事件的激发过程又是如何处理的呢。

每一个HTML页面,在被浏览器解析后,都会生成一个树形结构,而每一个结点都是一个对应于标签(Tag)的DOM(Document Object Model)实例。树形数据结构上,其深度体现着父子关系(parent/child),其广度表现为兄弟关系(sibling)。这些DOM实例首先是用作呈现页面,在页面呈现上(若不指定特殊的布局样式,如z-index、relative position、float):子结点会被父结点包裹,但是父结点会被子结点全部或部分覆盖,而同层的结点则按从上往下,从左往右的顺序依次排布——(这只是对HTML页面呈现的简单布局流描述,其实根据样式的不同,过程更复杂)。另一方面,它们还是事件目标,用来接收页面上触发的事件。
Read More →

2013-02-21
21 February
On February 21, 2013
In Design Patterns(设计模式), Knowledge Base(心得笔库), Language Tips(语言初试)

DOM的JavaScript事件绑定方式比较

JavaScript语言是当前十分流行的语言。它从前端页面走来,产生了像jQuery这样的强大框架;它向后端服务器走去,有了Node.js;它更被微软接受为平等于C#和VB.net的第三种可用于开发Windows8应用的语言。

不过说到底,JavaScript的本家还是在前段网页界面的上的使用,而真正让JavaScript变得如此强大的还在于它能对文档对象模型(Document Object Model),也就是俗称的DOM进行操作。这其中,又要数“事件处理(Event Handling)”让用户交互(User Interaction)体验得到了巨大的提升和丰富。

如果没有事件处理,其实根本不会需要添加JavaScript到页面上,本篇文章就来总结一下JavaScript中DOM事件绑定和激发的一些方式和机制,有助于在以后的开发上有更好的设计和理解。
Read More →

2012-12-08
08 December
On December 8, 2012
In Knowledge Base(心得笔库), Language Tips(语言初试), Special Tricks(奇技妙招)

JavaScript字符串操作的偏方怪法

字符串和数组在程序编写过程中是十分常用的类型,因此程序语言都会将String和Array作为基本类型,并提供许多字符串和数组的方法来简化对字符串的操作。JavaScript里面也提供了String类型和Array类型,并且有很多基本的String方法和Array方法来方便地对字符串进行合并、查找、替换、截取等处理。

JavaScript作为一个脚本语言,又提供了一种动态解析运行的机制,而这特性,又让使得在String操作的时候出现一些结合使用Array的有趣方法。这些方法可能有些偏门有点奇怪,但有时在效率、可读性、复用性上表现得却更好。
Read More →

2012-10-26
26 October
On October 26, 2012
In Design Patterns(设计模式), Language Tips(语言初试)

Objective-C简单对象关系映射(ORM)结构

用+(void)load对全局变量初始化,实际上并不是一个非常好应用,因为大多情况下我们并不需要使用全局变量。但是另一方面,我们倒是可以通过+(void)load来实现对象关系映射(Object-relational mapping, ORM)的结构。

首先我们要定义一个ORM类,它含有Dictionary成员。这个Dictionary用来保存我们要用来映射对象所属类的名字(作为key)和类本身(作为value)。
Read More →

2012-10-26
26 October
On October 26, 2012
In Knowledge Base(心得笔库), Language Tips(语言初试)

使用Objective-C的+(void)load初始化全局变量

《Objective C类方法load和initialize的区别》里,我介绍了+(void)initialize和+(void)load两个方法在编译和执行时出现的区别,又通过《使用Objective-C的+(void)initialize初始化static变量》一文简单介绍了+(void)initialize可以用在对静态变量的初始化上。

如同《使用Objective-C的+(void)initialize初始化static变量》中介绍的那样,假如Objective-C的全局变量被限定为static,只用在当前文档中,那么使用+(void)initialize来进行初始化是非常合适而且正确的。如果类并未被使用,该变量就不会被赋予对象也就不会浪费内存空间。但是假如我们就是希望用全局变量在程序任何地方使用,那么+(void)initialize可能就不那么有效了。因为变量可能在相应类的方法被调用前就使用,即是说+(void)initialize并未被调用对全局变量进行初始化。
Read More →

2012-10-23
23 October
On October 23, 2012
In Knowledge Base(心得笔库), Language Tips(语言初试)

使用Objective-C的+(void)initialize初始化static变量

在《Objective C类方法load和initialize的区别》一文中,我介绍了Objective-C对待+(void)initialize和+(void)load两个方法在编译和执行时出现的不同。而这些不同也是在使用时应该非常注意的地方。不过文章里面我没有讲这两个方法在Objective-C中究竟有什么实用价值。

其实+(void)initialize可以视为C#,Java中的静态构造函数。有了这个方法,我们就不用像C++自己另找途径来设计静态构造函数了。不过Objective-C中又有一些很不同的地方,因为Objective-C里不能把数据成员限定为static或者const。也就是说,虽然Objective-C可以定义类方法,但是类不能有数据成员。所以也不存在静态数据成员初始化的问题。

不过作为C语言的超集,Objective-C依然可以沿用C的一些特点了定义static的全局变量来作为类静态成员。
Read More →

2012-09-29
29 September
On September 29, 2012
In Knowledge Base(心得笔库), Language Tips(语言初试)

Objective C类方法load和initialize的区别

过去两个星期里,为了完成一个工作,接触到了NSObject中非常特别的两个类方法(Class Method)。它们的特别之处,在于iOS会在运行期提前并且自动调用这两个方法,而且很多对于类方法的规则(比如继承,类别(Category))都有不同的处理。

而因为这两个方法是在程序运行一开始就被调用的方法,我们可以利用他们在类被使用前,做一些预处理工作。比如我碰到的就是让类自动将自身类名保存到一个NSDictionary中。

Read More →

2012-09-06
06 September
On September 6, 2012
In Knowledge Base(心得笔库), Language Tips(语言初试)

谨慎使用PHP的引用

引用类型(Reference)在许多计算机语言中都被使用,而且是作为一个非常强大而实用的特性存在。它有类似指针(Pointer)的实现,却又有不同于指针的表现。例如C++的引用,可以让不同变量指向同一个对象,同时又保有直接使用dot来获取对象成员,不用繁琐的使用dereference运算符(*)和Pointer to Member运算符(->)。Java和C#中就直接以引用为主要类型,尽量让开发人员避免使用指针。

PHP中也引入了引用类型,在对对象赋值传递上,基本可视为是同于Java/C#的引用传递(具体请见Objects and references)。但同时又支持在基础类型上通过引用运算符(&)来获得内容的引用。不过在实际的使用中,PHP的引用类型因为整个PHP设计结构而存在着许多的问题,使得在程序出现非预计的结果。Read More →

2012-05-03
03 May
On May 3, 2012
In Algorithm Analysis(算法分析), Data Structures(数据结构), Knowledge Base(心得笔库), Language Tips(语言初试)

画虎画皮难画骨,编程编码难编译

古语“画虎画皮难画骨”,是说画老虎时要画它的外表很容易,可要将老虎的气势画出来却很难。

对于现在的程序员来说,似乎也是这样子,可以写出整洁的代码,设计出优异的程序,但却不一定需要知道代码在编译之后的是如何运行的。

但是有时候,能了解表面背后的故事,知道一些程序编译过程,其实对写出一个正确的正确的程序会有很大的帮助,这起源自一段很简单的问题实现:两整数交换。
Read More →

Posts pagination

Previous 1 2 3 4 Next
Facebook
Twitter
LinkedIn
RSS
ZhiHu

Recent Posts

  • 三年居家工作感受
  • Pixel Watch智能手表和Pixel 5, 6 Pro 及 7 Pro手机
  • 我拥有过的无线耳机
  • 毕业工作一个月,我差点被开除
  • 我拥有过的移动硬盘
  • ProtoBuf 2.0 method count optimization for android development
  • 面过100场行为面试后

Categories

  • Algorithm Analysis(算法分析)
  • Article Collection(聚宝收藏)
  • Data Structures(数据结构)
  • Design Patterns(设计模式)
  • English Posts(英文写作)
  • Front Interface(界面构想)
  • IT Products(数码产品)
  • Knowledge Base(心得笔库)
  • Language Tips(语言初试)
  • Mathematical Theory(数学理论)
  • Mobile Development(移动开发)
  • Programming Life(程序人生)
  • Reading Notes(阅而后知)
  • Software Engineering(软件工程)
  • Special Tricks(奇技妙招)
  • Tangential Speech(漫话杂谈)

Tags

Aero Android API Bash Binary Search Bitwise Operation Book C/C++ Career Chrome Conference CSS Debug Device DOM Extension Framework Game Gradle Hearthstone HTML Initialization Intellij Interview iOS Java JavaScript jQuery Keyword Language Issues Mac Microsoft Mobile Modifier Objective-C PHP Principle Reference Regular Expression Static String Tools Tutorial UI XML

Blogroll

  • Ahmed's Blog
  • Gert Lombard's Blog
  • Gordon Luk
  • Jack & Allison
  • 开发部落

Archives

Designed using Chromatic. Powered by WordPress.