ROB: Được rồi. Chào mừng bạn đến phần đầu tiên. Tôi Rob. Joseph: Tôi Joseph. ROB: Vì vậy, chúng tôi sẽ nhảy ngay in Điều đầu tiên để nói về là gia dụng. Vì vậy, hy vọng hầu hết các bạn có tải về nó đã. Nhưng bạn có thể xem hướng dẫn tại cs50.net/appliance. Trời ơi, bây giờ tôi tự ý thức. Tôi vẫn còn nghe nó. JOSEPH: Wow, có vẻ như nó mất phương hướng. ROB: Vì vậy, một số người đã gặp vấn đề với nó, do đó, không chờ đợi cho đến khi phút cuối cùng của vấn đề thiết lập để cố gắng và giải quyết gia dụng và phát hiện ra rằng nó không làm việc. JOSEPH: Và nếu một cái gì đó không làm việc và bạn cần giúp đỡ, bạn có thể vào cs50.net/discussion nơi chúng tôi có một diễn đàn, nơi bạn có thể gửi câu hỏi của bạn. Và chúng tôi sẽ cho họ cuối cùng. ROB: Được rồi. Vì vậy, đây là những gì gia dụng như thế nào. Một lần nữa, nó chỉ là một hoàn toàn riêng biệt hệ điều hành chạy trong bất cứ điều gì hệ điều hành bạn đang chạy trên máy tính xách tay của bạn. Và những điều chính bạn sẽ được sử dụng là gedit. Vì vậy, hy vọng điều này có đã trở thành một trang web quen thuộc. Thiết bị đầu cuối. Và bạn cũng có thể chạy Chrome trong gia dụng. Đã có một vài người đã báo cáo internet không làm việc trong gia dụng. Và một số trong số họ đã chỉ là giả định rằng có được không phải là Internet trong gia dụng. Nhưng có, có là nghĩa vụ là internet. Tôi sẽ nói ngay bây giờ, nhưng nó không thực sự có nghĩa là bất cứ điều gì. Nếu Internet không làm việc, đây là những gì bạn có xu hướng cần chạy để sửa chữa nó. Nếu bạn đang gặp vấn đề internet, không nhớ nó, chỉ cần đăng nó trên Thảo luận, và chúng tôi sẽ nói, chạy đó. Nhưng internet cần phải làm việc. Vì vậy, chỉ có điều khác - yeah, không có gì khác là thực sự có liên quan. Nhưng tôi chỉ muốn chỉ ra rằng - nhìn thấy trong góc dưới bên phải này. Vì vậy, mỗi của các thiết bị của bạn nên có một địa chỉ IP. Và sau đó trong học kỳ, IP này địa chỉ sẽ trở nên thích hợp hơn khi bạn đang làm việc trên web p thiết lập, bởi vì bạn sẽ có thể truy cập vào trang web bạn đang làm việc trên từ của bạn Chrome địa phương bằng cách sử dụng địa chỉ IP này. Nhưng những gì tôi muốn sử dụng địa chỉ IP cho - và bạn không phải làm điều này, tôi chỉ muốn chỉ nó ra - là ở đây. Vì vậy, đây là một cửa sổ thiết bị đầu cuối trên Mac của tôi, đây không phải là trong Thiết bị ở tất cả. Và bạn có thể tìm kiếm những gì lệnh này không. Nhưng tôi sẽ trực tiếp SSH để gia dụng của tôi. Tôi không biết những gì IP là. JOSEPH: 168 - 168.224.1.0. ROB: Vì vậy, một khi tôi done với điều này, đăng nhập Bây giờ, về cơ bản, đây là giống với một cửa sổ thiết bị đầu cuối trong gia dụng của tôi. Vì vậy, tôi khá nhiều không bao giờ thực sự làm việc từ trong gia dụng chính nó. Tôi chỉ luôn luôn có nó chạy trong nền giảm thiểu và SSHed vào nó. Vấn đề với điều này là bạn sẽ không để có thể sử dụng dễ dàng gedit trực tiếp từ này. Nhưng nếu bạn muốn có một mát thực hacker, sau đó bạn sẽ nhận được sử dụng cho một dòng lệnh soạn thảo văn bản nào. Vì vậy, Vim và Emacs và Nano, tất cả các là lựa chọn thay thế khác nhau. Nano có xu hướng được dễ dàng nhất. Và tôi nghĩ rằng nó không có nổi bật cú pháp. Ồ, không, nó hoàn toàn không. Vì vậy, bạn có thể sử dụng Nano, bởi vì rằng một trong khá dễ dàng. Bạn thấy tất cả các lệnh ở phía dưới. Biểu tượng cà rốt nhỏ này. Nếu bạn không nhìn thấy nó trước, bạn sẽ có thể nhìn thấy nó bây giờ rất nhiều. Nó thường có nghĩa là cà rốt kiểm soát, như dưới cùng bên trái của bàn phím của bạn ký tự điều khiển. Vì vậy, ở đây nó nói với tôi xuống đây - oh, nó không cắt đứt nếu tôi phóng to Vì vậy, kiểm soát, X là như thế nào Tôi sẽ để thoát. , Và nói rằng tôi có thể nhấn Y để Có, tiết kiệm, N cho số Vì vậy, đó là Nano. Vim và Emacs có xu hướng hơi hơn phức tạp và áp đảo. Nhưng bạn có thể nhận được sử dụng để nó, và sau đó bạn sẽ thích nó. Vì vậy, đó là điều đó. JOSEPH: Không cần phải làm điều đó. ROB: Vâng. Bạn được tự do sử dụng gedit cho còn lại của học kỳ. Vì vậy, bất kỳ câu hỏi liên quan đến thiết bị? Hoặc bạn có bất cứ suy nghĩ về những gì người khác cần phải được nói về về thiết bị? Vâng. SPEAKER 1: Khi bạn SSHed vào của bạn điều, là Crimson mật khẩu? ROB: Vâng. Mật khẩu cho khá nhiều tất cả mọi thứ trong gia dụng sẽ là Crimson. SPEAKER 2: Cài đặt như một IDE thực trên thiết bị, nó sẽ làm việc? ROB: Tôi tưởng tượng Eclipse không có một Phiên bản Fedora, trong trường hợp này, có, bạn có thể làm điều đó. Đây có thể là không thực sự giá trị nó. SPEAKER 2: OK. Vì vậy, nó có thể dễ dàng hơn nếu tôi muốn sử dụng Eclipse, chỉ cần sử dụng bản địa và sau đó tải lên - ROB: Oh, đó cũng là lẽ dễ dàng hơn. Nhưng bạn có thể lấy nó làm việc trong gia dụng. JOSEPH: Và cho máy ảnh, câu hỏi là, bạn có thể cài đặt một IDE bên trong của gia dụng? ROB: Eclipse là một ví dụ về một IDE. Bất kỳ câu hỏi gia dụng khác? Được rồi. Vì vậy, bây giờ chúng ta sẽ chuyển sang dòng lệnh điều liên quan đến giao diện, vì vậy CLI. Và một lần nữa, tôi chỉ cần đi làm việc ở ở đây, bởi vì đây là giống làm việc trong một cửa sổ thiết bị đầu cuối trong gia dụng. Làm thế nào của font chữ mà tìm? Là đủ lớn? Được rồi. Vì vậy, có rất nhiều các lệnh bạn sẽ nhận được khá được sử dụng để trong suốt học kỳ. Hai lớn để điều hướng là ls, danh sách các tập tin trong thư mục này, và cd, để thay đổi thư mục. Vì vậy, tôi có thể thay đổi để máy tính để bàn và sau đó một mô hình rất phổ biến là cd vào một thư mục và ngay lập tức ls những gì trong thư mục. Mọi người cũng đôi khi không nhận ra mà hoàn Tab là một điều. Cd như vậy giống như, vh, và sau đó tôi nhấn Tab. Tôi gần như không bao giờ gõ ra toàn bộ điều. Và sau đó nếu tôi tiếp tục nhấn Tab một lần nữa, nó sẽ tự động bắt đầu niêm yết đối với tôi. Vì vậy, tôi có thể cd vhosts, máy chủ địa phương. Và đó là chỉ cần đi để - trong trường hợp bạn không có nghe nói thuật ngữ trước khi, thư mục chỉ là một từ khác cho thư mục. Vì vậy, bây giờ nếu bạn thấy - chúng ta hãy mang lại cho rằng từ đầu. Vì vậy, bây giờ nếu bạn nhìn thấy trong dấu ngoặc đơn, bạn thấy các dấu ngã ít, dấu gạch chéo, vhost, cắt giảm, chủ của địa phương. Vì vậy, các dấu ngã, nó liên quan vào thư mục nhà của tôi. Đó là một thư mục bạn trong khi bạn SSH in Đó là thư mục bạn đang ở trong khi bạn mở cửa sổ terminal. Đó là nơi bạn bắt đầu. Và vì vậy tôi bên trong thư mục nhà của tôi, và tôi bên trong của vhost thư mục bên trong thư mục nhà của tôi. Và sau đó tôi bên trong của địa phương tổ chức thư mục bên trong đó. Vì vậy, một số điều hữu ích khác với cd - hoặc tốt, nói chung, vì vậy luôn luôn dot đề cập đến thư mục hiện hành. Cd, dấu chấm là một lệnh khá vô giá trị. Nhưng đó là chuyển đổi sang thư mục hiện hành. Một trong những hữu ích hơn về cd là dấu chấm, dấu chấm, đó là chỉ cần đi lên một thư mục. Và lưu ý rằng những - Tôi muốn nói rằng bí danh, nhưng các biểu tượng, dấu chấm, dấu chấm và, dấu chấm, những người làm việc cho khá nhiều bất kỳ lệnh bạn sẽ được nghĩ đến việc chạy. Cd như vậy giống như có lẽ là nơi bạn sẽ có sử dụng nhiều nhất, nhưng đây không phải là những điều mà chỉ cd hiểu. Đó là khá nhiều một cái gì đó toàn bộ của bạn dòng lệnh hiểu. Rất nhiều chương trình hiểu dấu chấm và dấu chấm, dấu chấm. Vì vậy, những người khác hữu ích - cd, dấu gạch ngang. Vì vậy, có nghĩa là sẽ mang lại cho tôi đến thư mục cuối cùng mà tôi đã được in Vì vậy, đôi khi tôi sẽ làm một cái gì đó như, oh, tôi đang làm việc ở đây. Và tôi thấy một số lỗi với một cái gì đó, và Tôi sẽ đi điều tra nó bằng cách vào một số thư mục ngẫu nhiên ở đâu đó. Và tôi không biết nếu nó sẽ cho tôi trong đó. Nó sẽ. Vì vậy, sau đó tôi làm bất cứ điều gì tôi muốn trong thư mục này. Blah, blah, blah, blah, blah. Và tôi nói, được rồi, tôi muốn quay trở lại nơi tôi. cd, dấu gạch ngang, và nó mang lại cho tôi quay lại ngay. Vì vậy, tôi sẽ ném rất nhiều những lúc bạn ngày hôm nay. Tôi không mong đợi bạn để ghi nhớ tất cả chúng. Nó loại chỉ biết rằng chúng tồn tại. Và sau đó sau khi bạn giống như, hmm, tôi muốn quay trở lại thư mục đó tôi chỉ ở, oh, chờ đợi, một cái gì đó như thế tồn tại. Bạn không phải chỉ cần gõ toàn bộ thư mục một lần nữa. JOSEPH: Và cuối cùng bạn sẽ chỉ sử dụng chúng hơn và hơn nữa, và nó sẽ trở thành bộ nhớ cơ bắp. ROB: Vâng. Vì vậy, làm thế nào tôi đã nói, rằng dấu ngã là thư mục nhà của bạn. Vì vậy, tôi có thể cd, dấu ngã. Nhưng tôi thậm chí không có làm điều đó nếu tôi chỉ - Tôi sẽ quay trở lại thư mục ấy, nó không phải là một ví dụ vô nghĩa. Nhưng nếu tôi chỉ làm cd, đó cũng là giống như, đi đến thư mục nhà của tôi. Tôi làm chỉ huy, K. JOSEPH: Bạn cũng có thể gõ rõ ràng, từ, và nó sẽ xóa nó. ROB: Và tôi cũng nghĩ rằng kiểm soát, L cũng hiện nó. Vì vậy, rất nhiều cách khác nhau. Tôi nghĩ rằng có một số khác biệt nơi rõ ràng và kiểm soát, L sẽ chỉ thực sự đẩy nó vào đầu trang và Tôi vẫn có thể di chuyển trở lại. Lệnh, K theo nghĩa đen phá hủy tất cả mọi thứ, và bạn không thể di chuyển trở lại. Ít nhất, đó là cách thức hoạt động trong iTerm2. Tôi không biết làm thế nào những thứ khác - oh. Với SSHing, vì vậy nếu bạn đang trên Windows, bạn sẽ phải tải về PuTTY để SSH từ Windows không có như một công cụ được xây dựng trong SSH. Từ máy Mac, bạn chỉ có thể SSH trực tiếp từ một cửa sổ thiết bị đầu cuối. OK. Câu hỏi? Với ls, do đó một cái gì đó để có được sử dụng để với hầu hết các lệnh là - tốt, tôi sẽ chỉ làm một. Ls, dấu gạch ngang, l. Vì vậy, dấu gạch ngang, l là những gì chúng ta sẽ để gọi một lá cờ để ls. Và rất nhiều các lệnh này có cờ mà bạn có thể vượt qua đối với họ. Vì vậy, trong trường hợp này, dấu gạch ngang, l là một lá cờ mà nói với nó để cho tôi đầy đủ danh sách của tất cả các thông tin những tập tin này. Vì vậy, chúng ta thấy ở đây là máy tính để bàn là sửa đổi vào ngày 30 at 12:54. Tải đã được sửa đổi ngày tháng 6. Đây là kích thước hiện tại và byte của các thư mục này. Bạn không cần phải hiểu tất cả điều này. Công cụ này trên bên trái, các của drwx, mà sẽ trở nên có liên quan sau khi bạn phải đối phó với - mà đã làm với những người có quyền truy cập nhìn vào những tập tin này. Và do đó, nếu bạn không phải là người sử dụng chỉ trên máy tính này, bạn sẽ có thể nói, OK, tôi sẽ là người duy nhất cho phép nhìn vào tập tin này hoặc tôi sẽ cho phép tất cả mọi người nhìn vào tập tin này. Để người khác trên máy tính của tôi có thể nhìn vào tập tin này. Tôi thậm chí không biết điều này - điều này có làm gì? Joseph: Tôi không hoàn toàn chắc chắn, thực sự. ROB: Không có ý tưởng. JOSEPH: Nhưng nếu bạn không biết, có một lệnh hữu ích mà bạn có thể sử dụng để cho bạn biết những gì đầu ra có nghĩa. Và nếu bạn gõ vào con người trước khi lệnh - nên M-A-N. ROB: Man. Vì vậy, người đàn ông là một trong những khác đó là rất hữu ích. Và người đàn ông, ls. Vì vậy, các trang người đàn ông, họ có cả hai lệnh mà bạn sẽ được sử dụng tại dòng lệnh, và họ cũng có chức năng đó có liên quan với C. Vì vậy, bạn có thể con người - và tôi bỏ qua 3. Nhưng người đàn ông 3 printf sẽ mang lại lên phiên bản C của printf. Nhưng nếu tôi chỉ làm người đàn ông printf, đây là sẽ đưa lên các lệnh printf điều đó xảy ra tại dòng lệnh. Vì vậy, người đàn ông, ls. Các trang người đàn ông có thể được khá áp đảo. Ở đây, tuy nhiên, bạn sẽ thấy bảng liệt kê này của tất cả các lá cờ ls hiểu được. Vì vậy, nếu chúng ta đi để dấu gạch ngang, l, và - Tôi chỉ cần đi để ném vào bạn này. Nhưng để tìm kiếm, bạn muốn để lần đầu tiên xuất các câu hỏi nhãn hiệu hoặc nút dấu gạch chéo. Vì vậy, cắt giảm. Và sau đó tôi có thể tìm kiếm cho bất cứ điều gì tôi muốn. Vì vậy, tôi sẽ cắt giảm cho dấu gạch ngang, l. Và có nó được. Vì vậy, sử dụng một định dạng danh sách dài. Điều đó không giúp tôi tìm ra những gì mà cột cụ thể có nghĩa là, nhưng tôi giả định một nơi nào đó trong đây nó sẽ giải thích đó. Vì vậy, sử dụng các trang người đàn ông cho bất kỳ lệnh bạn không ngay lập tức hiểu. Tôi chắc rằng bạn có thể thậm chí người đàn ông, người đàn ông. Một giao diện để trực tuyến hướng dẫn sử dụng tài liệu tham khảo. Oh, một tác phẩm mới nhất đó là có thể hơi là ls có liên quan, dấu gạch ngang, một. Vì vậy, nhận thấy nếu tôi chỉ làm ls, Tôi có được những năm tập tin. Nếu tôi làm ls, dấu gạch ngang, một, tôi có rất nhiều file. Vì vậy, điểm chung giữa tất cả các tập tin mới là dấu chấm trước. Vì vậy, hội nghị là một tập tin bắt đầu với một dấu chấm được ẩn. Vì vậy, bạn không muốn để xem tập tin đó, bạn không muốn có nó gây rối với danh sách thư mục của bạn. Nó chỉ khi bạn yêu cầu một cách rõ ràng, tất cả các bên phải, ls, dấu gạch ngang, một cho tôi. A là viết tắt của tất cả các file, bao gồm cả những người ẩn. Vì vậy, một số lệnh khác. Oh, câu hỏi ở thời điểm đó? Vâng. SPEAKER 3: Khi bạn làm ls, một dấu chấm, dấu chấm là những gì? ROB: Oh. Vì vậy, đây là những gì tôi đã nói về. Đó là điều tương tự mà Tôi có thể thích cd, dấu chấm, dấu chấm. Vì vậy, về mặt kỹ thuật, dấu chấm và dấu chấm, dấu chấm là các tập tin tồn tại trong mỗi đơn thư mục mà tập tin đề cập dot vào thư mục hiện hành. Vì vậy, nếu tôi cd, dấu chấm, tôi chỉ cần đi ở lại trong thư mục. Và dấu chấm, dấu chấm luôn luôn đề cập đến trước thư mục cấp một lên. Vì vậy, nếu tôi đi vào các bản ghi và ls, dấu gạch ngang, al, Tôi sẽ gặp dấu chấm, dấu chấm. cd để chấm, dấu chấm mang lại cho tôi về thư mục trước. Yeah. OK. Vì vậy, một khá quan trọng lệnh rm. Vì vậy, đó là những gì chúng ta sẽ sử dụng để loại bỏ. Và cho tôi thực sự làm khác lệnh đầu tiên. Vì vậy, mkdir. Mkdir là cách bạn có thể tạo thư mục. Và tôi sẽ tạo ra một thư mục tạm thời và đi vào đó thư mục tạm thời. Và như mong đợi, đó là sản phẩm nào. Nhưng nếu tôi ls, gạch ngang, một, tôi vẫn còn có dấu chấm và dấu chấm, dấu chấm, dấu chấm, vì đề cập đến thư mục hiện hành. Và dấu chấm, dấu chấm đề cập đến thư mục trước. Và những người sẽ luôn luôn tồn tại không có vấn đề thư mục mà bạn đang in Và điều này là hoàn toàn không cần thiết lệnh, nhưng cảm ứng. Tôi chỉ sử dụng nó, bởi vì nó một cách dễ dàng để tạo ra các tập tin. Vì vậy, chạm vào một, chạm vào b, c chạm chỉ là sẽ tạo ra ba tập tin được gọi là, b, c đó là hoàn toàn trống rỗng. Vì vậy, điểm của tôi tạo ra những người trong nơi đầu tiên chỉ là như vậy đó là rm làm thế nào chúng ta có thể loại bỏ chúng. Vì vậy, rm, một. Nó sẽ hỏi tôi, loại bỏ thường xuyên trống rỗng tập tin một? Và sau đó tôi sẽ nói Có. Vì vậy, nếu tôi biết chắc chắn rằng tôi muốn xóa tập tin đó mà không cần phải có nhắc nhở, loại bỏ tập tin rỗng thường xuyên?, sau đó rm, dấu gạch ngang, e là có được các cờ mà nói, buộc loại bỏ mà không cần thậm chí khiến tôi, ồ, là bạn chắc chắn rằng bạn muốn xóa các tập tin? Vâng, tôi là chắc chắn. Vì vậy, rm, dấu gạch ngang, fb sẽ chỉ làm điều đó mà không cần hỏi. Vì vậy, chúng ta hãy làm một số thư mục hơn. mkdir, tmp2, cd, tmp2, chạm vào một, cảm ứng b. OK. Vì vậy, bây giờ tôi muốn loại bỏ tmp2 như một thư mục. Tmp2 Vì vậy, rm. Bạn không thể loại bỏ tmp2, nó là một thư mục. Vì vậy, vấn đề ở đây là rm không ngay lập tức làm việc trên các thư mục. Nó chỉ có nghĩa là cho các tập tin như các tập tin thư mục không. Và vì vậy những gì chúng ta có thể làm đây là rm, dấu gạch ngang, r. Đó là viết tắt của đệ quy, mà có thể không có nghĩa là bất cứ điều gì để bạn được nêu ra. Nhưng khi bạn nhận được để đệ quy, nó sẽ có ý nghĩa hơn. Vì vậy, rm, dấu gạch ngang, r, tmp2 sẽ đệ quy đi vào thư mục đó. Vì vậy, rơi vào thư mục tmp2? Vâng, chúng ta hãy đi vào đó. Chúng ta muốn loại bỏ tmp2 / a? Vâng. Chúng ta muốn loại bỏ tmp2 / b? Vâng. Bây giờ chúng tôi muốn loại bỏ các tmp2 thư mục? Vâng. Và vì vậy bây giờ thư mục và tất cả mọi thứ bên trong của nó đã được gỡ bỏ. Về mặt kỹ thuật có một lệnh rmdir mà bạn có thể sử dụng để loại bỏ thư mục, nhưng nó chỉ hoạt động trên các thư mục trống nào. Và để thấy rằng, chúng ta hãy chỉ làm mkdir, tmp2 một lần nữa. Tmp2, chạm vào một. OK. Vì vậy, nếu tôi cố gắng để loại bỏ dirtmp2, nó sẽ nói, thư mục không có sản phẩm nào. Vì vậy, tôi khá nhiều không bao giờ sử dụng loại bỏ dir lệnh anyway, bởi vì rm, dấu gạch ngang, r sẽ làm việc trên các thư mục rỗng và thư mục khác rỗng. Và cũng có thể, nếu tôi không muốn phải đi qua đó toàn bộ quá trình giảm dần vào các thư mục và loại bỏ mỗi tập tin cá nhân, RM, dấu gạch ngang, rf, tmp2. Và bây giờ nó đã biến mất. Một cái gì đó phải cẩn thận về là rm, dấu gạch ngang, rf. Và nó làm tôi sợ, ngay cả gõ, bởi vì nếu tôi vô tình nhấn Enter hoặc một cái gì đó. Vì vậy, rm, dấu gạch ngang, rf, dấu ngã sẽ, không khiến tôi, e không nhắc tôi, nó sẽ tự động loại bỏ thư mục toàn bộ của tôi và tất cả mọi thứ trong đó. Vì vậy, bạn có thể nghĩ rằng đó là một điều ngu ngốc để làm. Và tốt, nó được. Nhưng nó có thể xảy ra rất dễ dàng bằng cách tai nạn nếu, nói rằng, tôi muốn loại bỏ dấu gạch chéo của tôi, thư mục vhost. Và chỉ trong đánh máy nhanh chóng, Tôi vô tình làm điều này. Rằng sẽ loại bỏ đệ quy cả của tôi thư mục và thư mục vhost trong thư mục đặc biệt này mà chỉ cần xảy ra không tồn tại ngay bây giờ. Nhưng điều này vẫn sẽ loại bỏ toàn bộ thư mục nhà của tôi. Ít nhất là không có một e, nó sẽ nhắc tôi đầu tiên. Và tôi muốn được như thế, oh, không, tôi không muốn làm điều đó. Nhưng mọi người, dấu gạch chéo, bao gồm cả tôi có xu hướng để có được vào thói quen luôn luôn rf-ing. Ngay cả các tập tin thường xuyên mà tôi chỉ có thể rm, c, tôi có xu hướng chỉ rm, dấu gạch ngang, rf, c. Chỉ cần cẩn thận khi bạn rf-ing. SPEAKER 4: không C làm gì? ROB: C là tôi đang nói về tập tin C trong thư mục này, rm đó, c. JOSEPH: Và nguy hiểm hơn, nếu bạn sử dụng một ngôi sao, nó đề cập đến tất cả mọi thứ trong thư mục. Vì vậy, những gì tôi thường có xu hướng làm là tôi sẽ đi vào một thư mục và tôi muốn loại bỏ tất cả các file trong đó. Vì vậy, rm, dấu gạch ngang, rf, ngôi sao. ROB: Vâng. Rm, dấu gạch ngang, rf, ngôi sao. JOSEPH: Và nếu bạn không cẩn thận những gì bạn đang ở trong thư mục - Tôi đã không ở tạm, nhưng tôi đã vô tình trong thư mục chính của tôi, sau đó tôi sẽ loại bỏ tất cả mọi thứ trong thư mục chính của tôi. Và tôi đã thực sự làm điều đó trước, và Tôi nghĩ rằng bạn đã làm điều này trước khi hoặc Jay đã làm điều đó trước. ROB: Tôi đã vô tình xóa - nên bỏ qua lệnh đó cho một chút. JOSEPH: Không vui vẻ. ROB: Vì vậy, trong thư mục bin dấu gạch chéo là một loạt các tập tin nhị phân, nơi có sẽ thấy là những người quen thuộc như kêu vang. Vâng, kêu vang và về cơ bản tất cả các những điều mà tôi đang chạy theo lệnh dòng là trong thư mục bin dấu gạch chéo này. JOSEPH: Giống như ls là ở đây. ROB: Vì vậy, dot, dấu gạch chéo, ls sẽ danh sách thư mục này. JOSEPH: Rm cũng trong thư mục này. ROB: Tôi đã vô tình rm, rf-ed bin, trong đó loại bỏ bất kỳ lệnh tôi có thể có thể bao giờ muốn. Mà sau đó tôi chỉ cài đặt lại một Thiết bị mới tại thời điểm đó. JOSEPH: Vì vậy, phải rất cẩn thận khi bạn sử dụng lệnh này. ĐỐI TƯỢNG: [nghe được]? ROB: Có. Đó cũng là một thói quen xấu để có được thành. Nếu bạn nhận thấy, tôi bây giờ - tốt, bạn không thể thông báo, nhưng tôi zoom-in có thể có thể. Vì vậy, bây giờ tôi root @ thiết bị. Vì vậy, jharvard là người sử dụng chúng ta muốn bạn luôn luôn được sử dụng. Gốc là người dùng có sự cho phép để làm bất cứ thứ gì. Vì vậy, nhận thấy khi tôi jharvard, nếu tôi cố gắng cd - một thư mục đó là những gì? Oh, gốc là một ví dụ tốt. Vì vậy, cd, rễ. Cho phép từ chối. Bởi vì nếu chúng ta nhìn vào bảng liệt kê này - và một lần nữa, bạn không cần phải hoàn toàn hiểu điều này. Nhưng ba dấu gạch ngang đang nói mà không để cho bất kỳ khác người sử dụng vào thư mục này. Và thư mục sẽ xảy ra được sở hữu bởi người dùng root. Vì vậy, thực tế là tôi jharvard và không một trong những người không phải là gốc được phép vào thư mục này, điều đó có nghĩa rằng tôi sẽ được cho phép từ chối khi tôi cố gắng cd vào nó. Vì vậy, khi tôi là người chủ, tôi có quyền làm hoàn toàn bất cứ điều gì, bao gồm cả xóa các tập tin cần thiết cho gia dụng và tiêu diệt toàn bộ điều. Vì vậy, nó là một thói quen xấu để có được thành chỉ lang thang xung quanh của bạn hệ điều hành như là người chủ. Tôi làm điều đó anyway. Câu hỏi? Và tôi sẽ thoát khỏi gốc rễ, ở lại như jharvard. OK. Lệnh hơn có liên quan. Vì vậy, khi trở lại nhiệt độ của chúng tôi, mv lệnh là viết tắt của di chuyển. Bạn có thể di chuyển một. Bây giờ chúng tôi muốn gọi nó là b, vì vậy bây giờ nó được gọi là b. Hoặc có lẽ chúng ta muốn di chuyển b lên một thư mục. Vì vậy, bây giờ trống rỗng của thư mục này. Tôi sẽ quay trở lại vào thư mục chính của tôi, và chúng ta thấy rằng b là ở đây, bởi vì thư mục là một thư mục từ thư mục mà b đã được in Ngoài ra còn có cp. Vì vậy, cp là sao chép siêu phần, dot, văn bản. Tôi có thể gọi nó s, dấu chấm, văn bản. Bây giờ chúng ta có cả hai siêu phần, dot, văn bản, và s, dấu chấm, văn bản. Điều này cũng làm việc trên các thư mục. Tôi rf-ed một tập tin duy nhất. Vì vậy, cp - tốt, đầu tiên chúng ta hãy cố gắng cp, tmp, tmp2. Vì vậy, bỏ qua tmp thư mục. Vì vậy, tương tự như rm, hành vi mặc định là không làm việc trên các thư mục. Và một lần nữa, tương tự như rm, mặc định hành vi - tốt, nhận được nó để làm việc với các thư mục là một dấu gạch ngang-r đi. Vì vậy, sao chép đệ quy tạm thời thư mục vào tmp2. Và vì vậy bây giờ chúng ta có cả tmp và tmp2, và đó không phải là hữu ích vì tmp trống rỗng ở nơi đầu tiên. Tmp2. Bây giờ hãy sao chép tmp vào tmp2. Và chúng ta thấy rằng tmp2 cũng có các tập tin một, bởi vì các thư mục và tất cả mọi thứ bên trong đó thư mục đã được sao chép. Và đó có thể phần nào hữu ích nếu nói rằng bạn đang làm việc về vấn đề thiết lập một - hoặc thực sự, bộ vấn đề sau là quan trọng hơn, bởi vì có sẽ có một bó toàn bộ các tập tin và sự vật. Nhưng bạn chỉ muốn, cho một phân chia thứ hai, bạn giống như, tất cả rồi, tôi sẽ cố gắng một cái gì đó khác nhau. Hãy để tôi chỉ cần sao chép toàn bộ pset1 của tôi thư mục vào pset1 sao lưu để nếu Tôi kết thúc điều chỉnh các thứ lên, tôi có thể quay trở lại vào thư mục sao lưu của tôi. Có những cách thích hợp hơn versioning sao lưu mã của bạn, nhưng này luôn luôn là một cách nhanh chóng chỉ cần thực hiện chắc chắn rằng bạn có một bản sao của một cái gì đó rằng bạn đang về để sửa đổi. Vì vậy, tiếng vang cũng là một lệnh một lần mà loại sillily sẽ chỉ in ra dòng lệnh chính xác những gì bạn muốn để echo. Vì vậy, vang hi. Chúng tôi sẽ chỉ cần in hi. Echo hello thế giới. Chúng tôi sẽ in hello thế giới. Mà đi vào sử dụng khi bạn bắt đầu kết hợp các lệnh. Và một lần nữa, tôi không mong đợi bạn hoàn toàn hiểu được điều này, nhưng đó là một cái gì đó để xem. Và sau đó nếu bạn đang Googling cho ví dụ hoặc bạn nhận ra bạn muốn làm một cái gì đó, nó có thể hữu ích. Vì vậy, hãy, là một ví dụ, để ls, dấu gạch ngang, l. Vì vậy, ở đây tôi thấy đầu ra của ls, dấu gạch ngang, l. Và tôi nói, OK, tôi muốn lưu trữ đó vào một tập tin. Tất cả các đầu ra này đây, tôi muốn để đưa vào một tập tin riêng biệt. Rất ít này lớn hơn biểu tượng là những gì chúng ta sẽ gọi. Chúng tôi đang chuyển hướng đầu ra vào một tập tin. Hãy gọi blah tập tin, bởi vì đó là những gì tôi có xu hướng luôn luôn gọi nó. Vì vậy, bây giờ chúng ta thấy chúng ta có một nộp blah ngay tại đây. Và nếu tôi mở nó lên, tôi sẽ thấy nó chính xác đầu ra từ lệnh rằng tôi chỉ cần chạy. Và tương tự, bạn có thể - nếu điều này là đầu ra vào một tập tin, điều này là có được đầu vào từ một tập tin. Một lệnh là những gì mà tôi - Joseph: Tôi nghĩ rằng bạn có thể sử dụng ít hoặc nhiều hơn, có lẽ. ROB: Nhưng làm thế nào về chỉ ít blah? Tôi không biết. Nếu bạn đi vào kịch bản này, như có psets rằng đó là hữu ích cho. JOSEPH: Bạn có thể đường ống vào echo. Ống tập tin vào echo để nhìn thấy nó. ROB: Đó là đường ống. JOSEPH: Xin lỗi. ROB: Được rồi. Vì vậy, đây là đầu ra cho một tập tin. Đây là nhận được văn bản từ tập tin và đưa nó vào chương trình. Và bạn cũng sẽ thấy anh chàng này. Vì vậy, đây là loại làm cả hai cùng một lúc. Và thực sự, tôi sẽ giới thiệu hai mới lệnh chỉ để làm cho việc sử dụng nó. Lịch sử là một lệnh tiện dụng mà chỉ là sẽ in ra một danh sách các bất cứ điều gì tôi đã từng chạy một dòng lệnh. Vì vậy, chúng ta thấy ở đây tất cả mọi thứ mà tôi có được chạy toàn bộ thời gian này. Rất nhiều của ls. Và một lệnh hữu ích là grep mà mục đích của nó là để tìm kiếm hơn văn bản tìm kiếm mô hình, tốt, tìm kiếm bất cứ điều gì bạn muốn nó tìm kiếm. Và do đó, một ứng dụng tiện lợi ở đây là, nói chúng tôi muốn lấy lịch sử. Và tôi muốn tìm kiếm các lệnh nơi tôi - là những gì một một hữu ích để tìm? JOSEPH: [nghe được]? ROB: Hoặc chúng ta chỉ cần nhìn cho tất cả chạm vào, vì lý do gì. Vì vậy, đây là những gì nó sẽ như thế nào. Và bạn không phải hoàn toàn hiểu điều đó. Nhưng ý tưởng là ở đây, lịch sử là cho sản lượng cùng nó đã làm ở đây mà nó in ra toàn bộ lịch sử của tất cả mọi thứ tôi đã từng chạy. Sau đó chúng tôi đang đi qua đó - nên thay vì in nó vào màn hình, chúng tôi muốn thông qua đó để các lệnh grep mà là tìm kiếm tất cả các trường hợp của các liên lạc từ. Và do đó sử dụng sự kết hợp của các công cụ lịch sử và grep, tôi có thể thấy, OK, đây là tất cả các lệnh tôi đã từng chạy, và đây là một khá phổ biến. Chúng tôi đang ở phía dưới. Và nó cũng đem lại cho tôi lệnh Tôi chỉ cần chạy mà có cảm ứng từ trong đó. Nhưng các đường ống là một điều khá hữu ích để kết hợp nhiều chương trình. Và trên thực tế, đó là một phím tắt cho let tôi lịch sử đầu ra để nộp blah, và hãy để tôi grep bằng cách sử dụng tập tin blah như cái tôi muốn nhìn hơn. Vì vậy, các ống chỉ là một phím tắt cho hai lệnh. Vâng. SPEAKER 4: [nghe được]? ROB: Có. Là những gì - Oh. Hãy kiểm tra. Vì vậy, mèo, chó, cá. Vì vậy, tôi muốn grep. Dấu gạch ngang, r, một lần nữa, là có được đệ quy, vì vậy tôi muốn xuống xuống tất cả các thư mục. Tôi muốn đệ quy grep cho tất cả - và cho tôi tạm thời được ra này của con đường. Bỏ qua tôi. OK. Vì vậy, tôi muốn tạm thời cho grep tất cả các trường hợp của các cá từ. Và do đó, đây là những gì tôi đang làm là grepping đệ quy cho cá từ. Và ngôi sao có nghĩa là trên tất cả các các tập tin trong thư mục này. Và do đó, nó đã cho tôi một phép bị từ chối, bởi vì nó không được phép đọc mà tập tin cụ thể. Nhưng nó được tìm thấy cá trong các tập tin, kiểm tra. Tôi cũng có thể nói, cụ thể, tôi chỉ muốn nhìn vào blah tập tin, trong trường hợp này nó sẽ không tìm thấy bất cứ điều gì. Tôi chỉ muốn xem trong tập tin, kiểm tra. Nó sẽ tìm thấy cá. Đó là một lệnh khá hữu ích biết nói chung. Có một số lựa chọn thay thế để grep được cho là sẽ có nhiều lập trình thân thiện, nhưng tôi có xu hướng vẫn còn rơi trở lại grep. Câu hỏi? OK. Có lệnh khác? Oh. Chỉ cần một một lần mà tôi luôn luôn tìm được niềm vui được cal. Vì vậy, nhận thấy khi tôi đang ở trong này đáng yêu chế độ toàn màn hình, tôi không có như trên thanh công cụ hoặc bất cứ điều gì. Vì vậy, cal chỉ mang lại cho tôi một ít tốt đẹp lịch đó là đúng bây giờ cắt đứt, tôi giả sử. Nhưng lệnh nhỏ tốt đẹp. JOSEPH: Đây là [không nghe được]. Lệnh khác mà bạn có thể có thấy bao gồm kêu vang và thực hiện. Chúng tôi sẽ đi qua họ trong chi tiết hơn sau đó. Nhưng nếu bạn đã làm việc trên các PSET, bạn sẽ có quen thuộc với những người. ROB: Được rồi. Các câu hỏi về điều dòng lệnh? Được rồi. Vì vậy, chúng ta hãy chuyển sang một số Thứ C liên quan đến. Biến toán học. OK. Vì vậy, giống như chúng tôi đã có trong toán học Scratch, bạn cũng có thể sử dụng toán học trong C. Trước khi chúng tôi nhận được để mà hoàn toàn, nên biến. Hãy nhớ rằng bất cứ khi nào bạn khai báo một biến như int x hoặc float y, bạn phải cung cấp cho nó trước khi gõ tên biến. Vì vậy, các loại chúng tôi đã nhìn thấy cho đến nay là int, float, double, lâu dài, mà tôi không thực sự biết nếu chúng tôi đã thấy rằng cho đến nay. Có một số những người khác. Chúng tôi đã nhìn thấy char. Có ngắn, mà là giống như đó là đối diện lâu dài mà nó nhỏ hơn so với một số nguyên. Chúng tôi cũng thấy chuỗi. Vì vậy, những gì là đặc biệt về chuỗi? Lý do tại sao tôi sẽ nói đó là không giống như int? SPEAKER 4: Nó không thực sự tồn tại. ROB: Vâng. Vì vậy, lý do duy nhất chúng ta có chuỗi là bởi vì khi bạn làm băm, bao gồm cs50.h. Và chúng ta sẽ thấy ví dụ về điều này sau - oh, mà không xử lý mà cũng - nơi cs50.h đang làm một cái gì đó dọc theo dòng loại def, char sao, chuỗi. Và vì vậy đó là nói rằng chúng tôi thậm chí không biết những gì một ngôi sao char là chưa. Nhưng điều này được nói rằng chúng tôi muốn chuỗi. Bất cứ nơi nào bạn đã sử dụng chuỗi, bạn có thể đã được sử dụng char sao, mà thực sự là một kiểu tồn tại trong ngôn ngữ C. Nhưng chúng tôi sẽ nhận được điều đó. Oh, và nó đi quay lại ngay. Gọn gàng. Vì vậy, cùng một điều với bool nơi đúng và sai. Đó không phải là thực sự là một loại tích hợp sẵn trong C. Thay vào đó, nó chỉ là, điều này có số không có giá trị? Sau đó, chúng tôi sẽ chỉ xem xét nó là sai lầm. Liệu điều này có giá trị - tốt, điều này có bất kỳ giá trị mà không phải là bằng không? Sau đó chúng tôi sẽ xem xét nó là đúng. Vì vậy, một là đúng, hai là đúng, bất cứ điều gì khác không là sự thật. Vì vậy, đó là những người. Các câu hỏi về các biến kê khai, các loại biến và tất cả những gì? Yeah. SPEAKER 4: Đối với lâu dài, trong cuốn sách, nó nói nó đã được lâu dài int. Nhưng chỉ lâu lâu sẽ làm việc? ROB: Vì vậy, những loại bổ. Vì vậy, int x. Vì vậy, chúng ta cũng có thể nói int x. Chúng tôi có thể nói ngắn int x. Chúng ta có thể nói dài dài int x. Nhưng bất kỳ khá nhiều trong những điều tôi vừa nói, int, int ngắn, lâu dài int, bạn có thể thoát khỏi int và nó sẽ chỉ là giả định mà bạn có nghĩa là int. X Vì vậy, không dấu, mà chỉ có nghĩa là - bạn biết làm thế nào bình thường với một int, bạn có thể nói bằng âm x 3? Với một int unsigned, bạn có thể không. JOSEPH: Và một lần nữa, cho máy ảnh, Câu hỏi là, sự khác biệt là những gì giữa lâu dài int và chỉ dài lâu? ROB: Vâng. Vì vậy, tôi sẽ hầu như không viết dài dài int. Tôi sẽ viết dài dài. JOSEPH: Bất kỳ câu hỏi? ROB: OK. Vì vậy, ngớ ngẩn nhắc nhở chút đó là cách chúng ta khai báo một biến và khởi tạo biến và tuyên bố khác biến và khởi tạo tất cả trong một bước. Vì vậy, tuyên bố của biến và biến khởi tạo không có để nhưng có thể được trên cùng một dòng. Vì vậy, chúng tôi có các nhà khai thác toán học tiêu chuẩn mà bạn đang sử dụng để - cộng, trừ, chia, thời gian. Ngoài ra còn có modulo, mà chúng ta sẽ thấy. Không có, ít nhất là trong C, một sức mạnh tích hợp điều hành dấu nháy lũy thừa. Vâng, đó là một nhà điều hành dấu nháy, nhưng nó không phải là quyền lực. JOSEPH: Nhưng nó không phải lũy thừa, Vâng. ROB: Không sử dụng dấu nháy cho rằng nó có nghĩa là như phương hoặc bất cứ điều gì. Vì vậy, một số điều cần lưu tâm về bộ phận. Tôi sẽ đứng. Vì vậy, tuyên bố khởi tạo câu trả lời. Vì vậy, chúng tôi đang nói nổi câu trả lời bằng 1 chia cho 10. In câu trả lời cho hai chữ số thập phân. Và đây là loại điều mà tôi sẽ printf con người để tìm ra rằng những gì heck không%, dấu chấm, 2f nghĩa là gì? Và rằng chỉ có nghĩa là, tốt, bỏ qua 0.2. Và%, e là những gì chúng tôi sử dụng in nổi. 0,2 là nói, mà in nổi lên hai chữ số thập phân. Vì vậy, chương trình này có một lỗi, và bạn có thể đã thấy điều này trước khi trong một số Tất nhiên trước khi CS. Nhưng lỗi đó là gì? SPEAKER 5: Zero. ROB: Vâng. Vì vậy, khi chúng ta nói, câu trả lời bằng 1 chia cho 10, chúng ta muốn trả lời là 0,1. Nhưng 1 chia cho 10, 1 là một số nguyên, 10 là một số nguyên. Và khi chúng tôi làm một số nguyên chia một số nguyên, chúng ta sẽ quay trở lại một số nguyên. Vì vậy, 1 chia cho 10 là 0,1. Vì nó cần để cung cấp cho chúng tôi một số nguyên, nó chỉ sẽ vứt đi mà số thập phân và nói rằng câu trả lời là 0. Và như vậy khi chúng tôi in trả lời ở đây, nó sẽ in 0.00. JOSEPH: Và cũng giống như một lưu ý, nó thực sự ném đi những gì sau khi dấu thập phân. Vì vậy, nếu bạn thay vì có 6 chia cho 10, bạn có thể nghĩ rằng nó sẽ cung cấp cho bạn 0,6 và sau đó bạn sẽ làm tròn đến 1. Nhưng trên thực tế, những gì sẽ xảy ra khi nó gõ nhiệm vụ nó là nó giảm là những gì sau dấu thập phân. Vì vậy, 0.6 không trở thành 0. ROB: Vâng. Và chúng tôi sẽ nói cắt ngắn cho điều đó. Vì vậy, bất cứ khi nào bạn cast đến một int, số thập phân được cắt ngắn. Vì vậy, việc sửa chữa cho rằng - có thực sự hai. Và tôi sẽ phải làm thứ hai, bởi vì này là một sửa chữa dễ dàng hơn nhiều. Vì vậy, một sửa chữa là sử dụng phao nổi trong việc phân chia. Và thực sự, bạn chỉ cần làm cho một trong số họ một phao. Nhưng nó phần nào rõ ràng hơn chỉ để làm cho cả hai đều nổi. Vì vậy, 1,0 chia cho 10,0 chia hai phao. Vì vậy, câu trả lời sẽ kết thúc được một float, và do đó bạn sẽ in một cách chính xác 0.10 đây. Cái gì mà không làm việc rất tốt về điều đó là, tốt, chắc chắn, nó đã được dễ dàng đủ để chuyển đổi từ 1 tới một nổi bằng cách làm cho nó 1.0. Nhưng nếu thay vì chúng tôi đã có hai số nguyên như int x = 1 và int y tương đương với 10, và sau đó chúng tôi muốn để làm x chia cho y? Vì vậy, nó không phải là dễ dàng chỉ cần làm x.0 hoặc một cái gì đó. Vì vậy, việc sửa chữa để được đúc. Vì vậy, đúc là một cách trong C để chuyển đổi từ một loại biến khác. Vì vậy, ở đây, 1 là một số nguyên. Và bằng cách đặt phao này trước nó, chúng tôi được đúc từ 1 tới một phao. Và điều này sẽ chuyển đổi 1 đến 1.0. Và điều này sẽ chuyển đổi 10 đến 10,0. Và sau đó mọi thứ cư xử tương tự như phiên bản trước, chúng tôi chỉ cho thấy ở đâu, như mong đợi, chúng tôi nhận 0.10 và nó sẽ in đó. Và chúng ta có thể làm điều này với biến, quá. Vì vậy, chúng ta có thể nói, float x chia float y. JOSEPH: Bất kỳ câu hỏi? ROB: Vì vậy, giống như trong toán học thường xuyên, chúng tôi có thứ tự ưu tiên. Vì vậy, trong lớp học toán, bạn có nhiều khả năng gọi nó là thứ tự của các hoạt động. Ở đây, thuật ngữ chính thức là điều hành ưu tiên. Nhưng ưu tiên điều hành, hoặc nhất khai thác, như bạn mong đợi. Vì vậy, giống như trong toán học, 2 lần là 10 sẽ được nhóm lại chặt chẽ hơn 10 này chia cho 2 và sau đó 2. Thứ tự của các hoạt động, nó sẽ làm 2 lần 10, 10 chia cho 2, và sau đó nó sẽ làm 20 cộng với 5 cộng với 2. Vì vậy, nó như mong đợi, và bạn có thể sử dụng ngoặc để biểu thức nhóm. Bạn không thể sử dụng dấu ngoặc vuông để biểu thức nhóm. Yeah? SPEAKER 5: Bạn có thể thực sự chỉ cần đi trở lại thứ hai? Bạn có thể bỏ một int để một chuỗi? ROB: Vì vậy, trong C, bạn có thể bỏ bất cứ điều gì bạn muốn bất cứ điều gì bạn muốn. Điều đó không có nghĩa là nó một điều tốt để làm. Vì vậy, khi bạn cast một int để một chuỗi, có nghĩa là - và chúng tôi sẽ nhận được vào này nhiều hơn nữa triệt để - JOSEPH: Mãi về sau. ROB: Tôi không muốn nói nhiều sau đó, vì vậy tôi đã cố gắng để thay đổi câu nói của mình. Chúng tôi sẽ nhận được vào nó nhiều kỹ hơn sau đó thực sự khi bạn có một biến chuỗi - do đó, một chuỗi có thể được tùy tiện dài, phải không? Và chúng tôi đã nói rằng một int là bốn byte và lâu dài là tám byte và một phao là bốn byte. Vì vậy, một chuỗi, giống như một int, chỉ có một số lượng nhất định của byte với nó. Và đó sẽ là bốn byte. Nhưng một chuỗi có thể được khá tùy tiện dài, phải không? Vì vậy, xin chào thế giới đã, nếu đó là 10 ký tự hoặc bất cứ điều gì, đó là đã có sẽ là hơn 4 byte Tôi có thể phù hợp với một chuỗi. Và vì vậy làm thế chuỗi thực sự làm việc là họ là nơi mà bộ nhớ trong chuỗi đang được lưu giữ. Và như vậy ở đây, khi tôi nói chuỗi x bằng hello thế giới, bên trong là x chỉ nói, oh, xin chào thế giới được lưu trữ tại địa điểm cụ thể này trong bộ nhớ. Vì vậy, nếu chúng tôi cố gắng để đúc một số nguyên cho một chuỗi, sau đó chúng tôi đang cố gắng để giải thích một số phần của bộ nhớ ngẫu nhiên như là một chuỗi. Và hầu như luôn luôn phá vỡ mọi thứ. JOSEPH: Nhưng nếu lẫn lộn mà bạn, chúng tôi sẽ bao gồm nó sâu hơn sau đó. ROB: Vâng. Đây là nơi mà bạn sẽ để có được vào con trỏ. Và đó là một đoạn quan trọng hai tuần của khóa học này. SPEAKER 6: Nó làm việc như các đối tượng trong các ngôn ngữ khác hoặc không thực sự? ROB: Vì vậy, trong các ngôn ngữ khác, các đối tượng sẽ được đại diện bằng cách sử dụng con trỏ. Nó không phải là điều tương tự, mặc dù. Bất kỳ suy nghĩ? JOSEPH: số Không suy nghĩ. ROB: OK. JOSEPH: Next. ROB: Chỉ cần đi với điều đó. Được rồi. Vì vậy, theo modulo. Cũng giống như chúng ta có cộng, trừ, phân chia, và nhân rộng. Vì vậy, theo modulo là một trong những bạn có thể không đã thấy trước đây. Và nó chỉ nói, cung cấp cho tôi phần còn lại của. Vì vậy, 55% 10. Phần còn lại của làm 55 chia 10 sẽ là 5. Vì vậy, 55% là 10 5. Và 3% 5 sẽ là 3. 8% 8 sẽ là 0. 16% 15 sẽ được 1. Joseph: Một điều cần lưu ý với điều này, quá, là nó có thể không làm việc như mong đợi nếu bạn sử dụng một số âm. Vì vậy, tiêu cực 5% 4, một số người có thể nghĩ rằng đó là - những gì bạn sẽ nghĩ tiêu cực 5% 4 sẽ là gì? SPEAKER 5: Một. JOSEPH: Vì vậy, một số người nói một, một số người nói một tiêu cực. Nhưng những gì - ROB: Tôi thậm chí không có cho biết một trong những người. JOSEPH: Hai, xin lỗi. Một số người nói - ROB: Ba. JOSEPH: Ba? ROB: tiêu cực - là những gì - tiêu cực năm - JOSEPH: Ba, ba, ba. Xin lôi. Vì modulo, nói chung, khi bạn đã nhìn thấy nó ở nơi khác, nó thường có nghĩa trả về một số dương, phải không? ROB: Vì vậy, khi chúng ta nói về môn toán, 10% của, họ có xu hướng muốn cung cấp cho bạn - nếu chúng ta mod 10, sau đó chúng tôi hy vọng nhận được một số từ 0 đến 9. Ở đây, đó không phải là trường hợp đó bạn sẽ nhận được số âm trở lại. JOSEPH: Vì vậy, âm 5% 4 sẽ là tiêu cực 1. ROB: Nhưng nó hiếm hoi mà bạn mod-ing số âm để bắt đầu với. Bỏ qua này. JOSEPH: Vâng. ROB: Meh. OK. Vì vậy, một điều cuối cùng chỉ ra về nổi là đó là một hành vi nguy hiểm, nhưng nổi không phải là chính xác đại diện. Quay trở lại với byte một lần nữa, hãy nhớ rằng một int luôn luôn là bốn byte và một phao luôn luôn là bốn byte. Vì vậy, ví dụ Lucas là khá tốt. Vì vậy, suy nghĩ của 1 chia cho 3. Vì vậy 0.3333333. Nếu tôi chỉ có 32 bit, làm thế nào có thể Tôi lưu trữ 0,33333 chính xác? Và có lẽ, vì lý do gì, bạn nói, tất cả các bên phải, tốt, chúng ta hãy chỉ nói mà đặc biệt 1011001 này, chúng ta hãy chỉ nói rằng nên 0,333333. Vâng, bạn chỉ có một số hữu hạn các những bit, do đó nó không thể đại diện cho mỗi dấu chấm duy nhất giá trị nhất định chỉ 32 bit. Vâng, nó không thể đại diện cho bất kỳ giá trị dấu chấm cho vô hạn - tốt, đưa ra bất kỳ số hữu hạn các bit. Vì vậy, vấn đề ở đây là, tốt, khi chúng tôi sử dụng in hai chữ số thập phân, chúng tôi đã có câu trả lời chính xác 0.10. Nhưng bên dưới mui xe, nó thực sự được lưu trữ càng gần càng tốt để 0.10 như các bit có thể đại diện. Đây có phải là trên slide tiếp theo? Hoặc là nó không? JOSEPH: Vâng, nó đó. ROB: Blegh, blegh. JOSEPH: Vâng, bạn có thể chỉ kéo các ghi chú lên một chút. ROB: tôi chỉ cần đi để phóng to trong ngày cuối cùng về điều đó. Ôi chúa ơi, đó là [không nghe được]. Vì vậy, con số đó. Đó là những gì sẽ được in nếu chúng ta chạy chương trình đó. Và nhận thấy đó không phải là thực sự là một vấn đề lớn nếu chúng ta chỉ quan tâm đến như 2-3 chữ số thập phân. Như chúng tôi chỉ ban đầu được in 0.10, và đó là lý do tại sao chúng tôi thấy không có gì sai. Nhưng một khi chúng tôi bắt đầu đi vào chính xác, con số chính xác rằng nó đại diện, chúng ta thấy rằng nó có thể không chính xác đại diện cho 0.1. Và một phần của vấn đề ở đây là như thế, tất cả các bên phải, đó là tốt, nhưng, cũng, đầu tiên, nếu chúng ta cố gắng làm, câu trả lời bằng bằng 0,1? Là sẽ trở lại đúng hay sai? Và vì vậy thật khó để nói. Tôi nghĩ rằng nó thực sự có thể trở thành sự thật. Nó sẽ lần đầu tiên - Tôi không biết. Câu trả lời là khi bạn bắt đầu giao dịch với các giá trị dấu chấm động, bạn khá nhiều không nên sử dụng bình đẳng vì sự thiếu chính xác này. Và cho tất cả các bạn đã biết, đó là trăm số thập phân là điểm nổi đã không thể để xử lý một cách chính xác. Và như vậy bình đẳng sẽ chỉ thất bại ngay cả mặc dù số lượng - nếu bạn đã sử dụng con số chính xác, những con số nên đã được chính xác như nhau. Đó là trong quá trình như 50 tính toán sử dụng các nổi các giá trị điểm, lỗi này có thể xây dựng và lên và lên, và điều chỉ có được sai. JOSEPH: Và đã có thực sự ví dụ nổi tiếng của điều này xảy ra. Như kỹ sư của NASA đã nhận được này sai, gây tên lửa nổ tung trong không khí sau khi họ đã được đưa ra. Và rất nhiều vấn đề như thế. Vì vậy, yeah. SPEAKER 6: Khi bạn nói 0,3 f, nó cắt phần còn lại? Hoặc dùng nó làm tròn lên hoặc xuống? ROB: Sẽ printf quanh nó? Joseph: Tôi nghĩ rằng sẽ cắt cụt printf. ROB: OK. Vì vậy chúng tôi có thể đi tương tự trong đối diện hướng về nơi này, trong trường hợp này, gần nhất nó có thể đại diện cho 0.1 là với con số này. Gần nhất nó có thể có thể đại diện cho 0,2 là ở đối diện hướng, ,199999996356 hoặc một cái gì đó. Vì vậy, nếu chúng tôi đã đi theo hướng đó là điều, sau đó printf 0,3 f sẽ trở lại 1.99 thay vì 2.00. JOSEPH: Và tôi không hoàn toàn chắc chắn về điều đó. Bạn có thể muốn viết nhỏ, ít chương trình chỉ cần kiểm tra xem. ROB: Mặc dù, những gì chúng ta chắc chắn là nếu bạn cố gắng để bỏ đó để một int, và đúc một int sẽ gây ra nó để cắt ngắn số thập phân, nếu bạn cố gắng để bỏ 1.9999999 đến một int, bạn sẽ nhận được 1. Và như vậy bạn thường phải sử dụng chức năng vòng trong thư viện toán học. Câu hỏi? OK. JOSEPH: Vì vậy, chuyển sang điều kiện và biểu thức Boolean. Vì vậy, bạn đã thấy nó trước. Và thực sự, hãy để tôi chắc chắn rằng tôi máy tính là trong các định dạng ngay tại đây. Không gian. Xin lỗi, chúng ta sẽ phải đối phó một chút với cắt ở các cạnh. Nhưng yeah, các bạn đã thấy điều này trước khi trong Scratch. Vì vậy, ngay ở đây là một biểu hiện được sử dụng trong một tuyên bố có điều kiện. Vì vậy, câu trả lời lớn hơn không ý cho bạn biết đúng hay sai. Và đây là thực sự quan trọng, bởi vì chúng cho phép chúng tôi giới thiệu logic vào mã của chúng tôi. Vì vậy, ví dụ, đây là một chương trình viết bằng Scratch mà yêu cầu người dùng cho một số nguyên và nói với họ cho dù số nguyên mà họ đã cho bạn là một số tích cực hay tiêu cực. Và việc chuyển đổi trên đây để xem là đầu tiên bạn in ra các tuyên bố, cung cấp cho tôi một số nguyên. Và sau đó bạn yêu cầu họ cho một số nguyên. Và sau đó bạn sử dụng logic có điều kiện hơn đây để kiểm tra xem con số đó đã thực sự lớn hơn không hay không. Vì vậy, ở đây chúng tôi có một biểu thức Boolean bên trong một điều kiện Nếu tuyên bố. Là có bất kỳ câu hỏi? Được có bất kỳ câu hỏi về điều đó? OK. Do đó, có nhiều hơn chỉ lớn hơn, tất nhiên. Bạn có thể xây dựng các biểu thức Boolean sử dụng hầu hết các loại vật bạn sẽ nghĩ về môn toán. Vì vậy, lớn hơn. Đó phải là một ít hơn. Xin lôi. Và khoảng cách. ROB: Thiên Chúa cấm bạn rời khỏi nó. JOSEPH: Được rồi. Vì vậy, lớn hơn, nhỏ hơn, lớn hơn hơn, hoặc bằng, ít hơn, hoặc bằng. Chúng tôi sử dụng bình đẳng đôi để kiểm tra bình đẳng, bởi vì đơn bằng phương tiện phân công, phải không? Vâng. Và sau đó chúng ta có thể cũng không bằng bởi sử dụng dấu chấm than, bằng. Và biểu tượng dấu chấm than này có thể cũng được mở rộng do đó nếu bạn muốn để đảo ngược bất kỳ loại Boolean biểu hiện, bạn có thể làm điều đó. Vì vậy, đây sẽ đánh giá đúng sự thật nếu câu trả lời là ít hơn hơn hoặc bằng số không. Bất kỳ câu hỏi về điều đó? OK. Vì vậy, bạn cũng có thể kết hợp các biểu thức sử dụng hợp lý và và Hoặc hợp lý. Vì vậy, đây chỉ là biểu tượng Và, mà phải là Shift, 7. Và đây là biểu tượng ống, đó là không phải là một trường hợp thấp hơn L. Đó là một trong các đó là đúng trên phím Enter của bạn. Vì vậy, bạn sử dụng hai trong số các biểu tượng logic và hợp lý hay. Vì vậy, điều này sẽ chỉ trả về true nếu câu trả lời là một, hai, ba, hoặc bốn. Và điều này sẽ chỉ trả về true nếu câu trả lời là xa hơn ở hai bên. Vì vậy, nó không phải một, hai, ba, hoặc bốn. Và cách bạn sẽ sử dụng mà trong một biểu thức - ROB: Hoặc một số không hoặc một năm. JOSEPH: Zero hoặc một năm. Xin lôi. Vâng, vâng, vâng. OK. Và ở đây bây giờ, giống như cách bạn sẽ sử dụng biểu thức, một nhỏ hơn bên biểu hiện của một Nếu có điều kiện tuyên bố, bạn cũng sẽ sử dụng nó cùng một cách bởi chỉ cần đặt nó bên trong ngoặc của báo cáo Nếu. Vì vậy, printf này sẽ chỉ cháy nếu câu trả lời là một, hai, ba, hoặc bốn. Bất kỳ câu hỏi về kết hợp biểu thức? Do đó, có một điều kiện xây dựng, chúng tôi gọi một Nếu / khac. Vì vậy, về cơ bản, điều này có nghĩa là bây giờ, OK, Nếu một cái gì đó tôi muốn kiểm tra là không đúng, sau đó đi đến thư khac và thực hiện hành động khác. Vì vậy, trong trường hợp này, tôi hỏi người sử dụng cho một số nguyên. Là số nguyên lớn hơn không? Có? Vâng, sau đó họ đã chọn một số dương. Nếu không, sau đó nó phải có được tiêu cực hay không. Vì vậy, bạn đã chọn một số âm hoặc một số không trong trường hợp này. Vâng. Hoặc một số không. Và sau đó chúng tôi cũng có Nếu / khac, Nếu và khac. Vì vậy, điều này cho phép chúng tôi thực hiện một chuỗi các điều duy nhất nếu những người đầu tiên thất bại. Vì vậy, trong trường hợp này, bây giờ chúng tôi đang làm người cuối cùng bạn chọn không. Vì vậy, nếu họ không chọn một tích cực và cũng không một số âm, sau đó họ phải đã chọn không. Vì vậy, nó chỉ đi xuống chuỗi như thế này. Vì vậy, một ví dụ về cách một Nếu là khác nhau từ - Nếu một / khác là khác nhau từ chỉ là một chuỗi các Ifs. Và điều này là một câu hỏi phổ biến mà người hỏi là, tốt, nếu bạn nhận được như một 95 trong CS50, những gì sẽ này chương trình cho bạn? SPEAKER 5: Bạn có một A. JOSEPH: Có. Bạn có tất cả các đơn một trong những quyền. Bạn có một A, bạn B có một, bạn có một C và D, phải không? Vì vậy, tất cả những nhận được đánh giá theo thứ tự. Vì vậy, trong khi 95 là lớn hơn 90, đó là cũng lớn hơn 80, nó cũng lớn hơn 70, và nó cũng lớn hơn 60. Vì vậy, bạn có tất cả những lớp. Và tôi giả định bạn sẽ chỉ muốn A. Cách để khắc phục đó là để thay thế những người có thư khac / Nếu 's. Vì vậy, trong trường hợp này, nó thấy rằng 95 là lớn hơn 90, và sau đó nó không đánh giá phần còn lại các báo cáo. Bất kỳ câu hỏi về điều đó? Do đó, có một loại có điều kiện cấu trúc mà chúng ta có ở đây mà chúng tôi gọi một tuyên bố chuyển đổi. Vì vậy, điều này cho phép bạn kiểm tra cơ bản những gì giá trị của một số bạn đặt vào câu lệnh switch là. Vì vậy, trong trường hợp này, chúng ta đang chuyển đổi trên n, và chúng tôi đang nói, oh, nếu n là một, sau đó in tuyên bố đó. Và sau đó phá vỡ, có nghĩa là lối ra ra khỏi câu lệnh switch. Nếu nó không phải là một, sau đó, tốt, chỉ cần cuối cùng kiểm tra tất cả các trường hợp. Và do đó, nó sẽ kiểm tra nếu nó là một hoặc hai hoặc ba, và nó in cho phù hợp. Và những gì từ khóa mặc định này xuống đây phương tiện là nếu họ không nhập bất kỳ của những người, sau đó nói không hợp lệ. Vì vậy, hãy nói rằng tôi yêu cầu n và người sử dụng mang lại cho tôi bốn. Vâng, nó phù hợp với không ai trong số những trường hợp, do đó, nó sẽ in ra những gì trong phần mặc định. Vâng, câu hỏi? SPEAKER 5: Bạn có thể sử dụng Boolean biểu thức thay vì một, hai, hoặc ba? JOSEPH: Vì vậy, câu hỏi là bạn có thể sử dụng Biểu thức boolean thay vì một, hai, và ba? Và trong C, tôi tin rằng bạn không thể làm điều đó. Nhưng trong các ngôn ngữ khác, mà bạn có thể gặp phải ở cuối của học kỳ như JavaScript, bạn có thể. Vâng, bạn sẽ phải tính toán đầu tiên giá trị đó và sau đó sử dụng nó trong chuyển đổi tuyên bố. Yeah? ROB: Vì vậy, một phần của lợi ích của chuyển đổi báo cáo là nghĩ nếu bạn đã làm điều này như một Nếu / khac, vì vậy nếu như n bằng tương đương với một hoặc bất cứ điều gì. Else / Nếu n bằng bằng hai, bất cứ điều gì. Else / Nếu n bằng bằng ba. Vì vậy, cách chương trình sẽ chạy là nó tuần tự sẽ đi xuống danh sách và kiểm tra, là một n? Không. N là hai? Không. Là n ba? Yeah. Làm điều này. Trong khi với báo cáo chuyển đổi, đó là thực sự có thể biên dịch nó được thực sự nhanh chóng. Và ngay sau khi nó nói chuyển đổi, nó nói, được rồi, n là hai, tôi ngay lập tức sẽ nhảy đến nơi Tôi phải bắt đầu thực hiện. Tôi sẽ không kiểm tra đầu tiên, n là một, là hai n? Nó ngay lập tức có thể bắt đầu làm những gì nó phải làm. Và do đó, nó có thể không có điều kiện Boolean. Hoặc người nào khác nó sẽ phải làm tuần tự, như, tất cả các bên phải, là n lớn hơn không? Khác là n lớn hơn 10 hoặc bất cứ điều gì. Joseph: Trong trường hợp này, nếu bạn sử dụng Nếu / khac, Nếu, sau đó chuyển đổi sẽ chạy khoảng ba lần nhanh hơn Nếu / khac, Nếu. Chúng tôi có thể tổ chức việc chuyển đổi như vậy một cách mà chúng ta không phá vỡ sau mỗi trường hợp. Vì vậy, trong trường hợp này, tôi đang phân vùng con số mà chúng tôi lựa chọn thành một và hai là không cao và số ba là một số cao. Vì vậy, trong trường hợp này, nếu n là một hoặc hai, nó sẽ lên trường hợp và sau đó nó sẽ mùa thu qua, bởi vì không có giờ nghỉ. Và nó sẽ kết thúc ở đây. Vì vậy, nếu chúng ta chọn một, nó sẽ làm printf và sau đó phá vỡ để không ai trong này được thực thi. Và tất nhiên, nếu họ nhập vào trong ba hay cái gì khác, sau đó nó sẽ bỏ qua những người và không đến đó, và nó sẽ thực hiện thay vì các tương ứng với dòng. Được có bất kỳ câu hỏi về điều đó? Có? SPEAKER 4: Bạn có nhận được một lỗi nếu bạn đã nghỉ ngơi sau một trường hợp nhưng nó không có một cái gì đó cho nó để làm gì? JOSEPH: Vì vậy, câu hỏi là sẽ bạn sẽ có được một lỗi nếu bạn có một kì nghỉ sau khi là trường hợp một trong nhưng không có gì để làm thế? Và câu trả lời là không. Bạn sẽ không thực sự nhận được một lỗi. Yeah, mm hmm. Vì vậy, loại một chút thay đổi ở đây, Tôi sẽ đặt một printf đây. Rất tiếc. Vì vậy, điều này sẽ in nếu Tôi đặt một trong như đầu vào? Yeah. Nó sẽ cho bạn biết nó đã không mất một số cao gấp đôi, phải không? Bởi vì nó sẽ nhấn mà trường hợp đầu tiên, nó sẽ không phá vỡ, và nó sẽ rơi thông qua các trường hợp thứ hai. Bất kỳ câu hỏi về điều đó? ROB: Bạn đã có một câu hỏi? JOSEPH: OK, để nguội. Được rồi. Vì vậy, có cái gì khác chúng ta gọi là điều hành ternary mà về cơ bản là một cú pháp thay thế để làm Và sau đó nếu khac. Và nó cho phép bạn làm điều đó trên cùng một dòng. Vì vậy, trong chương trình đặc biệt này, Tôi yêu cầu người dùng cho n. Và nếu n là lớn hơn 100, tôi nói với họ họ đã chọn một số cao. Khác tôi nói cho họ biết họ chọn một số lượng thấp. Vì vậy, chúng ta có thể sử dụng cú pháp thực sự lâu dài này, chuỗi, S, và sau đó kiểm tra nếu n là lớn hơn 100 và gán nó cho phù hợp. Nhưng chúng ta có thể thực hiện điều này nhiều hơn nữa súc tích bằng cách sử dụng cú pháp điều hành ternary này trong đó bao gồm một câu hỏi đánh dấu và dấu hai chấm. Vì vậy, các dấu hỏi cơ bản hỏi một câu hỏi, phải không? ROB: Có thể phóng to thu nhỏ trên đó. JOSEPH: Có. Tốt điểm. Vì vậy, đây là nhà điều hành ternary. Đầu tiên tôi đặt câu hỏi, n là lớn hơn 100? Nếu có, sau đó tôi thực hiện đầu tiên phần trước dấu hai chấm. Nếu nó không phải, sau đó tôi thực hiện Phần thứ hai sau dấu hai chấm. Vì vậy, nếu n là lớn hơn 100, sau đó nó chọn cao và puts đó vào chuỗi s. Nếu n là ít hơn 100, nó chọn thấp và sau đó đặt đó vào chuỗi s. Vì vậy, đó sẽ ngưng tụ đoạn lớn này thành chỉ là một dòng. SPEAKER 5: Có phải đó là phổ biến? JOSEPH: Vâng, nó là khá phổ biến cho điều mà về cơ bản bạn muốn làm một bài tập dựa trên một số loại điều kiện. Và trong trường hợp này, chúng tôi đã cố gắng để gán giá trị cho chuỗi s. Nó không phải như vậy - Tôi đoán tôi không thực sự thích nó trong các trường hợp khác. Nhưng nó đặc biệt hữu ích cho nhiệm vụ này. ROB: Đó là một mô hình khá phổ biến nơi bạn có một số biến bạn sẽ nói, nếu một cái gì đó, thiết lập biến này để một giá trị; khác, sắp đặt biến này giá trị khác. Và đó là kịch bản nơi sử dụng một bậc ba. JOSEPH: Và bạn đang tiết kiệm rất nhiều dòng, phải không? Và nó chỉ làm cho mã của bạn cho là dễ đọc hơn một chút. Vâng, câu hỏi? SPEAKER 6: Đối với một bậc ba, bạn có thể đi, string s bình đẳng s, dấu chấm hỏi? Và sau đó bạn có thể có, nói, năm tùy chọn khác nhau. Và tùy thuộc vào những gì các số n được, bạn sẽ chọn một trong những? JOSEPH: Vì vậy, câu hỏi là, là có một loại cú pháp mà bạn có thể làm chuỗi s bằng n, và sau đó có nhiều hơn hai tùy chọn sau đó dấu hỏi? Và một câu trả lời đơn giản là không có, không có thực sự là một cách tốt để làm điều đó trừ khi bạn muốn làm tổ nhiều bậc ba khai thác bên trong của mỗi khác. Bạn có thể làm như n lớn hơn 100, dấu hỏi, và sau đó một điều hành ternary, n lớn hơn 50, dấu hỏi, và làm tổ theo cách đó. Nhưng trong kịch bản đó, mã của bạn là nhận được loại đọc và lộn xộn, và nó có thể là tốt hơn để chỉ cần đi đến một tuyên bố Nếu / khac tại thời điểm đó. ROB: Và cũng có thể, như một mặt lưu ý, PHP không chính xác thực hiện các ternary điều hành như vậy mà ternaries lồng nhau thậm chí không làm việc khi họ cần. JOSEPH: Vâng. Vì vậy, nó được một chút khó hiểu, đặc biệt là khi bạn đi các ngôn ngữ khác. ROB: Nó khó hiểu là đủ mà ngôn ngữ là sai về nó. JOSEPH: Vì vậy, trên thực tế, chỉ cần làm rõ, không tất cả mọi người biết điều đó % S không ở đây? Bất kỳ câu hỏi về điều đó? Tôi đoán chỉ dành cho máy ảnh,% s về cơ bản cho phép chúng ta đặt giữ chỗ cho một chuỗi. Và sau đó ở cuối, chúng tôi xác định rằng biến chúng tôi muốn đưa vào đây giữ chỗ là s. Vì vậy, về cơ bản có s và nó đặt nó ở đây. Và sau đó nó sẽ in ra, bạn chọn cao hoặc bạn đã chọn một số lượng thấp. OK. Vì vậy, vòng lặp cho phép bạn thực hiện điều trong chuyển động tròn, phải không? Bạn có thể đã gặp phải điều này trong Đầu trong hình thức của Forever vòng Lặp lại hoặc đến hoặc Lặp lại đặc biệt số lần. Vậy tại sao điều này là tốt cho chúng ta? Vâng, trong C, chúng ta hãy nói rằng chúng tôi có điều này bài hát được thực hiện trong Scratch mà hát, đây là bài hát mà không bao giờ kết thúc. Nó chỉ đi và về và mãi mãi và mãi mãi. Vâng, bạn có thể không thực sự làm cho một chương trình rằng có một số lượng vô hạn của printf báo cáo trong đó, phải không? Vì vậy, trong trường hợp cụ thể này, một trong những cách mà bạn có thể làm công việc này và để làm cho nó in mãi mãi là thay vì sử dụng một vòng lặp khi. Vì vậy, một vòng lặp khi sẽ thực hiện những gì trong cơ thể của hai niềng răng mà thuộc về nó dựa trên những gì điều kiện là. Vì vậy, trong ví dụ này trước, nếu chúng tôi muốn in này mãi mãi, những gì chúng ta có thể làm gì? Vâng, chắc chắn, phải không? Vì vậy, loại này kết hợp các ý tưởng một số biểu thức Boolean cùng với một vòng lặp. Và chúng tôi đã học được về Boolean biểu trước đó. Vì vậy, bất cứ khi nào các điều kiện bên trong Trong khi đó vẫn còn đúng, vòng lặp này sẽ thực hiện trên và trên và trên. Và trong trường hợp này, nếu chúng ta chỉ cung cấp nó với sự thật, điều này gây ra vô hạn vòng lặp mà in bài hát và về và như chúng ta mong muốn trước khi mà không có một chương trình mà có vô hạn số báo cáo printf, đó là không thể. Vì vậy, compellingly hơn, mặc dù, bạn có thể sử dụng điều này với một biến và một điều kiện. Vì vậy, hãy nói rằng chúng tôi muốn lặp lại cụm từ, hoàn toàn điên rồ, 10 lần. Vì vậy, những gì bạn có thể làm với một vòng lặp khi là đầu tiên bạn có thể khởi tạo một truy cập bên ngoài biến của Trong khi vòng lặp đến 10. Và sau đó về cơ bản, mỗi khi bạn đi thông qua các vòng lặp Trong khi đó, bạn in ra báo cáo và sau đó bạn giảm truy cập biến cho đến lúc kết thúc, tại một số điểm, một khi chúng ta trừ tôi đủ lần, 1 từ tôi đủ thời gian - và chỉ cần làm rõ, tôi trừ trừ có nghĩa là tôi bằng tôi trừ đi 1. Về cơ bản sẽ mang tôi xuống điểm mà một lần tôi nhấn không, điều này điều kiện là không còn đúng nữa và do đó, nó thoát ra khỏi vòng lặp. Vì vậy, hoàn toàn điên rồ chỉ in 10 lần. Thắc mắc về một vòng lặp Trong khi? OK. Vì vậy, có một cách chúng ta có thể làm những gì chúng ta đã làm một cách ngắn gọn hơn với những gì chúng ta gọi là Đối với loop. Vì vậy, một vòng lặp Ví bao gồm một khởi tạo, một điều kiện, và một cập nhật, giống như chúng tôi đã có trước trong vòng lặp khi điều này. Vì vậy, chúng ta hãy có một cái nhìn. Trong vòng lặp khi điều này, chúng tôi đã có một khởi tạo, sau đó chúng tôi đã có một điều kiện mà chúng tôi kiểm tra. Và sau đó chúng tôi đã có một bản cập nhật bước ở đầu trang. Đối với một vòng lặp, điều này về cơ bản có ba điều này và ngưng tụ nó thành một dòng. Vì vậy, điều đầu tiên mà nó trong Cho vòng lặp là khởi tạo. Và sau đó bạn làm một dấu chấm phẩy, và sau đó bạn làm điều kiện, đó là tôi lớn hơn số không đi qua đó, và sau đó bước cập nhật. Vì vậy, đây được thực hiện tại rất kết thúc của thân vòng lặp. Vì vậy, hai chương trình này là về cơ bản tương đương. Bất kỳ câu hỏi? Vì vậy, một sự khác biệt là những gì giữa hai? Ai có thể chỉ ra? Nó có thể là một chút tinh tế. Nó chỉ là một sự khác biệt rất nhỏ. Có? SPEAKER 5: Bạn sẽ không thể sử dụng biến tôi bên ngoài Đối với loop [Nghe được]? JOSEPH: Chính xác. Vì vậy, đây là một cái gì đó chúng ta sẽ nhận được sau này gọi là phạm vi biến. Nhưng về cơ bản, điều này int cuộc sống tôi bên ngoài vòng lặp khi điều này. Vì vậy, một vòng lặp khi điều này được thực hiện thực hiện, tôi sẽ có thể sử dụng I sau trên trong chương trình. Trong khi với điều này Đối với loop, int này tôi được scoped bên trong này Đối với loop. Và bởi vì nó là bên trong của phần này của vòng Đối với, bắt đầu tại dấu ngoặc đơn và kết thúc bằng nẹp xoăn ở đó. Bất cứ điều gì đó là tuyên bố bên trong ở đây không thể được sử dụng bên ngoài. Vì vậy, nếu tôi cố gắng sử dụng tôi bên ngoài, nó sẽ cho tôi biết, biểu tượng không khai báo. Và về cơ bản, tôi sẽ không có thể sử dụng nó. ROB: Và tốt, 10 năm trước, trong nghĩa là tất cả các trường hợp, dấu ngoặc nhọn là những gì bạn sử dụng để xác định phạm vi của một biến. Vì vậy, trong đó, int tôi tương đương với 10 được khai báo bên trong này tập hợp các dấu ngoặc nhọn. Và như vậy thì miễn là bạn cố gắng sử dụng tôi trước khi cú đúp xoăn này, không sao đâu. Bạn có thể thấy khi bạn gõ thực hiện, bạn nhìn thấy dấu gạch ngang, dấu gạch ngang, tiêu chuẩn, bằng, C99. Vì vậy, đó là một phiên bản sau này của C GCC đã thực hiện cũng cho phím tắt này. Vì vậy, đây được sử dụng để không được phép trong C. Và bạn có thể thấy lý do tại sao, bởi vì int này Tôi là bên ngoài của đôi xoăn này nhưng nó vẫn được coi là trong Phạm vi của các dấu ngoặc nhọn. Nhưng đây là một điều rất thuận tiện, và do đó, nó là một phần mở rộng tốt. JOSEPH: Bất kỳ câu hỏi? OK. Vì vậy, những gì hữu ích hơn là đôi khi bạn muốn loại năng động trong vòng lặp của bạn, phải không? Bạn không muốn chỉ cần nhất thiết phải in hoàn toàn điên rồ tất cả các thời gian, bạn muốn đếm ngược từ 10 hoặc một cái gì đó. Và do đó bạn có thể sử dụng biến đếm bên trong vòng lặp là tốt. Và trong trường hợp này, chương trình này chỉ đếm ngược từ 10 tất cả các con đường xuống. Và những gì nó không in? Nó không in không, đúng, bởi vì khi - Có, nó cũng không in 11. Vì vậy, nó không in bằng không, bởi vì khi Tôi là số không, hãy nhớ, nó đánh giá điều kiện trước khi nó đi vào để thực hiện thân vòng lặp. Và khi tôi là số không, điều này là sai, vì vậy nó không in ra đếm ngược bằng không, nó chỉ in ra đếm giảm 10 tất cả các con đường xuống 1. Nếu chúng ta thực sự muốn nó để in không, sau đó chúng tôi sẽ đặt một dấu bằng sau này lớn hơn dấu. OK. Vì vậy, một trong những cách để làm xác nhận đầu vào, là khi bạn yêu cầu người dùng phải làm một cái gì đó, bạn muốn chắc chắn rằng họ làm theo hướng dẫn của bạn, là sử dụng Trong khi vòng lặp, phải không? Vì vậy, trong trường hợp này, tôi yêu cầu đối với một số tích cực và sau đó tôi chờ đợi đầu vào. Và sau đó tôi đã kiểm tra Trong khi đầu vào là nhỏ hơn không, hãy yêu cầu họ. Vì vậy, miễn là họ đưa cho tôi một số đó không phải là tích cực, tiếp tục yêu cầu, tiếp tục yêu cầu, tiếp tục yêu cầu. Nhưng những gì sắp xếp kỳ lạ về việc này là? Hoặc những gì có vẻ không tối ưu về cấu trúc này ngay tại đây? Bất cứ ai? Có? SPEAKER 6: Bạn đang lặp đi lặp lại hướng dẫn hai lần. JOSEPH: Đúng vậy. Vì vậy, chúng tôi có hai câu printf ở đây, phải không? Vì vậy, có một cách chúng ta có thể có được điều này chỉ xuống một trong đó sẽ làm cho chúng tôi mã dễ đọc và một sạch sẽ hơn chút. Và sau đó chúng ta sẽ không phải đã có được trong hai lần là tốt. Và một trong những cách bạn có thể làm điều này là bằng cách sử dụng một vòng lặp Do-Trong khi. Và một vòng lặp Do-Trong khi về cơ bản là một hình thức khác nhau của một vòng lặp Trong khi nơi bất cứ điều gì trong dấu ngoặc nhọn được thực hiện ít nhất một lần. Vì vậy, ở đây, tôi tuyên bố, int đầu vào, bên ngoài đầu tiên. Và sau đó tôi chỉ nói, làm điều này hướng dẫn trong khi đầu vào là nhỏ hơn không. Vì vậy, nó chạm Do đầu tiên. Nó sẽ luôn luôn thực hiện điều này ít nhất một lần, do đó, nó sẽ luôn luôn yêu cầu người dùng cho đầu vào ít nhất một lần. Và sau đó nó đánh giá đầu vào, và nó diễn ra trong một vòng tròn. Vâng, câu hỏi? SPEAKER 6: Có cách nào để làm điều đó [Nghe được] loại, như nếu bạn nói, GetString, và ai đó [không nghe được] là có một cách để [không nghe được] JOSEPH: Vì vậy, câu hỏi là, là có một cách để làm xác nhận đầu vào, nếu người sử dụng không đặt ở bên phải loại biến? Vì vậy, nếu chúng tôi yêu cầu một int và họ cung cấp cho chúng tôi một chuỗi thay thế. Và trong các chức năng mà chúng tôi thực hiện cho bạn, getInt, GetString trong tất cả các những chức năng, họ thực sự đã làm được một loại đầu vào cơ bản xác nhận dưới mui xe. Vì vậy, nếu bạn đang sử dụng các chức năng mà chúng tôi cho bạn, bạn không thực sự phải. Nhưng nếu bạn muốn xem xét thêm vào như thế nào bạn thực sự có thể làm điều đó, bạn có thể nhìn dưới mui xe tại các tập tin I/O-- không nộp, các chức năng I / O tiêu chuẩn như một đọc từ đầu vào tiêu chuẩn và đầu ra tiêu chuẩn. Và bạn có thể có được một cảm giác tốt hơn làm thế nào bạn có thể làm điều đó. ROB: Một vấn đề, tuy nhiên, là đặc biệt với ví dụ bạn cho biết, bạn mong đợi một chuỗi và tôi nhập một int. Làm thế nào bạn sẽ biết sự khác biệt giữa cố ý muốn của chuỗi 123 so với mong muốn các int 123? Vì vậy, chuỗi, nó khá nhiều không có xác nhận, nó chỉ là những gì họ nhập bạn sẽ giải thích như là một chuỗi. Int là dễ dàng hơn, bởi vì không có vấn đề đầu vào bạn đi từ người sử dụng, bạn có luôn luôn tham gia một chuỗi. Và do đó chuỗi mà bạn có thể sau đó kiểm tra, là tất cả các chữ số thực sự số? JOSEPH: OK. Thắc mắc về một vòng lặp Do-Trong khi? ROB: Oh, và đây cũng là - sẽ trở lại phạm vi, một chút chung sai lầm là cố gắng sử dụng một số địa phương biến từ bên trong này Do-Trong khi vòng lặp bên trong của tình trạng này. Và trên thực tế, nếu chúng ta chỉ đã thoát khỏi này và cho biết, int đầu vào bằng GetInt, sau đó trình biên dịch sẽ hét vào mặt chúng tôi, bởi vì đầu vào không tồn tại ngoài phạm vi của các dấu ngoặc nhọn. JOSEPH: Và đó là lý do tại sao chúng tôi cần dòng sản phẩm này ở đây. OK. Vì vậy, bạn cũng có thể thoát ra khỏi một vòng đầu nếu bạn muốn. Vì vậy, đây là một cách khác nhau thực hiện những gì chúng ta chỉ cần thực hiện. Và thay vì sử dụng điều kiện trong dấu ngoặc đơn, chúng tôi đang sử dụng một Nếu tuyên bố bên trong cơ thể của vòng lặp Do-Trong khi. Và về cơ bản, khi đầu vào là cuối cùng lớn hơn không, chúng tôi sẽ thoát ra khỏi vòng lặp. Và vì vậy chúng tôi sẽ đi tất cả các con đường xuống đây. Và bạn có thể thấy rằng điều này sẽ có thể được ưa thích trong này kịch bản, bởi vì nó là một chút bit sạch hơn và một chút bit dễ dàng hơn để đọc. Trong khi đó, bạn loại có dòng thêm trong đó. Nó chỉ là một chút xấu hơn, Tôi đoán, trong một ý nghĩa. Vâng, câu hỏi? SPEAKER 4: Sẽ chỉ phá vỡ được bạn ra khỏi một bộ niềng răng? JOSEPH: Đúng vậy. Vì vậy, câu hỏi là sẽ chỉ phá vỡ giúp bạn có được ra khỏi một vòng lặp? Và câu trả lời là có. Vì vậy, nếu bạn đã lồng Đối với các vòng lặp, cho Ví dụ, nếu tôi có int Đối với tôi bằng 0 cho đến khi 10 và sau đó Đối với int J bằng 0 cho đến 10, nếu tôi thoát ra khỏi bên trong vòng lặp, tôi vẫn sẽ đi để các vòng ngoài. Vì vậy, nó sẽ tiếp tục thực hiện hoạt động ở bên ngoài. Bất kỳ câu hỏi về điều đó? Có? SPEAKER 5: Nhưng chỉ phá vỡ chức năng cho dấu ngoặc nhọn, không cho khác báo cáo? [Nghe được] JOSEPH: Vì vậy, câu hỏi là sẽ phá vỡ chỉ có chức năng cho các vòng như trái ngược với báo cáo khác như Nếu? Và có, đó là trường hợp, bởi vì bạn đang phá vỡ ra khỏi một vòng lặp, phải, trong một cảm giác. ROB: Trong hầu hết các trường hợp, đó là đây là loại Nếu một cái gì đó, sau đó phá vỡ. Vì vậy, bạn không cần phải phá vỡ để áp dụng cho Nếu đó là các gói xung quanh nó. Và cũng có thể, điều này là không nhiều của một vòng lặp, nhưng hãy nhớ rằng thiết bị chuyển mạch cũng có chia ra bởi vi phạm. Chúng ta đã thấy vỡ được sử dụng với thiết bị chuyển mạch trước. JOSEPH: Và bạn cũng có thể sử dụng chúng trong vòng Trong khi và cho vòng. Bất kỳ câu hỏi? OK. Vì vậy, bên cạnh là các chức năng. Vì vậy, bạn có thể sử dụng một trong những BYOB khối trong dự án Scratch của bạn. Và điều này về cơ bản cho phép bạn định nghĩa một tập hợp các hướng dẫn để được theo sau. Và những gì tôi có ý nghĩa bởi đó là chúng ta hãy nghĩ trở lại toán học, phải, đại số. Bạn có những gì chúng ta gọi là một chức năng của x, một số thay đổi, và chúng ta hãy nói điều này chức năng là e x = x cộng 5. Vì vậy, bạn có thể nghĩ e x như này màu đen hộp mà phải mất 15 năm và sau đó sản xuất 20. Vì vậy, nói chung, một chức năng là một cái gì đó mà có một số yếu tố đầu vào và sau đó sản xuất một số kết quả đầu ra. Và tại sao chức năng tốt? Họ đang tốt cho một số lý do. Vì vậy, không ai muốn mất một đâm vào những gì tổ chức có nghĩa là? Về lý do tại sao chức năng này hữu ích không? Có? SPEAKER 4: Nó làm cho bạn mã dễ đọc hơn. JOSEPH: Đúng vậy. Vì vậy, một trong những điều là nó làm cho mã của bạn dễ đọc hơn, phải không? Thay vì như int x = x lần x lần x, tôi có thể có khối lập phương của x, đó là dễ đọc hơn và nhiều hơn nữa dễ hiểu đối với người đọc. Tổ chức này cũng về chia tay mã của bạn vào quản lý phần, do đó, thay vì cố gắng thực hiện điều này tất cả trong một phần dài trong chính, bạn có thể loại tách nó ra vào như, OK, chúng ta hãy viết một chức năng để cube một cái gì đó, chúng ta hãy viết chức năng để vuông một cái gì đó. Bằng cách đó bạn có thể chia nó ra thành nhỏ, phần nhỏ mà bạn có thể giải quyết như trái ngược với cố gắng để giải quyết một vấn đề lớn cùng một lúc. ROB: Hoặc thậm chí nhỏ, các bộ phận nhỏ mà bạn và đối tác có thể giải quyết. JOSEPH: Vâng. ROB: Vì vậy, thay vì cả hai bạn cố gắng để cấy ghép một hoạt động cùng một lúc. JOSEPH: Đơn giản hoá. Bất cứ ai cũng muốn có một đoán? Có? SPEAKER 5: thêm sự lặp lại. JOSEPH: Đúng vậy. Vì vậy, một điều mà bạn có thể làm với đơn giản hóa là nó là loại trên dòng giống như lại khả năng sử dụng là một lần tôi viết một chức năng lập phương, tôi có thể chỉ cần sử dụng hơn và hơn và hơn một lần nữa trong chương trình của tôi thay vì gõ x lần x lần x hơn và hơn và hơn nữa. Và đơn giản hóa ở đây cũng chỉ có nghĩa là nó làm cho mã của bạn loại dễ dàng hơn để gỡ lỗi khi bạn chia lên này vào các chức năng. Bởi vì sau đó bạn có thể khoanh vùng nơi vấn đề của bạn là loại. Bất kỳ câu hỏi? Vì vậy, ý tưởng khác là trừu tượng, phải không? Hộp đen này. Như bạn có biết không getInt nhận đầu vào từ người sử dụng? Chúng tôi đã không thực sự nói với bạn, phải không? Tất cả chúng tôi đã nói với bạn là không getInt chính xác những gì nó nói nó. Vì vậy, ngay cả khi chúng tôi không nói cho bạn như thế nào nó hoạt động, bạn vẫn biết. Vì vậy, trong trường hợp này, đây là một chức năng tăng gấp bốn lần mà không khác nhau đối với một đầu vào để sản xuất một đầu ra. Và bạn có thể tăng gấp bốn lần số bằng cách nhân nó bằng bốn. Hoặc bạn có thể những gì chúng ta gọi bit thay đổi nó bởi hai. Và chúng tôi sẽ giới thiệu này một chút sau đó. Và không có cần phải biết làm thế nào chức năng thực sự hoạt động miễn là nó hoạt động như đã nêu. Vì vậy, dưới mui xe, tôi có thể như thế, trở lại lần đầu vào tám chia hai. Và bạn sẽ không biết, phải không? Tất cả các bạn cần biết là nó những gì nó nói. Vì vậy, đó là điều hữu ích về trừu tượng. Và một điều là loại ý tưởng này của địa hóa mã của bạn để một phần cụ thể. Vì vậy, nếu bạn có một vấn đề, bạn không phải đi qua tất cả các mã của bạn cố gắng để sửa chữa nơi mà vấn đề là. Vì vậy, trong trường hợp này, tôi thực hiện cube sai. Tôi nghĩ rằng khối lập phương được nhân bởi ba. Vì vậy, trong trường hợp này, đây là một chương trình mà chỉ có nhân với ba ở khắp mọi nơi. Và có một chương trình mà có khối yếu tố xác ra thành một chức năng. Và vì vậy bây giờ nếu tôi muốn sửa chữa sai lầm của tôi ở đây, tôi phải sửa chữa tất cả các dòng mã trong chương trình này. Trong khi mặt khác, nếu tôi sử dụng chức năng, tôi chỉ cần thay đổi những gì đã sai ở một nơi. Vì vậy, trong khoa học máy tính, chúng tôi gọi đầu vào và đầu ra. Đầu vào được gọi là các tham số hoặc lập luận, và kết quả đầu ra được gọi là giá trị trả lại. Và chúng tôi sẽ xem cách này giúp chúng ta loại của định nghĩa một hàm trong một giây. Vì vậy, đây là một định nghĩa chức năng cho Cubing. Vì vậy, nó có một đầu vào, và sau đó nó trả về mà lần số bản thân ba lần. Vì vậy, chúng ta hãy phá vỡ này. Vì vậy, chúng tôi có một tiêu đề chức năng, mà về cơ bản bao gồm ba điều. Vì vậy, chúng tôi có các thông số, mà là, như tôi đã nói trước đây, đầu vào cho chức năng này. Và sau đó chúng tôi cung cấp cho các chức năng một tên. Trong trường hợp này, nó được gọi là khối lập phương. Và sau đó chúng tôi xác định những gì các loại giá trị trả lại là. Vì vậy, trong trường hợp này, chức năng khối của tôi có trong một số nguyên và nó cũng trả về một số nguyên. Vì vậy, nếu tôi vượt qua trong hai, hai là một số nguyên, nó trả về tám với tôi, mà là một số nguyên. Vì vậy, trở lại các thông số loại tên. Câu hỏi về điều đó? Và sau đó trở về giá trị thực sự là quy định tại kết thúc bằng cách nói trở lại và sau đó trở về bất cứ điều gì chứa giá trị trả về. Vì vậy, trong trường hợp này, nếu chúng ta đặt nó tất cả với nhau, một chức năng có trong các thông số, nó được gọi là một cái gì đó, và nó sẽ trả về một cái gì đó là loại mà chúng ta nói nó đã có được. Bất kỳ câu hỏi? Vì vậy, làm thế nào để chúng tôi sử dụng một chức năng? Vâng, chúng tôi viết một chức năng và sau đó chúng ta sử dụng nó trong chương trình của chúng tôi, phải không? Vì vậy, tôi gọi nó là khối lập phương, và sau đó tôi có thể sử dụng khối lập phương. Nhưng điều quan trọng cần lưu ý là vấn đề trật tự. Nếu tôi có khối bên dưới chính, đó là sẽ chạy vào các khối lập phương. Và vào thời điểm này, không có gì được gọi là khối lập phương trong chương trình, và nó chỉ cần đi để được như thế, tôi có không có ý tưởng gì là khối lập phương. Vì vậy, nó sẽ cho bạn biết, tiềm ẩn kê khai chức năng. Đó là lỗi xuất hiện. Và như vậy trong trường hợp này, khối lập phương là dưới đây chính, vì vậy nó sẽ không để biết về nó. SPEAKER 5: Vì vậy, chính thường là chức năng cuối cùng được xác định? JOSEPH: Vì vậy, câu hỏi là, là chính thường là cuối cùng điều mà bạn muốn xác định? Và không có. Đó là bởi vì chúng ta thường thích chính là ở đầu, phải không? Bởi vì đó là điều đầu tiên bạn muốn các lập trình viên mở chương trình để xem. Và vì vậy làm thế nào để chúng ta giải quyết vấn đề này của chúng tôi muốn chính là ở đầu trang, nhưng chức năng mà chúng tôi muốn, chúng tôi muốn họ được dưới chính nhưng có thể sử dụng chúng bên trong của chính? Vâng, chúng tôi sử dụng những gì chúng ta gọi một nguyên mẫu chức năng. Vì vậy, những gì một mẫu thử nghiệm chức năng cơ bản được là nó có những gì đầu tiên chữ ký hoặc tiêu đề chức năng những gì chúng ta muốn thực hiện xuống ở đây, và chúng tôi đặt nó ở đầu của một chương trình. Vì vậy, trong trường hợp này, chúng ta nói rằng, tốt, sau này trong chương trình của chúng tôi, chúng tôi sẽ để thực hiện một lời hứa thực hiện điều này chức năng gọi là int khối lập phương, trong đó có một đầu vào số nguyên. Vì vậy, bây giờ, bởi vì đó là trên chính, chính, nó sẽ nói, oh, tốt, trong chương trình, đó sẽ là có để tôi có thể đề cập đến nó, vì vậy tôi sẽ chỉ để cho nó đi qua cho bây giờ. Và sau đó ở phía dưới, chúng tôi thực hiện khối lập phương. Và sau đó chính sẽ chỉ nói, tốt, nó sẽ sắp xếp liên kết hai biểu tượng này lại với nhau. Và chúng tôi sẽ bao gồm những gì mà có nghĩa là sau này. Và do đó, nó sẽ biết rằng đây là chức năng lập phương đó nên sử dụng. ROB: Các [không nghe được] về mong muốn chính ở dưới cùng hoặc đầu, tôi đã nhìn thấy cả hai. Có những điều mà chỉ thích đặt chính ở phía dưới. Nhưng một khi một dự án được đặc biệt lớn, thường chính là trong một nộp tất cả của riêng mình. Và tại thời điểm đó, giống như dòng khối int sẽ - bên trong stdio.h là một bó của dòng giống như int mà dòng đầu vào khối int. Và do đó, những nguyên mẫu là những điều bạn có xu hướng để đưa vào tập tin tiêu đề, tại thời điểm đó, nó không quan trọng. Vâng, nó không quan trọng. Những người luôn luôn đi ở đầu trang. Và nếu chính không phải là một tập tin tất cả của riêng mình, bạn không phải lo lắng về việc đưa nguyên mẫu chức năng cá nhân trong tập tin. JOSEPH: Và chúng ta sẽ nhận được một chút bit sau khi Rob bắt đầu nói chuyện về biên dịch. Và như vậy cũng có một sự khác biệt giữa tham số và tranh luận. Và tham số chỉ là những gì chúng ta gọi là các yếu tố đầu vào khi chúng tôi xác định các chức năng. Và chúng tôi gọi nó là một cuộc tranh cãi khi chúng ta thực sự vượt qua nó vào các chức năng. Vì vậy, trong trường hợp này, đây là một tham số, như chúng tôi đã nói trước đây. Và khi chúng ta thực sự sử dụng nó ở đó, lập phương của x, sau đó chính nó là x những gì chúng ta gọi là một cuộc tranh cãi với chức năng lập phương. ROB: Vì vậy, đối số tham số của là - có sự phân biệt này, rất nhầm lẫn cho nhau. Tại thời điểm này, với tôi, nó giống như một trong những từ mà khi tôi nhìn thấy nó trong tự nhiên, tôi không thể giúp đỡ, nhưng ngay lập tức câu hỏi liệu họ đang sử dụng nó trong bối cảnh chính xác, bởi vì Sự khác biệt là đủ tinh tế mà chỉ tất cả mọi người có xu hướng - Tôi gần như luôn luôn nói rằng lập luận bất kể những gì tôi có ý nghĩa. JOSEPH: Và chức năng cũng rất hữu ích cho những gì chúng ta gọi là tác dụng phụ. Vì vậy, một chức năng có thể không có đầu vào, và nó cũng có thể sản xuất không có đầu ra. Vì vậy, trong trường hợp cụ thể này, tôi xác định một chương trình con mà không có giá trị trở lại. Và để xác định rằng, chúng tôi sử dụng những gì chúng ta gọi là một khoảng trống ở đây. Và do đó, các tác dụng phụ của chức năng này là nó chỉ in thứ ra trang. Nó không thực sự có bất kỳ đầu vào, và nó không thực sự sản xuất bất kỳ kết quả đầu ra. Nhưng điều này có thể hữu ích trong ý nghĩa nếu bạn muốn, ví dụ, gỡ lỗi một cái gì đó trong chương trình của bạn, nếu bạn muốn để viết một chương trình con nhỏ đó in ra, hãy nói, các nội dung bộ nhớ hoặc một cái gì đó. Và do đó, những tác dụng phụ đôi khi hữu ích bên ngoài bối cảnh chỉ thích đầu vào và đầu ra. Bất kỳ câu hỏi? Và kết thúc đoạn đặc biệt này, những gì chương trình này làm gì? Tôi sẽ cung cấp cho các bạn một vài giây để đọc qua nó. Ở một mức độ rất cơ bản, những gì chúng ta muốn nói là nó hoán đổi x và y, phải không? Vì vậy, có bao nhiêu bạn thực sự nghĩ rằng điều này sẽ trao đổi x và y? Giơ tay lên. Không có ai. OK. Người nghĩ rằng nó sẽ không trao đổi x và y? Và số tiền đó là không phải là toàn bộ căn phòng. Vì vậy, một số người không chắc chắn. OK. Đó là hợp lý. Vì vậy, hãy đi qua những gì sẽ xảy ra khi bạn thực sự gọi chức năng đầu tiên trong Để trả lời câu hỏi này. Vì vậy, đây là những gì bộ nhớ loại như thế nào. Đây là loại giống như một mô hình đơn giản những gì trông giống như bộ nhớ khi bạn chạy một chương trình. Do đó, có một cái gì đó gọi là ngăn xếp xuống đây và một cái gì đó gọi là đống. Và những phát triển về phía giữa bộ nhớ. Vì vậy, trong trường hợp này, khi bạn gọi một chức năng, nó được đặt trên stack. Và sau đó bất cứ điều gì được chứa trong đó chức năng nằm trong những gì chúng ta gọi đó là stack frame chức năng của. Và do đó, để có được một hình dung tốt đẹp của này, let's - ví dụ, chúng tôi đã có chương trình chính trước đó. Và bên trong của chính chúng ta gọi là khối lập phương. Đầu tiên để chính sẽ đi trên stack khung, bởi vì nó là chức năng đầu tiên đó được gọi là. Và sau đó khi khối lập phương được gọi là bên trong chính, nó được đặt lên hàng đầu của chính trong bộ nhớ. Vì vậy, những gì bạn sẽ nhận thấy đây là khối lập phương có các tham số của nó và của riêng mình người dân địa phương riêng. Vì vậy, khi bạn thực sự vượt qua một cái gì đó để một chức năng, các tham số mà nó được là bản sao của những gì đã thông qua từ chính. Và loại giải thích điều này, chúng ta hãy đi bộ qua một chương trình. Vì vậy, chúng tôi có chồng, đây là chỉ là phần chồng. Và những gì chúng tôi làm là khởi tạo đầu tiên x và y cho một và hai. Vì vậy, chúng tôi có những hộp nhỏ. Họ đang ngồi trong chính của chồng khung trên stack. Chúng có chứa một và hai. Bây giờ chúng ta gọi là trao đổi. Điều gì xảy ra là chúng tôi vượt qua x và y vào trao đổi, trao đổi và tạo ra các bản sao của chính mình của các biến sử dụng trong khung stack của nó. Vì vậy bây giờ ở đó, chúng ta có một, mà chứa các giá trị x đã và b, trong đó có các giá trị mà y đã có. Vì vậy, một, hai. Và bạn sẽ nhận thấy rằng đây là riêng biệt từ x và y bên trong của chính. Vì vậy, bây giờ chúng ta tạo ra một tạm thời biến có chứa một. Chúng tôi thiết lập một bằng b, vì vậy nó thay đổi từ một đến hai. Và sau đó chúng tôi thiết lập b bằng để tạm thời, mà là một. Và sau đó chúng ta thoát ra khỏi của chức năng này. Khi bạn thoát ra khỏi chức năng, stack frame được lấy ra khỏi ngăn xếp. Chúng tôi gọi nó là đẩy. Bạn đẩy một khung ngăn xếp vào ngăn xếp và bạn bật nếu ra khỏi ngăn xếp. Và vì vậy những gì xảy ra là tất cả mọi thứ là ở chỗ stack frame loại chỉ đi lên trong ngọn lửa. Và do đó không còn tồn tại. Nhưng những gì chúng tôi nhận thấy? Chúng tôi không bao giờ thực sự thay đổi giá trị của x và y, phải không? Vì vậy, những ở địa phương để chính. Và bằng cách đi qua mọi thứ vào trao đổi, chúng tôi thực sự không bao giờ thay đổi những giá trị. Và làm những gì chúng ta gọi này? Chúng ta gọi là đi qua này theo giá trị. Vì vậy, trong C, khi bạn vượt qua mọi thứ vào chức năng, nó đi qua chúng bởi giá trị và làm cho một bản sao của họ cho chức năng để sử dụng. Và chúng ta sẽ tìm hiểu về một cái gì đó gọi là đi ngang qua tham khảo về sau, nhưng đó là một cách bạn có thể giải quyết vấn đề này. Nhưng chúng tôi sẽ không lo lắng về mà cho đến sau này. ROB: Và trên thực tế, điều khoản đó, đi qua tham khảo, do đó, C thậm chí không có đi ngang qua tham khảo. C độc quyền đã đi qua giá trị. Không có vấn đề gì bạn làm, bạn luôn luôn đi qua một bản sao của một cái gì đó. Nó chỉ là, như tôi đã đề cập loại mà trước với con trỏ và một chuỗi thực sự chỉ là bốn byte trỏ đến một nơi nào đó trong bộ nhớ. Vâng, nếu tôi có chuỗi này và nó nói với tôi đó là nơi mà các chuỗi - tốt, nếu tôi có con trỏ này này đặt trong bộ nhớ, sau đó tôi có thể vượt qua một bản sao của con trỏ đến một chức năng, và chức năng mà vẫn biết được nơi ở bộ nhớ nó được. Vì vậy, cả hai con trỏ trỏ để cùng một vị trí trong bộ nhớ, và đó là cách chúng ta sẽ có thể để thay đổi mọi thứ vượt ra ngoài hiện tại stack frame. JOSEPH: Bạn muốn làm biên dịch? ROB: Không, đó là 5:30. JOSEPH: OK. Nó là 5:30. OK. Vì vậy, chúng ta sẽ biên dịch Tôi đoán trong phần tiếp theo, hoặc phần của bạn lãnh đạo sẽ tại thời điểm đó. Và - ROB: Bất kỳ câu hỏi? JOSEPH: Bất kỳ câu hỏi? Có? SPEAKER 5: Sử dụng chuỗi từ CS50, bất kỳ chức năng mà chúng tôi muốn sử dụng cho những, đó sẽ là chức năng như C. CS50 đã không đi vào và thực hiện bất kỳ bổ sung. ROB: Đúng. Bất kỳ của C như [không nghe được], bạn sẽ sử dụng những trên dây của chúng tôi. JOSEPH: Và một điều cuối cùng tôi muốn đề cập đến là chúng ta có một hướng dẫn phong cách cho lớp này. ROB: Oh, yeah. JOSEPH: Vì vậy, nếu bạn đã đi từ một lập trình nền trước, bạn có thể có quy ước nhất định khi bạn viết mã giống như đặt niềng răng trên cùng một dòng hoặc đặc biệt cách thụt hoặc đặt tên biến của bạn. Trong lớp học này, chúng tôi muốn đi theo một hướng dẫn phong cách cụ thể chỉ vì, tốt, nếu bạn đi ra ngoài và làm việc trong ngành công nghiệp, bạn sẽ được dự kiến làm theo hướng dẫn phong cách của công ty mà bạn đi đến. Ví dụ như, Facebook tôi nghĩ có một loại đặc biệt đặt tên ước. Và có sự khác biệt giữa lạc đà biến vỏ và giống như tách chúng bằng dấu gạch dưới. Và cũng có thể, tôi nghĩ quan trọng nhất, như ví dụ, thụt đầu dòng, phải không? Chúng tôi dấu ngoặc nhọn bắt đầu, nơi điều kiện là, và họ là trên dòng tiếp theo. Và chúng tôi cũng đặt trong dấu ngoặc nhọn thậm chí nếu nó chỉ có một dòng. Và rất nhiều lần, có nhiều cách để làm nó, nơi bạn có thể để lại những dấu ngoặc ra nếu nó chỉ có một dòng Nếu theo báo cáo. Nhưng trong lớp học này, chúng tôi muốn đi theo một hướng dẫn phong cách cụ thể chỉ để bạn có được được sử dụng để loại điều đó. ROB: Vâng, và phong cách 50 sẽ thực thi các hướng dẫn phong cách này, và chúng tôi sẽ sử dụng phong cách 50 đến lớp mã của bạn. Vì vậy, nó làm cho mọi thứ dễ dàng hơn cho chúng tôi và hy vọng không nên thực hiện những điều mà tồi tệ hơn nhiều cho bạn đưa ra phong cách tiêu chuẩn hóa không nên có không thực tế. JOSEPH: Và cuối cùng, để tìm thấy phong cách Hướng dẫn, đi đến manual.cs50.net/style. Và yeah. SPEAKER 4: Bạn sẽ thực thi bất kỳ ký tự trên mỗi dòng? ROB: Có. JOSEPH: Xin lỗi mọi người. ROB: Điều đó giống như một trong những người duy nhất. Tại thời điểm này, tôi OK với 120. Tôi OK với nói 120 ký tự trên mỗi dòng. Tôi hiểu có được một số giới hạn. Tôi nghĩ rằng 80 là quá nhỏ, nhưng chúng tôi đang thực thi nó. JOSEPH: Cá nhân, tôi nghĩ rằng với C, 80 ký tự là OK hơn. Một khi bạn bắt đầu nhận được để khác các ngôn ngữ như JavaScript và PHP, không rất hợp lý để chỉ giới hạn nó đến 80 ký tự. OK. Vâng, đó là phần siêu. Có ai muốn kẹo? SPEAKER 4: Có.