Tag Archives: nhập môn

Chương 2: Biến và kiểu

Trở về Mục lục cuốn sách

2.1  Nói thêm về lệnh in

Bạn có thể tùy ý đặt bao nhiêu câu lệnh vào trong  main cũng được; chẳng hạn, để in nhiều dòng:

class Hello { 
  // Generates some simple output. 
  public static void main(String[] args) { 
    System.out.println("Hello, world."); // in một dòng 
    System.out.println("How are you?"); // in dòng nữa 
  } 
}

Tiếp tục đọc

Advertisements

%(count) bình luận

Filed under Think Java

Chương 1: Lối đi của chương trình máy tính

Trở về Mục lục cuốn sách

Mục đích của cuốn sách này là hướng dẫn bạn suy nghĩ như là một nhà khoa học máy tính. Tôi thích lối suy nghĩ của những nhà khoa học máy tính vì ở đó có sự kết hợp những đặc điểm hay nhất của toán học, kĩ thuật, và khoa học tự nhiên. Cũng như những nhà toán học, những nhà khoa học máy tính dùng những ngôn ngữ có quy cách để diễn đạt ý tưởng (đặc biệt là tính toán). Giống như những kĩ sư, họ cũng làm công việc thiết kế, gắn kết các thành phần tạo nên một hệ thống và đánh giá những ưu khuyết giữa các phương án khác nhau. Giống như những nhà khoa học, họ khảo sát các động thái của hệ thống phức tạp, đề ra các giả thiết, và kiểm định những tính toán. Tiếp tục đọc

2 phản hồi

Filed under Think Java

Think Java: Cách suy nghĩ như nhà khoa học máy tính

thinkjava

Phiên bản 5.1.2

Xem thêm ở Facebook.

Think Java là cuốn sách giới thiệu về lập trình Java cho người mới học. Nó được soạn riêng cho học viên chuẩn bị thi Computer Science Advanced Placement (AP) Exam, nhưng cũng dành cho bất kì ai muốn học Java.

  • Think Java rất ngắn gọn. Sách chỉ dùng một bộ phận nhỏ của ngôn ngữ Java đủ để giúp học viên thực hiện những bài tập lớn mà không bị sa đà vào những tiểu tiết của ngôn ngữ lập trình.
  • Think Java dạy cách phát triển và gỡ lỗi chương trình; những chủ đề này được thảo luận trong suốt cuốn sách và được tóm tắt trong hai phụ lục.
  • Think Java bao gồm cả nghiên cứu cụ thể GridWorld vốn là một phần của đề thi AP. Cuốn sách này cung cấp kiến thức cơ sở cần để làm quen với GridWorld, cùng với những bài tập phụ thêm để thực hành.
  • Think Java được viết theo cuốn sách gốc How to Think Like a Computer Scientist, một cuốn sách trực tuyến quen thuộc với những phiên bản cho lập trình Python, C++ và OCaml, cùng với những bản dịch sang tiếng Tây Ban Nha, tiếng Pháp và những thứ tiếng khác.

Think Java là sách giáo trình tự do được phát hành theo giấy phép  Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.  Bạn đọc có thể tùy ý sao chép và phân phối nội dung trong sách; đồng thời cũng tùy ý sửa đổi để phù hợp với yêu cầu cụ thể, và để phát triển nội dung giảng dạy mới. Tiếp tục đọc

22 phản hồi

Filed under Think Java

Chương 14: Khóa kéo

Trở về Mục lục cuốn sách

Dù cho tính thuần khiết của lập trình hàm trong Haskell đem lại nhiều lợi ích, nó cũng khiến chúng ta phải giải quyết một số bài toán theo cách khác so với khi làm bằng ngôn ngữ không thuần khiết. Vì tính minh bạch về tham chiếu, một giá trị cũng tốt ngang bằng giá trị khác trong Haskell nếu chúng cùng biểu diễn một thứ.

Vì vậy nếu ta có một cây dữ liệu gồm toàn những số năm và ta muốn thay một con số trong đó thành sáu, thì ta phải bằng cách nào đó biết được chính xác số năm nào trên cây được thay đổi. Ta phải biết vị trí của nó trên cây. Trong ngôn ngữ không thuần túy, ta chỉ cần ghi lại vị trí lưu trữ của số năm đó trong bộ nhớ rồi thay đổi nó. Nhưng trong Haskell, số năm nào cũng tốt như nhau, vì vậy ta không thể phân biệt chúng dựa vào vị trí lưu trong bộ nhớ. Và ta cũng không thể thay đổi thứ gì; khi ta nói thay đổi một cây dữ liệu thì thực ra là ta lấy cây đó rồi trả lại một cây mới gần giống với cây ban đầu, chỉ hơi khác đi. Tiếp tục đọc

%(count) bình luận

Filed under Haskell

Chương 13: Bổ sung về Monad

Trở về Mục lục cuốn sách

Ta đã thấy các monad có thể được dùng để nhận giá trị kèm ngữ cảnh và cách áp dụng chúng cho hàm ra sao, đồng thời cách dùng >>= hoặc khối lệnh do cho phép tập trung vào bản thân các giá trị và không cần lo lắng đến ngữ cảnh như thế nào.

Ta đã gặp monad Maybe và thấy được cách nó thêm vào giá trị một ngữ cảnh về khả năng thất bại. Ta đã học monad danh sách và thấy cách nó giúp ta dễ dàng giới thiệu đại lượng không tất định vào trong chương trình. Ta cũng học được cách làm việc trong monad IO, ngay cả trước khi ta biết monad là gì! Tiếp tục đọc

3 phản hồi

Filed under Haskell

Chương 12: Một số vấn đề về Monad

Trở về Mục lục cuốn sách

Khi lần đầu tiên nói về functor, chúng ta đã thấy rằng đó là khái niệm hữu ích cho những giá trị mà ta có thể ánh xạ lên chúng. Sau đó, ta đã phát triển thêm khái niệm này bằng cách giới thiệu các functor áp dụng, vốn cho phép ta xem các giá trị thuộc kiểu dữ liệu nhất định như những giá trị gắn với ngữ cảnh và dùng các hàm thông thường lên các giá trị đó trong khi vẫn giữ được ý nghĩa của các ngữ cảnh đó.

Trong chương này, ta sẽ làm quen với monad, vốn là các functor ứng dụng được nâng cao, cũng giống như bản thân các functor ứng dụng là các functor nâng cao. Tiếp tục đọc

2 phản hồi

Filed under Haskell

Chương 11: Functor, Functor áp dụng và Monoid

Trở về Mục lục cuốn sách

Sự kết hợp của tính thuần túy, hàm cấp cao, những kiểu dữ liệu đại số được tham số hóa, và lớp trong Haskell đã cho phép ta thực hiện phép đa hình trên cấp độ cao hơn nhiều so với ở các ngôn ngữ khác. Ta không phải hình dung kiểu thuộc về một hệ thống phân cấp kiểu đồ sộ. Thay vào đó, ta nghĩ xem những kiểu đóng vai trò là gì rồi kết nối chúng lại bằng những lớp phù hợp. Một kiểu Int có thể đóng vai trò của nhiều thứ khác nhau. Nó có thể đóng vai trò của thứ so sánh ngang bằng, của thứ xếp được theo trật tự, của thứ liệt kê được, v.v.

Tiếp tục đọc

2 phản hồi

Filed under Haskell

Chương 10: Giải bài toán theo phong cách lập trình hàm

Trở về Mục lục cuốn sách

Trong chương này, ta sẽ xét một số bài toán hay và cách tư duy theo kiểu lập trình hàm để giải quyết chúng càng đẹp càng tốt. Có thể chúng tôi sẽ không giới thiệu thêm khái niệm mới nào, mà ta sẽ biểu diễn những kiến thức Haskell mới học và thực tập kĩ năng lập trình. Từng mục sẽ trình bày một bài toán riêng. Trước hết là đề bài, sau đó ta sẽ cố gắng tìm ra cách tốt nhất (hoặc ít dở nhất) để giải quyết nó.

Tiếp tục đọc

2 phản hồi

Filed under Haskell

Chương 9: Đầu vào và đầu ra

Trở về Mục lục cuốn sách

Chúng tôi đã nói rằng Haskell là ngôn ngữ lập trình hàm thuần túy. Nếu như trong ngôn ngữ lập trình mệnh lệnh bạn thường hoàn thành công việc bằng cách giao cho máy tính một loạt các bước để thực thi, thì lập trình hàm lại thiên về định nghĩa vấn đề cần giải quyết. Trong Haskell, một hàm không thể thay đổi trạng thái nào, như thay đổi nội dung của một biến (khi một hàm thay đổi trạng thái, ta nói rằng nó có hiệu ứng phụ). Điều duy nhất mà hàm có thể thực hiện trong Haskell là trả lại cho ta một kết quả nào đó dựa trên các tham số mà ta đưa cho nó. Nếu như hàm được gọi hai lần với cùng các tham số, thì nó sẽ phải trả lại cùng kết quả. Mặc dù điều này dường như bị hạn chế khi bạn đã từng lập trình theo thức mệnh lệnh, song ta đã thấy rằng thực ra đó lại là điều hay. Trong ngôn ngữ mệnh lệnh, không có đảm bảo gì với bạn rằng một hàm đơn giản mà dùng để tính những có số sẽ không gây hại làm cháy nhà bạn, bắt đi con cún của bạn và dùng củ khoai tây cào xước xe hơi của bạn trong quá trình tính toán. Chẳng hạn, khi chúng ta đang tạo lập một cây tìm kiếm nhị phân, ta không gài phần tử vào cây bằng cách sửa đổi cây ngay tại chỗ. Hàm ta viết nhằm gài phần tử vào cây tìm kiếm nhị phân thực ra sẽ trả lại một cây mới, vì nó không thể thay đổi cây ban đầu được. Tiếp tục đọc

%(count) bình luận

Filed under Haskell

Chương 8: Tự lập nên các kiểu và lớp riêng

Trở về Mục lục cuốn sách

Ở những chương trước, ta đã tìm hiểu một số kiểu và lớp chứa kiểu sẵn có trong Haskell. Trong chương này, ta sẽ học cách tự lập nên các kiểu và lớp, đồng thời khiến chúng hoạt động! Tiếp tục đọc

3 phản hồi

Filed under Haskell