2009-03-22 5 views
7

Tôi đang cố gắng học Smalltalk bằng cách thực hiện, vì vậy tôi đang nắm bắt được cú pháp và phong cách bằng cách xây dựng một lớp "Ma trận" đơn giản. Trước hết, tôi sẽ biết ơn nếu được liên kết với một hướng dẫn Smalltak tốt (mặc dù điều này là hoàn toàn không bắt buộc), tốt nhất là không sử dụng GUI (tôi muốn nhập số .st s hơn là cá xung quanh) trình thám hiểm phân cấp để đặt các phương thức vào vị trí của chúng).(Mis) Hiểu Smalltalk và TDD

Sau đó, trên TDD: Đối với dự án này, tôi gọi số gst-sunit -f matrix.st -f matrix-test.st BaseMatrixTests và có ràng buộc là cách tốt hơn. Có phải không?

Và cuối cùng, trên khẳng định: Tôi đang cố gắng để viết một phương pháp và đưa khẳng định bên trong, Eg .:

Matrix>>multiplyBy: anotherMatrix [ 
    [ self isNotEmpty ] assert. 
    "Do Multiplication" 
    [ result dimensions = (self height)@(anotherMatrix width) ] assert. 
] 

Làm thế nào tôi có thể làm điều đó loại khẳng định?

Chỉnh sửa: Câu hỏi được đánh dấu rõ ràng.

+0

Vậy câu hỏi là gì? – Seb

Trả lời

11

Được rồi, một vài phần ở đây.

Trước tiên, tôi đồng ý với markusQ, mặc dù tôi hoàn toàn thông cảm: Tôi muốn có thể viết mã của mình trong EMACS trực tiếp. Bt một trong những điều về Smalltalk là nó thực sự là rất unforgiving của những người không muốn làm những điều Smalltalk Way. Trong trường hợp này, Smalltalk Way là sử dụng các trình duyệt.

Thứ hai, một phần lý do mà đây là Smalltalk Way là Smalltalk, theo nhiều cách, không phải là như các ngôn ngữ khác. Có thực sự, cho tất cả các mục đích thực tế, không có cách nào để thực hiện "Smalltalk" riêng biệt thực thi: tất cả những gì bạn có thể làm là tạo một hình ảnh Smalltalk với một số đoạn mã tương đối nhỏ của mã của bạn được thêm vào. Khi bạn viết mã bằng trình soạn thảo bên ngoài , như với cú pháp bạn hiển thị, bạn có nghĩa là chỉ cần gõ tay một định dạng nhập/xuất có phần dễ gõ hơn XML. Nhưng chỉ một chút thôi.

Đạo đức là, thực hiện theo cách Smalltalk, với trình duyệt.

Có một số hướng dẫn khá tốt cho Smalltalk. Tôi thường sử dụng Squeak, vì vậy những cái tôi đã nhìn thấy đang sử dụng Squeak, như here.

Trên TDD, bạn may mắn vì Smalltalk là nơi đầu tiên nhận xUnit. Đối với Smalltalk, nó được gọi là SUnit, và có một hướng dẫn tốt here.

Bạn đang sử dụng xác nhận ở đó về cơ bản dường như là phương pháp "thiết kế theo hợp đồng". Đã có công việc được thực hiện khi thêm thiết kế theo hợp đồng cho Smalltalk, dưới dạng here. Đối với xác nhận đơn giản, bạn có thể thêm mã như trong this SO question.

9

Tôi ghét phải nói nó (vì bạn ghi rõ bạn không muốn nghe nó), nhưng nhận được vào IDE . Cố gắng để có được đầu của bạn xung quanh smalltalk mà không cần sử dụng IDE cũng giống như đi đến Paris và ăn tại McDonalds. Chắc chắn, bạn đang ở Paris, nhưng bạn không thực sự phơi bày chính mình với những gì nó là tất cả về.

Điều quan trọng về smalltalk là là tất cả các đối tượng. Tất cả các con đường xuống (số nguyên và ký tự là các đối tượng) và tất cả các con đường lên (các lớp, phương pháp, các trình duyệt, bản thân IDE) là tất cả các đối tượng. Nếu bạn khăng khăng chiến đấu với nó, bạn sẽ có nhiều may mắn như một người muốn tìm hiểu cách viết C bằng cách kéo và thả mọi thứ.

+1

+1 cho điều Paris/McDonalds! :-) –

6

Nếu bạn đã tải xuống Cincom Smalltalk phi thương mại, có một số hướng dẫn trực tuyến. Bắt đầu từ đây:

http://www.cincomsmalltalk.com/userblogs/cincom/blogView?content=tutorials

Nếu bạn đã tải Squeak, hãy bắt đầu ở đây:

http://wiki.squeak.org/squeak/792

Và vâng, bạn thực sự cần phải sử dụng các IDE để làm việc hiệu quả với Smalltalk.

Khi thử nghiệm, hãy tải SUnit. Trong Cincom Smalltalk, nó là một thành phần có thể nạp được; Tôi đã đề cập đến việc tải (và sử dụng) nó trong các video hướng dẫn được liên kết ở trên. Tôi không hoàn toàn chắc chắn làm thế nào để tải nó cho Squeak, hoặc cho dù đó là một phần của cơ sở đó, nhưng nó chắc chắn có sẵn cho nó.

1

Vì vậy, khoảng khẳng định, Squeak Smalltalk đã mang Object >> khẳng định: Vì vậy, tôi cho rằng bạn có thể làm:

self assert: self isNotEmpty. 
self assert: result dimensions equal: (self height)@(anotherMatrix width) 

Nếu bạn đang sử dụng GNU Smalltalk, điều này có thể trả lời thế nào để làm khẳng định đó: Smalltalk and Assertions

Niko

0

Smalltalk Primer là một giới thiệu về Yếu Message-Oriented Programming với Smalltalk

1

Về xác nhận, vui lòng xem câu hỏi khác được đăng gần đây.

Về TDD, có, gọi gst-sunit -f matrix.st -f matrix-test.st BaseMatrixTests là cách tốt nhất. Mọi thứ khác chỉ được xây dựng trên đó, ví dụ này có thể được ngươi lựa chọn:

  • làm cho tất cả các lớp con TestCase cho gói của bạn kế thừa từ một lớp con giả mạo để bạn có thể nói AllMatrixTests* trên dòng lệnh gst-sunit của (khi bạn thêm kiểm tra).
  • tệp trong matrix.st từ matrix-test.st, do đó loại bỏ tùy chọn một -f.
  • tạo tệp Makefile và package.xml để tạo tệp .star cho gói của bạn, như được mô tả here. Sau đó, bạn có thể làm chỉ gst-sunit -pMatrix.
1

Nó đã được gợi ý ở trên để thêm #assert:-Object, mà đúng hơn là tôi muốn thêm #assert để BlockClosure (hoặc bất kỳ [] class là trong GNU Smalltalk).

assert 
    this value ifFalse: [AssertionFailure signal: 'Assertion failed'] 

và do đó sử dụng như trong

[ value notNil ] assert. 
[ value > 0 ] assert. 
[ list isEmpty not ] assert. 

Etcetera.

0

Tôi muốn gõ .sts tôi hơn cá xung quanh nhà thám hiểm hệ thống phân cấp để đưa phương pháp tại chỗ của họ).

Bạn nói điều này ngay bây giờ và tôi cảm thấy như vậy cho đến khi tôi đầu tư một chút thời gian vào việc học cách sử dụng những công cụ này.

Và tôi nói điều này là người dùng hiện tại của Vim và người dùng cũ của Emacs. Tôi thực sự đã trở nên khá hiệu quả bằng cách sử dụng trình duyệt lớp và các công cụ khác trong Pharo bây giờ mà tôi đã học được những sợi dây thừng.

Điều đó đang được nói, nếu bạn thực sự muốn đi theo con đường riêng của bạn, GNU Smalltalk là lựa chọn phù hợp với bạn.

Tôi muốn chỉ ra tại thời điểm này mặc dù ít nhất Pharo có một lớp Ma trận mà bạn có thể sử dụng để lấy cảm hứng. Squeak cũng vậy. Có lẽ bạn sẽ học cách trình duyệt lớp hữu ích đang kiểm tra Ma trận. ;)