2008年11月24日星期一

C# 認識Enumeration - enum Keyword

Enumeration(列舉型別)不是常用的類型,不過有時候做對比的程序,Enum就起了作用。自己寫程式都是比較少用Enum,所以溫故知新,在此講解一下Enum的用法。

找一個例子,假如你替一間遊戲店寫一個系統,需要做以下功能:
- 由產品名稱找到售價
- 由售價找到產品名稱
- 由售價去判斷產品是否存在
那Enum列舉型別都大派上場了。

首先我們簡單地了解一下如何 Construct Enum :
開一個新的Windows Form :
namespace Enum_Example_1
{
enum GameConsole
{
XBox360,
PS3,
Wii,
NDSL,
PSP
};

public partial class Form1 : Form
{
public Form1()
{ InitializeComponent();}

private void Form1_Load(object sender, EventArgs e)
{
GameConsole IHaveThisConsole = GameConsole.XBox360;
Console.WriteLine((IHaveThisConsole == GameConsole.PS3).ToString()); //False
Console.WriteLine((IHaveThisConsole == GameConsole.XBox360).ToString()); //True
}
}
}

在這裡我們可以看到Enum本身就有對比性,即使你不預設任何Value,但是enum類型本身就是可以分別是否相同。

2008年11月7日星期五

PHP不是首選的Language

記得10年前左右我學VB6時,很多人說VB6學壞手勢,話學Delphi好,當然呢o的已經係歷史話題。但前排睇左幾篇Blog文,話PHP是次選語言,不會是初學者的首選,我都很同意,亦令我想起"學壞手勢"呢四隻字。

PHP的問題,其實在於太過寬鬆,好似近排我工作上是寫PHP就有很多令我出奇的情況。
疑問1:
<?php
$_SESSION['info_1'] = "1"; // assign value
$_SESSION['info_2'] == "2"; // compare value
?>

第一個Session很正常,只是assign "1"給info_1 ,但第二個Session沒出現Error卻很奇怪,不論是true或false,起沒有主體或不是condition情況下,卻Syntax成立,如果不小心打多一個"="符號,整個程式就已經錯誤。

疑問2:
<?php
$select = "SELECT login_id FROM user";
$rs = mysql_query($select);
$row = mysql_fetch_assoc($rs); //data reader pointer 在第一行
echo $row["login_id"]; //output : sam
// 100行code後
$select_pwd = "SELECT password FROM user";
$rs_pwd = mysql_query($select_pwd);
$row = mysql_fetch_assoc($rs_pwd); //示範:忘記之前已經使用$row
echo $row["password "]; //output password string: ASj89qa
?>

這段Code看似沒有問題,只是重用變數,但我卻奇怪為什麼PHP不搞好少少,雖然$row只是in-memory的data集合,但不論JSP或ASPX,這類DataReader/Datatable已經是一個物件,不用New而且在沒有關閉的情況下可以重用有點怪怪.(例如.NET datareader都要進行DataReader.Close() ; DataTable只要結構和第一次不同,都要重構一次。

疑問3:
Include/Require無限Loop...這個是人為問題,很多PHP程式都是這樣,鐘意Include library,function,variable,但Include之中再Include,多層Level的引用Class方式,我卻覺得只會一個亂字,雖然很多IDE可以Open Declaration,但係呢種手法我真係不感恭維。而且不同Folder,層層疊疊下真係頭都暈。
C.php有Function C
B.php include C.php 用Function C
但又會有A.php include B.php去Call function C.....

疑問4:
$varInt = 1;
$varString = "2";
echo $varInt.$varString; //Output : 12 (OMFG~)

全部都係是Dynamic Type,PHP不用設Data Type,無論你是什麼類型,都可以用於一個Variable上,但這正是"學壞手勢"的根源。為什麼一個看似Int的類型可以和String結合,這是不可能發生在C#上的。

其實還有很多奇怪地方都是出自PHP語法太過flexible,當然有好有唔好,好既就係可以好快咁寫到一個網頁程式,唔好既就係潛移默化了一些錯誤的觀念。

有幾個好網,很值得一睇,更加深入講解點解PHP不是一隻首選Langauge。
PHP ‘Good’ Practices
http://rubayeet.wordpress.com/2008/08/27/php-good-practices/
A simple ‘Gotcha’ in PHP
http://rubayeet.wordpress.com/2008/04/29/a-simple-php-gotcha/
PHP is a good second programming language(but never a first)
http://rubayeet.wordpress.com/2008/05/10/php-is-a-good-second-programming-language/
Is PHP a good first language?
http://codeutopia.net/blog/2008/05/01/is-php-a-good-first-language/

2008年11月3日星期一

New Features in C# 4.0

PDC 2008中,其中一段演講是介紹C# 4.0, 新版本的C#主要新增加4樣東西,其實改動不多是正常,別忘記現在的C#版本3.0,但亦是過渡版本的3.5,所以3.5->4.0改動不多亦是正常.
新特點有:
  • Dynamic lookup
  • Named and optional parameters
  • COM specific interop features
  • Variance

我比較關注Dynamic lookup和Named and optional parameters.
(以下例子是引用Microsoft的官方文件)

Microsoft .NET New Logo

沿用了8年的Logo
200px-microsoft__net_logo.png
新Logo...但我覺得新不如舊...
microsoft-net-new-01.pngmicrosoft-net-new-02.png

Google Sites-免費建立個人網站

我記得之前Google都出過一個叫Page Creator既功能,不過佢提供的樣本就似乎真的很差.剛看到Google出左一個叫Sites的東西(中文叫Google 協作平台),都係類似Page Creator的功能,不過就豐富得多,但免費版本有100MB空間.

Youtune使用影片:


或者可以睇埋ajneok 亂芭樂利用 Google Site 快速建立個人網站

Google Sites
http://www.google.com/sites/help/intl/zh-TW/overview.html