Jan 9, 2011

9:00 AM - 4 comments

Cậu bé chăn cừu....

Tặng một người bạn.

The Boy Who Cried Wolf

There once was a shepherd boy who was bored as he sat on the hillside watching the village sheep. To amuse himself he took a great breath and sang out, "Wolf! Wolf! The Wolf is chasing the sheep!"

The villagers came running up the hill to help the boy drive the wolf away. But when they arrived at the top of the hill, they found no wolf. The boy laughed at the sight of their angry faces.

"Don't cry 'wolf', shepherd boy," said the villagers, "when there's no wolf!" They went grumbling back down the hill.

Later, the boy sang out again, "Wolf! Wolf! The wolf is chasing the sheep!" To his naughty delight, he watched the villagers run up the hill to help him drive the wolf away.

When the villagers saw no wolf they sternly said, "Save your frightened song for when there is really something wrong! Don't cry 'wolf' when there is NO wolf!"

But the boy just grinned and watched them go grumbling down the hill once more.

Later, he saw a REAL wolf prowling about his flock. Alarmed, he leaped to his feet and sang out as loudly as he could, "Wolf! Wolf!"

But the villagers thought he was trying to fool them again, and so they didn't come.

At sunset, everyone wondered why the shepherd boy hadn't returned to the village with their sheep. They went up the hill to find the boy. They found him weeping.

"There really was a wolf here! The flock has scattered! I cried out, "Wolf!" Why didn't you come?"

An old man tried to comfort the boy as they walked back to the village.

"We'll help you look for the lost sheep in the morning," he said, putting his arm around the youth, "Nobody believes a liar...even when he is telling the truth!"

Jan 7, 2011

4:09 AM - No comments

Lambda Expressions

Nếu anonymous method (tạm dịch: phương thức nặc danh) trong C# 2.0 cho phép bạn bạn khai báo phương thức của bạn theo kiểu inline (có thể tạm hiểu là ngay lập tức hay trực tiếp) thay vì phải khai báo một delegate function như trước đây thì đến lược C# 3.0, lambda expressions ra đời lại cung cấp tiếp một phương pháp khác ngắn gọn và xúc tích hơn, nhưng vẫn đạt được cùng một mục đích.

Trước tiên, xin nhắc lại về anonymous method:

Giả sử bạn muốn tạo một button để updates một ListBox trên form mỗi khi click lên nó. Trong C# 1.0, bạn sẽ phải làm như sau:

public MyForm()
{
listBox = new ListBox(...);
textBox = new TextBox(...);
addButton = new Button(...);
addButton.Click += new EventHandler(AddClick);
}
void AddClick(object sender, EventArgs e)
{
listBox.Items.Add(textBox.Text);
}

Đến C# 2.0, công việc trông có vẻ đơn giản hơn một chút:

public MyForm()
{
listBox = new ListBox(...);
textBox = new TextBox(...);
addButton = new Button(...);
addButton.Click += delegate
{
listBox.Items.Add(textBox.Text);
};

Như bạn thấy, với việc sử dụng anonymous methods trong C# 2.0, bạn không cần phải khai báo tường minh method của mình và gắn nó vào event như trước. Tuy nhiên, hãy xem lambda expressions trong C# 3.0 làm được những gì:

Parameters to Lambda Expressions

Cú pháp của lambda expression thật sự đơn giản. Bắt đầu với một parameter (hoặc parameter list), theo sau đó là toán tử =>, tiếp theo là 1 expression hoặc block of statement.

Parameters của lambda expressions có thể xác định tường minh (explicitly) và không tường minh (implicitly). Với kiểu tường minh, kiểu của param của mỗi expression sẽ được xác định rõ. Trong kiểu không tường minh, kiểu của param sẽ được suy ra từ ngữ cảnh mà lambda expression diễn ra.

(int x) => x + 1 // explicitly typed parameter
(y,z) => return y * z; // implicitly typed parameter

Lambda Expressions Demonstration

Đoạn code dưới đây mô tả 2 cách thức để in ra các chuỗi có length là một số chẵn. Cách đầu tiên được implement trong hàm AnonMethod, là một anonymous methods.
Cách còn lại, được implement trong LambdaExample, sử dụng lambda expression:

// Program.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Query;
using System.Xml.XLinq;
using System.Data.DLinq;
namespace LambdaExample
{
public delegate bool KeyValueFilter(K key, V value);
static class Program
{
static void Main(string[] args)
{
List list = new List();
list.Add("AA");
list.Add("ABC");
list.Add("DEFG");
list.Add("XYZ");
Console.WriteLine("Through Anonymous method");
AnonMethod(list);
Console.WriteLine("Through Lambda expression");
LambdaExample(list);
Dictionary varClothes= new Dictionary();
varClothes.Add("Jeans", 20);
varClothes.Add("Shirts", 15);
varClothes.Add("Pajamas", 9);
varClothes.Add("Shoes", 9);
var ClothesListShortage = varClothes.FilterBy((string name,
int count) => name == "Shoes" && count <> if(ClothesListShortage.Count > 0)
Console.WriteLine("We are short of shoes");
Console.ReadLine();
}
static void AnonMethod(List list)
{

List evenNumbers =
list.FindAll(delegate(string i)
{ return (i.Length % 2) == 0; });
foreach (string evenNumber in evenNumbers)
{
Console.WriteLine(evenNumber);
}
}
static void LambdaExample(List list)
{
var evenNumbers = list.FindAll(i =>
(i.Length % 2) == 0); // example of single parameter
foreach(string i in evenNumbers)
{
Console.WriteLine(i);
}
}
}
public static class Extensions
{
public static Dictionary FilterBy
(this Dictionary items, KeyValueFilter filter)
{
var result = new Dictionary();
foreach(KeyValuePair element in items)
{
if (filter(element.Key, element.Value))
result.Add(element.Key, element.Value);
}
return result;
}
}
}

Jan 6, 2011

10:07 PM - 2 comments

Một câu chuyện hay ....


Truyện này copy lại trên tuoitrehoaian.com, chắc các bạn cũng lấy từ đâu đó. Xem ra trong cuộc sống trần tục này, cái gọi là thiện - ác, đúng - sai, tốt - xấu cũng chỉ là tương đối. Nhân thiện đấy, nhưng quả có khi lại ác. Trước sai đấy, nhưng sau lại hóa đúng. Vậy thì còn lại gì sau tất cả những nhập nhằng trần tục đó ? Cái gì làm lên Con Người ? Phải chăng đó chính là chân, ngã ?


Ăn rau không chú ơi?

Một giọng khàn khàn, run run làm gã giật mình. Trước mắt gã, một bà cụ già yếu, lưng còng cố ngước lên nhìn gã, bên cạnh là mẹt rau chỉ có vài mớ rau muống xấu mà có lẽ có cho cũng không ai thèm lấy.

- Ăn hộ tôi mớ rau...!

Giọng bà cụ vẫn khẩn khoản. Bà cụ nhìn gã ánh mắt gần như van lơn. Gã cụp mắt, rồi liếc xuống nhìn lại bộ đồ công sở đang khoác trên người, vừa mới buổi sáng sớm. Bần thần một lát rồi gã chợt quay đi, đáp nhanh: Dạ cháu không bà ạ! Gã nhấn ga phóng nhanh như kẻ chạy trốn. Gã chợt cảm thấy có lỗi, nhưng rồi cái cảm giác ấy gã quên rất nhanh. "Mình thương người thì ai thương mình" - cái suy nghĩ ích kỷ ấy lại nhen lên trong đầu gã.

- Ăn hộ tôi mớ rau cô ơi! Tiếng bà cụ yếu ớt. - Rau thế này mà bán cho người ăn à? Bà mang về mà cho lợn!

Tiếng chan chát của một cô gái đáp lại lời bà cụ. Gã ngoái lại, một cô gái cũng tầm tuổi gã. Cau mày đợi cô gái đi khuất, gã đi đến nói với bà:

- Rau này bà bán bao nhiêu? - Hai nghìn một mớ - Bà cụ mừng rỡ.

Gã rút tờ mười nghìn đưa cho bà cụ.

- Sao chú mua nhiều thế? - Con mua cho cả bạn con. Bây giờ con phải đi làm, bà cho con gửi đến chiều con về qua con lấy!

Rồi gã cũng nhấn ga lao vút đi như sợ sệt ai nhìn thấy hành động vừa rồi của gã. Nhưng lần này có khác, gã cảm thấy vui vui.

Chiều hôm ấy mưa to, mưa xối xả. Gã đứng trong phòng làm việc ngắm nhìn những hạt mưa lăn qua ô cửa kính và theo đuổi nhưng suy nghĩ mông lung. Gã thích ngắm mưa, gã thích ngắm những tia chớp xé ngang trời, gã thích thả trí tưởng tượng theo những hình thù kỳ quái ấy. Chợt gã nhìn xuống hàng cây đang oằn mình trong gió, gã nghĩ đến những phận người, gã nghĩ đến bà cụ...

-Nghỉ thế đủ rồi đấy!

Giọng người trưởng phòng làm gián đoạn dòng suy tưởng của gã. Gã ngồi xuống, dán mắt vào màn hình máy tính, gã bắt đầu di chuột và quên hẳn bà cụ.

Mấy tuần liền gã không thấy bà cụ, gã cũng không để ý lắm. Gã đang bận với những bản thiết kế chưa hoàn thiện, gã đang cuống cuồng lo công trình của gã chậm tiến độ. Gã quên hẳn bà cụ.

Chiều chủ nhật gã xách xe máy chạy loanh quanh, gã vẫn thường làm như vậy và có lẽ gã cũng thích thế.

Gã ghé qua quán trà đá ven đường, nơi có mấy bà rỗi việc đang buôn chuyện.

Chưa kịp châm điếu thuốc, gã chợt giật mình bởi giọng oang oang của một bà béo: - Bà bán rau chết rồi. - Bà cụ hay đi qua đây hả chị? - chị bán nước khẽ hỏi. - Tội nghiệp bà cụ! một giọng người đàn bà khác. - Cách đây mấy tuần bà cụ giở chứng cứ ngồi dưới mưa bên mấy mớ rau. Có người thấy thương hỏi mua giúp nhưng nhất quyết không bán, rồi nghe đâu bà cụ bị cảm lạnh.

Nghe đến đây mắt gã chợt nhòa đi, điếu thuốc chợt rơi khỏi môi.

Bên tai gã vẫn ù ù giọng người đàn bà béo kia. Gã không ngờ...!