[เล่นเพลง] DOUG LLOYD: สิทธิทั้งหมด ชนิดของหัวข้อแปลกใช่มั้ย? หมายเลขมายากล สิ่งที่กวางเขาหมายถึงเมื่อเขา พูดคุยเกี่ยวกับหมายเลขมายากล? ดีบางส่วนของโปรแกรม ที่เราได้เขียนใน CS50 จนถึงขณะนี้ยังมีบางลาง จำนวนชนิดของการโยนในพวกเขา บางทีอาจจะด้วยเหตุผลที่เราทำไม่ได้ ทั้งหมดเข้าใจได้ในขณะนี้ ยกตัวอย่างเช่นในปัญหามาริโอเรา ต่อยอดความสูงของปิรามิดที่ 23 เราบอกว่าคุณอย่างชัดเจน ไม่สามารถไปสูงกว่า 23 แต่สิ่งที่ไม่ 23 หมายความว่าอย่างไร ดีถ้าคุณอ่าน spec อย่างคุณ อาจได้เห็นว่า เหตุผลที่เราต่อยอดได้ที่ 23 เป็นเพราะความสูงมาตรฐาน ของหน้าต่าง terminal 24 ดังนั้นถ้าเรามี ปิรามิดจะสูงกว่านั้น มันอาจจะทำสิ่งนี้แปลก ที่มันวิ่งออกมานอกจอ และคุณรู้ว่าสิ่งที่ไม่ ที่มีความหมายในบริบทใช่มั้ย? คือความหมายของวันที่ 23 ที่เห็นได้ชัดทันที กับใครบางคนที่มีลักษณะที่โปรแกรมของคุณ และอาจจะมีความแตกต่างกัน หน้าต่าง terminal ขนาด? อาจจะไม่. ดูเหมือนว่าตกลง ดีทำไมมันเป็นเพียงน้อยกว่า 23? โดยทั่วไปจะเป็นชนิด ของนิสัยที่ไม่ดีจริง เขียนคงเป็นรหัสของคุณ ในการทำเช่นเมื่อคุณทำจริง เขียนคงเป็นรหัสของคุณ มันเป็นบางครั้งเรียกว่าใช้ หมายเลขมายากลซึ่งเป็นสิ่งที่ โดยทั่วไปเราต้องการที่จะพยายามหลีกเลี่ยง ตัวอย่างเช่นลองดู ฟังก์ชั่นที่เรียบง่ายที่นี่ เห็นได้ชัดว่ามีข้อมูลไม่ ชนิดที่เรียกว่าใน C หรือบัตรดาดฟ้า ดังนั้นเพียงแค่อดทนกับฉัน มันเป็นเรื่องเล็กน้อย pseudocode ผสมในที่นี่ นี้เป็นฟังก์ชั่นที่เรียกว่า จัดการบัตรที่เห็นได้ชัด ใช้เวลาดาดฟ้าเป็นพารามิเตอร์ของตนและ จะออกมาให้ฉันบัตรเดียว และที่ฉันทำบางสิ่งบางอย่างที่นี่ที่ฉัน มีวงที่ทำงาน 0-52 ที่ และฉันจัดการบัตร ดีที่เราได้มีเวทมนตร์ ตัวเลขในที่นี่ขวา คุณเห็นสิ่งที่จำนวนมายากลคืออะไร? หรือที่สำคัญกว่าคุณ เห็นสิ่งที่เป็นปัญหาที่นี่? โดยเฉพาะอย่างยิ่งถ้าเรื่องนี้ เป็นเพียงหนึ่งในฟังก์ชั่น ในแฟ้มของตัวเองใน โฟลเดอร์ที่มี พวงของการที่แตกต่างกัน ไฟล์แต่ละที่ ไม่สิ่งอื่นที่จะของการ์ด บางทีมันอาจจะ shuffles พวกเขาหรือข้อตกลงมือ ห้าใบแทนบัตรเดียว คุณเห็นว่า ปัญหาที่เกิดขึ้นอาจจะเป็นที่นี่? คุณเห็นจำนวนมายากล ผมเคยฉีดเข้าไปในรหัส? มันเป็น 52 ขวา เหมือนอย่างสังหรณ์ใจคุณอาจจะรู้, OK เหมือนสำรับมาตรฐาน บัตรมี 52 ใบ แต่ในโปรแกรมของเราก็แค่ ชนิดของลอยรอบในการมี มันก็เหมือนกับการทั้งหมดในทันทีที่มี 52 วิธีหนึ่งที่จะแก้ปัญหานี้ ปัญหาคือจะทำเช่นนี้ เรามากอย่างชัดเจนในขณะนี้ โทรออกขนาดดาดฟ้าเป็น 52 มันให้มันเล็ก ๆ น้อย ๆ ได้ง่ายขึ้น ความหมายเมื่ออยู่ในห่วง ต่อมาเราก็บอกว่าฉัน น้อยกว่าขนาดดาดฟ้า มันก็ดูเหมือนว่าดีกว่าบอก 52 ตอนนี้ไม่สามารถแก้ไขปัญหาได้จริง มันจะให้สัญลักษณ์บางอย่าง หมายที่จะคงที่ แต่มันไม่ชนิดของจริง แนะนำอีกปัญหาหนึ่ง ที่อาจจะไม่ปรากฏทันที แม้ว่าตัวแปรนี้ ประกาศ globally-- ที่คุณจำสิ่งที่มัน หมายความว่าเมื่อเราประกาศ ตัวแปรทั่วโลกเมื่อเทียบกับในประเทศหรือไม่? แม้ว่าเราจะประกาศตัวแปร ทั่วโลกสิ่งที่ถ้ามี ฟังก์ชั่นอื่น ชุดของฟังก์ชั่น ข้อตกลงที่มีการจัดการบัตร ที่ไม่ได้ตั้งใจเปลี่ยนแปลงขนาดดาดฟ้า หรือมันจะเพิ่มความมันด้วย 1 หรือลดลงได้โดย 1 ที่สามารถสะกดปัญหาใช่มั้ย? โดยเฉพาะอย่างยิ่งถ้าเราจัดการกับชุด ของบัตรที่สับดาดฟ้าเต็มรูปแบบ จำเป็น. ถ้าขนาดดาดฟ้าจะลดลง โดยที่ 1 เช่น 51, เราไม่ได้จริงสับ บัตรทั้งหมดอาจจะเป็น เรากำลังจะออกจากหนึ่งของพวกเขาออกมา และความคุ้มค่าว่าบางทีอาจจะเป็น ที่คาดการณ์ไว้หรือใช้ประโยชน์โดยเป็นนักแสดงที่ดี C มีสิ่งที่เรียกว่า สั่ง preprocessor ​​ซึ่ง จะเรียกว่าแมโครสำหรับ สร้างค่าคงที่ที่เป็นสัญลักษณ์ และในความเป็นจริงคุณได้แล้ว เห็นสั่ง preprocessor, แม้ว่าคุณจะไม่ได้ยินมัน เรียกว่ามีการ #include มันเป็นตัวอย่างของแมโครอื่น หรือสั่ง preprocessor วิธีการสร้างค่าคงที่สัญลักษณ์ หรือให้ชื่อที่จะคงที่ เพื่อให้มีมากขึ้น ความหมายดังต่อไปนี้ # กำหนดชื่อแทน สิ่งที่สำคัญจริงๆกัน ที่นี่อย่างรวดเร็วจริงๆ ไม่ใส่เครื่องหมายอัฒภาคที่ ปลาย # กำหนดของคุณ ดังนั้นจึงเป็น # กำหนดชื่อแทน เมื่อโปรแกรมของคุณจะรวบรวม สิ่งที่เกิดขึ้นจริง เป็นคอมไพเลอร์ถ้าไป ที่จะไปผ่านรห​​ัสของคุณ และแทนที่ตัวอย่างของทุก คำว่า "ชื่อ" กับสิ่งที่คุณ ใส่แทน Analogously ถ้า #include คือการจัดเรียง ของที่คล้ายกับการคัดลอกและวาง # กำหนดแล้วจะเรียงลำดับของ ที่คล้ายกันในการค้นหาและแทนที่ ถ้าคุณเคยใช้คุณลักษณะที่อยู่ใน โปรแกรมประมวลผลคำเช่น ดังนั้นตัวอย่างเช่นถ้าฉัน #define ปี่เป็น 3.14159265, ถ้าคุณดีทางคณิตศาสตร์ แนวโน้มและคุณก็ เห็น 3.14159265 บิน รอบในรหัสของคุณ คุณอาจรู้ว่ามันพูดคุยเกี่ยวกับปี่ แต่บางทีเราสามารถให้มัน เล็ก ๆ น้อย ๆ ความหมายของสัญลักษณ์อื่น ๆ และเราสามารถพูดแทน #define ปี่เป็นคำหนึ่งของตัวเลขที่ ที่ผมไม่ได้ไปเพื่อให้ อ่านซ้ำแล้วซ้ำอีก และสิ่งที่จะเกิดขึ้นแล้ว รวบรวมเวลาคือเมื่อโครงการคือ รวบรวมสิ่งแรกที่ ที่จะเกิดขึ้นมันจะผ่านไป และมันจะเปลี่ยนทุกครั้ง มันเห็นเงินทุน P, ทุนผม มันอย่างแท้จริงจะแทนที่ด้วย 3.14 และอื่น ๆ เพื่อให้คุณ จะได้ไม่ต้องพิมพ์ทุก เวลาในขณะที่โปรแกรมของคุณยังคง มีการทำงานที่คุณ คาดหวังเพราะคุณกำลังทำงาน กับการจัดการกับคูณ แบ่งสิ่งที่เป็นโดยปี่ คุณยังไม่ได้ จำกัด อยู่ที่นี้ ทดแทนตัวเลขเท่านั้น ตัวอย่างเช่นผมอาจ #define แน่นอนเป็น CS50 สตริง ในกรณีนี้เมื่อ โปรแกรมจะรวบรวม # กำหนดจะไปผ่าน รหัสแทนทุกครั้ง เห็น "หลักสูตร" กับ CS50 สตริง คุณจะสังเกตเห็นที่นี่ ว่าฉันมัก # กำหนดทั้งหมดของฉันสัญลักษณ์ที่กำหนดไว้ ค่าคงที่เพื่อที่จะพูด มักจะอยู่ในตัวพิมพ์ใหญ่ทั้งหมด มันเป็นเรื่องการประชุม มันไม่จำเป็นต้องใช้ เหตุผลที่คนทั่วไปจะใช้ เมืองหลวงเมื่อพวกเขากำลัง #defining เป็นเพียงการที่จะทำให้มันชัดเจนว่าจริงๆ องค์ประกอบนี้โดยเฉพาะของรหัสของฉัน เป็นที่กำหนดไว้อย่างต่อเนื่อง ถ้ามันเป็นตัวพิมพ์เล็กเป็นไปได้ว่า มันอาจจะสับสนกับตัวแปร และนั่นอาจจะเป็น ไม่ได้เป็นสิ่งที่ดีที่จะทำ ดังนั้นนี้โดยเฉพาะ การแก้ปัญหาจะดีกว่ามาก กว่าทั้งสองคนก่อนหน้านี้ หากครั้งแรกที่ผม #define ดาดฟ้าขนาด 52 แล้ว ในขณะนี้การใช้งานของฉัน 52 หรือขนาดดาดฟ้าที่นี่ มากขึ้นใช้งานง่ายและปลอดภัยมากเป็น คุณไม่สามารถจัดการกับค่าคงที่ คุณไม่สามารถพูดได้ 52 บวกบวก ที่ไม่ได้ไปแปลงเป็น 53 คุณไม่สามารถเปลี่ยน 52 บางสิ่งบางอย่าง คุณสามารถเปลี่ยนตัวแปร ที่มีค่า 52, ซึ่งเป็นครั้งแรกที่เราแก้ไขได้ก่อน และคุณสามารถเพิ่ม ตัวแปรที่ 53 แต่คุณไม่สามารถพูดได้ 52 บวกบวกและ มีที่อยู่ ๆ ก็เปิดออกเป็น 52 53 52 เสมอ 52 และเพื่อให้คุณไม่สามารถเปลี่ยนแปลงโดยไม่ได้ตั้งใจ ขนาดดาดฟ้าที่นี่โดยการจัดการกับมัน อีกด้านที่ดี ผลกระทบของ แต่นี้ ที่คุณไม่ทราบว่า ทุกประเทศทั่วโลก ใช้ของการ์ดขนาด 52 หรือไม่? ยกตัวอย่างเช่นมันเป็นเรื่องปกติจริงๆ เยอรมนีจะใช้ขนาดดาดฟ้าของ 32, ที่พวกเขาตัดออกบางส่วน ของที่ต่ำกว่าค่าบัตร และในกรณีนี้ผม ต้องการที่จะพอร์ตสวีทของฉัน ฟังก์ชั่นที่เกี่ยวข้องกับ การจัดการบัตรไปยังประเทศเยอรมนี ที่ฉันสามารถทำได้ในกรณีแรกที่เรา แสดงให้เห็นว่าจะต้องไปและแทนที่ กรณีของ 52 ในรหัสของฉันกับ 32 แต่ที่นี่ถ้าฉัน #define ขนาดดาดฟ้า 32 ที่ส่วนบนสุดของรหัสของฉัน ถ้าผมต้องเปลี่ยนฉันสามารถ เพียงแค่ไปเปลี่ยนที่และสิ่งหนึ่งที่ คอมไพล์รหัสของฉันและทุก ทันทีที่มันแพร่กระจายผ่าน ในความเป็นจริงเราสามารถเปลี่ยนดาดฟ้า ขนาดที่ค่าใด ๆ ที่เราต้องการ ฉันสามารถคุณสนใจใน เกมของรถกระบะขนาดดาดฟ้า? ฉันลอยด์ดั๊ก และนี่คือ CS50