2017-07-14
一、代码风格的重要性
- 今天本来是打算看完一个接口任务的文档的,但是在一个SQL语句和几个实体类栽了很久,主要问题就是有些以前的代码不够规范。和大飞哥交流的过程也了解到项目刚成立的时候规范文档等都没有,所以大家都是按照自己心中认为的规范写,未免有些代码风格乱。
- 这其实也是一个矛盾点,因为项目一开始确实也不可能定好详细的代码规范,如果什么开始都一开始就完美,那就不存在迭代开发了。ofo其实是个典型的例子,最开始那批自行车的锁特别差,但是如果他们这种小创业者一开始就事事想全了,市场早就被占有了。
- 这时候就很有必要有良好的代码风格了,何为良好,我想很多书上所谓的代码风格不尽相同,但都有一个特点,就是不会我们不会觉得不好,这就是良好。很感激大学第一和第二门语言课的任课老师李海涛和徐文华老师,都特别强调代码风格,让我一开始就养成习惯。
二、学习委托时,理解了的知识
- 方法签名由方法的名称和它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。需注意的是,方法签名既不包含返回类型,也不包含 params 修饰符(它可用于最右边的参数)。在方法重载的上下文中,方法的签名不包括返回值。但在委托的上下文中,签名包括返回值。换句话说,方法和委托必须具有相同的返回类型。
- delegate 是表示对具有特定参数列表和返回类型的方法的引用的类型。在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联。你可以通过委托实例调用方法。
- 例子:还有两个我觉得还行的链接,第一个链接通俗易懂,然而太浅了,读完还是不知道为啥要委托;第二个链接还好,有点长,一步一步讲,逻辑感还是挺强的,但真的需要耐心。当然了,还有MSDN官方文档,但是太正式了,不太适合新手看。
//该例子来自第二个链接
using System;
using System.Collections.Generic;
using System.Text;
namespace Delegate
{
//定义委托,它定义了可以代表的方法的类型
public delegate void GreetingDelegate(string name);
class Program
{
private static void EnglishGreeting(string name)
{
Console.WriteLine("Morning, " + name);
}
private static void ChineseGreeting(string name)
{
Console.WriteLine("早上好, " + name);
}
//注意此方法,它接受一个GreetingDeleg ate类型的方法作为参数
private static void GreetPeople(string name, GreetingDelegate MakeGreeting)
{
MakeGreeting(name);
}
static void Main(string[] args)
{
GreetPeople("Jimmy Zhang", EnglishGreeting);
GreetPeople("张子阳", ChineseGreeting);
Console.ReadKey();
}
}
// 一句话总结:委托是一个类,它定义了方法的类型,
// 使得可以将方法当作另一个方法的参数来进行传递,
// 这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,
// 同时使得程序具有更好的可扩展性。
}
三、前端
- css用id进行标识优先级最高。
- 表格中单元格的边框是可以自定义的。以边框为例:当设置
<table>
的border属性设置为0(即无边框),默认下其嵌套标签<tr>
、<td>
等都是无边框的,但是如果有css定义边框了,那么它将看起来不继承父类的无边框属性。因此发现在设置的属性没用,那就看看table下的其他相关标签是否有别的定义。 - text-align属性其实就可以让一个块元素居中,不过具体还是要看效果。
- padding(填充)和margin(边距)在嵌套元素中要注意了,配合浏览器的开发工具对每个元素的区域进行标识(盒子模式)。margin说不定可以让一个元素顶出去。例如今天我的
<body>
理论上是祖先元素,第一个是<div>
块元素,却和<body>
连体了,<div>
设置了margin,把body顶走了。 - 让文字不换行:word-break: keep-all;
- 最好还是习惯用%和em做单位而不是px,即使是文字大小也一样。
- js中
getElementsByClassName()
注意返回的是List而不是一个object。在控制台(浏览器的开发者工具Console)看到TypeError,那么应该考虑这种问题。 - 给出一个js菜单伸缩功能的例子,源代码就展示js和html部分吧。程序员不应该重复造轮子的,今天体验到了~
<!-- 这是HTML代码 -->
<ul id="menu">
<li>
<h2>菜单一</h2>
<ul class="list" style="display: none;">
<li><span></span>一的内容</li>
<li><span></span>一的内容</li>
<li><span></span>一的内容</li>
<li><span></span>一的内容</li>
</ul>
</li>
<li>
<h2>菜单二</h2>
<ul class="list">
<li><span></span>二的内容</li>
<li><span></span>二的内容</li>
<li><span></span>二的内容</li>
<li><span></span>二的内容</li>
</ul>
</li>
<li>
<h2>菜单三</h2>
<ul class="list">
<li><span></span>三的内容</li>
<li><span></span>三的内容</li>
<li><span></span>三的内容</li>
<li><span></span>三的内容</li>
</ul>
</li>
<li>
<h2>菜单四</h2>
<ul class="list">
<li><span></span>四的内容</li>
<li><span></span>四的内容</li>
<li><span></span>四的内容</li>
<li><span></span>四的内容</li>
</ul>
</li>
</ul>
// 这是JavaScript代码
window.onload=function(){
var oMenu = document.getElementById('menu');
var aH2 = oMenu[0].getElementsByTagName('h2');// 就是这里,要有[0]
var aUl = oMenu[0].getElementsByTagName('ul');
for(var i=0; i<aH2.length; i++){
aH2[i].index = i;
aH2[i].onclick = function(){
for(var i=0; i<aUl.length; i++){
if(i==this.index){
if(aUl[this.index].style.display == 'block'){
aUl[this.index].style.display = 'none';
aH2[this.index].className="active11";
}else{
aUl[this.index].style.display = 'block';
aH2[this.index].className="active";
}
}else{
aUl[i].style.display = 'none';
aH2[i].className="active11";
}
}
};
}
};
2017-07-14 Friday