>> [เล่นเพลง]
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