1
00:00:00,000 --> 00:00:04,000
Jika Anda ingin belajar tentang ilmu komputer dan seninya\n

2
00:00:04,000 --> 00:00:09,300
CS50 dianggap oleh banyak orang sebagai salah satu\n

3
00:00:09,300 --> 00:00:13,000
Ini adalah kursus Universitas Harvard\yang diajarkan oleh Dr. David Malan

4
00:00:13,000 --> 00:00:17,000
dan kami bangga membawanya ke\n

5
00:00:17,000 --> 00:00:23,000
Sepanjang rangkaian kuliah, Dr. Malan akan mengajari Anda \n

6
00:00:23,000 --> 00:00:27,300
Dan pastikan untuk sering memeriksa deskripsi\n

7
00:01:45,801 --> 00:01:50,281
DAVID MALAN: Baiklah, ini CS50,\n

8
00:01:50,281 --> 00:01:52,591
untuk intelektual\nperusahaan ilmu komputer

9
00:01:52,590 --> 00:01:56,340
dan seni pemrograman, kembali ke sini\n

10
00:01:56,340 --> 00:01:58,410
untuk pertama kalinya setelah sekian lama.

11
00:02:13,311 --> 00:02:16,911
Dan saya sendiri mengambil kelas ini\nbeberapa waktu yang lalu, namun hampir tidak.

12
00:02:16,911 --> 00:02:20,121
Saat itu musim gugur tahun kedua dan saya\nduduk di kelas.

13
00:02:20,121 --> 00:02:22,431
Dan aku sedikit penasaran\ntapi, eh, sebenarnya tidak

14
00:02:24,508 --> 00:02:26,841
Saya memang ahli\nkomputer, tapi ilmu komputer

15
00:02:26,841 --> 00:02:28,314
terasa seperti sesuatu yang sama sekali.

16
00:02:28,313 --> 00:02:30,230
Dan saya hanya memberanikan diri\nuntuk mengikuti kelas tersebut

17
00:02:30,230 --> 00:02:32,870
pada akhirnya, karena profesor\pada saat itu, Brian Kernighan

18
00:02:32,871 --> 00:02:35,600
mengizinkan saya untuk mengambil\nkelas lulus/gagal, pada awalnya.

19
00:02:35,600 --> 00:02:37,490
Dan itulah yang membuat\namun perbedaannya.

20
00:02:37,491 --> 00:02:39,981
Saya segera menyadari bahwa\nilmu komputer tidak hanya sekedar ilmu komputer

21
00:02:39,980 --> 00:02:42,800
tentang pemrograman dan bekerja\nisolasi di komputer Anda.

22
00:02:42,800 --> 00:02:45,390
Ini sebenarnya tentang\npemecahan masalah secara lebih umum.

23
00:02:45,390 --> 00:02:48,080
Dan sejujurnya ada sesuatu\ntentang pekerjaan rumah

24
00:02:48,080 --> 00:02:51,470
itu, mungkin, sebenarnya menyenangkan\n

25
00:02:51,471 --> 00:02:53,996
Dan ada sesuatu\ntentang kemampuan ini

26
00:02:53,996 --> 00:02:56,121
yang saya temukan, bersama\ndengan semua teman sekelas saya

27
00:02:56,121 --> 00:03:00,373
untuk benar-benar menciptakan sesuatu dan menghadirkan\n

28
00:03:00,372 --> 00:03:03,080
dan semacam membawa sesuatu\n

29
00:03:03,080 --> 00:03:06,260
tapi tidak tahu cara memanfaatkannya,\n

30
00:03:06,260 --> 00:03:08,150
dan pastinya menantang\ndan membuat frustrasi.

31
00:03:08,151 --> 00:03:10,753
Seperti, sampai hari ini,\namun bertahun-tahun kemudian

32
00:03:10,752 --> 00:03:13,460
kamu akan menghadapi\n

33
00:03:13,461 --> 00:03:15,111
dalam pemrograman, itu\nmembuat Anda gila.

34
00:03:15,110 --> 00:03:16,610
Dan Anda merasa seperti menabrak tembok.

35
00:03:16,610 --> 00:03:18,950
Namun trik sebenarnya adalah\nmemberinya waktu yang cukup

36
00:03:18,950 --> 00:03:21,180
untuk mengambil langkah mundur, ambil\na istirahat bila diperlukan.

37
00:03:21,181 --> 00:03:24,441
Dan tidak ada yang lebih baik, menurutku,\n

38
00:03:24,441 --> 00:03:26,169
dan kebanggaan, sungguh,\nketika Anda mendapatkan sesuatu

39
00:03:26,169 --> 00:03:28,461
untuk bekerja, dan di kelas seperti\nini, hadir, pada akhirnya

40
00:03:28,461 --> 00:03:32,091
di akhir semester, sesuatu seperti\ntugas akhir Anda sendiri.

41
00:03:32,091 --> 00:03:35,551
Namun, ini bukan berarti\nSaya melakukannya 100% dengan sempurna.

42
00:03:35,550 --> 00:03:40,760
Faktanya, baru seminggu terakhir ini, saya melihat\n

43
00:03:40,760 --> 00:03:43,281
miliki sekitar 25 tahun\na lalu, dan mengambil foto

44
00:03:43,281 --> 00:03:47,961
dari apa yang tampaknya merupakan yang pertama\n

45
00:03:47,961 --> 00:03:50,271
dan dengan cepat menerima minus 2 poin.

46
00:03:50,270 --> 00:03:53,450
Namun ini adalah program yang akan kami\n

47
00:03:53,450 --> 00:03:57,740
melakukan sesuatu yang sederhana seperti\n

48
00:03:58,408 --> 00:04:00,200
Dan sejujurnya, secara teknis saya belum melakukannya

49
00:04:00,200 --> 00:04:02,480
mengikuti petunjuknya, yaitu\n

50
00:04:02,480 --> 00:04:05,802
Tetapi jika Anda hanya melihat ini, khususnya\n

51
00:04:05,802 --> 00:04:07,760
Anda mungkin pernah mendengar\ntentang bahasa pemrograman

52
00:04:07,760 --> 00:04:09,718
tapi Anda belum pernah mengetik\nsesuatu seperti ini

53
00:04:09,718 --> 00:04:11,480
tidak diragukan lagi itu akan terlihat samar.

54
00:04:11,480 --> 00:04:13,520
Tapi sejujurnya, tidak seperti bahasa manusia\nyang mana

55
00:04:13,520 --> 00:04:17,480
jauh lebih canggih, lebih banyak kosa kata, dan lebih banyak lagi

56
00:04:17,480 --> 00:04:21,620
aturan tata bahasa, pemrograman, sekali\n

57
00:04:21,620 --> 00:04:24,733
itu dan cara kerjanya serta apa saja\n

58
00:04:24,733 --> 00:04:26,900
Anda akan lihat, setelah beberapa\nbulan mengikuti kelas seperti ini

59
00:04:26,901 --> 00:04:29,001
untuk mulai mengajar\ndiri Anda sendiri, selanjutnya

60
00:04:29,000 --> 00:04:32,730
bahasa lain, mungkin\nmuncul, di tahun-tahun mendatang juga.

61
00:04:32,730 --> 00:04:36,050
Jadi, apa yang pada akhirnya penting\dalam kursus khusus ini

62
00:04:36,050 --> 00:04:38,690
bukanlah tempatmu berakhir\ndibandingkan dengan teman sekelasmu

63
00:04:38,690 --> 00:04:41,900
namun posisi Anda pada akhirnya relatif\ndibandingkan diri Anda sendiri saat memulai.

64
00:04:41,901 --> 00:04:43,381
Dan sungguh, Anda akan memulainya hari ini.

65
00:04:43,380 --> 00:04:46,910
Dan satu-satunya pengalaman yang penting\n

66
00:04:46,911 --> 00:04:49,040
Jadi, pertimbangkan di mana Anda berada saat ini.

67
00:04:49,040 --> 00:04:51,531
Pertimbangkan, mungkin, betapa\nsamarnya hal seperti itu

68
00:04:52,850 --> 00:04:56,180
Dan merasa nyaman dengan mengetahuinya\n

69
00:04:56,180 --> 00:04:58,408
akan berada dalam genggamanmu sendiri.

70
00:04:58,408 --> 00:05:01,700
Dan jika Anda berpikir demikian, oke, tentu saja\n

71
00:05:01,701 --> 00:05:05,421
di sebelah kanan, di belakangku, tahu lebih dari\n

72
00:05:05,420 --> 00:05:10,100
2/3 siswa CS50 belum pernah mengikuti\n

73
00:05:10,100 --> 00:05:14,730
Anda berada di perusahaan yang sangat baik\nsepanjang semester ini.

74
00:05:14,730 --> 00:05:16,820
Lalu, apa itu ilmu komputer?

75
00:05:16,821 --> 00:05:18,441
Saya mengklaim bahwa ini adalah pemecahan masalah.

76
00:05:18,440 --> 00:05:20,720
Dan kelebihannya adalah\npemecahan masalah itu penting

77
00:05:20,721 --> 00:05:23,031
sesuatu yang kita lakukan sepanjang waktu.

78
00:05:23,031 --> 00:05:25,834
Tapi kelas\nilmu komputer, belajar memprogram

79
00:05:25,834 --> 00:05:27,500
Saya pikir itu semacam menjernihkan pikiran Anda.

80
00:05:27,500 --> 00:05:31,040
Ini membantu Anda belajar cara berpikir lebih banyak\n

81
00:05:32,630 --> 00:05:34,463
Karena, sejujurnya,\nkomputernya tidak berfungsi

82
00:05:34,463 --> 00:05:37,670
untuk melakukan apa yang Anda inginkan kecuali Anda\n

83
00:05:37,670 --> 00:05:39,896
Jadi, ada\nmanfaat tambahannya

84
00:05:39,896 --> 00:05:42,771
hanya belajar berpikir seperti\n

85
00:05:42,771 --> 00:05:45,561
Dan tidak diperlukan waktu\nbanyak waktu untuk mulai melakukannya.

86
00:05:45,560 --> 00:05:49,221
Ini, misalnya, mungkin adalah\n

87
00:05:49,221 --> 00:05:51,141
tentu saja, tapi sebenarnya\npemecahan masalah secara umum.

88
00:05:51,141 --> 00:05:54,471
Masalah adalah tentang menerima masukan,\n

89
00:05:54,471 --> 00:05:56,360
Anda ingin mendapatkan solusinya, alias.

90
00:05:57,050 --> 00:05:59,750
Jadi, sesuatu yang menarik\npasti terjadi di sini

91
00:05:59,750 --> 00:06:03,240
di sini, ketika Anda mencoba\ngembangkan input ke output tersebut.

92
00:06:03,240 --> 00:06:05,810
Sekarang, khususnya di dunia\nkomputer

93
00:06:05,810 --> 00:06:09,680
kita perlu memutuskan terlebih dahulu bagaimana kita\n

94
00:06:09,680 --> 00:06:13,723
Kita semua hanya perlu memutuskan, apakah\n

95
00:06:13,723 --> 00:06:16,640
jika tidak, kita semua akan berbicara\n

96
00:06:16,641 --> 00:06:18,841
bahasa manusia kita juga.

97
00:06:18,841 --> 00:06:22,550
Dan Anda mungkin tahu betul bahwa\nkomputer cenderung hanya berbicara

98
00:06:26,740 --> 00:06:29,230
Perakitan, satu, tapi biner,\ndua, mungkin bisa menjadi pilihan Anda.

99
00:06:29,230 --> 00:06:32,320
Dan biner, yang berarti dua,\nberarti dunia komputer

100
00:06:32,321 --> 00:06:35,981
hanya memiliki dua digit yang dapat digunakan, 0 dan 1.

101
00:06:35,980 --> 00:06:40,060
Dan memang, kita manusia punya lebih banyak lagi\n

102
00:06:40,690 --> 00:06:43,120
Namun komputer memang\tidak hanya mempunyai angka nol dan satu.

103
00:06:43,120 --> 00:06:45,341
Namun, entah bagaimana mereka bisa berbuat banyak.

104
00:06:45,341 --> 00:06:47,711
Mereka dapat menghitung angka di\nExcel, mengirim pesan teks

105
00:06:47,711 --> 00:06:51,081
membuat gambar dan karya seni\ndan film dan banyak lagi.

106
00:06:51,081 --> 00:06:54,790
Jadi, bagaimana Anda mendapatkan sesuatu\n

107
00:06:54,790 --> 00:06:56,920
untuk semua hal\nyang kita lakukan hari ini

108
00:06:56,920 --> 00:06:58,870
di saku, laptop, dan desktop kita?

109
00:06:58,870 --> 00:07:01,570
Ternyata\nkita bisa memulainya dengan cukup sederhana.

110
00:07:01,571 --> 00:07:05,471
Jika komputer ingin melakukan\n

111
00:07:06,190 --> 00:07:09,190
Nah, di dunia manusia,\nkita mungkin bisa melakukan hal ini

112
00:07:09,190 --> 00:07:13,778
seperti 1, 2, 3, 4, 5, menggunakan apa yang disebut\n

113
00:07:13,778 --> 00:07:16,570
di jari Anda di mana satu jari\n

114
00:07:16,571 --> 00:07:18,521
jika saya, misalnya, mengambil kehadiran.

115
00:07:18,521 --> 00:07:22,600
Sekarang, kita manusia biasanya\sebenarnya menghitung 1, 2, 3, 4, 5, 6.

116
00:07:22,600 --> 00:07:25,480
Dan kita hanya akan melewati lima\ndigit tersebut dan menghitung lebih tinggi lagi

117
00:07:26,951 --> 00:07:29,871
Namun komputer, entah bagaimana, hanya\nmemiliki angka nol dan satu ini.

118
00:07:29,870 --> 00:07:33,190
Jadi jika komputer hanya\nsberbicara biner, nol dan satu

119
00:07:33,190 --> 00:07:36,180
bagaimana cara menghitungnya\nmelewati angka 1?

120
00:07:36,180 --> 00:07:38,740
Tentu saja ini ada 3 angka nol.

121
00:07:38,740 --> 00:07:42,250
Dan jika Anda menerjemahkan\nangka ini dalam biner, 000

122
00:07:42,250 --> 00:07:46,150
ke angka yang lebih dikenal dalam desimal,\n

123
00:07:47,021 --> 00:07:49,871
Jika kita mewakili, dengan\na komputer, angka 1

124
00:07:49,870 --> 00:07:52,930
sebenarnya itu adalah 001,\nhal ini tidak mengejutkan

125
00:07:52,930 --> 00:07:55,990
sama persis dengan\nyang mungkin kita lakukan di dunia manusia

126
00:07:55,990 --> 00:07:59,500
tapi kami mungkin tidak perlu repot-repot menulis\n

127
00:07:59,500 --> 00:08:02,170
Namun komputer, sekarang,\ningin menghitung sebanyak dua

128
00:08:03,701 --> 00:08:06,431
Jadi ia harus menggunakan\npola nol dan satu yang berbeda.

129
00:08:08,620 --> 00:08:10,810
Jadi ini bukan 10 dengan\na nol di depannya.

130
00:08:10,810 --> 00:08:13,281
Memang nol satu nol\dalam konteks biner.

131
00:08:13,281 --> 00:08:15,401
Dan jika kita ingin menghitung\nlebih tinggi sekarang dari dua

132
00:08:15,401 --> 00:08:19,540
kita harus mengubahnya\n

133
00:08:19,540 --> 00:08:24,011
Dan kemudian jika kita ingin 4\atau 5 atau 6 atau 7, ya

134
00:08:24,011 --> 00:08:26,921
cukup ubah ini\nnol dan satuan, alias.

135
00:08:26,920 --> 00:08:31,408
bit, untuk digit biner yang mewakili,\n

136
00:08:31,408 --> 00:08:33,490
nomor berbeda yang Anda\nan saya, sebagai manusia, ketahui

137
00:08:33,490 --> 00:08:36,730
tentu saja, seperti yang disebut\nsistem desimal, 0 sampai 9

138
00:08:36,730 --> 00:08:40,390
dec menyiratkan 10, 10 digit,\nangka nol sampai sembilan.

139
00:08:40,390 --> 00:08:42,760
Jadi mengapa pola khusus itu?

140
00:08:42,760 --> 00:08:44,680
Dan mengapa angka nol dan satu ini?

141
00:08:44,681 --> 00:08:48,011
Ternyata\nmewakili satu atau lain hal

142
00:08:48,010 --> 00:08:50,360
sangat sederhana untuk komputer.

143
00:08:50,860 --> 00:08:53,110
Pada akhirnya, mereka\ndiberdayakan oleh listrik.

144
00:08:53,110 --> 00:08:56,081
Dan itu adalah hal yang sangat sederhana untuk\n

145
00:08:56,081 --> 00:08:57,791
atau jangan menyimpan listrik.

146
00:08:57,791 --> 00:09:00,911
Seperti, itu sesederhana\nyang bisa dilakukan, aktif atau nonaktif.

147
00:09:03,110 --> 00:09:05,821
Jadi sebenarnya, di dalam\nkomputer, telepon, apa saja

148
00:09:05,821 --> 00:09:07,571
saat ini cukup\nelektronik

149
00:09:07,571 --> 00:09:10,763
adalah sejumlah saklar,\atau dikenal sebagai transistor.

150
00:09:11,471 --> 00:09:14,852
Anda punya ribuan, jutaan\n

151
00:09:14,852 --> 00:09:17,810
Dan ini hanyalah saklar kecil\n

152
00:09:17,811 --> 00:09:20,471
Dan dengan mengubah hal-hal tersebut\non-dan mematikannya menjadi pola

153
00:09:20,471 --> 00:09:24,274
komputer dapat menghitung dari 0 ke atas\n

154
00:09:24,274 --> 00:09:27,191
Jadi saklar-saklar ini, sungguh, Anda\n

155
00:09:27,691 --> 00:09:29,983
Izinkan saya meminjam salah satu\lampu panggung kecil di sini.

156
00:09:32,260 --> 00:09:34,690
Jadi, saya hanya bisa menganggap\nini mewakili

157
00:09:34,691 --> 00:09:38,110
di laptop saya, sebuah transistor,\na saklar, mewakili 0.

158
00:09:38,110 --> 00:09:43,120
Namun jika saya mengizinkan listrik\n

159
00:09:43,120 --> 00:09:44,730
Nah, bagaimana cara menghitung lebih tinggi dari 1?

160
00:09:44,730 --> 00:09:46,341
Saya, tentu saja, membutuhkan bola lampu lain.

161
00:09:46,341 --> 00:09:48,531
Jadi izinkan saya mengambil satu lagi di sini.

162
00:09:48,530 --> 00:09:53,350
Dan jika saya memasukkannya ke dalam jenis\n yang sama

163
00:09:53,350 --> 00:09:57,140
Itu semacam cara\nmenghitung jari yang lama dari unary, cukup 1, 2.

164
00:09:57,140 --> 00:09:59,140
Saya ingin benar-benar mempertimbangkan\ninpolanya

165
00:09:59,140 --> 00:10:00,680
dari hal-hal ini hidup dan mati.

166
00:10:00,681 --> 00:10:06,730
Jadi jika ini terjadi beberapa saat yang lalu, apa yang saya\n

167
00:10:06,730 --> 00:10:10,660
dan biarkan yang berikutnya selesai, alias.

168
00:10:12,071 --> 00:10:15,110
Dan izinkan saya memberikan\nbagian ketiga, jika Anda mau.

169
00:10:16,600 --> 00:10:20,440
Berikut adalah pola yang sama sekarang,\ndimulai dari awal dengan 3.

170
00:10:25,721 --> 00:10:32,770
Inilah 010, alias, di\ndunia desimal manusia, 2.

171
00:10:32,770 --> 00:10:35,170
Dan tentu saja, kami dapat\nterus menghitung lebih lanjut.

172
00:10:35,171 --> 00:10:37,941
Sekarang ini akan menjadi 3 dan titik titik titik.

173
00:10:37,941 --> 00:10:40,870
Jika bohlam lain ini mati\non, dan tombol tersebut diputar

174
00:10:40,870 --> 00:10:43,360
dan ketiganya tetap di--\nini, sekali lagi, nomor berapa?

175
00:10:45,581 --> 00:10:49,811
Jadi, sesederhana itu,\nrelatif, jika Anda mau.

176
00:10:49,811 --> 00:10:53,980
Namun bagaimana pola\nini bisa terjadi?

177
00:10:53,980 --> 00:10:56,806
Pola-pola ini sebenarnya\nmengikuti sesuatu yang sangat familiar.

178
00:10:56,806 --> 00:10:58,931
Anda dan saya tidak terlalu\nmemikirkannya pada tingkat ini

179
00:10:58,931 --> 00:11:02,801
lagi karena kami mungkin sudah\n

180
00:11:04,270 --> 00:11:09,160
Namun jika kita menganggap sesuatu dalam\ndesimal, seperti angka 123

181
00:11:10,301 --> 00:11:12,971
Ini terlihat seperti 123 dalam desimal.

182
00:11:13,660 --> 00:11:17,800
Sebenarnya hanya tiga simbol,\n

183
00:11:17,801 --> 00:11:20,291
dengan beberapa kurva, itu\nAnda dan saya sekarang secara naluriah

184
00:11:22,150 --> 00:11:27,000
Namun jika kita mundur beberapa tahun,\n

185
00:11:27,000 --> 00:11:30,480
karena Anda memberikan arti\npada setiap kolom ini.

186
00:11:30,480 --> 00:11:33,331
Angka 3 ada di tempat yang disebut tempat satuan.

187
00:11:33,331 --> 00:11:36,931
Angka 2 berada pada tempat yang disebut tempat puluhan.

188
00:11:36,931 --> 00:11:39,841
Dan angka 1 ada di\nyang disebut tempat ratusan.

189
00:11:39,841 --> 00:11:41,850
Lalu perhitungan matematika terjadi\ndengan cepat di kepala Anda.

190
00:11:41,850 --> 00:11:47,311
Secara teknis ini adalah 100 kali 1, ditambah\n

191
00:11:48,990 --> 00:11:54,390
Dan di sana kita mendapatkan\ngagasan matematika yang kita kenal sebagai 123.

192
00:11:54,390 --> 00:11:58,570
Yah, cukup baik, dalam biner,\nsebenarnya sama saja.

193
00:11:58,571 --> 00:12:01,021
Hanya saja kolom-kolom ini mempunyai arti\nasedikit berbeda.

194
00:12:01,020 --> 00:12:05,010
Jika Anda menggunakan tiga digit dalam desimal,\ndan Anda mendapatkan tempat satuan

195
00:12:05,010 --> 00:12:09,331
tempat puluhan, dan tempat ratusan,\n

196
00:12:09,331 --> 00:12:11,230
Secara teknis mereka hanya pangkat 10.

197
00:12:11,230 --> 00:12:13,620
Jadi 10 berbanding 0, 10 berbanding\n1, 10 berbanding 2.

198
00:12:14,520 --> 00:12:16,440
Sistem desimal, "des" artinya 10.

199
00:12:16,441 --> 00:12:18,841
Anda memiliki 8 dan 10 digit, 0 hingga 9.

200
00:12:18,841 --> 00:12:21,390
Dalam sistem biner, jika Anda\nakan menggunakan tiga digit

201
00:12:21,390 --> 00:12:24,910
ubah saja basisnya jika Anda\hanya menggunakan nol dan satu.

202
00:12:24,910 --> 00:12:29,130
Jadi sekarang pangkatnya 2, 2 banding\n

203
00:12:31,900 --> 00:12:36,120
Dan jika Anda terus melakukannya, itu akan berjalan\n

204
00:12:37,510 --> 00:12:40,260
Jadi, mengapa kami mendapatkan\npola seperti ini?

205
00:12:40,260 --> 00:12:46,290
Ini 000mu karena 4 kali\n

206
00:12:46,291 --> 00:12:49,471
Inilah sebabnya kita mendapatkan\nangka desimal 1 dalam biner.

207
00:12:49,471 --> 00:12:53,341
Inilah sebabnya kita mendapat angka 2\nin biner, karena jumlahnya 4 kali

208
00:12:53,341 --> 00:13:01,051
0, ditambah 2 kali 1, ditambah 1 kali 0, dan\n

209
00:13:01,831 --> 00:13:05,373
Dan, tentu saja, jika Anda ingin\n

210
00:13:06,331 --> 00:13:08,831
Apa yang diperlukan komputer\ndo agar bisa menghitung lebih dari 7?

211
00:13:10,880 --> 00:13:12,530
Tambahkan bola lampu lain, saklar lain.

212
00:13:12,530 --> 00:13:14,810
Dan, tentu saja, komputer\ntelah menstandardisasi caranya

213
00:13:14,811 --> 00:13:17,240
banyak angka nol dan satu,\atau bit atau saklar

214
00:13:17,240 --> 00:13:19,020
mereka menghadapi masalah seperti ini.

215
00:13:19,020 --> 00:13:23,300
Faktanya, sebagian besar komputer akan\n

216
00:13:23,301 --> 00:13:25,971
Dan bahkan jika Anda hanya menghitung\natas tiga atau tujuh

217
00:13:25,971 --> 00:13:28,431
Anda masih akan menggunakan delapan dan\nmemiliki banyak angka nol.

218
00:13:28,431 --> 00:13:31,551
Tapi tidak apa-apa, karena\nkomputer saat ini sudah pasti

219
00:13:31,551 --> 00:13:35,301
punya lebih banyak lagi, ribuan,\n

220
00:13:37,921 --> 00:13:41,671
Baiklah, jadi, jika\n

221
00:13:41,671 --> 00:13:44,161
atau, sejujurnya, setinggi yang kita inginkan, itu saja

222
00:13:44,160 --> 00:13:46,770
sepertinya membuat komputer\nberguna untuk hal-hal seperti Excel

223
00:13:48,030 --> 00:13:50,280
Namun komputer, tentu saja,\nmemungkinkan Anda mengirim pesan teks

224
00:13:50,280 --> 00:13:52,240
menulis dokumen, dan banyak lagi.

225
00:13:52,240 --> 00:13:55,530
Jadi bagaimana komputer mewakili\nsesuatu seperti surat

226
00:13:55,530 --> 00:13:59,860
seperti huruf A dalam bahasa Inggris\n

227
00:14:03,721 --> 00:14:05,961
AUDIENCE: Anda dapat mewakili\nhuruf dalam angka.

228
00:14:05,961 --> 00:14:08,571
DAVID MALAN: Oke, jadi kita bisa\nmerepresentasikan huruf menggunakan angka.

229
00:14:10,004 --> 00:14:11,421
Angka berapa yang mewakili apa?

230
00:14:11,421 --> 00:14:15,221
AUDIENCE: Katakanlah jika Anda memulai\n

231
00:14:15,221 --> 00:14:18,745
bisa dibilang 1 adalah A, 2 adalah B, 3 adalah C.

232
00:14:19,620 --> 00:14:22,630
Ya, kita semua harus sepakat\nentah bagaimana, satu angka itu

233
00:14:22,630 --> 00:14:23,880
akan mewakili satu huruf.

234
00:14:23,880 --> 00:14:28,490
Jadi 1 adalah A, 2 adalah B, 3 adalah\nC, Z adalah 26, dan seterusnya.

235
00:14:28,490 --> 00:14:30,990
Mungkin kita bahkan bisa memperhitungkan\nhuruf besar dan huruf kecil.

236
00:14:30,990 --> 00:14:34,230
Kita hanya perlu menyetujuinya dan menyelesaikannya\n

237
00:14:34,230 --> 00:14:36,461
Dan manusia memang melakukan hal itu.

238
00:14:38,010 --> 00:14:40,110
Ternyata mereka memulai\na sedikit lebih tinggi.

239
00:14:40,110 --> 00:14:44,130
Kapital A telah\ndistandarisasi menjadi angka 65.

240
00:14:44,130 --> 00:14:47,581
Dan huruf kapital B telah\ndistandarkan menjadi angka 66.

241
00:14:47,581 --> 00:14:50,370
Dan Anda bisa membayangkan\nbagaimana perkembangannya dari sana.

242
00:14:50,370 --> 00:14:53,250
Dan itu karena apa pun\nyang Anda wakili

243
00:14:53,250 --> 00:14:57,461
pada akhirnya, hanya dapat disimpan, di\n

244
00:14:57,461 --> 00:15:01,110
Jadi, beberapa manusia di ruangan sebelumnya,\n

245
00:15:01,110 --> 00:15:05,100
atau, sungguh, pola angka nol ini\n

246
00:15:08,791 --> 00:15:12,481
Jadi jika pola nol dan\tidak pernah muncul di komputer

247
00:15:12,480 --> 00:15:17,910
itu mungkin ditafsirkan sebagai memang\n

248
00:15:18,811 --> 00:15:23,191
Tapi saya khawatir, untuk lebih jelasnya, kami\n

249
00:15:23,191 --> 00:15:25,681
Tampaknya, jika saya memainkan\nini dengan naif, maka okelah

250
00:15:25,681 --> 00:15:28,860
bagaimana sekarang saya bisa\nmenghitung angka 65?

251
00:15:28,860 --> 00:15:33,571
Kalau sekarang Excel menampilkan 65 is\nan A, apalagi Bs dan Cs.

252
00:15:33,571 --> 00:15:37,230
Jadi bagaimana mungkin komputer\ndo seperti yang Anda usulkan

253
00:15:37,230 --> 00:15:41,875
miliki pemetaan ini dari angka ke\n

254
00:15:41,875 --> 00:15:43,500
Rasanya seperti kita telah menyerahkan sesuatu.

255
00:15:44,000 --> 00:15:46,262
HADIRIN: Dengan memiliki\na awalan untuk huruf?

256
00:15:46,263 --> 00:15:47,596
DAVID MALAN: Dengan memiliki awalan?

257
00:15:47,596 --> 00:15:48,887
AUDIENCE: Anda dapat memiliki\nawalan dan akhiran.

258
00:15:48,886 --> 00:15:51,640
DAVID MALAN: Oke, jadi kita\nmungkin bisa memiliki semacam awalan

259
00:15:51,640 --> 00:15:53,230
seperti beberapa pola nol dan satu--

260
00:15:53,230 --> 00:15:56,201
Saya suka ini-- itu\nmenunjukkan ke komputer

261
00:15:56,201 --> 00:15:58,870
inilah pola lain\nyang mewakili sebuah huruf.

262
00:15:58,870 --> 00:16:02,920
Inilah pola lain yang\nmewakili angka atau huruf.

263
00:16:05,620 --> 00:16:08,480
Bagaimana komputer\ndibedakan keduanya?

264
00:16:08,980 --> 00:16:11,360
AUDIENCE: Punya format file\nyang berbeda, jadi

265
00:16:11,360 --> 00:16:16,120
seperti, teks aneh atau cukup\nperiksa gambarnya atau--

266
00:16:16,120 --> 00:16:17,841
DAVID MALAN: Memang benar, dan itu tepat sekali.

267
00:16:17,841 --> 00:16:20,781
Tidak ada yang salah dengan saran Anda,\n

268
00:16:20,780 --> 00:16:23,613
Alasan kami memiliki semua ini\n

269
00:16:23,614 --> 00:16:28,521
seperti dokumen JPEG dan GIF dan PNG\ndan Word, .docx

270
00:16:28,520 --> 00:16:32,270
dan file Excel dan sebagainya, adalah\n

271
00:16:32,270 --> 00:16:35,780
dan memutuskan, ya, dalam konteksnya\n

272
00:16:35,780 --> 00:16:38,600
lebih khusus lagi, dalam\nkonteks program jenis ini

273
00:16:38,600 --> 00:16:42,140
Excel versus Photoshop versus\nGoogle Dokumen atau sejenisnya

274
00:16:42,140 --> 00:16:46,550
kami akan menafsirkan pola apa pun\n

275
00:16:46,551 --> 00:16:51,051
untuk Excel, mungkin huruf dalam, seperti, a\n

276
00:16:51,051 --> 00:16:54,471
atau bahkan mungkin warna pelangi\n

277
00:16:55,610 --> 00:16:58,490
Dan kita akan lihat, ketika kita\ndiri memulai pemrograman

278
00:16:58,490 --> 00:17:00,471
Anda, programmer\npada akhirnya akan menyediakannya

279
00:17:00,471 --> 00:17:05,671
beberapa petunjuk ke komputer yang memberitahu\n

280
00:17:05,671 --> 00:17:08,631
Jadi, semangatnya mirip dengan itu, tapi\n

281
00:17:09,260 --> 00:17:12,651
Jadi sistem ini sebenarnya punya\n

282
00:17:12,651 --> 00:17:14,421
Kode Pertukaran Informasi.

283
00:17:14,421 --> 00:17:16,760
Dan memang, hal ini dimulai di sini\di AS, dan begitulah

284
00:17:16,760 --> 00:17:19,550
mengapa sebenarnya sedikit\nbias terhadap A sampai Z

285
00:17:19,550 --> 00:17:21,300
dan sedikit tanda baca juga.

286
00:17:21,300 --> 00:17:22,920
Dan hal itu dengan cepat menjadi masalah.

287
00:17:22,921 --> 00:17:26,780
Namun jika kita memulainya sekarang,\nin bahasa Inggris, pemetaannya

288
00:17:26,780 --> 00:17:28,860
itu sendiri cukup mudah.

289
00:17:28,861 --> 00:17:33,291
Jadi jika A adalah 65, B adalah 66,\nand dot dot dot, misalkan

290
00:17:33,290 --> 00:17:36,020
bahwa Anda menerima pesan teks\n, email, dari seorang teman

291
00:17:36,020 --> 00:17:39,080
dan di balik kap mesin,\nbisa dikatakan begitu, jika Anda mau

292
00:17:39,080 --> 00:17:42,740
melihat ke dalam komputer, apa yang Anda\n

293
00:17:42,740 --> 00:17:48,080
atau email ini kebetulan\nbernomor 72, 73, 33

294
00:17:48,080 --> 00:17:50,810
atau, sebenarnya, pola\nyang mendasari angka nol dan satu.

295
00:17:50,810 --> 00:17:56,376
Apa yang mungkin dikirimkan teman Anda kepada Anda\n

296
00:18:02,280 --> 00:18:06,780
Rupanya menurut ini\n

297
00:18:06,780 --> 00:18:09,421
Dari\ndiagram ini tidak terlihat jelas apa itu 33

298
00:18:09,421 --> 00:18:11,520
tapi memang,\npola ini mewakili "hai.

299
00:18:11,520 --> 00:18:13,773
Dan ada yang ingin menebak,\atau jika Anda tahu, apa itu 33?

300
00:18:13,773 --> 00:18:14,940
HADIRIN: Tanda seru.

301
00:18:14,941 --> 00:18:16,020
DAVID MALAN: Tanda seru.

302
00:18:16,020 --> 00:18:18,562
Dan sejujurnya, hal ini bukanlah hal yang diketahui kebanyakan orang.

303
00:18:18,563 --> 00:18:22,241
Tapi itu mudah diakses oleh\n

304
00:18:23,671 --> 00:18:26,431
Saat aku bilang begitu, kita hanya perlu\n

305
00:18:27,510 --> 00:18:29,302
Mereka menuliskannya di\na buku atau di bagan.

306
00:18:29,303 --> 00:18:33,961
Dan, misalnya, ini\n72 kita untuk H, ini 73 kita untuk I

307
00:18:33,961 --> 00:18:37,861
dan inilah 33\nuntuk tanda seru kami.

308
00:18:37,861 --> 00:18:41,191
Dan komputer, Mac, PC,\niPonsel, perangkat Android

309
00:18:41,191 --> 00:18:43,721
hafal saja pemetaan ini\njika Anda mau.

310
00:18:43,721 --> 00:18:46,451
Mereka dirancang untuk\nmemahami huruf-huruf tersebut.

311
00:18:46,451 --> 00:18:48,121
Jadi di sini, saya mungkin menerima "hai.

312
00:18:48,121 --> 00:18:51,750
Secara teknis, apa yang saya terima adalah\n

313
00:18:51,750 --> 00:18:54,960
Namun penting untuk diperhatikan bahwa kapan\n

314
00:18:54,960 --> 00:18:58,020
dalam format apa pun, baik\nemail atau teks atau file

315
00:18:58,020 --> 00:19:00,661
panjangnya cenderung\nstandar

316
00:19:00,661 --> 00:19:04,351
dengan sejumlah\nnol dan satuan tertentu.

317
00:19:04,351 --> 00:19:07,200
Dan ini terjadi menjadi 8 ditambah 8, ditambah 8.

318
00:19:07,200 --> 00:19:10,561
Jadi hanya untuk menerima pesan\n"hai, tanda seru

319
00:19:10,560 --> 00:19:15,000
Anda akan menerima setidaknya,\nampaknya, sekitar 24 bit.

320
00:19:15,000 --> 00:19:18,330
Namun sejujurnya, bit sangatlah kecil,\nsecara harfiah dan matematis

321
00:19:18,330 --> 00:19:21,060
yang cenderung tidak kita pikirkan atau\n

322
00:19:21,060 --> 00:19:23,370
Anda mungkin lebih\nfamiliar dengan byte.

323
00:19:23,371 --> 00:19:27,480
B-Y-T-E-S adalah byte,\nis byte, adalah byte.

324
00:19:29,340 --> 00:19:32,373
Dan sejujurnya, itu pun tidak\n

325
00:19:32,374 --> 00:19:34,290
Seberapa tinggi Anda dapat menghitung\njika Anda memiliki delapan bit?

326
00:19:39,270 --> 00:19:42,570
Kecuali Anda ingin menjadi\negatif, tidak apa-apa.

327
00:19:45,151 --> 00:19:48,631
Singkat cerita, jika kita benar-benar dapat\n

328
00:19:48,631 --> 00:19:54,061
dan yang lainnya, dan kami menemukan apa\n

329
00:19:54,060 --> 00:19:57,570
dalam desimal, hasilnya akan\nmenjadi 255, atau kurang

330
00:19:57,570 --> 00:20:00,280
jika Anda ingin mewakili\nnangka negatif juga.

331
00:20:00,280 --> 00:20:04,140
Jadi ini berguna karena sekarang kita bisa\n

332
00:20:04,141 --> 00:20:06,811
namun, jika filenya lebih besar,\nkilobytes adalah ribuan byte

333
00:20:06,810 --> 00:20:10,590
megabyte adalah jutaan byte,\ngigabyte adalah miliaran byte

334
00:20:10,590 --> 00:20:14,080
terabyte adalah triliunan\nbyte, dan seterusnya.

335
00:20:14,080 --> 00:20:20,520
Kami memiliki kosakata untuk ini\n

336
00:20:20,520 --> 00:20:24,350
Masalahnya adalah, jika Anda menggunakan\n

337
00:20:24,351 --> 00:20:27,801
byte per karakter, dan\nawalnya hanya tujuh, Anda

338
00:20:27,800 --> 00:20:30,390
hanya dapat mewakili 255 karakter.

339
00:20:30,391 --> 00:20:33,980
Dan itu sebenarnya berjumlah 256\nkarakter, termasuk nol.

340
00:20:33,980 --> 00:20:37,790
Dan tidak masalah jika Anda menggunakan\nsecara harafiah bahasa Inggris, dalam hal ini

341
00:20:39,141 --> 00:20:42,081
Namun ada banyak\nbahasa manusia di dunia

342
00:20:42,080 --> 00:20:45,410
yang memerlukan lebih banyak simbol\nd, oleh karena itu, lebih banyak bit.

343
00:20:45,411 --> 00:20:48,291
Jadi, untungnya, dunia\nmemutuskan bahwa kita memang akan melakukannya

344
00:20:48,290 --> 00:20:51,441
tidak hanya mendukung keyboard AS\nInggris, namun semuanya

345
00:20:51,441 --> 00:20:54,500
dari karakter beraksen yang\n

346
00:20:54,500 --> 00:20:57,740
Dan sialnya, jika kita menggunakan cukup\nbit, nol, dan satu

347
00:20:57,740 --> 00:21:01,730
kami tidak hanya dapat mewakili semua\nbahasa manusia dalam bentuk tulisan

348
00:21:01,730 --> 00:21:03,651
serta beberapa emosi\nasepanjang perjalanan, kami

349
00:21:03,651 --> 00:21:06,621
dapat menangkap momen tersebut dengan\nhal-hal yang disebut emoji.

350
00:21:06,621 --> 00:21:09,230
Dan memang benar, ini sangat\npopuler saat ini.

351
00:21:09,230 --> 00:21:12,951
Anda mungkin mengirim dan/atau menerima\n

352
00:21:12,951 --> 00:21:16,520
Ini hanyalah karakter, seperti\nhuruf alfabet, pola

353
00:21:16,520 --> 00:21:20,570
angka nol dan satu yang Anda terima,\n

354
00:21:20,570 --> 00:21:22,690
Misalnya, ada\namo emoji tertentu yang

355
00:21:22,691 --> 00:21:24,721
direpresentasikan dengan\npola bit tertentu.

356
00:21:24,721 --> 00:21:28,070
Dan ketika Anda menerimanya,\n

357
00:21:30,000 --> 00:21:32,780
Dan standar baru ini\ndisebut Unicode.

358
00:21:32,780 --> 00:21:35,270
Jadi ini adalah superset dari\nyang kami sebut ASCII.

359
00:21:35,270 --> 00:21:39,951
Dan Unicode hanyalah pemetaan dari banyak\n

360
00:21:39,951 --> 00:21:42,320
atau karakter, lebih\numumnya, mungkin saja

361
00:21:42,320 --> 00:21:45,140
gunakan delapan bit untuk\nkompatibilitas mundur

362
00:21:45,141 --> 00:21:49,821
dengan cara lama dalam melakukan sesuatu dengan\n

363
00:21:49,820 --> 00:21:51,680
Dan jika Anda memiliki 16\nbit, sebenarnya Anda bisa

364
00:21:51,681 --> 00:21:54,713
mewakili lebih dari\n65.000 kemungkinan huruf.

365
00:21:54,713 --> 00:21:55,880
Dan itu semakin meningkat.

366
00:21:55,881 --> 00:22:01,341
Dan sialnya, Unicode bahkan mungkin menggunakan 32\n

367
00:22:01,340 --> 00:22:03,230
dan simbol tanda baca dan emoji.

368
00:22:03,230 --> 00:22:06,411
Dan itu akan memberi Anda\nhingga 4 miliar kemungkinan.

369
00:22:06,411 --> 00:22:09,980
Dan, saya yakin, salah satu alasan kami\n

370
00:22:11,060 --> 00:22:14,060
Maksudku, kita punya ruang untuk\nmiliaran orang lagi.

371
00:22:14,060 --> 00:22:16,280
Jadi, sebenarnya, hanya sebagai\nsedikit hal sepele

372
00:22:16,280 --> 00:22:21,500
adakah yang pernah menerima desimal ini\n

373
00:22:21,500 --> 00:22:25,971
adakah yang pernah menerima pola ini\n

374
00:22:25,971 --> 00:22:29,070
melalui SMS atau email,\nmungkin setahun terakhir ini?

375
00:22:29,070 --> 00:22:33,951
Nah, jika Anda benar-benar mencarinya,\n

376
00:22:33,951 --> 00:22:37,131
kebetulan mewakili\nwajah dengan masker medis.

377
00:22:37,131 --> 00:22:40,941
Dan perhatikan jika Anda memiliki\nan iPhone atau perangkat Android

378
00:22:40,941 --> 00:22:43,290
Anda mungkin melihat hal yang berbeda.

379
00:22:43,290 --> 00:22:46,580
Faktanya, ini adalah\nversi Android, yang terbaru.

380
00:22:46,580 --> 00:22:49,221
Ini adalah versi iOS\nnya, yang terbaru.

381
00:22:49,221 --> 00:22:51,891
Dan masih banyak lagi\ninterpretasi yang dilakukan oleh perusahaan lain

382
00:22:53,040 --> 00:22:55,730
Jadi Unicode, sebagai\nkonsorsium, jika Anda mau

383
00:22:55,730 --> 00:22:58,861
telah membakukan deskripsi\ntentang hal-hal ini.

384
00:22:58,861 --> 00:23:02,391
Namun perusahaannya sendiri,\nprodusen di luar sana

385
00:23:02,391 --> 00:23:05,000
secara umum telah ditafsirkan\nit sesuai keinginan Anda.

386
00:23:05,000 --> 00:23:08,330
Dan hal ini dapat menyebabkan\nmiskomunikasi antarmanusia.

387
00:23:08,330 --> 00:23:11,870
Faktanya, secara harafiah,\n

388
00:23:11,871 --> 00:23:14,781
Saya mulai terbiasa\n

389
00:23:14,780 --> 00:23:17,820
seperti ini karena saya pikir itu\n

390
00:23:17,820 --> 00:23:19,760
Aku tidak sadar ini\ni emoji pelukan

391
00:23:19,760 --> 00:23:24,350
karena perangkat apa pun yang saya gunakan\n

392
00:23:24,351 --> 00:23:27,171
Dan itu karena\ninterpretasi mereka terhadap data.

393
00:23:27,171 --> 00:23:31,551
Hal ini juga terjadi ketika\nyang tadinya pistol menjadi air

394
00:23:31,550 --> 00:23:33,590
pistol di mata beberapa produsen.

395
00:23:33,590 --> 00:23:37,971
Jadi ini merupakan dikotomi yang menarik\n

396
00:23:37,971 --> 00:23:42,500
ingin kami wakili dan bagaimana kami\n

397
00:23:42,500 --> 00:23:45,891
Lalu, pertanyaan tentang\nrepresentasi format ini

398
00:23:45,891 --> 00:23:49,021
baik itu angka atau huruf, atau lebih cepat lagi.

399
00:23:49,520 --> 00:23:52,140
AUDIENCE: Mengapa desimal\npopuler untuk komputer

400
00:23:52,141 --> 00:23:54,739
apakah biner adalah dasar dari semuanya?

401
00:23:54,739 --> 00:23:56,530
DAVID MALAN: Maaf,\nkenapa yang begitu populer?

402
00:23:56,530 --> 00:23:59,310
AUDIENCE: Mengapa desimal populer\n

403
00:23:59,310 --> 00:24:01,900
DAVID MALAN: Ya, jadi kami akan datang\n

404
00:24:01,901 --> 00:24:03,811
Ada cara lain\nuntuk merepresentasikan angka.

405
00:24:07,171 --> 00:24:12,480
Dan heksadesimal masih seperempatnya\n

406
00:24:12,480 --> 00:24:15,540
sampai 9 ditambah A, B, C,\nD, E, F. Dan entah bagaimana

407
00:24:15,540 --> 00:24:18,600
Anda juga dapat menghitung\nlebih tinggi lagi dengan itu.

408
00:24:18,601 --> 00:24:21,121
Kita akan lihat dalam beberapa minggu\nmengapa hal ini menarik.

409
00:24:21,121 --> 00:24:24,781
Namun heksadesimal, singkatnya\n, menggunakan empat bit per digit.

410
00:24:24,780 --> 00:24:28,290
Jadi, empat bit, jika Anda punya dua\n

411
00:24:28,290 --> 00:24:30,810
Dan itu hanyalah satuan ukuran yang sangat\nmudah digunakan.

412
00:24:30,810 --> 00:24:34,140
Dan itu juga merupakan konvensi manusia di\n

413
00:24:34,141 --> 00:24:35,874
Tapi kami akan segera kembali ke sana.

414
00:24:36,540 --> 00:24:39,923
PENONTON: Apakah lampu di\npanggung seharusnya mengatakan bahwa--

415
00:24:39,923 --> 00:24:42,590
DAVID MALAN: Apakah lampu di\npanggung seharusnya menyampaikan sesuatu?

416
00:24:42,590 --> 00:24:46,310
Nah, jika kita sudah berpikir terlebih dahulu\nuntuk menggunakan mungkin 64 bola lampu

417
00:24:46,310 --> 00:24:51,650
itu sepertinya memberi kita 8\ntotal byte di panggung, 8 kali 8

418
00:24:55,171 --> 00:24:58,447
Pertanyaan lain tentang 0 dan 1?

419
00:24:58,446 --> 00:25:01,130
Di sini agak terang.

420
00:25:04,911 --> 00:25:08,931
Saat semua orang menunjuk\nsuatu tempat tertentu.

421
00:25:11,391 --> 00:25:14,863
AUDIENCE: Saya baru saja ingin\nbertanya tentang 255 bit

422
00:25:14,863 --> 00:25:16,346
seperti dengan karakter maksimal.

423
00:25:16,846 --> 00:25:19,555
DAVID MALAN: Ah, tentu, dan kami akan\n

424
00:25:19,555 --> 00:25:22,131
juga dalam beberapa hari mendatang,\namun dengan kecepatan yang lebih lambat

425
00:25:22,131 --> 00:25:26,074
kita punya, dengan delapan bit, dua\nnilai yang mungkin untuk yang pertama

426
00:25:26,074 --> 00:25:28,490
lalu dua\nuntuk berikutnya, dua\nuntuk berikutnya, dan seterusnya.

427
00:25:30,131 --> 00:25:32,230
Itu berarti total 2 pangkat\nkedelapan, yaitu

428
00:25:32,230 --> 00:25:36,730
berarti kamu dapat memiliki total 256\n

429
00:25:36,730 --> 00:25:40,580
Namun seperti yang akan segera kita lihat, ilmuwan\nkomputer, pemrogram

430
00:25:40,580 --> 00:25:45,250
perangkat lunak sering kali mulai menghitung pada 0 kali\n

431
00:25:45,250 --> 00:25:50,980
pola, 00000000 untuk mewakili\n

432
00:25:50,980 --> 00:25:56,830
kamu hanya punya 255 pola lainnya\n

433
00:25:59,421 --> 00:26:04,421
Baiklah, jadi apa yang bisa kita lakukan\n

434
00:26:04,990 --> 00:26:07,451
Tentu saja kami punya\nseperti warna dan program

435
00:26:07,451 --> 00:26:09,682
seperti Photoshop dan gambar dan foto.

436
00:26:09,682 --> 00:26:11,141
Baiklah, izinkan saya mengajukan pertanyaan lagi.

437
00:26:11,141 --> 00:26:14,351
Bagaimana mungkin komputer, menurut Anda,\n

438
00:26:16,000 --> 00:26:19,510
Seperti apa pilihan kita jika semua sudah kita\n

439
00:26:23,471 --> 00:26:27,070
RGB memang merupakan akronim yang\nmewakili sejumlah warna merah

440
00:26:27,070 --> 00:26:29,590
dan sejumlah komputer berwarna hijau dan\nbiru dan tentu saja

441
00:26:29,590 --> 00:26:32,380
dapat mewakili warna hanya dengan melakukan itu.

442
00:26:32,381 --> 00:26:33,893
Mengingat, misalnya, titik ini.

443
00:26:33,893 --> 00:26:36,851
Titik kuning di layar itu\n

444
00:26:36,851 --> 00:26:39,611
saat ini, itu jumlah yang cukup besar\n

445
00:26:40,443 --> 00:26:42,340
Dan jika Anda mencampur\nwarna-warna itu bersama-sama

446
00:26:42,340 --> 00:26:44,080
Anda memang bisa mendapatkan yang sangat spesifik.

447
00:26:44,080 --> 00:26:46,660
Dan sampai jumpa\nsebentar lagi.

448
00:26:46,661 --> 00:26:51,408
Jadi memang sebelumnya, manusia\hanya menggunakan total tujuh bit.

449
00:26:51,407 --> 00:26:54,490
Dan hanya sekali mereka memutuskan,\n

450
00:26:54,490 --> 00:26:57,100
mendapat perpanjangan ASCII dan\nitu awalnya sebagian

451
00:26:57,101 --> 00:27:00,941
solusi untuk masalah yang sama\n

452
00:27:00,941 --> 00:27:05,248
dalam pola nol dan satu\n

453
00:27:06,080 --> 00:27:10,330
Namun itu pun belum cukup dan itu\n

454
00:27:11,891 --> 00:27:16,961
Jadi sekarang kita kembali ke\nwarna tertentu ini.

455
00:27:16,961 --> 00:27:19,330
RGB diusulkan sebagai sebuah skema,\ntetapi bagaimana cara kerjanya?

456
00:27:19,330 --> 00:27:21,280
Nah, pertimbangkan misalnya ini.

457
00:27:21,280 --> 00:27:25,661
Jika kami memang memutuskan sebagai kelompok untuk\n

458
00:27:25,661 --> 00:27:28,421
dengan campuran sebagian merah,\nsebagian hijau, dan sebagian biru

459
00:27:28,421 --> 00:27:33,311
kita harus memutuskan bagaimana cara merepresentasikan\n

460
00:27:33,310 --> 00:27:37,030
Ya, ternyata semua yang kita punya\n

461
00:27:38,351 --> 00:27:44,501
Misalnya, komputer tempat kita\n

462
00:27:44,500 --> 00:27:47,471
tidak lagi dalam konteks\nan email atau pesan teks

463
00:27:47,471 --> 00:27:51,701
tapi sekarang dalam konteks sesuatu\n

464
00:27:51,701 --> 00:27:55,331
dan membuat file grafis,\nmungkin nomor pertama ini

465
00:27:55,330 --> 00:28:00,140
dapat diartikan mewakili\n

466
00:28:00,688 --> 00:28:02,021
Dan itulah yang terjadi.

467
00:28:02,020 --> 00:28:05,740
Anda dapat menganggap digit pertama sebagai\n

468
00:28:05,740 --> 00:28:10,030
Dan pada akhirnya ketika Anda menggabungkannya\n

469
00:28:10,030 --> 00:28:14,230
warna biru sebanyak itu, ternyata\n

470
00:28:14,230 --> 00:28:18,040
Dan memang benar, Anda bisa mendapatkan\nangka antara 0 dan 255

471
00:28:18,040 --> 00:28:21,461
untuk setiap warna tersebut dicampur\n

472
00:28:21,461 --> 00:28:23,330
Dan Anda sebenarnya dapat\nmelihat hal ini dalam praktiknya.

473
00:28:23,330 --> 00:28:26,530
Meskipun layar kami,\namun, menjadi sangat bagus

474
00:28:26,530 --> 00:28:30,739
di ponsel dan laptop kami sehingga Anda\n

475
00:28:30,739 --> 00:28:32,530
Anda mungkin pernah mendengar\nistilah piksel sebelumnya.

476
00:28:32,530 --> 00:28:34,661
Pixel hanyalah sebuah titik di\nlayar dan Anda sudah melakukannya

477
00:28:34,661 --> 00:28:38,260
mendapat ribuan, jutaan di antaranya\n

478
00:28:38,260 --> 00:28:41,201
Jika saya mengambil\nemoji ini, hal itu akan terjadi lagi

479
00:28:41,201 --> 00:28:46,211
menjadi interpretasi salah satu perusahaan\nwajah dengan masker medis

480
00:28:46,211 --> 00:28:48,550
dan memperbesarnya sedikit, mungkin\nmemperbesarnya sedikit lagi

481
00:28:48,550 --> 00:28:50,890
Anda sebenarnya dapat mulai\nmelihat piksel ini.

482
00:28:50,891 --> 00:28:53,561
Segalanya menjadi berpiksel\nkarena apa yang Anda lihat

483
00:28:53,560 --> 00:28:57,280
adalah masing-masing titik\n

484
00:28:57,280 --> 00:28:59,681
Dan tampaknya masing-masing\ntitik-titik ini

485
00:28:59,681 --> 00:29:04,961
mungkin menggunakan 24 bit, delapan bit\n

486
00:29:04,961 --> 00:29:07,300
bit untuk warna biru, dalam beberapa pola.

487
00:29:07,300 --> 00:29:11,290
Program ini atau program serupa lainnya\n

488
00:29:11,290 --> 00:29:16,270
dan warnanya putih atau kuning atau\nhitam atau sedikit coklat di antaranya.

489
00:29:16,270 --> 00:29:19,870
Jadi jika Anda terlihat canggung, tapi\n

490
00:29:19,871 --> 00:29:23,673
atau mungkin TV Anda, Anda juga dapat\nmelihat hal ini.

491
00:29:23,673 --> 00:29:25,631
Baiklah, bagaimana\ntentang hal-hal yang kita juga

492
00:29:25,631 --> 00:29:27,256
tonton setiap hari di YouTube atau sejenisnya?

493
00:29:28,540 --> 00:29:30,550
Bagaimana komputer,\mengetahui apa yang kita ketahui sekarang

494
00:29:30,550 --> 00:29:32,545
mewakili sesuatu seperti video?

495
00:29:35,080 --> 00:29:37,930
Bagaimana cara merepresentasikan video\hanya menggunakan nol dan satu?

496
00:29:38,760 --> 00:29:43,260
HADIRIN: Seperti yang bisa kita lihat di sini,\nmereka mewakili gambar, bukan?

497
00:29:43,260 --> 00:29:47,760
[Tak terdengar] suara\nangka 0 dan 1 juga.

498
00:29:52,040 --> 00:29:55,410
Singkatnya, video apa sebenarnya\n

499
00:29:55,411 --> 00:29:58,131
Ini bukan hanya satu gambar,\nbukan hanya satu huruf atau angka

500
00:29:58,131 --> 00:30:01,911
ini mungkin semacam\nurutan karena waktu terus berlalu.

501
00:30:01,911 --> 00:30:05,780
Jadi dengan sejumlah besar gambar,\nmungkin 24, mungkin 30 gambar per detik

502
00:30:05,780 --> 00:30:08,480
jika Anda menerbangkannya ke\nmata manusia, kami bisa

503
00:30:08,480 --> 00:30:11,240
menafsirkannya menggunakan mata\ndan otak kita yang ada sekarang

504
00:30:11,240 --> 00:30:13,431
gerakan dan karena itu video.

505
00:30:13,431 --> 00:30:16,040
Begitu pula dengan audio atau musik.

506
00:30:16,040 --> 00:30:20,211
Jika kita baru saja membuat suatu konvensi\n

507
00:30:20,211 --> 00:30:23,361
pada alat musik, bisakah kami\n

508
00:30:23,361 --> 00:30:25,153
Dan ini mungkin\sebenarnya cukup familier.

509
00:30:25,153 --> 00:30:29,901
Izinkan saya melihat video singkatnya di sini,\n

510
00:30:31,310 --> 00:30:32,990
Anda mungkin ingat sejak kecil.

511
00:30:54,961 --> 00:30:58,861
Jadi wajar saja\nvideo tersebut adalah video sebenarnya

512
00:30:58,861 --> 00:31:02,311
dari animasi berbasis kertas, tapi\n

513
00:31:02,310 --> 00:31:06,270
adalah beberapa rangkaian gambar-gambar ini,\ntentu saja

514
00:31:06,270 --> 00:31:10,320
hanyalah nol dan satu karena\n

515
00:31:10,320 --> 00:31:14,003
Sekarang sesuatu seperti not balok seperti\n

516
00:31:14,003 --> 00:31:16,170
mungkin secara alami memutar\nini di perangkat fisik

517
00:31:16,171 --> 00:31:19,201
namun komputer tentu saja\nmewakili suara tersebut juga.

518
00:31:19,201 --> 00:31:22,050
Misalnya,\nformat audio yang populer adalah

519
00:31:22,050 --> 00:31:24,780
disebut MIDI dan MIDI\nmungkin saja mewakili

520
00:31:24,780 --> 00:31:29,100
setiap catatan yang Anda lihat beberapa saat yang lalu\n

521
00:31:29,101 --> 00:31:32,491
Namun secara umum, Anda mungkin\nmenganggap musik sebagai memiliki nada

522
00:31:32,490 --> 00:31:35,401
misalnya, A sampai G, mungkin\nbeberapa flat dan beberapa benda tajam

523
00:31:35,401 --> 00:31:39,000
Anda mungkin memiliki durasi seperti bagaimana\n

524
00:31:39,000 --> 00:31:41,040
di piano atau\perangkat lain, lalu

525
00:31:41,040 --> 00:31:43,770
hanya volumenya seperti betapa\ndo kerasnya seorang manusia di dunia nyata

526
00:31:43,770 --> 00:31:46,681
tekan tombol itu dan\nsehingga seberapa keras suaranya?

527
00:31:46,681 --> 00:31:51,571
Tampaknya hanya mengingat\n

528
00:31:51,570 --> 00:31:57,090
kami kemudian dapat mewakili semuanya\n

529
00:31:57,090 --> 00:32:00,420
Jadi itu benar-benar\daftar cara mencucinya

530
00:32:00,421 --> 00:32:02,551
bahwa kami hanya dapat mewakili informasi.

531
00:32:02,550 --> 00:32:05,313
Sekali lagi, komputer atau digital memiliki\semua format yang berbeda ini

532
00:32:05,314 --> 00:32:07,980
namun pada akhirnya dan semewah perangkat tersebut selama bertahun-tahun

533
00:32:07,980 --> 00:32:11,760
ya, hanya nol dan satu, kecil\n

534
00:32:11,760 --> 00:32:14,941
jika Anda mau, terwakili dalam\ncara tertentu dan itu tergantung pada perangkat lunaknya

535
00:32:14,941 --> 00:32:17,941
yang Anda dan saya serta orang lain\nmenulis untuk menggunakan angka nol tersebut

536
00:32:17,941 --> 00:32:21,421
dan cara yang kita inginkan agar\nkomputer melakukan sesuatu

537
00:32:22,861 --> 00:32:27,181
Lalu, pertanyaan tentang representasi ini\n

538
00:32:27,181 --> 00:32:30,811
pada akhirnya adalah pemecahan masalah\n

539
00:32:30,810 --> 00:32:35,590
dan memproduksi yang baru melalui\nbeberapa proses di antaranya.

540
00:32:40,070 --> 00:32:43,999
HADIRIN: Ya, jadi kita membicarakan caranya\n

541
00:32:43,999 --> 00:32:45,962
Anda untuk menafsirkan informasi.

542
00:32:45,962 --> 00:32:50,873
Bagaimana format file seperti .mp4\n

543
00:32:52,346 --> 00:32:53,971
DAVID MALAN: Jadi pertanyaan yang sangat bagus.

544
00:32:53,971 --> 00:32:55,921
Ada banyak\nformat file lain di luar sana.

545
00:32:55,921 --> 00:32:58,730
Anda menyinggung MP4 untuk video\ndan penggunaan yang lebih umum

546
00:32:58,730 --> 00:33:01,340
apakah hal-hal ini disebut\ncodec dan container.

547
00:33:01,340 --> 00:33:04,910
Misalnya, tidak sesederhana itu ketika\menggunakan file yang lebih besar

548
00:33:04,911 --> 00:33:08,449
dalam format yang lebih modern daripada a\n

549
00:33:09,560 --> 00:33:13,160
Jika Anda menyimpan gambar sebanyak itu\nseperti film Hollywood

550
00:33:13,161 --> 00:33:17,431
misalnya 24 atau 30 kali per detik,\n

551
00:33:17,431 --> 00:33:19,760
Dan jika Anda pernah mengambil\nfoto menggunakan ponsel

552
00:33:19,760 --> 00:33:23,780
Anda mungkin tahu berapa megabita atau\n

553
00:33:24,381 --> 00:33:27,771
Jadi selama bertahun-tahun manusia telah mengembangkan perangkat lunak yang lebih canggih

554
00:33:27,770 --> 00:33:32,480
yang menggunakan lebih banyak matematika untuk mewakili\n

555
00:33:32,480 --> 00:33:35,240
hanya menggunakan pola\nyang lebih pendek dari nol dan satu

556
00:33:35,240 --> 00:33:37,830
daripada representasi\nyang paling sederhana di sini.

557
00:33:37,830 --> 00:33:40,160
Dan mereka menggunakan apa yang mungkin\ndisebut kompresi.

558
00:33:40,161 --> 00:33:42,561
Jika Anda pernah menggunakan file zip\natau yang lainnya

559
00:33:42,560 --> 00:33:45,170
entah bagaimana komputer Anda\menggunakan lebih sedikit angka nol dan satu

560
00:33:45,171 --> 00:33:47,061
untuk mewakili jumlah informasi yang sama

561
00:33:47,060 --> 00:33:49,522
idealnya tanpa kehilangan informasi apa pun.

562
00:33:49,522 --> 00:33:52,730
Di dunia multimedia, yang akan kami\n

563
00:33:52,730 --> 00:33:56,330
ada format lossy dan\nlossless di luar sana.

564
00:33:56,330 --> 00:33:59,961
Lossless berarti Anda tidak kehilangan\ninformasi apa pun.

565
00:33:59,961 --> 00:34:05,361
Namun lebih umum seperti yang Anda singgung\n

566
00:34:05,361 --> 00:34:08,151
di mana Anda sebenarnya membuang\namun sejumlah kualitas.

567
00:34:08,150 --> 00:34:10,592
Anda mendapatkan sejumlah\npikselasi yang mungkin tidak terjadi

568
00:34:10,592 --> 00:34:13,550
terlihat sempurna bagi manusia, tapi sial\n

569
00:34:14,541 --> 00:34:17,691
Dan di dunia multimedia,\n

570
00:34:17,690 --> 00:34:20,480
dan wadah MPEG lainnya\nyang dapat digabungkan

571
00:34:20,481 --> 00:34:24,561
format video berbeda, berbeda\n

572
00:34:24,561 --> 00:34:26,841
namun di sana juga,\ndesainer mempunyai keleluasaan.

573
00:34:28,911 --> 00:34:32,311
Lalu, pertanyaan lain tentang\ninformasi di sini juga?

574
00:34:32,811 --> 00:34:35,523
HADIRIN: Jadi saya tahu\nkomputer dahulu berukuran sangat besar

575
00:34:35,523 --> 00:34:37,510
dan menyita\nseluruh ruangan dan sebagainya.

576
00:34:37,510 --> 00:34:41,545
Apakah alasannya menjadi\nlebih kecil karena kita dapat menyimpannya

577
00:34:41,545 --> 00:34:43,826
informasi ini sedikit demi sedikit atau bagaimana?

578
00:34:44,701 --> 00:34:47,659
Maksudku, dulu kamu mungkin\n

579
00:34:47,659 --> 00:34:50,340
tabung, yang seperti\nperangkat yang secara fisik besar itu

580
00:34:50,340 --> 00:34:53,280
mungkin hanya menyimpan sekitar 0 atau 1.

581
00:34:53,280 --> 00:34:55,920
Ya, ini adalah miniaturisasi\nperangkat keras saat ini

582
00:34:55,920 --> 00:35:00,721
yang memungkinkan kami menyimpan sebanyak\n

583
00:35:01,661 --> 00:35:03,583
Dan karena kami telah membuat lebih banyak\nmesin mewah

584
00:35:03,583 --> 00:35:06,000
dapat merancang perangkat keras ini\nat dalam skala yang lebih kecil

585
00:35:06,001 --> 00:35:08,531
kami hanya mengemas\nlebih banyak lagi ke dalam perangkat ini.

586
00:35:08,530 --> 00:35:09,840
Tapi di sana juga ada trade offnya.

587
00:35:09,840 --> 00:35:13,110
Misalnya, Anda mungkin mengetahuinya dengan\menggunakan ponsel atau laptop Anda

588
00:35:13,110 --> 00:35:15,810
cukup lama, mungkin di\npangkuan Anda, mulai terasa hangat.

589
00:35:15,811 --> 00:35:17,941
Jadi, ada efek samping\nfisik yang sebenarnya

590
00:35:17,940 --> 00:35:20,370
di mana sekarang beberapa\nperangkat kami menjadi panas.

591
00:35:20,371 --> 00:35:23,251
Inilah alasannya seperti\npusat data di dunia nyata

592
00:35:23,251 --> 00:35:25,591
mungkin memerlukan lebih banyak AC\ntdari tempat biasa

593
00:35:25,590 --> 00:35:28,712
karena ada\nartefak fisik ini juga.

594
00:35:28,713 --> 00:35:31,921
Bahkan, jika Anda ingin melihat salah satu\n

595
00:35:31,920 --> 00:35:35,310
di seberang sungai di sini sekarang Allston\n

596
00:35:35,311 --> 00:35:40,621
adalah komputer Harvard Mark 1 yang\n

597
00:35:41,981 --> 00:35:44,491
Nah jika kita kembali sekarang\nke gambar pertama ini

598
00:35:44,490 --> 00:35:47,161
menjadi ilmu komputer atau\nbenar-benar pemecahan masalah

599
00:35:47,161 --> 00:35:49,110
Saya yakin kita punya lebih\ncukup cara sekarang

600
00:35:49,110 --> 00:35:53,190
untuk mewakili informasi, masukan dan\n

601
00:35:53,190 --> 00:35:56,250
pada sesuatu dan syukurlah\nsemua orang sebelum kita telah memberikannya kepada kita

602
00:35:56,251 --> 00:35:57,961
hal-hal seperti ASCII dan Unicode.

603
00:35:57,960 --> 00:36:01,150
Belum lagi MP4, dokumen word\ndo, dan sejenisnya.

604
00:36:01,150 --> 00:36:05,250
Tapi apa isi pepatah ini\n

605
00:36:05,251 --> 00:36:06,998
masuk outputnya datang?

606
00:36:06,998 --> 00:36:09,539
Di situlah kami mendapatkan\nistilah ini yang mungkin sudah Anda dengar juga.

607
00:36:09,539 --> 00:36:14,670
Sebuah algoritma, yang hanya langkah demi langkah\n

608
00:36:14,670 --> 00:36:17,940
menjelma di dunia\nkomputer melalui perangkat lunak.

609
00:36:17,940 --> 00:36:20,910
Saat Anda menulis perangkat lunak\naka program, Anda

610
00:36:20,911 --> 00:36:26,099
sedang mengimplementasikan satu atau beberapa algoritme,\n

611
00:36:26,099 --> 00:36:29,380
untuk memecahkan beberapa masalah, dan mungkin\n

612
00:36:29,380 --> 00:36:31,422
tapi pada akhirnya,\napa pun bahasanya

613
00:36:31,422 --> 00:36:34,410
komputer yang Anda gunakan akan\nmewakili apa yang Anda ketik

614
00:36:37,769 --> 00:36:40,260
Jadi apa yang dimaksud dengan\nalgoritme representatif?

615
00:36:40,260 --> 00:36:42,630
Saat ini Anda mungkin cukup sering menggunakan\nponsel

616
00:36:42,630 --> 00:36:45,480
untuk melakukan panggilan atau mengirim SMS\atau email dan oleh karena itu Anda

617
00:36:45,481 --> 00:36:48,001
punya banyak\nkontak di buku alamat Anda.

618
00:36:48,001 --> 00:36:50,251
Tentu saja, saat ini\nhal ini sudah sangat digital

619
00:36:50,251 --> 00:36:53,341
tapi baik di iOS atau\nAndroid atau sejenisnya

620
00:36:53,340 --> 00:36:56,010
Anda mungkin memiliki banyak\nnama, nama depan

621
00:36:56,010 --> 00:36:58,942
dan/atau terakhir, serta nomor\ndan email dan sejenisnya.

622
00:36:58,943 --> 00:37:01,651
Anda mungkin memiliki kebiasaan menyukai\n

623
00:37:01,650 --> 00:37:05,190
semua nama itu untuk menemukan\norang yang ingin Anda telepon.

624
00:37:05,190 --> 00:37:09,000
Mungkin diurutkan menurut abjad\n

625
00:37:11,431 --> 00:37:16,764
Ini sejujurnya sama dengan\n

626
00:37:16,764 --> 00:37:18,181
ketika kita hanya menggunakan buku fisik.

627
00:37:18,181 --> 00:37:20,014
Dalam buku fisik ini\nmungkin ada banyak sekali

628
00:37:20,014 --> 00:37:22,171
nama berdasarkan abjad\ndiurutkan dari kiri ke kanan

629
00:37:22,170 --> 00:37:24,340
sesuai dengan\nsekumpulan angka.

630
00:37:24,340 --> 00:37:27,000
Jadi misalkan itu ada dalam\nbuku telepon Harvard ini

631
00:37:27,001 --> 00:37:29,161
kami ingin mencari John Harvard.

632
00:37:29,161 --> 00:37:31,441
Tentu saja, kami dapat memulai\ndengan cukup sederhana dari awal

633
00:37:31,440 --> 00:37:36,070
di sini, melihat satu halaman pada\nwaktu, dan ini adalah sebuah algoritma.

634
00:37:36,070 --> 00:37:40,320
Ini seperti langkah demi langkah\nmencari solusinya

635
00:37:41,490 --> 00:37:43,710
Dalam hal ini, jika John\nHarvard ada di buku telepon

636
00:37:43,710 --> 00:37:47,663
apakah algoritma ini halaman demi halaman\nbenar, menurut Anda?

637
00:37:49,121 --> 00:37:51,041
Seperti jika John Harvard ada\di dalam buku telepon

638
00:37:51,041 --> 00:37:54,641
jelas pada akhirnya saya akan sampai ke\n

639
00:37:56,141 --> 00:37:58,340
Apakah ini dirancang dengan baik, menurut Anda?

640
00:37:58,840 --> 00:38:01,990
Maksudku, ini akan memakan waktu lama\n

641
00:38:01,990 --> 00:38:03,190
tergantung bagaimana hal ini diurutkan.

642
00:38:03,190 --> 00:38:04,930
Baiklah, biarkan\nsaya melakukannya lebih cepat.

643
00:38:04,931 --> 00:38:06,431
Saya akan memulai seperti dua halaman sekaligus.

644
00:38:06,431 --> 00:38:11,050
2, 4, 6, 8, 10, 12, dan seterusnya.

645
00:38:11,050 --> 00:38:13,721
Kedengarannya lebih cepat, lebih cepat, benarkah?

646
00:38:14,411 --> 00:38:16,421
DAVID MALAN: Oke, kenapa tidak benar?

647
00:38:17,235 --> 00:38:19,043
AUDIENCE: Jadi jika Anda\nmulai di halaman 1

648
00:38:19,043 --> 00:38:22,085
jumlah halaman yang Anda dapatkan hanya ganjil,\n

649
00:38:23,630 --> 00:38:26,297
Jika saya memulai dengan jumlah\nhalaman ganjil dan membuka dua halaman sekaligus

650
00:38:26,297 --> 00:38:28,230
Saya mungkin melewatkan halaman di antaranya.

651
00:38:28,231 --> 00:38:30,493
Dan jika saya menyimpulkan\nketika saya sampai ke belakang

652
00:38:30,492 --> 00:38:33,201
di buku itu tidak ada John\n

653
00:38:33,201 --> 00:38:35,451
Sekali lagi ini akan menjadi salah satu bug ini.

654
00:38:35,451 --> 00:38:39,260
Namun jika saya berusaha lebih keras lagi,\nSaya merasa ada solusinya.

655
00:38:39,260 --> 00:38:41,550
Kita tidak harus sepenuhnya\nmembuang algoritma ini.

656
00:38:41,550 --> 00:38:44,240
Saya pikir kita mungkin masih bisa melaju\ndua kali lebih cepat.

657
00:38:44,240 --> 00:38:47,001
Namun apa yang harus kita lakukan\nuntuk memperbaikinya?

658
00:38:59,610 --> 00:39:02,985
Jadi menurut saya, banyak dari kita, sebagian besar dari kita,\n

659
00:39:02,985 --> 00:39:05,610
Saat ini, kita mungkin akan membahas\ntengah-tengah buku telepon

660
00:39:05,610 --> 00:39:06,902
hanya untuk membantu kita memulai.

661
00:39:06,902 --> 00:39:10,350
Dan sekarang aku melihat ke bawah, aku melihat\n

662
00:39:10,351 --> 00:39:13,061
dan sepertinya aku berada di bagian M.

663
00:39:13,061 --> 00:39:15,759
Jadi untuk lebih jelasnya,\napa yang harus saya lakukan selanjutnya?

664
00:39:21,657 --> 00:39:23,740
DAVID MALAN: Oke, dan\nmungkin itu John Harvard

665
00:39:23,740 --> 00:39:24,949
akan berada di sebelah kiri ini.

666
00:39:24,949 --> 00:39:27,931
Jadi inilah kesempatan untuk\nmenghancurkan secara kiasan dan harfiah

667
00:39:27,931 --> 00:39:32,461
masalah khusus ini menjadi separuhnya,\nbuang separuh masalahnya.

668
00:39:32,460 --> 00:39:34,980
Sebenarnya cukup mudah\njika Anda melakukannya seperti itu.

669
00:39:36,791 --> 00:39:41,141
Tapi sekarang saya baru saja mengurangi\n

670
00:39:41,141 --> 00:39:45,240
Jadi jika saya memulai dengan 1.000 halaman\nnomor telepon dan nama, sekarang

671
00:39:46,590 --> 00:39:48,601
Dan kami belum\nmenemukan John Harvard

672
00:39:48,601 --> 00:39:50,751
tapi itu sebagian besar\ndari masalah ini.

673
00:39:50,751 --> 00:39:54,339
Saya pikir itu benar karena jika\n

674
00:39:54,338 --> 00:39:56,130
dia pasti tidak\nakan berada di sana.

675
00:39:56,130 --> 00:40:00,150
Saya pikir jika saya mengulanginya lagi\n

676
00:40:00,150 --> 00:40:02,070
di sini saya mungkin sudah bertindak terlalu jauh.

677
00:40:02,070 --> 00:40:03,581
Sekarang saya seperti bagian E.

678
00:40:03,581 --> 00:40:08,131
Jadi izinkan saya membagi masalahnya menjadi dua\n

679
00:40:08,130 --> 00:40:11,100
dan ulangi lagi, membagi\nd membagi dan menaklukkan

680
00:40:11,101 --> 00:40:14,550
sampai akhirnya, mungkin, saya mengakhiri\n

681
00:40:14,550 --> 00:40:18,090
buku yang memuat\nnama John Harvard atau tidak

682
00:40:18,090 --> 00:40:21,400
namun karena algoritme\nyang Anda usulkan, langkah demi langkah

683
00:40:21,400 --> 00:40:24,550
Saya tahu bahwa dia tidak ada dalam\apa pun yang saya buang.

684
00:40:24,550 --> 00:40:28,201
Begitu traumatisnya sehingga\nmungkin saja hal itu dibuat-buat

685
00:40:28,201 --> 00:40:31,715
sebenarnya, ini hanya memanfaatkan\n

686
00:40:31,715 --> 00:40:33,840
Memang benar, ini juga tentang\npemrograman.

687
00:40:33,840 --> 00:40:36,690
Ini bukan tentang mempelajari\na dunia yang benar-benar baru

688
00:40:36,690 --> 00:40:40,350
tapi sebenarnya hanya bagaimana memanfaatkan intuisi\n

689
00:40:40,351 --> 00:40:43,381
miliki dan terima secara alami\ntetapi pelajari cara berekspresi

690
00:40:43,380 --> 00:40:45,900
sekarang dengan lebih ringkas,\nlebih tepatnya

691
00:40:45,900 --> 00:40:49,150
menggunakan sesuatu yang disebut\nbahasa pemrograman.

692
00:40:49,150 --> 00:40:54,330
Mengapa algoritma seperti itu jika saya menemukan\n

693
00:40:54,331 --> 00:40:56,820
hanya melakukan yang pertama\tidak ada atau bahkan yang kedua

694
00:40:56,820 --> 00:40:59,940
dan mungkin menggandakannya\nuntuk memeriksa halaman genap tersebut?

695
00:40:59,940 --> 00:41:01,830
Mari kita lihat\nat grafik kecil di sini.

696
00:41:01,831 --> 00:41:04,291
Sekali lagi, kita tidak perlu memahami\nin nuansa angka

697
00:41:04,291 --> 00:41:07,501
tetapi jika kita mempunyai bagan\ndi sini, plot xy, pada sumbu x

698
00:41:07,501 --> 00:41:09,431
disini saya klaim sebagai besarnya permasalahan.

699
00:41:09,431 --> 00:41:12,441
Jadi diukur dalam jumlah\nhalaman di buku telepon.

700
00:41:12,440 --> 00:41:16,050
Jadi semakin jauh Anda keluar dari sini,\n

701
00:41:16,050 --> 00:41:18,641
Dan di sini kita punya waktu\nuntuk menyelesaikannya pada sumbu y.

702
00:41:18,641 --> 00:41:21,331
Jadi, semakin tinggi Anda\nnaik, semakin banyak waktunya

703
00:41:21,331 --> 00:41:24,101
akan mengambil solusi\nmasalah khusus tersebut.

704
00:41:24,101 --> 00:41:27,751
Jadi anggap saja begitu saja\n

705
00:41:27,751 --> 00:41:31,511
seperti n halaman, mungkin\ndiwakili secara grafis seperti ini.

706
00:41:31,510 --> 00:41:33,931
Tidak peduli kemiringannya,\itu adalah garis lurus

707
00:41:33,931 --> 00:41:36,360
karena mungkin ada\na hubungan satu lawan satu

708
00:41:36,360 --> 00:41:40,440
antara jumlah halaman dan nomor\n

709
00:41:40,951 --> 00:41:43,291
Jika perusahaan telepon menambahkan\nhalaman lain tahun depan

710
00:41:43,291 --> 00:41:45,301
karena beberapa orang baru\npindah ke kota, itu saja

711
00:41:45,300 --> 00:41:47,161
akan membutuhkan satu\halaman tambahan untuk saya.

712
00:41:49,110 --> 00:41:52,800
Namun, jika kita menggunakan\nalgoritma kedua, meskipun ada kekurangannya

713
00:41:52,800 --> 00:41:56,431
kecuali kita menggandakannya sedikit\n

714
00:41:56,431 --> 00:41:59,280
itu juga akan menjadi\ngaris lurus, tapi memang begitu

715
00:41:59,280 --> 00:42:02,820
akan menjadi kemiringan yang berbeda karena\n

716
00:42:02,820 --> 00:42:06,250
hubungan karena saya\nbuka halaman demi halaman.

717
00:42:06,251 --> 00:42:10,981
Jadi jika perusahaan telepon menambahkan\nhalaman lain atau dua halaman lainnya

718
00:42:10,981 --> 00:42:13,008
itu masih tinggal satu langkah lagi.

719
00:42:13,007 --> 00:42:15,090
Anda dapat melihat perbedaannya\njika saya menggambar ini.

720
00:42:15,090 --> 00:42:18,210
Jika yang dimaksud adalah buku telepon\nyang dimaksud, jumlah halamannya adalah ini

721
00:42:18,210 --> 00:42:20,910
mungkin memerlukan waktu\ndetik di garis kuning

722
00:42:20,911 --> 00:42:24,661
untuk mewakili atau menemukan\nseseorang seperti John Harvard.

723
00:42:24,661 --> 00:42:27,421
Namun tentu saja pada\nalgoritma pertama, garis merah

724
00:42:27,420 --> 00:42:29,760
ini benar-benar akan memerlukan\nlangkah dua kali lebih banyak.

725
00:42:29,760 --> 00:42:32,311
Dan apa arti n di sini?\nn adalah variabel tujuan

726
00:42:32,311 --> 00:42:36,251
untuk ilmuwan atau pemrogram komputer\n

727
00:42:36,251 --> 00:42:38,671
Jadi jika jumlah halaman\nin buku telepon adalah n

728
00:42:38,670 --> 00:42:41,580
jumlah langkah yang akan diambil\nalgoritma kedua

729
00:42:41,581 --> 00:42:44,266
akan berada dalam kasus terburuk n lebih dari 2.

730
00:42:44,266 --> 00:42:46,271
Setengah lebih banyak karena\nAnda melaju dua kali lebih cepat.

731
00:42:46,271 --> 00:42:50,611
Namun algoritma ketiga, sebenarnya\njika Anda mengingat logaritma Anda

732
00:42:50,610 --> 00:42:52,320
terlihat seperti ini.

733
00:42:52,320 --> 00:42:54,750
Pada dasarnya terdapat hubungan yang berbeda\n

734
00:42:54,751 --> 00:42:58,261
antara ukuran masalah dan\n

735
00:42:58,260 --> 00:43:00,150
yang secara teknis juga\nberbasis log

736
00:43:00,150 --> 00:43:02,911
tapi sebenarnya bentuknya yang berbeda.

737
00:43:02,911 --> 00:43:06,331
Implikasinya adalah jika,\n

738
00:43:06,331 --> 00:43:08,911
dua kota berbeda di sini di\nMassachusetts, bergabung tahun depan

739
00:43:08,911 --> 00:43:11,971
dan hanya ada satu\nbuku telepon yang ukurannya dua kali lebih besar

740
00:43:11,971 --> 00:43:14,670
bukan masalah besar untuk\nalgoritma ketiga dan terakhir itu.

741
00:43:15,181 --> 00:43:17,941
Anda cukup membagi masalahnya\tidak lagi menjadi dua

742
00:43:17,940 --> 00:43:21,360
mengambil satu byte lagi,\nitu saja, bukan 1.000 lagi

743
00:43:21,360 --> 00:43:23,760
byte hanya untuk mendapatkan solusinya.

744
00:43:23,760 --> 00:43:26,320
Dengan kata lain, Anda\nbisa berjalan jauh

745
00:43:26,320 --> 00:43:29,520
jalan keluar ke sini menuju\nbuku telepon yang jauh lebih besar dan pada akhirnya

746
00:43:29,521 --> 00:43:32,551
garis hijau itu hampir\ntidak akan beranjak.

747
00:43:32,550 --> 00:43:35,880
Jadi ini hanyalah cara\nmemformalkan dan berpikir

748
00:43:35,880 --> 00:43:42,400
tentang apa kinerjanya atau\n

749
00:43:42,400 --> 00:43:46,070
Sebelum sekarang kita membuat satu lagi\n

750
00:43:46,070 --> 00:43:52,121
ada pertanyaan tentang gagasan\n ini

751
00:43:52,621 --> 00:43:56,193
AUDIENS: Berapa banyak\nbuku telepon yang Anda punya?

752
00:43:56,193 --> 00:43:58,651
DAVID MALAN: (TERTAWA) Banyak\nbuku telepon selama bertahun-tahun

753
00:43:58,650 --> 00:44:02,040
dan jika kamu atau orang tuamu punya\n

754
00:44:02,041 --> 00:44:04,501
menggunakannya karena sulit ditemukan.

755
00:44:13,007 --> 00:44:15,340
HADIRIN: Anda bisa mengundang Harry\nPotter sebagai pembicara tamu.

756
00:44:15,340 --> 00:44:16,473
DAVID MALAN: Maaf, katakan lagi.

757
00:44:16,474 --> 00:44:18,780
HADIRIN: Anda bisa mengundang Harry\nPotter sebagai pembicara tamu.

758
00:44:18,780 --> 00:44:19,800
DAVID MALAN: (TERTAWA) Oh, ya.

759
00:44:20,300 --> 00:44:23,380
Maka kita akan mempunyai sedikit\nsesuatu lagi untuk digunakan di sini.

760
00:44:23,380 --> 00:44:28,740
Jadi sekarang jika kita ingin memformalkan\nlebih lanjut apa yang baru saja kita lakukan

761
00:44:28,740 --> 00:44:30,360
kita bisa melanjutkan dan memperkenalkan ini.

762
00:44:30,360 --> 00:44:33,327
Suatu bentuk kode alias pseudocode.

763
00:44:33,327 --> 00:44:35,911
Pseudocode bukanlah bahasa\nspesifik, tidak seperti sesuatu

764
00:44:35,911 --> 00:44:38,851
kita akan mulai coding, itu\n

765
00:44:38,851 --> 00:44:41,371
dalam bahasa Inggris atau bahasa manusia\napa pun secara ringkas

766
00:44:41,371 --> 00:44:45,331
dengan benar menjelang akhir mendapatkan\n

767
00:44:45,331 --> 00:44:47,701
Jadi misalnya, inilah\nmungkin yang bisa kami lakukan

768
00:44:47,701 --> 00:44:51,331
memformalkan kode, pseudocode\nuntuk algoritma yang sama.

769
00:44:51,331 --> 00:44:54,211
Langkah pertama adalah mengambil\nbuku telepon, seperti yang saya lakukan.

770
00:44:54,210 --> 00:44:56,940
Langkah kedua mungkin terbuka di\ntengah buku telepon

771
00:44:56,940 --> 00:44:58,740
seperti yang Anda usulkan agar kita lakukan terlebih dahulu.

772
00:44:58,740 --> 00:45:01,920
Langkah ketiga mungkin\nmelihat ke bawah pada halaman-halamannya, saya melakukannya.

773
00:45:01,920 --> 00:45:04,530
Dan langkah keempat menjadi\nsedikit lebih menarik

774
00:45:04,530 --> 00:45:07,770
karena saya harus segera membuat\n

775
00:45:07,771 --> 00:45:11,521
Jika ada orang di halaman tersebut, maka\nSaya mungkin sebaiknya melakukannya saja

776
00:45:11,521 --> 00:45:13,251
silakan hubungi orang itu.

777
00:45:13,251 --> 00:45:15,751
Namun hal itu mungkin tidak berlaku\nsetidaknya bagi John Harvard

778
00:45:17,851 --> 00:45:19,951
Jadi, ada\npertanyaan lain yang harus saya tanyakan sekarang

779
00:45:19,951 --> 00:45:22,590
tanyakan lagi apakah orang tersebut\ada di awal buku

780
00:45:22,590 --> 00:45:26,010
maka saya harus memecahkan masalahnya\nseparuh seperti yang saya lakukan tetapi ke kiri, jadi

781
00:45:26,010 --> 00:45:30,121
untuk berbicara, dan kemudian tidak sekadar terbuka terhadap\n

782
00:45:30,121 --> 00:45:33,300
tapi sebenarnya cukup kembali ke\nlangkah ketiga, ulangi lagi.

783
00:45:33,900 --> 00:45:37,650
Karena saya hanya bisa mengulangi apa yang saya\n

784
00:45:39,010 --> 00:45:41,753
Namun, jika orang tersebut\nterakhir ada di dalam buku

785
00:45:41,753 --> 00:45:44,461
seperti yang mungkin terjadi pada\n

786
00:45:44,460 --> 00:45:47,085
maka saya harus membuka bagian tengah\noseparuh kanan buku

787
00:45:47,085 --> 00:45:49,075
sekali lagi kembali ke baris\ntiga, tapi sekali lagi, saya melakukannya

788
00:45:49,076 --> 00:45:51,451
tidak akan terjebak melakukan\nhal seperti ini selamanya

789
00:45:51,451 --> 00:45:54,521
because I keep shrinking\nthe size of the problem.

790
00:45:54,521 --> 00:45:56,431
Terakhir, satu-satunya\nskenario yang mungkin terjadi

791
00:45:56,431 --> 00:45:59,905
kiri, jika John Harvard tidak aktif\n

792
00:45:59,905 --> 00:46:02,280
dan dia tidak berada di pihak kanan,\napa kesimpulan kita?

793
00:46:03,322 --> 00:46:04,489
DAVID MALAN: Dia tidak ada di sana.

794
00:46:05,391 --> 00:46:08,240
Jadi kita perlu berhenti dalam bentuk lain.

795
00:46:08,240 --> 00:46:11,751
Selain itu, ini agak disengaja\n

796
00:46:11,751 --> 00:46:16,021
pada akhirnya karena inilah yang\n

797
00:46:16,021 --> 00:46:17,990
baik Anda baru\nit atau profesional

798
00:46:17,990 --> 00:46:22,201
hanya saja tidak mempertimbangkan semua kemungkinan\n

799
00:46:22,201 --> 00:46:25,701
hal itu mungkin tidak sering terjadi,\n

800
00:46:25,701 --> 00:46:28,550
dalam kode Anda sendiri,\npseudocode atau lainnya

801
00:46:28,550 --> 00:46:31,101
ini adalah waktu dan alasan\nprogram mungkin mogok

802
00:46:31,101 --> 00:46:34,111
atau Anda mungkin berkata bodoh\n

803
00:46:34,110 --> 00:46:35,360
atau komputer Anda mungkin reboot.

804
00:46:35,931 --> 00:46:38,780
Ia melakukan sesuatu\nyang tidak dapat diprediksi

805
00:46:38,780 --> 00:46:42,411
jika manusia, mungkin saya sendiri,\nditidak mengantisipasi hal ini.

806
00:46:42,411 --> 00:46:45,501
Seperti apa yang dilakukan program ini jika\n

807
00:46:45,501 --> 00:46:48,109
jika saya menghilangkan baris 12 dan 13?

808
00:46:48,650 --> 00:46:50,650
Mungkin perilakunya\nberbeda di Mac atau PC

809
00:46:50,650 --> 00:46:53,330
karena itu semacam perilaku yang tidak terdefinisi.

810
00:46:53,331 --> 00:46:56,510
Ini adalah jenis kelalaian\nyang sejujurnya selalu Anda lakukan

811
00:46:56,510 --> 00:46:58,641
akan membuat, bug\nAnda akan memperkenalkan

812
00:46:58,641 --> 00:47:02,751
kesalahan yang akan Anda buat lebih awal\n

813
00:47:02,751 --> 00:47:06,111
Namun Anda akan menjadi lebih baik dalam\nmemikirkan kasus sudut tersebut

814
00:47:06,110 --> 00:47:09,030
dan menangani apa pun yang bisa\n

815
00:47:09,030 --> 00:47:11,931
kode Anda akan menjadi lebih baik karenanya.

816
00:47:11,931 --> 00:47:15,262
Sekarang masalahnya\npada mempelajari cara memprogram

817
00:47:15,262 --> 00:47:16,971
terutama jika Anda\nbelum pernah memiliki pengalaman

818
00:47:16,971 --> 00:47:21,411
atau bahkan jika Anda melakukannya tetapi Anda\nbelajar satu bahasa saja

819
00:47:21,411 --> 00:47:25,130
adalah semuanya terlihat sedikit\nsamar pada pandangan pertama.

820
00:47:25,130 --> 00:47:27,260
Namun mereka memiliki kesamaan tertentu.

821
00:47:27,260 --> 00:47:30,141
Faktanya, kita akan menggunakan\npseudocode ini untuk mendefinisikannya terlebih dahulu.

822
00:47:30,141 --> 00:47:32,360
Disorot dengan warna kuning\ninilah yang selanjutnya

823
00:47:32,360 --> 00:47:34,520
kita akan mulai memanggil fungsi.

824
00:47:34,521 --> 00:47:37,641
Ada banyak bahasa\npemrograman yang berbeda, namun kebanyakan dari mereka

825
00:47:37,641 --> 00:47:40,820
memiliki apa yang kita sebut\nfungsi, yaitu tindakan

826
00:47:40,820 --> 00:47:43,797
atau kata kerja yang menyelesaikan\nmasalah kecil.

827
00:47:43,797 --> 00:47:46,130
Artinya, Anda mungkin menggunakan\na sejumlah fungsi

828
00:47:46,130 --> 00:47:50,240
untuk memecahkan masalah yang lebih besar\nkarena setiap fungsi cenderung berfungsi

829
00:47:50,240 --> 00:47:52,851
sesuatu yang sangat spesifik atau tepat.

830
00:47:52,851 --> 00:47:57,141
Ini mungkin dalam bahasa Inggris\n

831
00:47:57,141 --> 00:47:59,360
kode, untuk hal-hal yang disebut fungsi.

832
00:47:59,360 --> 00:48:02,931
Yang disorot dengan warna kuning sekarang adalah\nyang mungkin kita sebut persyaratan.

833
00:48:02,931 --> 00:48:05,751
Persyaratan adalah hal\nyang Anda lakukan secara kondisional

834
00:48:05,751 --> 00:48:07,443
berdasarkan jawaban atas beberapa pertanyaan.

835
00:48:07,443 --> 00:48:09,651
Anda bisa menganggapnya seperti\nseperti persimpangan jalan.

836
00:48:09,650 --> 00:48:12,350
Apakah Anda ke kiri atau ke kanan\atau ke arah lain

837
00:48:12,351 --> 00:48:14,809
berdasarkan jawaban atas beberapa pertanyaan?

838
00:48:14,809 --> 00:48:16,101
Nah, apa saja pertanyaan-pertanyaan tersebut?

839
00:48:16,101 --> 00:48:20,181
Sekarang disorot dengan warna kuning atau apa pun yang kami\n

840
00:48:20,181 --> 00:48:25,070
setelah nama belakang ahli matematika Bool,\n

841
00:48:25,070 --> 00:48:31,130
Atau, jika Anda mau, jawaban benar atau salah\n

842
00:48:31,130 --> 00:48:34,310
Kita hanya perlu membedakan\tidak ada skenario dengan skenario lainnya.

843
00:48:34,311 --> 00:48:37,101
Hal terakhir yang muncul\nin kodesemu ini

844
00:48:37,101 --> 00:48:39,740
itulah yang mungkin saya soroti\nsekarang dan panggil loop.

845
00:48:39,740 --> 00:48:43,521
Semacam siklus, semacam\n

846
00:48:43,521 --> 00:48:48,861
lagi dan lagi agar aku tidak\n

847
00:48:48,860 --> 00:48:53,030
buku telepon setebal 1.000 halaman, saya dapat\n

848
00:48:53,030 --> 00:48:58,161
dari mengulangi diri saya sendiri secara inheren untuk\n

849
00:48:59,221 --> 00:49:01,581
Jadi inilah yang\nmungkin kita sebut kodesemu

850
00:49:01,581 --> 00:49:05,151
dan memang ada\nciri-ciri lainnya

851
00:49:05,150 --> 00:49:08,540
program yang akan kita bahas sebelumnya\n

852
00:49:08,541 --> 00:49:13,740
nilai, variabel, dan lainnya, tetapi\n

853
00:49:13,740 --> 00:49:16,371
termasuk beberapa yang akan\nsengaja kami gunakan di kelas ini

854
00:49:16,371 --> 00:49:19,760
dan semua orang di dunia nyata\nsaat ini masih menggunakannya

855
00:49:19,760 --> 00:49:22,201
programnya cenderung terlihat seperti ini.

856
00:49:22,201 --> 00:49:24,860
Misalnya saja, ini merupakan penyulingan\ndari program pertama tersebut

857
00:49:24,860 --> 00:49:29,810
Saya menulis pada tahun 1996 di CS50 sendiri\n

858
00:49:29,811 --> 00:49:34,731
Faktanya, versi ini hanya mencoba\n

859
00:49:34,731 --> 00:49:37,731
Yang mana, berani dikatakan, merupakan hal pertama yang paling\nkanonik

860
00:49:37,731 --> 00:49:41,601
pemrogram mana pun pernah membuat\nkomputer mengatakan hanya karena itu

861
00:49:42,900 --> 00:49:45,920
Maksudku, ada simbol hash,\n

862
00:49:45,920 --> 00:49:49,760
kata-kata seperti int, kurung kurawal, tanda kutip,\n

863
00:49:50,420 --> 00:49:54,020
Maksudku, ada lebih banyak overhead\ndan lebih banyak sintaksis dan kekacauan

864
00:49:54,021 --> 00:49:55,941
daripada ada ide yang sebenarnya.

865
00:49:55,940 --> 00:50:00,080
Bukan berarti Anda tidak akan melakukannya\n

866
00:50:00,081 --> 00:50:03,441
karena sejujurnya jumlahnya tidak banyak\n

867
00:50:03,440 --> 00:50:07,701
biasanya memiliki kosakata yang jauh lebih sedikit\n

868
00:50:07,701 --> 00:50:10,581
namun pada awalnya mungkin\nterlihat agak samar.

869
00:50:10,581 --> 00:50:14,361
Tapi Anda mungkin bisa menyimpulkan bahwa saya tidak punya\n

870
00:50:14,360 --> 00:50:18,170
tapi "Halo, dunia." adalah\nmungkin mengutip tanda kutip apa

871
00:50:18,170 --> 00:50:19,860
akan dicetak di layar.

872
00:50:19,860 --> 00:50:22,880
Tapi apa yang akan kita lakukan hari ini,\nsetelah istirahat sejenak

873
00:50:22,880 --> 00:50:24,980
dan menyiapkan panggung untuk\nminggu depan diperkenalkan

874
00:50:24,981 --> 00:50:27,336
ide-ide yang sama persis\nhanya sedikit menggunakan Scratch

875
00:50:27,335 --> 00:50:29,210
sesuatu yang mungkin pernah Anda\ngunakan sendiri

876
00:50:29,210 --> 00:50:32,630
ketika kamu masih cukup muda tapi\n

877
00:50:34,041 --> 00:50:38,421
Keuntungan dari apa yang akan segera kami lakukan menggunakan\n

878
00:50:38,420 --> 00:50:41,960
bahasa dari teman kita di bawah\n

879
00:50:41,960 --> 00:50:46,490
mulai menarik dan melepas hal-hal itu\n

880
00:50:46,490 --> 00:50:48,471
bersama-sama jika masuk akal\nlogis untuk melakukannya

881
00:50:48,471 --> 00:50:51,710
tapi tanpa gangguan\ndari hash, tanda kurung

882
00:50:51,710 --> 00:50:54,410
kurung kurawal, tanda kurung siku,\nstitik koma, dan sebagainya

883
00:50:54,411 --> 00:50:56,311
itu tidak penting.

884
00:50:56,311 --> 00:50:58,800
Namun untuk saat ini, mari kita lanjutkan\ndistirahat 10 menit di sini

885
00:50:58,800 --> 00:51:01,101
dan ketika kami melanjutkan, kami\nakan memulai pemrograman.

886
00:51:01,101 --> 00:51:04,561
Jadi ini di layar\nis bahasa yang disebut

887
00:51:04,561 --> 00:51:07,921
C sesuatu yang akan menyelam\ninke minggu depan dan untungnya

888
00:51:07,920 --> 00:51:10,980
yang sekarang di layar adalah\bahasa lain yang disebut Python

889
00:51:10,981 --> 00:51:13,921
yang juga akan kita lihat\nin beberapa minggu lagi

890
00:51:13,920 --> 00:51:15,690
dengan bahasa lain di sepanjang jalan.

891
00:51:15,690 --> 00:51:19,640
Namun hari ini, dan untuk\nminggu pertama ini, bisa dikatakan sebagai minggu nol

892
00:51:19,641 --> 00:51:21,391
kami menggunakan Scratch karena\nagain akan mengizinkannya

893
00:51:21,391 --> 00:51:23,971
kami akan mengeksplorasi beberapa\ndasar-dasar pemrograman tersebut

894
00:51:23,971 --> 00:51:28,471
yang akan ada di C dan Python dan di\n

895
00:51:28,471 --> 00:51:32,521
namun dengan cara yang tidak perlu kita lakukan\n

896
00:51:32,521 --> 00:51:35,351
Jadi dunia Scratch terlihat seperti ini.

897
00:51:35,351 --> 00:51:38,070
Ini adalah lingkungan pemrograman\nberbasis web atau dapat diunduh

898
00:51:38,070 --> 00:51:40,920
yang memiliki tata letak ini\nsecara default. Di sebelah kiri di sini

899
00:51:40,920 --> 00:51:45,000
yang akan segera kita lihat adalah serangkaian teka-teki\n

900
00:51:45,001 --> 00:51:47,521
mewakili semua\niide yang baru saja kita diskusikan.

901
00:51:47,521 --> 00:51:50,071
Dan dengan menyeret dan\menjatuhkan potongan puzzle ini

902
00:51:50,070 --> 00:51:54,181
atau memblokir area luas ini\nd menghubungkan keduanya

903
00:51:54,181 --> 00:51:56,251
jika masuk akal\nmasuk akal untuk melakukannya, kami akan melakukannya

904
00:51:56,251 --> 00:51:58,531
memulai pemrograman di lingkungan ini.

905
00:51:58,530 --> 00:52:01,561
Lingkungan memungkinkan Anda memiliki\n

906
00:52:01,561 --> 00:52:04,111
Banyak karakter, benda\nseperti kucing atau apa pun

907
00:52:04,110 --> 00:52:08,310
yang lain, dan sprite itu ada\di dunia persegi panjang ini

908
00:52:08,311 --> 00:52:11,521
di sini Anda dapat menonton dalam layar penuh\n

909
00:52:11,521 --> 00:52:16,201
adalah Scratch, yang bisa bergerak ke atas, bawah, kiri,\n

910
00:52:16,201 --> 00:52:19,291
Di dalam dunia Scratch\nAnda dapat memikirkannya

911
00:52:19,291 --> 00:52:23,251
mungkin sebagai\nsistem koordinat yang familiar dengan Xs dan Ys

912
00:52:23,251 --> 00:52:27,001
yang hanya berguna ketika hal itu terjadi\n

913
00:52:27,001 --> 00:52:32,281
Saat ini Scratch berada pada default,\n

914
00:52:32,280 --> 00:52:36,061
Jika Anda memindahkan kucing itu\n

915
00:52:37,891 --> 00:52:40,651
Jika Anda memindahkan kucing sepenuhnya\n

916
00:52:40,650 --> 00:52:42,940
tapi y sekarang akan menjadi negatif 180.

917
00:52:42,940 --> 00:52:47,460
Dan jika Anda ke kiri, x akan menjadi\n

918
00:52:47,460 --> 00:52:51,690
atau di sebelah kanan x akan menjadi\n240 dan y akan tetap nol.

919
00:52:51,690 --> 00:52:55,590
Jadi angka-angka tersebut umumnya tidak\n

920
00:52:55,590 --> 00:52:58,170
bergerak secara relatif di\ndunia ini ke atas, bawah, kiri, kanan

921
00:52:58,170 --> 00:53:01,230
namun ketika tiba saatnya\ndapatkan posisi yang tepat

922
00:53:01,231 --> 00:53:03,601
beberapa sprite ini\atau citra lainnya, itu akan terjadi

923
00:53:03,601 --> 00:53:07,050
akan sangat membantu hanya dengan memiliki mental itu\n

924
00:53:07,050 --> 00:53:10,150
Baiklah, mari kita lanjutkan dan mungkin\n

925
00:53:10,150 --> 00:53:13,050
Saya akan beralih ke\lingkungan pemrograman yang sama

926
00:53:13,050 --> 00:53:15,971
sekarang untuk tur ke sisi kiri.

927
00:53:15,971 --> 00:53:20,911
Jadi secara default yang dipilih di sini adalah\nkategori dalam gerakan biru

928
00:53:20,911 --> 00:53:24,451
yang memiliki banyak teka-teki\n

929
00:53:24,451 --> 00:53:27,001
Dan sedangkan Scratch sebagai\na bahasa grafis

930
00:53:27,001 --> 00:53:30,688
mengkategorikan berbagai hal berdasarkan jenis\nhal yang dilakukan oleh potongan-potongan ini

931
00:53:30,688 --> 00:53:32,521
kita akan melihatnya di seluruh\nseluruh palet ini

932
00:53:32,521 --> 00:53:35,461
kita akan memiliki fungsi dan\nvariabel serta kondisional

933
00:53:35,460 --> 00:53:38,650
dan ekspresi Boolean dan banyak lagi\n

934
00:53:38,650 --> 00:53:42,181
Jadi misalnya, bergerak 10 langkah\atau berbelok ke satu arah atau yang lain

935
00:53:42,181 --> 00:53:45,691
akan menjadi fungsi yang dikategorikan\ndi sini sebagai sesuatu seperti gerak.

936
00:53:45,690 --> 00:53:49,257
Di bawah tampilan berwarna ungu, Anda\nmungkin melihat gelembung ucapan

937
00:53:49,257 --> 00:53:51,090
yang dapat Anda buat dengan\menyeret dan melepaskan

938
00:53:51,090 --> 00:53:54,360
ini yang mungkin mengatakan "halo" atau\n

939
00:53:54,360 --> 00:53:58,320
Atau Anda dapat berganti kostum, berganti\n

940
00:54:01,320 --> 00:54:05,010
Anda dapat memutar suara seperti "meong" atau\n

941
00:54:06,001 --> 00:54:09,271
Lalu ada hal-hal yang disebut Scratch\n

942
00:54:09,271 --> 00:54:11,191
adalah yang pertama, ketika bendera hijau diklik.

943
00:54:11,190 --> 00:54:14,221
Karena jika kita melihat ke\nkanan dunia Scratch di sini

944
00:54:14,221 --> 00:54:17,670
wilayah persegi panjang ini memiliki\nbendera hijau dan titik merah

945
00:54:17,670 --> 00:54:20,880
daftar diatas, salah satunya\nuntuk Play salah satunya untuk Stop

946
00:54:20,880 --> 00:54:24,510
dan itu akan memungkinkan kita untuk\n

947
00:54:24,510 --> 00:54:27,840
saat bendera hijau\nis pertama kali diklik.

948
00:54:27,840 --> 00:54:31,860
Namun Anda dapat mendengarkan jenis\n lainnya

949
00:54:31,860 --> 00:54:35,911
atau yang lainnya, saat sprite ini\n

950
00:54:35,911 --> 00:54:39,570
Di sini Anda sudah melihat inkarnasi\nprogrammer

951
00:54:39,570 --> 00:54:42,451
Anda dan saya menerima begitu saja seperti\tidak setiap hari saat ini di ponsel kita.

952
00:54:42,451 --> 00:54:46,391
Kapan pun Anda mengetuk ikon atau menyeret\n

953
00:54:46,391 --> 00:54:48,550
Ini adalah apa yang programmer\nsebut sebagai peristiwa

954
00:54:48,550 --> 00:54:51,451
hal-hal yang terjadi dan\nsering dipicu oleh kita

955
00:54:51,451 --> 00:54:55,471
manusia dan benda yang diprogram\nbaik itu di Scratch atau Python

956
00:54:55,471 --> 00:54:59,280
atau C atau apa pun yang\ndapat didengarkan dan ditanggapi.

957
00:54:59,280 --> 00:55:01,980
Memang itulah alasannya ketika Anda mengetuk\nikon telepon di ponsel Anda

958
00:55:01,981 --> 00:55:04,441
aplikasi telepon\ndimulai karena seseorang

959
00:55:04,440 --> 00:55:08,640
menulis perangkat lunak yang mendengarkan\n

960
00:55:08,641 --> 00:55:10,711
Jadi Scratch juga memiliki hal yang sama.

961
00:55:10,710 --> 00:55:13,590
Di bawah Kontrol berwarna oranye,\nAnda dapat melihat bahwa kami

962
00:55:13,590 --> 00:55:15,721
bisa menunggu satu detik\atau mengulangi sesuatu

963
00:55:15,721 --> 00:55:17,670
beberapa kali,\n10 secara default, namun kami

964
00:55:17,670 --> 00:55:20,800
dapat mengubah apa pun di\nlingkaran putih ini menjadi apa pun.

965
00:55:20,800 --> 00:55:22,710
Ada potongan\nteka-teki lain di sini selamanya

966
00:55:22,710 --> 00:55:25,590
yang menyiratkan semacam perulangan di mana\n

967
00:55:25,590 --> 00:55:27,060
Meskipun tampaknya\nsedikit ketat, ada

968
00:55:27,061 --> 00:55:29,131
tidak banyak ruang untuk memuat\nsesuatu di sana, Gores

969
00:55:29,130 --> 00:55:31,005
akan membuat\nhal-hal ini tumbuh dan menyusut

970
00:55:31,005 --> 00:55:33,993
namun kami ingin mengisi\npotongan-potongan yang bentuknya serupa.

971
00:55:33,994 --> 00:55:35,161
Berikut adalah persyaratannya.

972
00:55:35,161 --> 00:55:40,061
Jika sesuatu benar atau salah,\nlakukan hal berikutnya.

973
00:55:40,061 --> 00:55:42,841
Dan begitulah cara kita membuat\nbentuk kecil seperti trapesium ini.

974
00:55:42,840 --> 00:55:46,770
Beberapa bentuk ekspresi Boolean, a\n

975
00:55:46,771 --> 00:55:50,131
atau jawaban satu/nol dan putuskan\napakah akan melakukan sesuatu atau tidak.

976
00:55:50,130 --> 00:55:52,440
Anda juga dapat menggabungkan hal-hal ini.

977
00:55:52,440 --> 00:55:55,905
Jika sesuatu benar, lakukan ini,\nlain lakukan hal lainnya.

978
00:55:55,905 --> 00:55:57,780
Dan Anda bahkan dapat memasukkan\tidak satu pun ke dalam yang lain

979
00:55:57,780 --> 00:56:01,320
jika Anda ingin mengajukan tiga\atau empat pertanyaan atau lebih.

980
00:56:01,320 --> 00:56:03,010
Penginderaan juga akan menjadi suatu hal.

981
00:56:03,010 --> 00:56:07,871
Anda dapat mengajukan pertanyaan alias Boolean\n

982
00:56:07,871 --> 00:56:10,161
penunjuk tetikus,\sempit di layar?

983
00:56:10,161 --> 00:56:12,800
Agar Anda dapat mulai\nberinteraksi dengan program ini.

984
00:56:12,800 --> 00:56:15,298
Berapa jarak antara\na sprite dan penunjuk tetikus?

985
00:56:15,298 --> 00:56:17,590
Anda dapat melakukan penghitungan sederhana\nhanya untuk mengetahuinya

986
00:56:17,590 --> 00:56:20,141
jika musuh semakin\nmendekati kucing.

987
00:56:20,141 --> 00:56:23,651
Di bawah Operator beberapa level yang lebih rendah\n

988
00:56:23,650 --> 00:56:25,850
untuk memilih nomor acak,\nyang bagus untuk sebuah game

989
00:56:25,851 --> 00:56:27,851
karena dengan begitu Anda dapat memvariasikan\n tingkat kesulitannya

990
00:56:27,851 --> 00:56:30,309
atau apa yang terjadi dalam sebuah game\ntanpa memainkan game yang sama

991
00:56:33,550 --> 00:56:37,520
Sesuatu dan sesuatu pasti benar\n

992
00:56:38,021 --> 00:56:40,240
Atau kita bahkan bisa menggabungkan dua kata menjadi satu.

993
00:56:40,240 --> 00:56:43,181
Secara default tertulis apel dan pisang,\n

994
00:56:43,181 --> 00:56:46,990
apa pun yang Anda inginkan di sana untuk\nmenggabungkan beberapa kata menjadi penuh

995
00:56:48,581 --> 00:56:52,361
Lalu yang terakhir di sini, ada di\n

996
00:56:52,360 --> 00:56:54,911
Dalam matematika kita jelas\nmendapatkan x dan y dan yang lainnya.

997
00:56:54,911 --> 00:56:56,921
Dalam pemrograman kita akan\nmemiliki kemampuan yang sama

998
00:56:56,920 --> 00:57:03,010
untuk menyimpan dalam simbol bernama ini,\n

999
00:57:03,010 --> 00:57:06,701
Angka atau huruf atau kata atau\nwarna atau apa pun, pada akhirnya.

1000
00:57:06,701 --> 00:57:09,971
Namun dalam pemrograman Anda akan melihatnya\n

1001
00:57:09,971 --> 00:57:13,391
gunakan huruf sederhana seperti x\ndan y dan z, tetapi sebenarnya

1002
00:57:13,391 --> 00:57:20,291
berikan variabel penuh tunggal atau jamak\n

1003
00:57:20,291 --> 00:57:24,131
Lalu yang terakhir, jika blok warna ini belum\cukup bagi Anda

1004
00:57:24,130 --> 00:57:25,960
Anda dapat membuat blok Anda sendiri.

1005
00:57:25,960 --> 00:57:29,050
Memang benar, ini akan menjadi\n

1006
00:57:29,050 --> 00:57:32,920
dan dengan kumpulan masalah pertama dimana\n

1007
00:57:32,920 --> 00:57:37,660
potongan-potongan dan Anda menyadari, oh, pasti\n

1008
00:57:37,661 --> 00:57:40,990
baru saja digantikan oleh seseorang\nseandainya MIT berpikir untuk memberikannya kepadaku

1009
00:57:40,990 --> 00:57:44,291
satu keping puzzle, Anda sendiri\ndapat membuat balok sendiri

1010
00:57:44,291 --> 00:57:47,111
dengan menghubungkan semuanya,\nmemberi nama, dan booming

1011
00:57:47,110 --> 00:57:49,250
potongan puzzle baru akan ada.

1012
00:57:49,251 --> 00:57:51,581
Jadi mari kita lakukan program yang paling sederhana dan paling kanonis

1013
00:57:51,581 --> 00:57:53,530
di sini, memulai dengan\nkontrol, dan saya akan melanjutkan

1014
00:57:53,530 --> 00:57:57,880
untuk mengeklik, menarik, dan melepas ini\n

1015
00:57:57,880 --> 00:58:01,107
Lalu saya akan mengambil satu\nlagi, misalnya di bawah Tampilan

1016
00:58:01,108 --> 00:58:03,191
dan di bawah Kelihatannya saya akan\nlanjutkan dan katakan saja

1017
00:58:03,190 --> 00:58:07,900
sesuatu seperti awalnya bukan\nhanya Halo tetapi lebih kanonis

1018
00:58:09,550 --> 00:58:12,250
Sekarang Anda mungkin dapat menebaknya di\nlingkungan pemrograman ini

1019
00:58:12,251 --> 00:58:15,611
Saya bisa ke sini sekarang dan\nmengklik bendera hijau dan voila

1020
00:58:17,090 --> 00:58:19,005
Jadi itu program\npertama saya dan tentu saja banyak lagi

1021
00:58:19,005 --> 00:58:21,880
lebih mudah digunakan daripada mengetik\n

1022
00:58:21,880 --> 00:58:25,040
lihat di layar yang\nAnda juga akan mengetiknya minggu depan.

1023
00:58:25,041 --> 00:58:28,280
Namun untuk saat ini, kami hanya akan fokus pada\n

1024
00:58:28,280 --> 00:58:29,891
Jadi apa yang baru saja terjadi?

1025
00:58:29,891 --> 00:58:32,391
Blok ungu ini\nKatakanlah, itulah fungsinya

1026
00:58:32,391 --> 00:58:37,090
dan tampaknya memerlukan suatu bentuk masukan\n

1027
00:58:37,996 --> 00:58:40,121
Ini sebenarnya sesuai\nparadigma yang kita lihat

1028
00:58:40,121 --> 00:58:42,445
di sebelumnya hanya input dan output.

1029
00:58:42,445 --> 00:58:45,340
Jadi jika boleh, jika Anda mempertimbangkan\napa yang dilakukan potongan puzzle ini

1030
00:58:47,050 --> 00:58:51,010
Masukan dalam hal ini adalah\n

1031
00:58:51,010 --> 00:58:55,346
Algoritme akan diimplementasikan\n

1032
00:58:55,346 --> 00:58:57,971
dan hasilnya akan\nmenjadi semacam efek samping

1033
00:58:57,971 --> 00:59:01,271
seperti kucing dan gelembung\nucapan yang mengatakan Halo, dunia.

1034
00:59:01,271 --> 00:59:03,760
Begitupun\nsederhana seret dan lepas

1035
00:59:03,760 --> 00:59:07,340
meniru model mental yang relatif\nsederhana ini.

1036
00:59:07,340 --> 00:59:08,750
Jadi mari kita melangkah lebih jauh.

1037
00:59:08,751 --> 00:59:11,923
Ayo lanjutkan sekarang dan buat\n

1038
00:59:11,922 --> 00:59:14,380
yang tertulis seperti\nHalo, David, atau Halo, Carter

1039
00:59:14,380 --> 00:59:16,600
atau Halo untuk Anda secara khusus.

1040
00:59:16,601 --> 00:59:18,556
Dan untuk ini, saya akan\nmenggunakan Sensing.

1041
00:59:18,556 --> 00:59:21,431
Dan Anda mungkin harus melihat-lihat\n

1042
00:59:21,431 --> 00:59:24,472
sekitar, tapi saya sudah melakukan ini beberapa kali\n

1043
00:59:26,860 --> 00:59:28,752
Tanyakan siapa nama Anda,\ntapi warnanya putih

1044
00:59:28,753 --> 00:59:30,461
jadi kita bisa mengubah\npertanyaannya menjadi apa saja

1045
00:59:30,460 --> 00:59:34,930
yang kami inginkan, dan itu akan menunggu\n

1046
00:59:34,931 --> 00:59:37,510
Fungsi yang disebut Ask\nis ini sedikit berbeda

1047
00:59:37,510 --> 00:59:41,320
dari blok Say, yang baru saja\n

1048
00:59:42,460 --> 00:59:47,080
Fungsi tanya bahkan lebih hebat\n

1049
00:59:47,831 --> 00:59:50,831
Fungsi ini akan\nmemberikan kembali apa yang Anda perlukan

1050
00:59:50,831 --> 00:59:55,091
mereka mengetik dalam bentuk\napa yang disebut nilai kembalian, yang mana

1051
00:59:55,090 --> 00:59:57,940
pada akhirnya disimpan dan secara\ndefault hal ini disebut Jawaban.

1052
00:59:57,940 --> 01:00:00,612
Oval biru kecil ini\ndisebut Jawabannya lagi

1053
01:00:00,612 --> 01:00:02,320
salah satu variabel\nyang ada dalam matematika

1054
01:00:02,320 --> 01:00:05,828
dipanggil hanya x atau y tetapi di\n

1055
01:00:05,829 --> 01:00:07,371
Jadi saya akan melanjutkan dan melakukan ini.

1056
01:00:07,371 --> 01:00:09,204
Biarkan saya lanjutkan dan\ndrag serta lepas blok ini

1057
01:00:09,204 --> 01:00:11,631
dan saya ingin mengajukan pertanyaan\nsebelum mengatakan apa pun

1058
01:00:11,630 --> 01:00:13,630
namun Anda akan melihat bahwa\nScratch itu cerdas dan memang benar

1059
01:00:13,630 --> 01:00:15,641
akan menyadari bahwa saya ingin\ninmemasukkan sesuatu di antaranya

1060
01:00:15,641 --> 01:00:17,599
dan itu hanya akan\nmembuat semuanya naik dan turun.

1061
01:00:17,599 --> 01:00:20,530
Saya akan melepaskannya dan bertanya pada\n

1062
01:00:20,530 --> 01:00:23,770
Dan sekarang jika saya ingin melanjutkan\ndan menyapa, David atau Carter

1063
01:00:23,771 --> 01:00:26,141
ayo kita ucapkan Halo\nkoma, karena tentu saja

1064
01:00:26,141 --> 01:00:28,820
tidak tahu kapan saya sedang menulis\nprogram siapa yang akan menggunakannya.

1065
01:00:28,820 --> 01:00:35,141
Jadi izinkan saya mengambil blok tampilan lainnya\n

1066
01:00:35,141 --> 01:00:39,280
izinkan saya kembali ke Sensing dan sekarang\n

1067
01:00:39,280 --> 01:00:42,610
oleh potongan puzzle lainnya ini, dan\n

1068
01:00:42,610 --> 01:00:45,460
Perhatikan bentuknya sama, genap\n

1069
01:00:45,460 --> 01:00:47,650
Segalanya akan tumbuh atau menyusut sesuai kebutuhan.

1070
01:00:47,650 --> 01:00:49,721
Baiklah, sekarang mari kita perkecil.

1071
01:00:49,721 --> 01:00:52,630
Biarkan saya pergi dan menghentikan versi lama\n

1072
01:00:53,291 --> 01:00:55,751
Biarkan saya menekan bendera hijau\ndan siapa nama saya?

1073
01:00:59,338 --> 01:01:01,880
Baiklah, mungkin aku kurang\nmemperhatikannya.

1074
01:01:03,141 --> 01:01:06,360
Bendera hijau, D-A-V-I-D, Enter.

1075
01:01:09,280 --> 01:01:13,300
Apa bug atau\nkesalahan yang mungkin Anda pikirkan?

1076
01:01:14,150 --> 01:01:17,370
AUDIENCE: Apakah Anda perlu menambahkan\n

1077
01:01:17,371 --> 01:01:20,760
DAVID MALAN: Ya, kami ingin\n

1078
01:01:20,760 --> 01:01:23,940
Dan secara teknis ini adalah bug karena\n

1079
01:01:23,940 --> 01:01:26,910
Itu hanya mengucapkan David\nsetelah aku menanyakan namaku.

1080
01:01:26,911 --> 01:01:29,971
Saya ingin mengatakan\nmungkin Halo, kalau begitu David

1081
01:01:29,971 --> 01:01:32,460
tapi itu hanya melewati\nHalo dan mencetak David.

1082
01:01:32,460 --> 01:01:34,780
Namun mari kita cari tahu\nmengapa hal ini terjadi.

1083
01:01:34,780 --> 01:01:38,190
Anda tepat untuk mencari solusinya, tapi\n

1084
01:01:39,228 --> 01:01:42,706
AUDIENCE: Jadi dikatakan halo,\ntapi sampai pada langkah terakhir

1085
01:01:42,706 --> 01:01:43,925
begitu cepat sehingga Anda tidak dapat melihatnya.

1086
01:01:44,800 --> 01:01:47,440
Maksudku, komputer\nsangat cepat saat ini.

1087
01:01:47,440 --> 01:01:50,350
Bunyinya Halo, kita semua\namun terlalu lambat di ruangan ini

1088
01:01:50,351 --> 01:01:54,740
bahkan melihatnya karena kemudian tertulis\n

1089
01:01:54,740 --> 01:01:57,443
Jadi ada beberapa solusi\ndi sini, dan solusi Anda tepat

1090
01:01:57,443 --> 01:01:59,651
tapi untuk melihat-lihat saja,\nAnda akan melihat contoh pertama

1091
01:01:59,650 --> 01:02:03,130
tentang berapa banyak cara dalam pemrograman\n

1092
01:02:03,130 --> 01:02:05,440
jika tidak, apakah akan ada\n penyelesaian masalah?

1093
01:02:05,440 --> 01:02:07,420
Kami akan mengajari Anda selama\nminggu-minggu ini

1094
01:02:07,420 --> 01:02:10,660
terkadang beberapa cara relatif\nlebih baik dibandingkan yang lain

1095
01:02:10,661 --> 01:02:13,811
namun jarang sekali ada\ncara terbaik

1096
01:02:13,811 --> 01:02:15,728
karena sekali lagi masuk akal\norang tidak akan setuju.

1097
01:02:15,728 --> 01:02:17,936
Dan apa yang akan kami coba ajarkan\nAnda dalam beberapa minggu mendatang

1098
01:02:17,936 --> 01:02:20,111
adalah bagaimana memikirkan\nseluruh nuansa tersebut.

1099
01:02:20,110 --> 01:02:22,257
Dan itu tidak akan tampak\menjijikkan pada pandangan pertama

1100
01:02:22,257 --> 01:02:24,340
namun semakin banyak program yang Anda\ntulis, semakin banyak masukannya

1101
01:02:24,340 --> 01:02:26,951
yang Anda dapatkan, semakin banyak bug\nyang Anda timbulkan

1102
01:02:26,951 --> 01:02:30,860
semakin Anda dapat menguasai\n

1103
01:02:30,860 --> 01:02:33,130
Jadi izinkan saya mencobanya dalam beberapa cara.

1104
01:02:33,130 --> 01:02:35,620
Sampai di sini akan menjadi salah satu\nsolusi masalah tersebut.

1105
01:02:35,621 --> 01:02:40,286
MIT mengantisipasi masalah seperti ini,\n

1106
01:02:40,286 --> 01:02:42,161
dan saya hanya bisa menggunakan\npotongan teka-teki yang bertuliskan

1107
01:02:42,161 --> 01:02:44,771
ucapkan kalimat berikut selama\ndua detik atau satu detik

1108
01:02:44,771 --> 01:02:47,381
atau apa pun, lalu lakukan\nhal yang sama dengan kata berikutnya

1109
01:02:47,380 --> 01:02:50,110
dan ini mungkin semacam\nsedikit jeda

1110
01:02:50,110 --> 01:02:54,610
Halo, satu detik, dua detik, David,\n

1111
01:02:54,610 --> 01:02:56,760
itu akan terlihat sedikit\nlebih benar secara tata bahasa.

1112
01:02:56,760 --> 01:02:59,260
Tapi saya bisa melakukannya sedikit lebih\nelegan, seperti yang Anda usulkan.

1113
01:02:59,260 --> 01:03:01,385
Izinkan saya membuang\nsalah satu balok ini

1114
01:03:01,385 --> 01:03:04,181
dan Anda cukup menarik dan melepaskan\npergi dan itu akan terhapus dengan sendirinya.

1115
01:03:04,181 --> 01:03:10,211
Biarkan saya pergi ke Operator karena\n

1116
01:03:10,210 --> 01:03:13,721
Jadi meskipun Anda tidak yakin apa yang terjadi\n

1117
01:03:17,300 --> 01:03:20,170
Biarkan saya melanjutkan dan\nmengucapkan halo dengan spasi koma.

1118
01:03:20,170 --> 01:03:22,330
Sekarang ia hanya bisa mengatakan secara\ndefault Halo, pisang

1119
01:03:22,331 --> 01:03:27,701
tapi izinkan saya kembali ke\nMerasakan, Tarik jawaban

1120
01:03:27,701 --> 01:03:29,501
dan itu akan menarik dan melepas di sana.

1121
01:03:29,501 --> 01:03:34,161
Jadi sekarang perhatikan kita sedang menumpuk\n

1122
01:03:34,161 --> 01:03:38,021
sehingga keluarannya menjadi\n

1123
01:03:38,021 --> 01:03:42,024
Biarkan saya lanjutkan dan perbesar\nperkecil, tekan Berhenti, dan tekan Putar.

1124
01:03:42,023 --> 01:03:43,190
Baiklah, siapa namamu?

1125
01:03:45,550 --> 01:03:48,770
Sekarang mungkin\nas yang pertama kali kita inginkan.

1126
01:03:57,811 --> 01:04:02,728
Jadi pertimbangkan hal itu bahkan dengan\ncontoh tambahan ini

1127
01:04:02,728 --> 01:04:05,811
itu masih sesuai dengan model mental yang sama,\n

1128
01:04:05,811 --> 01:04:08,961
Inilah fungsi barunya\nTanyakan sesuatu dan tunggu.

1129
01:04:08,960 --> 01:04:12,471
Dan perhatikan itu dalam kasus ini juga\n

1130
01:04:12,471 --> 01:04:15,621
selanjutnya sebagai argumen\atau parameter, pemrograman

1131
01:04:15,621 --> 01:04:18,681
berbicara hanya untuk masukan dalam\nkonteks suatu fungsi.

1132
01:04:18,681 --> 01:04:21,831
Jika kita menggunakan gambar kita seperti sebelumnya\nuntuk mewakili hal ini di sini

1133
01:04:21,831 --> 01:04:26,061
kita akan melihat bahwa masukannya sekarang berjalan\n

1134
01:04:26,061 --> 01:04:30,081
Algoritme akan diimplementasikan\n

1135
01:04:30,081 --> 01:04:33,381
fungsi yang disebut Ask, dan\noutput dari hal tersebut kali ini

1136
01:04:33,380 --> 01:04:36,110
tidak akan menjadi\nkucing yang mengatakan apa pun

1137
01:04:36,110 --> 01:04:39,721
namun itu akan\nmenjadi jawaban sebenarnya.

1138
01:04:39,721 --> 01:04:43,130
Jadi, alih-alih efek samping visual\n

1139
01:04:43,130 --> 01:04:45,620
sekarang belum ada yang terlihat terjadi.

1140
01:04:45,621 --> 01:04:49,671
Berkat fungsi ini, ini semacam\n

1141
01:04:49,670 --> 01:04:55,701
dengan apa pun yang saya ketik tertulis di atasnya\n

1142
01:04:57,951 --> 01:05:00,050
Sekarang apa yang saya lakukan dengan nilai itu?

1143
01:05:00,050 --> 01:05:04,820
Kami akan mempertimbangkannya dengan\nfungsi selanjutnya

1144
01:05:04,820 --> 01:05:08,280
kami memiliki blok Ucapkan ini,\ntjuga, digabungkan dengan gabungan.

1145
01:05:08,280 --> 01:05:11,780
Jadi kita mempunyai variabel\nyang disebut Jawaban, dan kita menggabungkannya

1146
01:05:11,780 --> 01:05:14,202
dengan argumen pertama itu, Halo.

1147
01:05:14,202 --> 01:05:16,161
Jadi kita sudah melihat\nbeberapa fungsi seperti Gabung

1148
01:05:16,161 --> 01:05:20,001
dapat mengambil bukan hanya satu tapi dua argumen,\atau masukan, dan itu tidak masalah.

1149
01:05:20,001 --> 01:05:24,891
Output dari Gabung mungkin berjalan\n

1150
01:05:24,891 --> 01:05:27,171
atau apa pun yang diketik manusia.

1151
01:05:27,170 --> 01:05:31,580
Pemberitahuan keluaran itu pada dasarnya adalah\n

1152
01:05:31,581 --> 01:05:33,951
Katakanlah, hanya karena kita\nmenumpuk banyak hal

1153
01:05:33,951 --> 01:05:35,851
atau menumpuknya di atas satu sama lain.

1154
01:05:35,851 --> 01:05:40,280
Namun secara metodis, idenya\nsebenarnya sama.

1155
01:05:40,280 --> 01:05:44,900
Inputnya sekarang adalah dua hal,\nHalo koma dan nilai yang dikembalikan

1156
01:05:44,900 --> 01:05:47,300
dari fungsi Tanya sebelumnya.

1157
01:05:47,300 --> 01:05:51,230
Fungsinya sekarang adalah Gabung,\n

1158
01:05:51,231 --> 01:05:53,061
Namun keluaran Halo, David\nsekarang berjalan

1159
01:05:53,061 --> 01:05:57,501
untuk menjadi masukan ke fungsi lain,\n

1160
01:05:57,501 --> 01:06:01,611
dan itu kemudian akan memiliki sisi\n

1161
01:06:02,670 --> 01:06:06,410
Jadi sekali lagi sebagai sesuatu yang canggih\n

1162
01:06:06,411 --> 01:06:09,231
akan mendapatkannya, mereka benar-benar mendapatkannya\n

1163
01:06:09,231 --> 01:06:12,741
input dan output dan Anda hanya punya\n

1164
01:06:12,740 --> 01:06:17,030
dan untuk mengetahui jenis teka-teki apa\n

1165
01:06:17,030 --> 01:06:19,650
Namun pada akhirnya Anda bisa\nmempercantik hal ini.

1166
01:06:19,650 --> 01:06:21,320
Izinkan saya kembali ke\nprogram saya di sini

1167
01:06:21,320 --> 01:06:22,911
menggunakan gelembung ucapan saat ini.

1168
01:06:22,911 --> 01:06:26,090
Bagian dalam Scratch ada yang cantik\n

1169
01:06:26,090 --> 01:06:28,971
Saya mengklik tombol Ekstensi\di pojok kiri bawah.

1170
01:06:28,971 --> 01:06:33,248
Dan biarkan saya melanjutkan dan memilih\nekstensi Text to Speech.

1171
01:06:33,248 --> 01:06:36,081
Ini menggunakan layanan Cloud, jadi\n

1172
01:06:36,081 --> 01:06:39,141
itu sebenarnya dapat berkomunikasi dengan\nCloud atau layanan pihak ketiga

1173
01:06:39,141 --> 01:06:42,411
dan yang ini akan memberiku\n

1174
01:06:42,411 --> 01:06:45,171
kemampuan untuk berbicara\nsesuatu dari speaker saya

1175
01:06:45,170 --> 01:06:47,090
daripada hanya mengatakannya secara tekstual.

1176
01:06:47,090 --> 01:06:48,574
Jadi izinkan saya melanjutkan dan menyeret ini.

1177
01:06:48,574 --> 01:06:51,740
Sekarang perhatikan saya tidak perlu saling mengunci\n

1178
01:06:51,740 --> 01:06:52,971
dan saya ingin memindahkan beberapa barang.

1179
01:06:52,971 --> 01:06:55,280
Saya hanya ingin menggunakan ini sebagai\nseperti kanvas untuk sementara.

1180
01:06:55,280 --> 01:06:58,141
Biarkan saya melanjutkan dan\nmencuri Gabung dari sini

1181
01:06:58,141 --> 01:07:01,581
letakkan di sana, izinkan saya membuang\nblok Say hanya dengan memindahkannya

1182
01:07:01,581 --> 01:07:04,641
kiri dan lepaskan, dan\nsekarang izinkan saya bergabung

1183
01:07:04,641 --> 01:07:08,581
jadi sekarang saya mengubah program saya\nmenjadi sedikit lebih menarik.

1184
01:07:08,581 --> 01:07:10,341
Jadi sekarang izinkan saya menghentikan versi lama.

1185
01:07:18,365 --> 01:07:20,240
DAVID MALAN: (TERTAWA)\nOK, sungguh minus 2.

1186
01:07:20,240 --> 01:07:27,260
Baiklah, jadi apa yang saya tidak sengaja\n

1187
01:07:27,260 --> 01:07:30,170
untuk tujuan pengajaran,\nadalah jawaban sebenarnya

1188
01:07:30,170 --> 01:07:32,660
yang kembali dari blok tanya.

1189
01:07:33,621 --> 01:07:37,593
Jadi sekarang jika saya memainkannya lagi,\nmari kita klik ikon hijau.

1190
01:07:50,271 --> 01:07:54,481
Oke, jadi kita punya fungsi-fungsi ini\n

1191
01:07:54,481 --> 01:07:57,441
Bagaimana dengan persyaratan itu\n

1192
01:07:57,440 --> 01:07:59,810
Bagaimana kita bisa mewujudkan program ini\njadi tidak adil

1193
01:07:59,811 --> 01:08:01,951
mengklik tombol dan voila,\nada sesuatu yang terjadi?

1194
01:08:01,951 --> 01:08:04,251
Mari kita lanjutkan dan jadikan\nkini ini lebih interaktif.

1195
01:08:04,251 --> 01:08:06,501
Izinkan saya membuang\nsebagian besar potongan ini

1196
01:08:06,501 --> 01:08:09,471
dan biarkan aku membumbuinya\n

1197
01:08:09,471 --> 01:08:12,170
Saya akan buka Play\nSound Meow sampai selesai.

1198
01:08:15,251 --> 01:08:18,521
Oke, suaranya agak keras, tapi\nsesuai dengan yang dikatakannya.

1199
01:08:21,791 --> 01:08:23,490
Ini akan menjadi program\nyang mengecewakan pada akhirnya

1200
01:08:23,490 --> 01:08:26,551
karena menurut Anda itu\n

1201
01:08:26,940 --> 01:08:28,358
Saya harus terus menekan tombolnya.

1202
01:08:28,358 --> 01:08:31,386
Sepertinya ini sebuah peluang\n

1203
01:08:31,386 --> 01:08:33,511
Jadi baiklah, kalau aku\ningin mengeong, mengeong, mengeong

1204
01:08:33,511 --> 01:08:37,171
izinkan saya mengambil beberapa di antaranya, atau Anda\n

1205
01:08:37,171 --> 01:08:39,360
dan Anda dapat Menyalin Tempel\bahkan dalam kode di sini.

1206
01:08:43,230 --> 01:08:45,228
Baiklah, jadi sekarang sepertinya\itu tidak terlalu emosional

1207
01:08:45,228 --> 01:08:46,560
kebahagiaan dengan cara yang sama.

1208
01:08:49,421 --> 01:08:52,481
Izinkan saya membuka Kontrol, tunggu\tidak satu detik pun

1209
01:08:52,480 --> 01:08:55,860
yang mungkin tidak terlalu mengkhawatirkan.

1210
01:09:01,451 --> 01:09:06,310
Oke, jadi jika tujuan saya adalah membuat\nkucing mengeong tiga kali

1211
01:09:06,310 --> 01:09:10,000
Saya berani mengatakan kode atau\nalgoritma ini benar.

1212
01:09:10,001 --> 01:09:12,940
Tapi sekarang mari kita mengkritik desainnya.

1213
01:09:21,501 --> 01:09:27,052
AUDIENCE: Anda dapat menggunakan selamanya\n

1214
01:09:27,052 --> 01:09:28,510
DAVID MALAN: Ya, jadi ya, setuju.

1215
01:09:28,511 --> 01:09:31,301
Saya dapat menggunakannya selamanya atau mengulanginya,\nnamun izinkan saya mendorongnya lebih keras lagi.

1216
01:09:31,990 --> 01:09:36,070
Sepertinya ini berhasil, saya sudah selesai\n

1217
01:09:36,070 --> 01:09:37,881
HADIRIN: Terlalu banyak pengulangan.

1218
01:09:37,881 --> 01:09:40,131
DAVID MALAN: Ya, tidak terlalu banyak pengulangan, bukan?

1219
01:09:40,131 --> 01:09:42,591
Jika saya ingin mengubah\nssuara yang dihasilkan kucing

1220
01:09:42,591 --> 01:09:46,041
ke varian mengeong yang berbeda atau\n

1221
01:09:46,041 --> 01:09:48,351
Rupanya saya bisa mengubahnya dari\ndropdown di sini

1222
01:09:48,350 --> 01:09:51,350
tapi kemudian saya harus mengubahnya di sini\n

1223
01:09:51,350 --> 01:09:54,110
dan Tuhan, jika ini lebih lama lagi\nitu akan cepat membosankan

1224
01:09:54,110 --> 01:09:56,030
dan Anda mungkin\ninmeningkatkan kemungkinannya

1225
01:09:56,030 --> 01:09:57,081
bahwa Anda akan\nmengacaukan dan Anda akan pergi

1226
01:09:57,081 --> 01:10:00,072
melewatkan salah satu dropdown atau\n

1227
01:10:00,072 --> 01:10:02,779
Atau, jika Anda ingin mengubah\n

1228
01:10:02,779 --> 01:10:05,150
Anda harus mengubahnya di\ndua, bahkan mungkin lebih banyak tempat.

1229
01:10:05,150 --> 01:10:07,581
Sekali lagi, Anda hanya\nmenciptakan risiko bagi diri Anda sendiri

1230
01:10:07,581 --> 01:10:09,150
dan potensi bug dalam program.

1231
01:10:09,150 --> 01:10:13,041
Jadi saya suka pengulangan atau selamanya\n

1232
01:10:13,041 --> 01:10:15,801
Dan memang, apa yang saya pikir mungkin terjadi

1233
01:10:15,801 --> 01:10:18,651
copy paste tadi, bukan\nberarti bagus.

1234
01:10:18,650 --> 01:10:20,421
Dan dalam kode, secara umum\nketika Anda

1235
01:10:20,421 --> 01:10:23,841
mulai menyalin dan menempelkan\npotongan puzzle atau teks minggu depan

1236
01:10:23,841 --> 01:10:26,910
Anda mungkin tidak melakukan\nsesuatu dengan baik.

1237
01:10:26,909 --> 01:10:30,680
Jadi izinkan saya membuang sebagian besarnya\n

1238
01:10:30,680 --> 01:10:33,680
hanya menyimpan dua\nblok yang saya pedulikan.

1239
01:10:33,680 --> 01:10:37,880
Izinkan saya mengambil blok Ulangi untuk saat ini,\n

1240
01:10:37,881 --> 01:10:40,941
blok, ini akan menjadi sesuai\nit, izinkan saya menyambungkan kembali semua ini

1241
01:10:40,940 --> 01:10:44,449
dan ubah 10 menjadi\nmenjadi 3, dan sekarang, Mainkan.

1242
01:10:51,621 --> 01:10:53,538
Itu masih benar, tapi\nsekarang saya sudah menyiapkan panggungnya

1243
01:10:53,537 --> 01:10:57,040
misalnya membiarkan kucing mengeong,\n

1244
01:10:57,041 --> 01:11:00,431
40 kali dengan mengubah satu hal, atau\n

1245
01:11:00,430 --> 01:11:03,159
dan pergi begitu saja dan ia\nakan mengeong selamanya.

1246
01:11:03,159 --> 01:11:05,230
Jika itu tujuan Anda,\nitu lebih baik.

1247
01:11:05,230 --> 01:11:07,569
Desain yang lebih baik tetapi masih benar.

1248
01:11:08,319 --> 01:11:10,270
Sekarang saya memiliki\nprogram yang dirancang

1249
01:11:10,270 --> 01:11:13,630
mau punya kucing mengeong, wow kenapa?

1250
01:11:13,631 --> 01:11:16,360
Maksudku, MIT menemukan\nScratch, Scratch seperti kucing

1251
01:11:16,359 --> 01:11:18,371
kenapa tidak ada\npotongan teka-teki bernama Meow?

1252
01:11:18,371 --> 01:11:20,081
Ini terasa seperti sebuah kesempatan yang terlewatkan.

1253
01:11:20,081 --> 01:11:22,751
Agar adil, mereka memberi\nu semua elemen penyusunnya

1254
01:11:22,751 --> 01:11:26,032
yang dengannya kami dapat mengimplementasikannya\n

1255
01:11:26,032 --> 01:11:28,239
dan benar-benar ilmu komputer\nis untuk memanfaatkan jati diri kita

1256
01:11:28,239 --> 01:11:30,489
sekarang akan mulai memanggil Abstraksi.

1257
01:11:30,489 --> 01:11:34,480
Kami memiliki petunjuk langkah demi langkah\ndi sini, Ulangi, Putar

1258
01:11:34,480 --> 01:11:37,001
dan Wait yang secara kolektif\nmengimplementasikan ide ini

1259
01:11:37,001 --> 01:11:38,771
yang kita manusia sebut mengeong.

1260
01:11:38,770 --> 01:11:41,831
Bukankah lebih baik untuk mengabstraksi\menyingkirkan beberapa teka-teki itu

1261
01:11:41,831 --> 01:11:45,701
potongan menjadi satu yang secara harfiah\n

1262
01:11:45,701 --> 01:11:48,280
Di sinilah kita\nbisa membuat blok kita sendiri.

1263
01:11:48,280 --> 01:11:52,331
Izinkan saya membuka Scratch\ndi bawah kategori blok merah muda

1264
01:11:52,331 --> 01:11:55,932
di sini dan izinkan saya mengklik Buat Blokir.

1265
01:11:55,932 --> 01:11:57,640
Di sini saya melihat antarmuka yang sedikit\nberbeda

1266
01:11:57,640 --> 01:12:00,490
di mana aku bisa memilih namanya\ndan aku akan menamainya Meong.

1267
01:12:05,180 --> 01:12:08,201
Sekarang saya hanya akan\nmembersihkannya sedikit di sini.

1268
01:12:08,201 --> 01:12:12,020
Izinkan saya menarik dan melepas Putar\nSuara dan Tunggu di sini.

1269
01:12:13,030 --> 01:12:15,850
Saya hanya akan menyeretnya\nke sini, ke bawah

1270
01:12:15,850 --> 01:12:18,190
di sini karena sekarang saya\nsudah selesai mengimplementasikan Meow

1271
01:12:18,190 --> 01:12:21,050
Saya akan benar-benar mengabstraksi\nit, agak tidak terlihat

1272
01:12:21,051 --> 01:12:25,301
di luar ingatan, karena sekarang perhatikan di\n

1273
01:12:26,711 --> 01:12:31,541
Jadi saat ini, menurut saya hal tersebut tidak terjadi\n

1274
01:12:31,541 --> 01:12:35,020
Sejujurnya, saya tidak tahu bagaimana Ask\nor Say diimplementasikan oleh MIT.

1275
01:12:35,020 --> 01:12:37,210
Mereka mengabstraksi\nhal-hal itu untuk kita.

1276
01:12:37,211 --> 01:12:40,121
Sekarang saya punya potongan\nteka-teki baru yang menjelaskan apa sebenarnya itu.

1277
01:12:40,121 --> 01:12:44,440
Dan ini sekarang masih benar,\ntetapi desainnya bisa dibilang lebih baik.

1278
01:12:45,041 --> 01:12:47,440
Karena itu lebih\nmudah dibaca oleh saya, bagi Anda

1279
01:12:47,440 --> 01:12:49,690
ini lebih mudah dikelola\nsaat Anda melihat kode Anda

1280
01:12:49,690 --> 01:12:52,240
setahun dari sekarang untuk pertama kalinya\n

1281
01:12:52,240 --> 01:12:53,948
kembali ke\nprogram pertama yang Anda tulis.

1282
01:12:55,541 --> 01:12:59,230
Fungsinya sendiri memiliki semantik,\n

1283
01:12:59,230 --> 01:13:01,960
Jika Anda benar-benar peduli\nbagaimana Meow diterapkan

1284
01:13:01,961 --> 01:13:04,931
Anda dapat menggulir ke bawah dan mulai\nmengutak-atik dasar

1285
01:13:04,930 --> 01:13:09,701
detail implementasi, namun sebaliknya\n

1286
01:13:09,701 --> 01:13:13,211
Sekarang saya merasa ada\nbahkan peluang tambahan

1287
01:13:13,211 --> 01:13:17,711
di sini untuk abstraksi dan memfaktorkan\n

1288
01:13:17,711 --> 01:13:21,161
Agak menyedihkan bahwa saya\nmeminta Pengulangan ini memblokir itu

1289
01:13:21,161 --> 01:13:24,511
izinkan saya memanggil fungsi Meong,\n

1290
01:13:25,570 --> 01:13:28,480
Bukankah lebih baik jika saya bisa\nmenyebutnya fungsi Meong saja

1291
01:13:28,480 --> 01:13:32,860
alias menggunakan fungsi Meow, dan meneruskan\n

1292
01:13:32,860 --> 01:13:35,110
sepotong berapa kali aku ingin mengeong?

1293
01:13:35,110 --> 01:13:37,970
Baiklah, izinkan saya\nmemperkecil dan menggulir ke bawah.

1294
01:13:37,970 --> 01:13:41,560
Biarkan saya klik kanan atau Kontrol klik\n

1295
01:13:41,560 --> 01:13:44,951
atau saya bisa memulainya dari awal,\n

1296
01:13:44,951 --> 01:13:48,791
Sekarang di sini, daripada hanya memberikan ini\n

1297
01:13:50,801 --> 01:13:53,081
Saya akan lanjutkan dan\nketik, misalnya, n

1298
01:13:53,081 --> 01:13:56,141
untuk beberapa kali\nmengeong, dan hanya untuk membuat

1299
01:13:56,140 --> 01:13:58,505
ini bahkan lebih ramah pengguna\ndan deskriptif

1300
01:13:58,506 --> 01:14:00,881
Saya akan menambahkan label,\nyang tidak memiliki dampak fungsional

1301
01:14:00,881 --> 01:14:03,070
ini hanya sekedar estetika,\ndan saya berangkat saja

1302
01:14:03,070 --> 01:14:05,740
untuk mengatakan Times, hanya untuk membuat\nit membaca lebih seperti bahasa Inggris

1303
01:14:05,740 --> 01:14:08,201
dalam hal ini, hal ini memberi tahu saya\napa fungsi potongan puzzle tersebut.

1304
01:14:09,680 --> 01:14:12,201
Dan sekarang saya perlu menyempurnakan\nini sedikit.

1305
01:14:12,201 --> 01:14:18,480
Biarkan saya lanjutkan dan ambil\ndi bawah Kontrol blok berulang

1306
01:14:18,480 --> 01:14:22,180
izinkan saya memindahkan Putar, Suara,\ndan Tunggu, ke dalam blok pengulangan.

1307
01:14:22,180 --> 01:14:24,720
Saya tidak ingin 10 dan saya juga tidak ingin 3 di sini.

1308
01:14:24,720 --> 01:14:29,880
Yang kuinginkan sekarang adalah ini\n

1309
01:14:29,881 --> 01:14:33,271
sedang menciptakan untuk saya yang mewakili\n

1310
01:14:34,025 --> 01:14:35,400
Perhatikan bahwa itu terpasang tepat pada tempatnya.

1311
01:14:35,400 --> 01:14:39,451
Biarkan saya menghubungkan ini dan sekarang voila, saya\n

1312
01:14:40,951 --> 01:14:44,878
Dibutuhkan masukan yang memengaruhi\nit perilakunya.

1313
01:14:44,878 --> 01:14:47,671
Sekarang saya akan gulir kembali ke atas,\n

1314
01:14:47,671 --> 01:14:49,021
Saya hanya peduli Meong itu ada.

1315
01:14:49,020 --> 01:14:52,560
Sekarang saya bisa memperketat kode saya, jadi\nbisa dikatakan, gunakan lebih sedikit baris

1316
01:14:52,560 --> 01:14:55,740
untuk melakukan hal yang sama dengan\nmembuang blok Ulangi

1317
01:14:55,740 --> 01:15:00,091
menghubungkan kembali potongan puzzle baru ini di sini\n

1318
01:15:00,091 --> 01:15:02,221
sekarang kita benar-benar sedang memprogram, bukan?

1319
01:15:02,220 --> 01:15:04,560
Kami belum membuat kemajuan apa pun\nsecara fungsional.

1320
01:15:04,560 --> 01:15:06,871
Masalahnya hanya mouse tiga kali.

1321
01:15:09,060 --> 01:15:11,371
Semakin Anda memprogram\nlebih banyak lagi, inilah jenisnya

1322
01:15:11,371 --> 01:15:13,860
naluri masih mulai\nmendapatkannya

1323
01:15:13,860 --> 01:15:16,711
kamu bisa mulai mengambil tugas besar,\n

1324
01:15:16,711 --> 01:15:20,371
bahkan untuk pekerjaan rumah, rasanya\n

1325
01:15:21,541 --> 01:15:25,440
Namun jika Anda mulai mengidentifikasi apa saja\n

1326
01:15:25,440 --> 01:15:27,390
Kemudian Anda bisa mulai membuat kemajuan.

1327
01:15:27,390 --> 01:15:32,070
Saya melakukan ini sampai hari ini jika saya harus\n

1328
01:15:32,070 --> 01:15:36,121
sangat mudah untuk menyeret kakiku dan ugh,\n

1329
01:15:36,121 --> 01:15:38,820
sampai saya mulai menulis\nseperti daftar tugas

1330
01:15:38,820 --> 01:15:41,490
dan saya mulai memodulasi\nprogramnya dan berkata, baiklah

1331
01:15:41,490 --> 01:15:42,600
apa yang saya ingin hal ini lakukan?

1332
01:15:43,680 --> 01:15:45,680
Saya harus membuatnya mengatakan\nsesuatu di layar.

1333
01:15:45,680 --> 01:15:48,150
Baiklah, saya perlu membuatnya\nmengatakan sesuatu di layar

1334
01:15:49,081 --> 01:15:52,421
Seperti secara harfiah mental atau tertulis\n

1335
01:15:52,421 --> 01:15:55,621
jika Anda mau, dalam bahasa Inggris pada\nselembar kertas atau file teks

1336
01:15:55,621 --> 01:15:57,810
lalu Anda dapat memutuskan,\nOke, hal pertama yang saya lakukan

1337
01:15:57,810 --> 01:16:00,790
perlu mengerjakan pekerjaan rumah untuk\nmenyelesaikan masalah dunia nyata ini

1338
01:16:02,161 --> 01:16:04,261
Saya perlu menggunakan banyak\nkode lain juga

1339
01:16:04,261 --> 01:16:06,661
tapi saya perlu membuat fungsi\nMeow dan boom

1340
01:16:06,661 --> 01:16:10,440
sekarang kamu punya sebagian masalahnya\n

1341
01:16:10,440 --> 01:16:14,850
pesan di sana, namun dalam hal ini, kami akan\n

1342
01:16:14,850 --> 01:16:16,510
Baiklah, jadi apa lagi yang bisa kita lakukan?

1343
01:16:16,511 --> 01:16:18,993
Mari tambahkan beberapa\nkepingan lagi pada teka-teki di sini.

1344
01:16:18,993 --> 01:16:20,701
Mari berinteraksi\ndengan kucing sekarang.

1345
01:16:20,701 --> 01:16:24,030
Biarkan saya melanjutkan dan sekarang ketika\n

1346
01:16:24,030 --> 01:16:26,820
dan ajukan pertanyaan menggunakan acara di sini.

1347
01:16:26,820 --> 01:16:31,081
Izinkan saya melanjutkan dan\nkatakan, coba lihat, saya mau

1348
01:16:31,081 --> 01:16:34,331
untuk melakukan sesuatu seperti menerapkan\ngagasan mengelus kucing.

1349
01:16:34,331 --> 01:16:39,841
Jadi jika kursor menyentuh\n

1350
01:16:39,841 --> 01:16:42,472
akan sangat lucu jika kucingnya mengeong\nseperti Anda sedang mengelus kucing.

1351
01:16:42,472 --> 01:16:45,180
Jadi saya akan mengajukan pertanyaan,\n

1352
01:16:45,180 --> 01:16:48,370
jika mari kita lihat, saya rasa saya perlu Sensing.

1353
01:16:48,371 --> 01:16:50,761
Jadi jika menyentuh penunjuk mouse\n, ini terlalu besar

1354
01:16:50,761 --> 01:16:52,891
tapi sekali lagi bentuknya\nbagus, jadi begini saja.

1355
01:16:53,730 --> 01:16:56,280
Dan kemudian jika itu menyentuh\npenunjuk tetikus

1356
01:16:56,280 --> 01:16:59,760
yaitu jika kucing kepada siapa\nskrip atau program ini

1357
01:16:59,761 --> 01:17:03,031
setiap kali saya melampirkan potongan\npuzzle, MIT menyebutnya sebagai skrip

1358
01:17:03,030 --> 01:17:07,230
atau seperti sebuah program, jika Anda mau, biarkan\n

1359
01:17:07,230 --> 01:17:10,219
dan ucapkan putar suara meong sampai selesai.

1360
01:17:10,219 --> 01:17:11,761
Baiklah, jadi ini harus menjadi jelas.

1361
01:17:11,761 --> 01:17:13,891
Saat bendera hijau\ndiklik, ajukan pertanyaan

1362
01:17:13,890 --> 01:17:18,180
jika kucing menyentuh penunjuk mouse\nlalu keluarkan suara mengeong.

1363
01:17:29,581 --> 01:17:34,351
Saya khawatir ini bukan kesalahan\nScratch. Terasa seperti milikku.

1364
01:17:39,381 --> 01:17:42,231
Ya, di belakang, siapa yang baru saja berbalik.

1365
01:17:47,935 --> 01:17:50,810
DAVID MALAN: Ya, masalahnya adalah\n

1366
01:17:50,810 --> 01:17:54,260
Scratch mengajukan pertanyaan, apakah\n

1367
01:17:54,261 --> 01:17:57,261
Dan jelas itu bukan karena\n

1368
01:17:58,430 --> 01:18:01,370
Tidak apa-apa jika saya memindahkan kursor\nke bawah sana, tapi terlambat.

1369
01:18:01,371 --> 01:18:03,141
Program sudah menanyakan pertanyaan tersebut.

1370
01:18:03,140 --> 01:18:06,810
Jawabannya adalah tidak, salah, atau nol,\n

1371
01:18:08,190 --> 01:18:10,340
Jadi apa solusinya?

1372
01:18:10,341 --> 01:18:12,891
Saya bisa menggerakkan kursor\ndengan cepat, tapi itu terasa

1373
01:18:12,890 --> 01:18:14,900
seperti tidak akan pernah berhasil dengan baik.

1374
01:18:18,051 --> 01:18:20,521
Bisakah Anda menggunakan loop selamanya?

1375
01:18:21,341 --> 01:18:24,601
Jadi saya memang bisa menggunakan Forever\n ini

1376
01:18:24,600 --> 01:18:28,080
untuk terus-menerus mendengarkanku, ya\n

1377
01:18:28,081 --> 01:18:30,150
atau setidaknya selamanya\nselama program tersebut ada

1378
01:18:30,150 --> 01:18:32,318
berjalan sampai saya secara eksplisit menekan Stop.

1379
01:18:33,150 --> 01:18:36,480
Biarkan saya pergi ke Kontrol, biarkan\nsaya ambil blok Selamanya

1380
01:18:36,480 --> 01:18:40,260
izinkan saya memindahkan If di dalam blok\nSelamanya ini, sambungkan kembali

1381
01:18:40,261 --> 01:18:43,951
kembali ke sini, klik hijau\n

1382
01:18:43,951 --> 01:18:45,721
tapi izinkan saya mencoba menggerakkan kursor saya sekarang.

1383
01:18:50,381 --> 01:18:52,298
Jadi sekarang kucing itu benar-benar\nmerespons dan memang demikian

1384
01:18:52,297 --> 01:18:54,840
akan terus melakukan\nini lagi dan lagi.

1385
01:18:54,841 --> 01:18:58,651
Jadi sekarang kami punya ide untuk mengambil ini\n

1386
01:18:58,650 --> 01:19:01,501
potongan-potongan, merakitnya menjadi\nsesuatu yang lebih rumit.

1387
01:19:01,501 --> 01:19:03,621
Saya pasti bisa memberi nama untuk ini.

1388
01:19:03,621 --> 01:19:05,371
Saya dapat membuat\nblok khusus, namun untuk saat ini

1389
01:19:05,371 --> 01:19:08,074
mari kita pertimbangkan\ninteraktivitas lebih lanjut apa yang dapat kita lakukan.

1390
01:19:08,073 --> 01:19:09,240
Biarkan saya melanjutkan dan melakukan ini.

1391
01:19:09,240 --> 01:19:12,930
Dengan sekali lagi mengambil a,\nketika bendera hijau diklik

1392
01:19:12,930 --> 01:19:16,003
izinkan saya melanjutkan dan\nmengklik penginderaan video

1393
01:19:16,003 --> 01:19:18,421
dan saya akan memutar\nlaptop karena kalau tidak, kita akan memutarnya

1394
01:19:18,421 --> 01:19:21,463
akan mendapatkan sedikit hal awal\n

1395
01:19:22,470 --> 01:19:25,980
Jadi saya akan mengungkapkan kepada\nAnda apa yang ada di dalam podium

1396
01:19:29,911 --> 01:19:34,980
Sekarang kita memiliki latar belakang\nyang bukan video, saya akan mengatakan ini.

1397
01:19:34,980 --> 01:19:37,110
Alih-alih bendera hijau\ndiklik, sebenarnya sayalah yang mengkliknya

1398
01:19:37,110 --> 01:19:40,770
akan memberitahukan kapan video bergerak\n

1399
01:19:40,770 --> 01:19:47,233
pengukuran gerak, saya akan pergi\n

1400
01:19:47,233 --> 01:19:48,940
Lalu aku akan\ngminggir.

1401
01:19:50,511 --> 01:19:53,341
Kami akan menempatkannya di atas sana.

1402
01:20:00,451 --> 01:20:03,171
Jadi tanganku bergerak lebih cepat\ntdari 50 sesuatu atau lainnya

1403
01:20:03,171 --> 01:20:05,021
apapun satuan ukurannya.

1404
01:20:06,881 --> 01:20:08,298
DAVID MALAN: (TERTAWA) Terima kasih.

1405
01:20:08,297 --> 01:20:10,960
Jadi sekarang kami memiliki\nversi yang lebih interaktif.

1406
01:20:12,081 --> 01:20:15,721
Tapi menurutku kalau aku agak lambat.

1407
01:20:18,780 --> 01:20:23,570
Benar-benar menyeramkan, tapi aku\n

1408
01:20:24,360 --> 01:20:27,161
Hingga akhirnya tanganku\nbergerak secepat itu.

1409
01:20:27,161 --> 01:20:29,341
Jadi inilah\nan kesempatan untuk menunjukkannya kepada Anda

1410
01:20:29,341 --> 01:20:31,261
sesuatu yang dilakukan mantan siswa.

1411
01:20:35,501 --> 01:20:38,391
Izinkan saya memperkecil\nini sebentar lagi.

1412
01:20:40,610 --> 01:20:42,360
(TERTAWA) Jika seseorang\nakan merasa nyaman

1413
01:20:42,360 --> 01:20:44,871
muncul tidak hanya secara bertopeng tetapi\njuga di kamera di internet

1414
01:20:44,871 --> 01:20:48,751
Kukira kami akan memainkan salah satu mantanmu\n

1415
01:20:48,751 --> 01:20:51,400
Apakah ada yang ingin menjadi sukarelawan\ndi sini dan naik ke panggung?

1416
01:20:57,011 --> 01:20:58,981
Biarkan saya menyiapkannya untuk Anda di sini.

1417
01:21:10,180 --> 01:21:13,240
Baiklah, izinkan saya melanjutkan\ndan menampilkannya dalam layar penuh di sini.

1418
01:21:13,240 --> 01:21:17,640
Jadi ini adalah pukulan telak dari salah satu\npendahulu Anda yang lebih kuat.

1419
01:21:17,640 --> 01:21:20,670
Ini akan menggunakan pemfokusan kamera\n

1420
01:21:20,671 --> 01:21:22,328
untuk memposisikan di dalam persegi panjang ini.

1421
01:21:22,328 --> 01:21:24,661
Pernahkah Anda memainkan\ngame whack-a-mole di arcade?

1422
01:21:25,470 --> 01:21:27,617
Jadi bagi yang belum,\ntahi lalat kecil ini akan muncul

1423
01:21:27,618 --> 01:21:29,701
dan dengan\npalu yang sangat tidak jelas, kamu seperti terhantam.

1424
01:21:29,701 --> 01:21:31,493
Namun, jika Anda\ntidak keberatan, Anda akan pergi

1425
01:21:31,493 --> 01:21:34,121
menggunakan kepala Anda untuk melakukan ini secara virtual.

1426
01:21:34,121 --> 01:21:39,121
Jadi mari sejajarkan pikiran Anda dengan\n

1427
01:21:48,211 --> 01:21:50,400
Dan sekarang pukul tahi lalat dengan kepalamu.

1428
01:22:14,930 --> 01:22:16,850
Baiklah, tepuk tangan\naik untuk Sahar.

1429
01:22:24,600 --> 01:22:26,732
Jadi, lebih dari sekadar bersenang-senang di sini

1430
01:22:26,733 --> 01:22:28,440
tujuannya adalah untuk\ndmenunjukkan hal itu dengan menggunakan

1431
01:22:28,440 --> 01:22:31,890
beberapa elemen penyusun dasar yang cukup sederhana, primitif,\n

1432
01:22:31,890 --> 01:22:34,260
tapi merakitnya dengan cara yang menyenangkan\ndiiringi musik, mungkin

1433
01:22:34,261 --> 01:22:37,781
beberapa kostum atau karya seni baru, kamu\n

1434
01:22:37,780 --> 01:22:40,841
Namun pada akhirnya,\n

1435
01:22:40,841 --> 01:22:43,591
adalah orang-orang seperti yang baru saja\n

1436
01:22:43,591 --> 01:22:45,311
karena\njelas ada banyak tahi lalat.

1437
01:22:45,310 --> 01:22:49,290
Jadi siswa tersebut mungkin membuat beberapa\n

1438
01:22:49,291 --> 01:22:50,708
tapi setidaknya empat tahi lalat yang berbeda.

1439
01:22:50,707 --> 01:22:53,457
Mereka punya semacam grafik\n

1440
01:22:54,600 --> 01:22:57,090
Ada semacam\timer, mungkin sebuah variabel

1441
01:22:57,091 --> 01:22:59,676
bahwa setiap detik menghitung mundur.

1442
01:22:59,676 --> 01:23:02,551
Jadi Anda bisa membayangkan mengambil apa yang tampak\n

1443
01:23:02,551 --> 01:23:04,561
pada pandangan pertama, dan\nmungkin berlebihan

1444
01:23:04,560 --> 01:23:07,980
untuk menyelesaikannya sendiri, tapi pikirkan saja\n

1445
01:23:07,980 --> 01:23:12,360
Dan pecahkan satu\npuzzle itu, boleh dikatakan begitu, dalam satu waktu.

1446
01:23:12,360 --> 01:23:15,100
Memang benar kalau kita mundur sedikit.

1447
01:23:15,100 --> 01:23:17,880
Izinkan saya melanjutkan\ndan memperkenalkan sebuah program

1448
01:23:17,881 --> 01:23:20,521
yang saya buat sendiri\nsaat saya masih kuliah pascasarjana

1449
01:23:20,520 --> 01:23:23,081
ketika Scratch pertama kali\ndikembangkan oleh MIT.

1450
01:23:23,081 --> 01:23:26,400
Izinkan saya membuka\ndi sini, tunggu sebentar

1451
01:23:26,400 --> 01:23:30,630
sesuatu yang saya hubungi kembali\nin pada hari Oscar Time itu

1452
01:23:30,631 --> 01:23:32,761
terlihat seperti ini.

1453
01:23:32,761 --> 01:23:34,591
Jika saya layar penuh dan tekan Play.

1454
01:23:34,591 --> 01:23:38,166
[MUSIK - SESAME STREET, "AKU SUKA SAMPAH"]

1455
01:23:38,166 --> 01:23:40,041
OSCAR THE GROUCH:\n(BERNYANYI) Oh, aku suka sampah.

1456
01:23:40,041 --> 01:23:42,458
DAVID MALAN: Jadi, Anda akan melihat\na ada potongan sampah yang berjatuhan.

1457
01:23:42,457 --> 01:23:45,930
Saya dapat mengekliknya dan menyeretnya dan saat saya mendapatkannya\n

1458
01:23:45,930 --> 01:23:47,930
OSCAR THE GROUCH: (BERNYANYI)\nApa pun yang compang-camping atau--

1459
01:23:47,930 --> 01:23:49,820
DAVID MALAN: Tampaknya ingin\nmasuk.

1460
01:23:50,900 --> 01:23:52,400
OSCAR THE GROUCH: (BERNYANYI) Ya, saya--

1461
01:23:54,935 --> 01:23:56,600
OSCAR THE GROUCH: (BERNYANYI) Jika Anda\n

1462
01:23:56,600 --> 01:23:57,740
DAVID MALAN: Saya akan melakukan\nhal yang sama, dua poin.

1463
01:23:57,740 --> 01:24:00,140
OSCAR THE GROUCH: (SINGING) I have here\n

1464
01:24:00,140 --> 01:24:01,820
DAVID MALAN: Ada\nssepatu jatuh dari langit

1465
01:24:01,820 --> 01:24:03,288
jadi semacam sprite lain.

1466
01:24:03,288 --> 01:24:05,246
OSCAR THE GROUCH: (BERNYANYI)\nTalinya robek.

1467
01:24:07,070 --> 01:24:09,291
DAVID MALAN: Saya juga bisa\nsedikit malas

1468
01:24:09,291 --> 01:24:13,234
dan biarkan saja mereka jatuh ke\nsampah jika saya mau.

1469
01:24:13,234 --> 01:24:15,651
Jadi Anda dapat melihat bahwa ini tidak ada hubungannya dengan kursor mouse saya

1470
01:24:15,650 --> 01:24:18,270
tampaknya ini ada hubungannya\ndengan jarak di sini.

1471
01:24:18,270 --> 01:24:19,730
Mari kita dengarkan lebih jauh.

1472
01:24:19,730 --> 01:24:23,300
Saya pikir beberapa sampah tambahan\nis akan muncul.

1473
01:24:23,301 --> 01:24:26,871
Agaknya ada semacam variabel\n

1474
01:24:26,871 --> 01:24:28,371
OSCAR THE GROUCH: (BERNYANYI) Aku suka--

1475
01:24:28,371 --> 01:24:30,703
DAVID MALAN: Oke, mari kita lihat\nchorus terakhirnya apa.

1476
01:24:30,703 --> 01:24:32,720
OSCAR THE GROUCH:\n(BERNYANYI) Hal-hal busuk.

1477
01:24:32,720 --> 01:24:35,810
Di sini saya punya beberapa koran, berkerak dan

1478
01:24:35,810 --> 01:24:37,790
DAVID MALAN: Oke, dan demikianlah dia melanjutkan.

1479
01:24:37,791 --> 01:24:40,701
Dan lagunya\nterus-menerus terus-menerus

1480
01:24:40,701 --> 01:24:43,371
dan saya tidak punya kenangan indah\nmengimplementasikan dan mendengarnya

1481
01:24:43,371 --> 01:24:46,400
lagu ini berdurasi sekitar 10\njam berturut-turut, tapi ternyata begitu

1482
01:24:46,400 --> 01:24:50,055
a good example to just consider\nhow was this program composed?

1483
01:24:50,055 --> 01:24:52,430
Bagaimana cara saya menerapkan\nit pertama kali?

1484
01:24:52,430 --> 01:24:54,755
Dan izinkan saya melanjutkan\nmembuka beberapa program sekarang

1485
01:24:54,756 --> 01:24:56,631
yang saya tulis sebelumnya\nhanya agar kami bisa

1486
01:24:56,631 --> 01:24:58,911
lihat bagaimana benda-benda ini disusun.

1487
01:24:58,911 --> 01:25:02,331
Sejujurnya, hal pertama\nyang mungkin saya lakukan adalah mungkin

1488
01:25:02,331 --> 01:25:04,730
untuk melakukan sesuatu seperti ini.

1489
01:25:04,730 --> 01:25:07,161
Ini hanyalah versi\noprogram dimana

1490
01:25:07,161 --> 01:25:09,860
Saya bertekad menyelesaikan\nhanya satu masalah terlebih dahulu

1491
01:25:09,860 --> 01:25:12,121
penanaman tiang lampu dalam program tersebut.

1492
01:25:12,621 --> 01:25:14,391
Saya memiliki visi tentang apa yang saya inginkan.

1493
01:25:14,390 --> 01:25:15,980
Anda tahu, hal itu berkembang\ntentu saja seiring berjalannya waktu

1494
01:25:15,980 --> 01:25:17,420
tapi aku tahu aku ingin\nsampah jatuh, aku ingin

1495
01:25:17,421 --> 01:25:19,128
Oscar kecil yang lucu\nthe Grouch akan muncul

1496
01:25:19,128 --> 01:25:22,041
tempat sampah, dan beberapa\nlainnya, tapi wow banyak sekali

1497
01:25:23,690 --> 01:25:26,570
Saya akan memulai dengan mudah, unduh\na gambar tiang lampu

1498
01:25:26,570 --> 01:25:30,951
lalu seret dan lepas ke\n

1499
01:25:31,970 --> 01:25:33,740
Itu tidak melakukan apa pun secara fungsional.

1500
01:25:33,740 --> 01:25:36,831
Maksud saya, itulah\nkode yang saya tulis untuk melakukan ini.

1501
01:25:36,831 --> 01:25:38,990
Yang saya lakukan hanyalah menggunakan\nfitur Latar Belakang

1502
01:25:38,990 --> 01:25:41,041
dan tarik lalu lepas dan\npindahkan benda-benda

1503
01:25:41,041 --> 01:25:44,181
tapi itu membawa saya ke versi\tidak ada program saya.

1504
01:25:44,180 --> 01:25:46,010
Lalu apa jadinya versi kedua?

1505
01:25:46,011 --> 01:25:48,591
Baiklah, saya mempertimbangkan\nfungsi apa

1506
01:25:48,591 --> 01:25:52,083
sejujurnya mungkin yang paling mudah untuk\n

1507
01:25:52,082 --> 01:25:54,290
Tampaknya ini merupakan bagian\nfungsi inti yang cantik.

1508
01:25:54,291 --> 01:25:56,551
Ia hanya perlu duduk\ndi sana hampir sepanjang waktu.

1509
01:25:56,551 --> 01:25:59,931
Jadi, hal berikutnya yang mungkin saya\nlakukan adalah membuka diri

1510
01:25:59,930 --> 01:26:05,600
misalnya, versi tempat sampah\n

1511
01:26:06,113 --> 01:26:08,030
Jadi kali ini saya akan menunjukkan\nkamu apa yang ada di dalam sini.

1512
01:26:08,030 --> 01:26:10,400
Ada beberapa kode, tapi tidak banyak.

1513
01:26:10,400 --> 01:26:14,421
Perhatikan di kanan bawah saya mengubah\n

1514
01:26:14,421 --> 01:26:17,451
sebagai gantinya, tapi prinsipnya sama\nyang bisa saya kendalikan.

1515
01:26:17,451 --> 01:26:20,121
Dan kemudian di sini saya menambahkan kode ini.

1516
01:26:20,121 --> 01:26:23,030
Saat bendera hijau\ndiklik, ganti kostumnya

1517
01:26:23,030 --> 01:26:25,110
untuk sesuatu yang saya seenaknya\nsebut Oscar 1.

1518
01:26:25,110 --> 01:26:26,871
Jadi saya menemukan beberapa\ngambar yang berbeda

1519
01:26:26,871 --> 01:26:29,990
dari tempat sampah, yang terlihat\n

1520
01:26:29,990 --> 01:26:32,150
dan akhirnya yang\nmenghasilkan Oscar

1521
01:26:32,150 --> 01:26:33,810
dan saya hanya memberi mereka nama yang berbeda.

1522
01:26:33,810 --> 01:26:36,980
Jadi saya bilang Beralih ke Oscar 1, yang\nilah yang tertutup secara default

1523
01:26:36,980 --> 01:26:40,791
lalu selamanya lakukan hal berikut:\nif menyentuh penunjuk tetikus

1524
01:26:40,791 --> 01:26:45,711
lalu ganti kostumnya ke\nOscar 2, jika tidak, ganti ke Oscar 1.

1525
01:26:45,711 --> 01:26:49,311
Artinya, saya hanya ingin\n

1526
01:26:49,310 --> 01:26:52,130
dan penutup, meskipun pada akhirnya bukan itu yang saya inginkan

1527
01:26:52,131 --> 01:26:54,181
Saya hanya ingin membuat\nkemajuan ke depan.

1528
01:26:54,180 --> 01:26:59,940
Jadi di sini, ketika saya menjalankan program ini oleh\n

1529
01:26:59,940 --> 01:27:03,440
Belum ada apa-apa, kecuali jika saya\nmendekati tempat sampah

1530
01:27:03,440 --> 01:27:07,310
itu memang muncul terbuka karena\nselalu didengarkan

1531
01:27:07,310 --> 01:27:10,500
apakah sprite,\ntempat sampah dalam hal ini

1532
01:27:10,501 --> 01:27:11,751
sedang menyentuh penunjuk tetikus.

1533
01:27:12,440 --> 01:27:15,501
Itu versi 2, jika Anda mau.

1534
01:27:15,501 --> 01:27:18,650
Jika saya masuk sekarang dan menambahkan lampu\n

1535
01:27:18,650 --> 01:27:20,150
sekarang kami mulai membuat kemajuan.

1536
01:27:20,360 --> 01:27:22,940
Sekarang akan terlihat\nlebih mirip programnya

1537
01:27:22,940 --> 01:27:25,130
Saya pada akhirnya bermaksud untuk mencipta.

1538
01:27:25,131 --> 01:27:27,961
Bagian apa yang mungkin saya\ngigit setelah itu?

1539
01:27:27,961 --> 01:27:30,231
Yah, menurutku apa yang kulakukan\nismungkin sudah kuputuskan

1540
01:27:30,230 --> 01:27:33,740
izinkan saya menerapkan salah satu bagian\n

1541
01:27:34,350 --> 01:27:37,880
Mari kita buat satu\nsampah berfungsi dengan benar terlebih dahulu.

1542
01:27:37,881 --> 01:27:40,280
Jadi izinkan saya melanjutkan dan membuka yang ini.

1543
01:27:40,280 --> 01:27:43,850
Dan sekali lagi, semua contoh ini akan\n

1544
01:27:43,850 --> 01:27:46,040
jadi Anda juga bisa melihat semua\ncontoh ini.

1545
01:27:46,041 --> 01:27:48,440
Tidak terlalu lama, saya\nhanya menerapkannya terlebih dahulu

1546
01:27:48,440 --> 01:27:50,810
jadi kami bisa membalik\ndengan cepat.

1547
01:27:52,341 --> 01:27:56,151
Di sisi kanan, saya mengubah\nsprite saya menjadi sampah

1548
01:27:56,150 --> 01:27:58,770
kali ini sebagai ganti kucing,\nintentu sebagai tempat sampah

1549
01:27:58,770 --> 01:28:04,130
dan saya juga membuatnya, dengan bantuan Carter,\n

1550
01:28:04,131 --> 01:28:07,191
Sebenarnya ini hanya garis hitam\nkarena awalnya saya hanya menginginkannya

1551
01:28:07,190 --> 01:28:09,621
untuk mendapatkan gambaran\nlantai sehingga saya dapat mendeteksinya

1552
01:28:09,621 --> 01:28:12,141
jika sampah menyentuh lantai.

1553
01:28:12,140 --> 01:28:15,411
Sekarang tanpa melihat kodenya,\nhanya mendengar deskripsinya

1554
01:28:15,411 --> 01:28:20,301
kenapa aku menginginkan yang kedua\n

1555
01:28:20,301 --> 01:28:22,748
dengan sampah yang ingin\njatuh dari langit?

1556
01:28:22,747 --> 01:28:24,080
Apa yang mungkin saya pikirkan?

1557
01:28:24,081 --> 01:28:26,041
Masalah apa yang mungkin\nsaya coba selesaikan?

1558
01:28:26,270 --> 01:28:28,730
AUDIENCE: Anda tidak ingin\nsprite pertama melewatinya.

1559
01:28:28,730 --> 01:28:31,688
DAVID MALAN: Ya, Anda tidak mau\n

1560
01:28:31,689 --> 01:28:34,280
lewati, lalu boom,\nAnda benar-benar kehilangannya.

1561
01:28:34,280 --> 01:28:36,932
Itu bukanlah hal yang berguna.

1562
01:28:36,932 --> 01:28:39,890
Atau tampaknya memakan lebih banyak\n

1563
01:28:39,890 --> 01:28:42,560
jika sampah terus berjatuhan\ndan saya tidak dapat mengambilnya.

1564
01:28:42,560 --> 01:28:44,331
Mungkin akan sedikit traumatis\njika Anda mencoba mendapatkannya

1565
01:28:44,331 --> 01:28:46,873
dan Anda tidak dapat menariknya kembali\ndan Anda tidak dapat memperbaiki programnya.

1566
01:28:46,872 --> 01:28:48,548
Jadi aku hanya ingin hal itu dihentikan.

1567
01:28:48,548 --> 01:28:50,091
Jadi bagaimana saya bisa menerapkan ini?

1568
01:28:50,091 --> 01:28:51,740
Mari kita lihat kode di sebelah kiri.

1569
01:28:51,740 --> 01:28:56,360
Di sini saya memiliki sedikit keacakan,\nseperti yang saya usulkan sebelumnya ada.

1570
01:28:56,360 --> 01:28:59,240
Ada fungsi\nbiru yang disebut Go To x

1571
01:28:59,240 --> 01:29:03,051
y yang memungkinkan saya memindahkan\nsprite ke posisi mana pun

1572
01:29:03,051 --> 01:29:07,731
atas, bawah, kiri, kanan, saya pilih secara acak\n

1573
01:29:07,730 --> 01:29:12,470
negatif 240 ke positif 240, lalu\n

1574
01:29:12,470 --> 01:29:14,220
Ini hanya membuat\npermainan lebih menarik.

1575
01:29:14,220 --> 01:29:18,410
Agak membosankan jika\n

1576
01:29:18,411 --> 01:29:21,650
Ini sedikit keacakan,\n

1577
01:29:23,121 --> 01:29:26,694
Jadi sekarang jika saya klik bendera hijau,\nAnda akan melihat bahwa bendera itu jatuh begitu saja

1578
01:29:26,694 --> 01:29:28,611
tidak ada hal menarik yang\nakan terjadi, tapi itu terjadi

1579
01:29:28,610 --> 01:29:33,050
berhenti ketika menyentuh warna hitam\n

1580
01:29:33,051 --> 01:29:37,821
Saya selalu menanyakan pertanyaan jika\n

1581
01:29:37,820 --> 01:29:41,550
adalah ke lantai lebih besar\ntdari nol, tidak apa-apa.

1582
01:29:41,551 --> 01:29:44,361
Ubah lokasi y dengan negatif 3.

1583
01:29:44,360 --> 01:29:48,860
Jadi turunkan 3 piksel, turun 3\n

1584
01:29:48,860 --> 01:29:52,701
tidak lebih besar dari nol, itu adalah nol\n

1585
01:29:52,701 --> 01:29:54,427
itu seharusnya berhenti bergerak sama sekali.

1586
01:29:54,427 --> 01:29:56,510
Ada cara lain yang bisa kami\nimplementasi

1587
01:29:56,511 --> 01:29:58,731
tapi ini terasa seperti cara yang bagus,\nbersih, dan secara logis

1588
01:29:59,523 --> 01:30:03,711
Oke, sekarang ada sampah yang berjatuhan, i\n

1589
01:30:03,711 --> 01:30:08,211
Saya mempunyai tiang lampu, sekarang saya sudah\nmemiliki tiga langkah yang baik dalam program ini.

1590
01:30:09,411 --> 01:30:12,411
Jika kita mempertimbangkan satu atau dua\nbagian akhir, berarti sesuatu

1591
01:30:12,411 --> 01:30:17,570
seperti menyeret sampah, biarkan aku\n

1592
01:30:17,570 --> 01:30:21,171
Menyeret sampah memerlukan\na jenis pertanyaan yang berbeda.

1593
01:30:24,121 --> 01:30:26,900
Saya hanya memerlukan satu sprite, tidak ada\nlantai di sini karena saya hanya

1594
01:30:26,900 --> 01:30:29,720
ingin manusia memindahkannya ke atas,\nbawah, kiri, kanan, dan milik manusia

1595
01:30:29,720 --> 01:30:32,750
secara fisik tidak akan dapat\nmemindahkannya ke luar dunia.

1596
01:30:32,751 --> 01:30:36,480
Jika kita memperbesar kode ini, caranya\n

1597
01:30:36,480 --> 01:30:40,670
Kami menggunakan itu dan konjungsi\n

1598
01:30:40,671 --> 01:30:44,301
bendera hijau diklik, kita\n

1599
01:30:44,301 --> 01:30:47,571
pertanyaan-pertanyaan ini, jamak,\njika mouse tidak aktif

1600
01:30:47,570 --> 01:30:53,211
dan sampahnya menyentuh\npenunjuk mouse, itu setara

1601
01:30:53,211 --> 01:30:55,521
logis untuk mengklik tempat sampah.

1602
01:30:55,520 --> 01:30:58,831
Silakan pindahkan\nsampah ke penunjuk tetikus.

1603
01:30:58,831 --> 01:31:00,891
Jadi sekali lagi dibutuhkan\nide yang sangat familiar ini

1604
01:31:00,890 --> 01:31:04,010
yang Anda dan saya anggap remeh\n

1605
01:31:06,621 --> 01:31:10,820
Mac OS atau Windows\nmungkin mengajukan pertanyaan.

1606
01:31:10,820 --> 01:31:15,320
Untuk setiap ikon, arahkan mouse ke bawah\n

1607
01:31:15,320 --> 01:31:19,461
Jika ya, pergilah ke lokasi\nmouse selamanya

1608
01:31:19,461 --> 01:31:21,561
sambil tombol mouse diklik.

1609
01:31:21,560 --> 01:31:23,720
Jadi bagaimana cara kerjanya dalam kenyataan sekarang?

1610
01:31:23,720 --> 01:31:25,970
Biarkan saya melanjutkan dan klik Mainkan.

1611
01:31:25,970 --> 01:31:30,030
Awalnya tidak terjadi apa-apa, tapi jika\n

1612
01:31:33,121 --> 01:31:36,871
Jadi sekarang saya perlu menggabungkan\n

1613
01:31:36,871 --> 01:31:39,604
tapi saya yakin saya bisa mulai\nmenggunakan satu program saja.

1614
01:31:39,604 --> 01:31:42,021
Saat ini saya menggunakan yang terpisah\none untuk menunjukkan ide yang berbeda

1615
01:31:42,020 --> 01:31:45,170
tapi sekarang, itu adalah\nkeluar dari masalahnya.

1616
01:31:45,171 --> 01:31:48,028
Jika kita melakukan yang terakhir,\nsesuatu seperti pencatatan skor

1617
01:31:48,028 --> 01:31:51,110
menarik, karena ingat itu\n

1618
01:31:51,110 --> 01:31:54,661
ke dalam kaleng, Oscar muncul\ndan memberi tahu kami skor saat ini.

1619
01:31:54,661 --> 01:31:59,240
Jadi izinkan saya mencari\nyang ini, variabel Oscar

1620
01:31:59,240 --> 01:32:01,220
dan izinkan saya memperbesar yang satu ini.

1621
01:32:01,220 --> 01:32:04,423
Yang ini lebih panjang karena kami\nmenggabungkan semua elemen ini.

1622
01:32:04,423 --> 01:32:07,341
Jadi ini adalah hal yang\n

1623
01:32:07,341 --> 01:32:09,861
Saya tidak tahu bagaimana saya akan\nmengimplementasikan ini

1624
01:32:09,860 --> 01:32:12,140
dari ketiadaan, dari awal secara harfiah.

1625
01:32:12,140 --> 01:32:16,490
Namun sekali lagi, jika Anda mengambil\nvisi Anda dan menggabungkannya

1626
01:32:16,490 --> 01:32:18,591
ke dalam masalah yang lebih kecil dan berukuran kecil ini, Anda

1627
01:32:18,591 --> 01:32:21,021
bisa mengambil\nlangkah kecil ini, dan kemudian

1628
01:32:21,020 --> 01:32:22,590
selesaikan semuanya secara kolektif.

1629
01:32:22,591 --> 01:32:25,761
Jadi yang baru di sini adalah yang paling bawah.

1630
01:32:25,761 --> 01:32:30,411
Lakukan hal berikut selamanya:\njika sampahnya bersentuhan

1631
01:32:30,411 --> 01:32:33,860
Oscar, sprite lain yang\nkini kami tambahkan ke program

1632
01:32:35,841 --> 01:32:37,851
Ini jeruk dan\nintentu saja jika kita melihat-lihat

1633
01:32:37,850 --> 01:32:42,411
kita akan melihat bahwa warna oranye adalah variabel,\n

1634
01:32:42,411 --> 01:32:46,400
mengubahnya berarti menambah 1 atau\njika negatif kurangi 1.

1635
01:32:46,400 --> 01:32:51,470
Kemudian lanjutkan dan biarkan\nsampah tersebut diambil secara acak.

1636
01:32:53,091 --> 01:32:56,941
Baiklah, izinkan saya menunjukkan kepada Anda apa yang dilakukannya\n

1637
01:32:58,341 --> 01:33:01,490
Baiklah, jatuh, saya klik\n

1638
01:33:02,774 --> 01:33:04,191
Baiklah, biarkan aku melakukannya sekali lagi.

1639
01:33:06,831 --> 01:33:13,371
Mengapa saya memiliki fungsi ini di\n

1640
01:33:13,371 --> 01:33:16,041
Masalah apa yang dipecahkan di sini?

1641
01:33:18,132 --> 01:33:21,569
AUDIENCE: Lagu yang sama\nditeleportasi ke atas

1642
01:33:21,569 --> 01:33:23,385
setelah kamu membuangnya ke tempat sampah.

1643
01:33:24,511 --> 01:33:27,303
Meskipun manusia merasakan\n

1644
01:33:27,302 --> 01:33:29,270
dari langit, itu\sebenarnya merupakan bagian yang sama

1645
01:33:29,270 --> 01:33:32,150
sampah, seperti\nsecara ajaib dipindahkan kembali ke atas

1646
01:33:33,650 --> 01:33:36,530
Di sana, Anda juga mempunyai\nide tentang kode yang dapat digunakan kembali.

1647
01:33:36,530 --> 01:33:40,161
Jika Anda terus-menerus menyalin\nan menempelkan sampah Anda

1648
01:33:40,161 --> 01:33:43,190
dan membuat 20 buah sampah, 30\n

1649
01:33:43,190 --> 01:33:46,820
ingin gamenya memiliki sebanyak itu\n

1650
01:33:46,820 --> 01:33:49,911
Gunakan kembali kode yang Anda tulis,\ngunakan kembali sprite yang Anda tulis

1651
01:33:49,911 --> 01:33:54,681
dan itu akan memberi Anda bukan hanya\n

1652
01:33:54,680 --> 01:33:57,665
Baiklah, mari kita lihat\nrangkaian blok penyusun terakhir

1653
01:33:57,666 --> 01:33:59,541
yang bisa kita susun\nakhirnya menjadi sesuatu

1654
01:33:59,541 --> 01:34:02,011
khususnya interaktif sebagai berikut.

1655
01:34:02,011 --> 01:34:03,921
Biarkan saya lanjutkan dan\nperbesar tampilannya dan biarkan

1656
01:34:03,921 --> 01:34:08,570
saya mengusulkan agar kita menerapkan sesuatu\n

1657
01:34:09,990 --> 01:34:13,310
Jadi saya ingin mengimplementasikan\ngame berbasis labirin itu

1658
01:34:13,310 --> 01:34:15,060
sekilas terlihat seperti ini.

1659
01:34:15,735 --> 01:34:18,110
Ini bukan permainan yang menyenangkan,\ntapi ini sedikit Harvard

1660
01:34:18,110 --> 01:34:22,190
perisai, beberapa garis hitam, ini\n

1661
01:34:22,190 --> 01:34:24,230
tapi perhatikan kamu tidak bisa\nmelihat tanganku di sini

1662
01:34:24,230 --> 01:34:28,948
tapi saya menggunakan tombol panah untuk turun,\n

1663
01:34:28,948 --> 01:34:31,490
tapi kalau aku terus berjalan ke kanan, ke kanan,\nkanan, ke kanan, ke kanan, ke kanan

1664
01:34:31,490 --> 01:34:32,841
benar, itu tidak akan kemana-mana.

1665
01:34:32,841 --> 01:34:35,320
Dan kiri, kiri, kiri, kiri, kiri, kiri,\n

1666
01:34:36,740 --> 01:34:41,240
Jadi sebelum kita melihat kodenya,\nbagaimana cara kerjanya?

1667
01:34:41,240 --> 01:34:44,990
Skrip jenis apa,\nkumpulan potongan puzzle

1668
01:34:44,990 --> 01:34:47,490
mungkinkah secara kolektif\nmembantu kami menerapkan hal ini?

1669
01:34:57,671 --> 01:35:00,838
Mungkin ada beberapa pertanyaan\n

1670
01:35:00,838 --> 01:35:03,131
dan kebetulan terdapat beberapa\no sprite, yang masing-masing sprite

1671
01:35:03,131 --> 01:35:06,381
sebenarnya hanyalah garis hitam vertikal\n

1672
01:35:07,451 --> 01:35:10,451
Apakah jarak ke sana\nol atau mendekati nol?

1673
01:35:10,451 --> 01:35:16,131
Dan jika iya, abaikan saja yang kiri\n

1674
01:35:16,871 --> 01:35:18,940
Namun sebaliknya, jika kita\ntidak menyentuh dinding

1675
01:35:18,940 --> 01:35:22,480
apa yang mungkin kita lakukan\ninalih-alih selamanya di sini?

1676
01:35:22,480 --> 01:35:24,820
Bagaimana cara kerja gerakan ini?

1677
01:35:33,690 --> 01:35:35,564
DAVID MALAN: Maaf, ucapkan sedikit lebih keras.

1678
01:35:35,564 --> 01:35:38,798
AUDIENCE: Agaknya terus menerus\n

1679
01:35:38,798 --> 01:35:40,190
dan kemudian bergerak saat Anda melakukannya.

1680
01:35:41,065 --> 01:35:44,930
Itu terus-menerus, selamanya mendengarkan\n

1681
01:35:44,930 --> 01:35:47,270
dan jika panah ke atas\nditekan, kemungkinan besar kita sedang menekannya

1682
01:35:47,270 --> 01:35:49,800
mengubah y dengan nilai positif.

1683
01:35:49,801 --> 01:35:52,401
Jika panah bawah ditekan,\nkita akan turun sebesar y

1684
01:35:52,400 --> 01:35:54,090
dan kiri dan kanan sesuai.

1685
01:35:54,091 --> 01:35:55,671
Jadi mari kita lihat sekilas.

1686
01:35:55,671 --> 01:35:59,001
Jika saya memperkecil tampilan di sini dan melihatnya\n

1687
01:35:59,001 --> 01:36:01,556
ada banyak hal yang terjadi\npada pandangan pertama, tapi mari kita lihat.

1688
01:36:01,555 --> 01:36:03,680
Pertama-tama, izinkan saya menyeret\nbeberapa hal keluar dari jalurnya

1689
01:36:03,680 --> 01:36:05,840
karena pada pandangan pertama agak\menakjubkan

1690
01:36:05,841 --> 01:36:09,291
terutama jika Anda, misalnya,\n

1691
01:36:09,291 --> 01:36:11,934
0 hanya untuk mendapatkan inspirasi,\nsebagian besar proyek di luar sana

1692
01:36:11,934 --> 01:36:13,851
akan terlihat\menakjubkan pada pandangan pertama

1693
01:36:13,850 --> 01:36:16,320
sampai Anda mulai memikirkan\napa yang sedang terjadi.

1694
01:36:16,320 --> 01:36:19,581
Namun dalam kasus ini, kami telah\nmengimplementasikan beberapa abstraksi

1695
01:36:19,581 --> 01:36:22,730
dari awal untuk menjelaskan kepada\n

1696
01:36:24,680 --> 01:36:29,100
Ini adalah program dengan dua warna hitam\n

1697
01:36:30,081 --> 01:36:33,801
Awalnya menempatkan perisai\nin di tengah, 0,0, lalu

1698
01:36:33,801 --> 01:36:37,251
selamanya mendengarkan keyboard,\namun saya rasa Anda sedang menjelaskannya

1699
01:36:37,251 --> 01:36:40,461
dan rasanya pada dinding, seperti\nsaya pikir Anda telah menjelaskannya.

1700
01:36:42,860 --> 01:36:46,400
Ini adalah blok khusus yang kami buat\n

1701
01:36:46,400 --> 01:36:48,650
detail implementasi tersebut\nkarena sejujurnya memang begitu

1702
01:36:48,650 --> 01:36:50,130
semua yang perlu aku ketahui saat ini.

1703
01:36:50,131 --> 01:36:52,851
Namun, sebagai calon programmer,\njika kami penasaran sekarang

1704
01:36:52,850 --> 01:36:55,460
mari gulir ke bawah ke\implementasi sebenarnya

1705
01:36:57,261 --> 01:36:59,701
Ini yang di sebelah kiri\ndan agak panjang

1706
01:36:59,701 --> 01:37:02,461
tapi banyak struktur serupa.

1707
01:37:02,461 --> 01:37:07,371
Kami melakukan hal berikut, jika up\n

1708
01:37:08,030 --> 01:37:11,600
Jika panah bawah ditekan,\nlalu ubah y dengan negatif 1.

1709
01:37:12,341 --> 01:37:15,361
Panah kanan, panah kiri, dan hanya itu.

1710
01:37:15,360 --> 01:37:17,990
Jadi ia hanya mengumpulkan semua\nide-ide itu, menggabungkannya

1711
01:37:17,990 --> 01:37:20,451
into one new block just because\nit's kind of overwhelming

1712
01:37:20,451 --> 01:37:22,680
mari kita terapkan saja\nonce dan simpan saja.

1713
01:37:22,680 --> 01:37:26,720
Dan jika kita gulir sekarang ke\nfungsi Rasakan Dinding

1714
01:37:26,720 --> 01:37:30,080
ini sekarang menanyakan\npertanyaan seperti yang dihipotesiskan

1715
01:37:30,081 --> 01:37:35,001
jika saya menyentuh dinding kiri, ganti\n

1716
01:37:35,720 --> 01:37:38,660
Jika saya menyentuh dinding\nkanan, pindahkan x ke negatif 1

1717
01:37:38,661 --> 01:37:40,592
untuk menjauh sedikit darinya.

1718
01:37:40,592 --> 01:37:42,050
Jadi itu seperti memantul ke dinding.

1719
01:37:42,051 --> 01:37:47,451
Kalau-kalau itu sedikit berlebihan, kami\n

1720
01:37:47,451 --> 01:37:51,230
Baiklah, ada beberapa\nbagian lagi yang akan kami perkenalkan.

1721
01:37:51,230 --> 01:37:54,440
Bagaimana jika kita ingin menambahkan\n

1722
01:37:55,310 --> 01:38:02,030
Baiklah, izinkan saya melanjutkan ke yang ini\n

1723
01:38:02,030 --> 01:38:05,458
mungkin, misalnya, dirancang untuk\n

1724
01:38:05,458 --> 01:38:08,751
Ini seperti labirin dan Anda mencoba\n

1725
01:38:09,810 --> 01:38:14,360
Uh oh, Yale menghalangi dan itu\n

1726
01:38:15,541 --> 01:38:16,791
Baiklah, izinkan saya bertanya kepada orang lain.

1727
01:38:19,251 --> 01:38:21,381
Ini adalah ide yang Anda miliki,\nini adalah ide yang Anda lihat.

1728
01:38:21,381 --> 01:38:26,490
Mari kita rekayasa ulang\ncara kerja Anda.

1729
01:38:28,935 --> 01:38:32,655
HADIRIN: Jika simbol Yale adalah\n

1730
01:38:34,639 --> 01:38:36,431
DAVID MALAN: Ya, jadi\njika simbol Yale adalah

1731
01:38:36,430 --> 01:38:39,130
menyentuh dinding kiri atau kanan\n

1732
01:38:39,131 --> 01:38:41,756
Dan memang kita akan melihat ada\nkepingan teka-teki yang bisa melakukan hal tersebut

1733
01:38:41,756 --> 01:38:44,066
yang secara teknis tidak tepat\n, seperti yang akan kita lihat nanti

1734
01:38:44,065 --> 01:38:45,690
tapi ada cara lain yang bisa kita lakukan.

1735
01:38:46,751 --> 01:38:49,271
Cara yang kami sendiri\ndapat terapkan dengan tepat

1736
01:38:49,270 --> 01:38:52,010
gagasan yang muncul itu hanya\ndengan sedikit logika.

1737
01:38:52,011 --> 01:38:54,581
Jadi, inilah yang dilakukan versi\nprogram ini.

1738
01:38:54,581 --> 01:38:58,721
Ini memindahkan Yale secara default ke 0,0\n

1739
01:38:58,720 --> 01:39:03,250
mengarahkannya ke arah 90 derajat, yang mana\n

1740
01:39:03,251 --> 01:39:06,490
dan kemudian selamanya melakukan\nini: jika menyentuh dinding kiri

1741
01:39:06,490 --> 01:39:10,451
atau menyentuh dinding sebelah kanan,\nberikut terjemahan kami mengenai pantulan.

1742
01:39:10,451 --> 01:39:11,953
Kita hanya berbalik 180 derajat.

1743
01:39:11,953 --> 01:39:13,661
Dan hal yang menyenangkan\ntentang hal itu adalah kami tidak melakukannya

1744
01:39:13,661 --> 01:39:16,368
perlu khawatir jika kita berangkat dari\n

1745
01:39:16,368 --> 01:39:19,480
180 derajat akan\nbekerja pada kedua dinding.

1746
01:39:21,310 --> 01:39:24,670
Setelah kita melakukannya, kita hanya memindahkan\tidak satu langkah pun, satu piksel, pada satu waktu

1747
01:39:24,671 --> 01:39:28,150
tapi kami melakukannya selamanya jadi\nsesuatu terjadi terus-menerus

1748
01:39:28,150 --> 01:39:30,640
dan ikon Yale\nmemantul maju mundur.

1749
01:39:30,640 --> 01:39:33,550
Nah satu bagian terakhir\ndi sini, bagaimana jika sekarang kita

1750
01:39:33,551 --> 01:39:39,711
menginginkan musuh lain, yang lebih maju\n

1751
01:39:39,711 --> 01:39:44,831
untuk pergi dan mengikuti kami kemanapun\nkami berada seperti saat ini

1752
01:39:44,831 --> 01:39:51,161
kami ingin sprite lain\ntidak memantul bolak-balik

1753
01:39:51,161 --> 01:39:55,600
tapi benar-benar ikuti kami\nke mana pun kami pergi.

1754
01:39:55,600 --> 01:39:59,110
Bagaimana hal ini dapat\ndiimplementasikan di layar?

1755
01:39:59,110 --> 01:40:01,541
Aku yakin ini akan menjadi blok selamanya\n, tapi apa isinya?

1756
01:40:01,541 --> 01:40:05,621
HADIRIN: Jadi selamanya dapatkan\n

1757
01:40:05,621 --> 01:40:06,844
dan bergerak satu langkah ke arah itu.

1758
01:40:06,844 --> 01:40:09,761
DAVID MALAN: Ya, selamanya tunjuk\n

1759
01:40:11,140 --> 01:40:15,340
Ini akan berlangsung selamanya jika saya\n

1760
01:40:15,341 --> 01:40:18,551
Perhatikan bahwa ini semacam bergerak-gerak\nmaju mundur karena berjalan satu arah

1761
01:40:18,551 --> 01:40:20,201
piksel lalu satu piksel lalu satu piksel.

1762
01:40:20,201 --> 01:40:21,911
Di sini keadaannya seperti panik.

1763
01:40:21,911 --> 01:40:25,421
Kita belum menyelesaikan permainannya, tapi jika\n

1764
01:40:25,421 --> 01:40:28,121
Tidak perlu banyak waktu untuk\nmengimplementasikan ide sederhana ini.

1765
01:40:28,121 --> 01:40:30,911
Pilih posisi acak\nuntuk membuatnya adil

1766
01:40:30,911 --> 01:40:33,740
awalnya, lalu selamanya\nmenunjuk ke Harvard

1767
01:40:33,740 --> 01:40:37,060
yang kami sebut sprite Harvard\ncrest, bergerak satu langkah.

1768
01:40:37,060 --> 01:40:39,701
Misalkan kita sekarang ingin\nmembuat level yang lebih maju.

1769
01:40:39,701 --> 01:40:42,610
Perubahan kecil apa yang secara logis dapat saya lakukan pada kode ini

1770
01:40:42,610 --> 01:40:45,037
untuk menjadikan MIT lebih baik lagi dalam hal ini?

1771
01:40:45,037 --> 01:40:46,870
AUDIENCE: Ubah\njumlah langkah menjadi dua.

1772
01:40:46,871 --> 01:40:48,310
DAVID MALAN: Baiklah, ubah\njumlah langkah menjadi dua.

1773
01:40:49,390 --> 01:40:51,370
Jadi sekarang mereka menjadi dua kali lebih cepat.

1774
01:40:51,371 --> 01:40:53,751
Biarkan saya melanjutkan dan\nmenyingkirkan hal ini.

1775
01:40:53,751 --> 01:40:56,841
Ups, biarkan aku membuat pertarungan yang adil.

1776
01:40:58,310 --> 01:41:01,530
Baiklah, sayangnya saya\nmasih memindahkan satu piksel dalam satu waktu

1777
01:41:01,530 --> 01:41:03,081
jadi ini tidak akan berakhir dengan baik.

1778
01:41:04,220 --> 01:41:10,230
Dan jika kita benar-benar agresif dan\n

1779
01:41:11,930 --> 01:41:16,370
Ya Tuhan, oke, jadi begitulah caramu\n

1780
01:41:17,761 --> 01:41:20,694
Jadi, bukan suatu kebetulan jika kami\memilih contoh-contoh khusus ini

1781
01:41:20,694 --> 01:41:23,361
di sini melibatkan\nsekolah tertentu ini karena kita punya satu sekolah lagi

1782
01:41:23,360 --> 01:41:25,680
demonstrasi yang kami pikir\nakan kami perkenalkan hari ini

1783
01:41:25,680 --> 01:41:30,020
jika kita bisa mengajak\nsukarelawan lain untuk datang dan bermain

1784
01:41:30,020 --> 01:41:34,400
apa yang oleh salah satu\npendahulu Anda disebut sebagai Permainan Tersulit Ivy.

1785
01:41:34,400 --> 01:41:35,661
Coba lihat, kamu di tengah.

1786
01:41:40,161 --> 01:41:41,993
DAVID MALAN: Ayo\nsedikit lebih dekat sebenarnya.

1787
01:41:44,440 --> 01:41:47,067
Baiklah, berikan tepuk tangan\ndi sini jika kita bisa, juga.

1788
01:41:53,237 --> 01:41:54,487
Oke, maaf, siapa namamu?

1789
01:41:59,020 --> 01:42:02,680
Jadi di sini kita punya\nlayar Game Tersulit Ivy lainnya

1790
01:42:02,680 --> 01:42:04,750
ditulis oleh mantan siswa CS50.

1791
01:42:04,751 --> 01:42:07,451
Saya rasa Anda akan melihat bahwa ini\nmenggabungkan prinsip-prinsip yang sama.

1792
01:42:07,451 --> 01:42:09,940
Labirinnya jelas\nsedikit lebih maju.

1793
01:42:09,940 --> 01:42:14,320
Tujuan awalnya adalah untuk bergerak\n

1794
01:42:14,320 --> 01:42:17,108
jalan ke kanan agar kamu\nmengejarnya dalam kasus ini

1795
01:42:17,108 --> 01:42:18,940
namun Anda akan melihat bahwa\nada level yang berbeda

1796
01:42:18,940 --> 01:42:21,350
dan tingkat kecanggihan yang berbeda.

1797
01:42:21,350 --> 01:42:24,820
Jadi jika Anda menginginkannya, Anda dapat menggunakan\n saja

1798
01:42:24,820 --> 01:42:27,520
Anda akan mengendalikan\nsprite Harvard dan jika kami

1799
01:42:27,520 --> 01:42:32,291
bisa menaikkan volumenya sedikit saja\n

1800
01:42:32,291 --> 01:42:34,421
Ini dia, klik bendera hijau.

1801
01:42:41,444 --> 01:42:43,194
[MUSIK - MC HAMMER, "KAMU TIDAK BISA MENYENTUH\nINI"]

1802
01:42:43,194 --> 01:42:45,100
MC HAMMER: (BERNYANYI) Tidak bisa menyentuh ini.

1803
01:42:57,591 --> 01:42:58,801
MC HAMMER: (BERNYANYI) sangat keras.

1804
01:42:58,801 --> 01:43:00,551
Membuatku ingin berkata, ya Tuhan.

1805
01:43:03,520 --> 01:43:06,162
MC HAMMER: (BERNYANYI) Terasa\nenak saat kamu tahu kamu sedang down.

1806
01:43:10,350 --> 01:43:12,520
MC HAMMER: (BERNYANYI)\nKamu tidak boleh menyentuh ini.

1807
01:43:17,859 --> 01:43:19,791
MC HAMMER: (BERNYANYI) Tidak bisa menyentuh ini.

1808
01:43:23,618 --> 01:43:25,201
Anda membiarkan saya memecahkan lirik yang funky.

1809
01:43:27,314 --> 01:43:29,481
Anda mendapatkannya seperti itu dan\nAnda tahu Anda ingin menari.

1810
01:43:29,480 --> 01:43:33,302
Jadi, beranjaklah dari tempat dudukmu dan ajak\na fly girl dan ikuti irama ini.

1811
01:43:34,934 --> 01:43:38,283
Pompa sedikit dan beri tahu mereka\n

1812
01:43:38,283 --> 01:43:39,740
Dingin dalam misi, jadi mundurlah.

1813
01:43:39,740 --> 01:43:41,033
Biarkan mereka tahu bahwa Anda juga--

1814
01:43:46,378 --> 01:43:48,798
MC HAMMER: (BERNYANYI) Tidak bisa menyentuh ini.

1815
01:43:48,798 --> 01:43:50,251
Kenapa kamu berdiri disana, kawan?

1816
01:43:54,761 --> 01:43:58,316
Beri saya lagu atau ritme, buat\n

1817
01:44:00,220 --> 01:44:02,553
Anda membicarakan Hammer saat\nAnda sedang membicarakan sebuah pertunjukan.

1818
01:44:03,751 --> 01:44:06,601
Para penyanyi berkeringat sehingga mereka\na perlu dibersihkan atau dijinakkan untuk belajar.

1819
01:44:06,600 --> 01:44:08,110
DAVID MALAN: Tingkat kedua hingga terakhir.

1820
01:44:08,610 --> 01:44:10,451
MC HAMMER: (BERNYANYI) Chart itu sah.

1821
01:44:10,451 --> 01:44:13,201
Bekerja keraslah atau\nsebaiknya Anda berhenti saja.

1822
01:44:18,091 --> 01:44:20,391
MC HAMMER: (BERNYANYI)\nKamu tidak boleh menyentuh ini.

1823
01:44:20,390 --> 01:44:22,412
DAVID MALAN: Anda hampir sampai.

1824
01:44:22,412 --> 01:44:23,870
MC HAMMER: (BERNYANYI) Hancurkan.

1825
01:44:36,161 --> 01:44:38,266
MC HAMMER: (BERNYANYI) Berhenti, Waktunya Palu.

1826
01:44:38,266 --> 01:44:39,878
Ikuti arusnya,” demikian bunyi pesan tersebut.

1827
01:44:39,878 --> 01:44:42,171
Jika Anda tidak bisa melakukan ini,\nAnda mungkin sudah mati.

1828
01:44:42,171 --> 01:44:44,240
Jadi lambaikan tangan Anda di\nair, lakukan beberapa gerakan

1829
01:44:44,240 --> 01:44:45,140
gerakkan jarimu ke rambutmu.

1830
01:44:46,621 --> 01:44:49,051
Ikuti gerakan ini dan Anda\nakan menjadi lebih kurus.

1831
01:44:50,650 --> 01:44:53,305
Sebentar saja mari kita semua melakukan hal yang sama.

1832
01:45:03,400 --> 01:45:05,405
Baiklah, itu saja untuk CS50.

1833
01:46:29,360 --> 01:46:33,470
Dan ini adalah minggu ke-1, yang mana\n

1834
01:46:33,470 --> 01:46:36,350
adalah sesuatu yang secara teknis kami katakan\n

1835
01:46:36,350 --> 01:46:39,650
dimainkan dengan bahasa grafis ini\n

1836
01:46:41,331 --> 01:46:43,461
Namun hari ini, seperti yang dijanjikan,\nkita beralih ke sesuatu

1837
01:46:43,461 --> 01:46:45,921
sedikit lebih tradisional,\na sedikit lebih berbasis teks

1838
01:46:45,921 --> 01:46:48,501
bukan berbasis potongan puzzle atau\nblok, yang dikenal sebagai C.

1839
01:46:49,770 --> 01:46:50,978
Sudah ada selama beberapa dekade.

1840
01:46:50,979 --> 01:46:54,501
Tapi itu adalah bahasa yang mendasarinya\n

1841
01:46:54,501 --> 01:46:57,261
di antaranya sesuatu yang disebut\nPython yang juga akan kita bahas

1842
01:46:57,261 --> 01:46:58,821
datang dalam waktu beberapa minggu.

1843
01:46:58,820 --> 01:47:00,921
Memang di akhir\nsemester, tujuannya

1844
01:47:00,921 --> 01:47:02,661
adalah agar Anda merasa bahwa\nAnda belum mempelajari Scratch

1845
01:47:02,661 --> 01:47:04,911
Anda belum mempelajari C, atau\nbahkan Python, dalam hal ini

1846
01:47:04,911 --> 01:47:07,371
namun pada dasarnya Anda telah\nmempelajari cara memprogram.

1847
01:47:07,371 --> 01:47:09,801
Sayangnya, saat Anda\nmempelajari cara memprogram

1848
01:47:09,801 --> 01:47:13,681
dengan bahasa yang lebih tradisional seperti\n

1849
01:47:13,680 --> 01:47:17,090
Minggu lalu saya menjelaskan semuanya\n

1850
01:47:17,091 --> 01:47:19,881
yang Anda lihat di sini, seperti\n

1851
01:47:19,881 --> 01:47:22,761
tanda kurung, kurung kurawal,\ngaris miring terbalik n, dan lainnya.

1852
01:47:22,761 --> 01:47:26,791
Nah, hari ini kami tidak akan mengungkapkannya\n

1853
01:47:27,291 --> 01:47:31,461
Tapi minggu depan, apakah ini tidak akan terjadi\n

1854
01:47:31,461 --> 01:47:35,391
bagi Anda, bahasa yang, mungkin,\n

1855
01:47:36,320 --> 01:47:40,201
Namun untuk melakukan hal tersebut, kita akan menjelajahi beberapa\n

1856
01:47:40,201 --> 01:47:43,221
Jadi ingatlah itu, melalui Scratch-- dan\nmungkin melalui kumpulan masalah 1--

1857
01:47:43,220 --> 01:47:46,580
kami melihat hal-hal yang disebut\n

1858
01:47:46,581 --> 01:47:49,310
Dan terkait dengan fungsi\nadalah argumen seperti input.

1859
01:47:49,310 --> 01:47:52,760
Dan terkait dengan beberapa fungsi\nadalah nilai yang dikembalikan seperti keluaran.

1860
01:47:52,761 --> 01:47:56,151
Lalu kita membahas sedikit tentang kondisional,\n

1861
01:47:56,150 --> 01:47:59,541
Ekspresi Boolean, yaitu\n

1862
01:47:59,541 --> 01:48:03,141
pertanyaan, putaran, yang memungkinkan Anda melakukannya\n

1863
01:48:03,140 --> 01:48:05,990
seperti dalam matematika, yang memungkinkan Anda\nmenyimpan nilai untuk sementara

1864
01:48:05,990 --> 01:48:07,671
dan bahkan topik lainnya.

1865
01:48:07,671 --> 01:48:11,421
Jadi jika Anda merasa nyaman di\n

1866
01:48:11,421 --> 01:48:14,490
menyadari bahwa semua topik ini\nakan tetap menjadi milik kita.

1867
01:48:14,490 --> 01:48:18,230
Jadi sebenarnya, hari ini hanyalah tentang memperoleh\n

1868
01:48:18,230 --> 01:48:22,911
Anda menerjemahkan ide tersebut ke dalam,\n

1869
01:48:22,911 --> 01:48:25,698
sintaks baru, sejujurnya,\nitu sebenarnya lebih dari itu

1870
01:48:25,698 --> 01:48:27,740
sederhana dalam beberapa hal daripada\nbahasa manusia Anda sendiri

1871
01:48:27,740 --> 01:48:31,422
baik itu bahasa Inggris atau yang lainnya, karena\n

1872
01:48:31,422 --> 01:48:33,380
Sebenarnya ada lebih sedikit\nsintaksis yang mungkin Anda miliki

1873
01:48:33,381 --> 01:48:35,451
ada dalam, katakanlah, bahasa manusia pada umumnya.

1874
01:48:35,451 --> 01:48:39,600
Namun Anda harus menggunakan komputer ini\n

1875
01:48:39,600 --> 01:48:41,850
sehingga Anda paling,\nakhirnya, benar

1876
01:48:41,850 --> 01:48:46,040
dan pada akhirnya akan memeriksa kode Anda\n

1877
01:48:46,621 --> 01:48:49,791
Jadi jika Anda memikirkan tentang terakhir kali\n

1878
01:48:49,791 --> 01:48:51,980
mengetahui apa yang Anda lakukan\atau menemukan sesuatu yang baru--

1879
01:48:51,980 --> 01:48:54,855
mungkin belum terlalu lama terjadi,\n

1880
01:48:54,855 --> 01:48:58,460
pertama kali, atau Kampus Lama atau sejenisnya,\n

1881
01:48:58,461 --> 01:49:01,823
kamu tidak perlu tahu caranya\n

1882
01:49:01,823 --> 01:49:03,530
Anda tidak perlu\mengetahui siapa semua orang

1883
01:49:03,530 --> 01:49:07,230
di mana semuanya berada, bagaimana Harvard atau\n

1884
01:49:07,730 --> 01:49:10,855
Anda bisa menjalani hari demi hari hanya dengan\n

1885
01:49:10,855 --> 01:49:12,605
Dan apa pun yang Anda tidak\nbenar-benar mengerti

1886
01:49:12,605 --> 01:49:14,960
Anda seperti menutup mata\ney sampai hal itu penting.

1887
01:49:14,961 --> 01:49:16,761
Dan memang itulah\nyang akan kami lakukan hari ini.

1888
01:49:16,761 --> 01:49:18,636
Dan sungguh, dalam\nbeberapa minggu ke depan, kami akan melakukannya

1889
01:49:18,636 --> 01:49:21,171
fokus pada detail yang\nawalnya penting

1890
01:49:21,171 --> 01:49:24,342
dan coba lambaikan tangan, boleh dikatakan begitu,\n

1891
01:49:24,342 --> 01:49:25,800
kita akan membahasnya, mungkin menarik.

1892
01:49:25,801 --> 01:49:27,468
Tapi untuk saat ini, itu mungkin hanya gangguan.

1893
01:49:27,467 --> 01:49:29,900
Dan yang dimaksud dengan gangguan adalah\nyang saya maksudkan adalah beberapa sintaksis tersebut

1894
01:49:31,501 --> 01:49:34,671
Jadi pada akhir hari ini-- dan\n

1895
01:49:34,671 --> 01:49:37,400
percobaan pertama Anda, mungkin,\ninke dalam bahasa yang disebut C--

1896
01:49:37,400 --> 01:49:39,171
Anda akan menulis beberapa kode.

1897
01:49:39,171 --> 01:49:41,780
Dan Anda akan bertanya pada diri sendiri--\nkami akan bertanya pada diri Anda sendiri--

1898
01:49:43,161 --> 01:49:46,041
Yang pertama dan terpenting, per\nminggu terakhir, baik itu di Scratch

1899
01:49:46,041 --> 01:49:51,591
atau formulir buku telepon, kode akhirnya\n

1900
01:49:51,591 --> 01:49:53,541
Anda ingin masalah\ndiselesaikan dengan benar.

1901
01:49:53,541 --> 01:49:55,490
Jadi hal itu tidak perlu dikatakan lagi.

1902
01:49:55,490 --> 01:49:59,511
Dan sepanjang semester ini, kami akan\n

1903
01:49:59,511 --> 01:50:02,746
jadi kamu tidak perlu hanya duduk disana\n

1904
01:50:02,746 --> 01:50:05,371
memeriksa keluaran, mencoba\masukan lain, memeriksa keluaran.

1905
01:50:05,371 --> 01:50:07,161
Ada banyak alat\notomatisasi di dunia nyata--

1906
01:50:07,161 --> 01:50:09,201
dan di kelas ini dan\nlainnya yang menyukainya-- itu

1907
01:50:09,201 --> 01:50:13,011
akan membantu memudahkan Anda menjawab\n

1908
01:50:13,011 --> 01:50:15,901
benar, sesuai\nspesifikasi kami atau sejenisnya.

1909
01:50:15,900 --> 01:50:18,440
Namun ada sesuatu yang\nakan memakan waktu lebih lama

1910
01:50:18,440 --> 01:50:21,860
dan Anda mungkin tidak akan merasakannya\n

1911
01:50:21,860 --> 01:50:24,890
minggu pertama, tergantung pada seberapa\nbaiknya desain kode Anda.

1912
01:50:24,890 --> 01:50:27,613
Berbicara\nBahasa Inggris atau menulis dalam bahasa Inggris adalah satu hal

1913
01:50:27,613 --> 01:50:30,030
tapi masalahnya lain-- atau\nbahasa apa pun, dalam hal ini.

1914
01:50:30,030 --> 01:50:32,190
Namun berbicara atau menulisnya dengan baik adalah hal lain.

1915
01:50:32,190 --> 01:50:35,148
Dan kita menghabiskan tahun-tahun ini di tengah\n

1916
01:50:35,149 --> 01:50:38,601
makalah tulis dan dokumen lainnya,\n

1917
01:50:38,600 --> 01:50:41,810
tentang seberapa baik formulasi\n Anda

1918
01:50:41,810 --> 01:50:43,019
makalah Anda, dan sejenisnya.

1919
01:50:43,020 --> 01:50:44,971
Dan ada\nide yang sama dalam pemrograman.

1920
01:50:44,970 --> 01:50:49,590
Itu tidak masalah\n

1921
01:50:49,591 --> 01:50:53,615
Jika kode Anda benar-benar visual\nberantakan, atau sangat panjang

1922
01:50:53,615 --> 01:50:55,490
itu akan sangat\nsulit bagi orang lain

1923
01:50:55,490 --> 01:50:59,121
untuk memahami kode Anda\n

1924
01:51:00,201 --> 01:51:04,011
Dan sejujurnya, Anda--\npagi berikutnya, tahun depan

1925
01:51:04,011 --> 01:51:07,551
lain kali Anda melihat\nkode itu-- mungkin Anda tidak tahu

1926
01:51:07,551 --> 01:51:09,381
apa yang Anda sendiri bahkan pikirkan.

1927
01:51:09,381 --> 01:51:13,731
Namun Anda akan melakukannya jika Anda fokus,\ntjuga, dalam merancang kode yang baik

1928
01:51:13,730 --> 01:51:16,640
membuat algoritme Anda efisien,\n

1929
01:51:16,640 --> 01:51:19,161
dan bahkan memastikan\nkode Anda terlihat cantik

1930
01:51:19,161 --> 01:51:20,881
kami akan menggambarkannya sebagai masalah gaya.

1931
01:51:20,881 --> 01:51:24,514
Jadi di dunia manusia yang tertulis, memiliki\n

1932
01:51:24,514 --> 01:51:27,181
penggunaan huruf kapital dan sejenisnya--semacam cara Anda menulis esai

1933
01:51:27,180 --> 01:51:29,220
namun belum tentu\nskirim pesan teks--

1934
01:51:29,220 --> 01:51:31,420
berkaitan dengan gaya, misalnya.

1935
01:51:31,421 --> 01:51:33,360
Dan gaya yang bagus dalam\nkode akan dimiliki

1936
01:51:33,360 --> 01:51:36,961
beberapa karakteristik berikut ini\n

1937
01:51:36,961 --> 01:51:41,981
Namun Anda hanya perlu mulai masuk\n

1938
01:51:41,980 --> 01:51:44,940
Jadi, bisa dikatakan, ketiga sumbu ini,\n

1939
01:51:44,940 --> 01:51:48,121
benar-benar merupakan tujuan utama\nsaat menulis kode itu

1940
01:51:48,121 --> 01:51:50,201
akhirnya akan terlihat seperti ini.

1941
01:51:50,201 --> 01:51:52,201
Jadi program yang kami\nperkirakan minggu lalu bisa melakukannya

1942
01:51:52,201 --> 01:51:56,863
bagaimana jika Anda menjalankannya di Mac atau\nPC atau di tempat lain?

1943
01:52:00,261 --> 01:52:02,136
DAVID J. MALAN: Itu hanya\ncetakan, Halo, dunia.

1944
01:52:02,136 --> 01:52:04,311
Dan sejujurnya, hal itu agak\tidak mengerikan bagi Anda

1945
01:52:04,310 --> 01:52:08,060
perlu menekan tombol keyboard Anda ini\n

1946
01:52:08,060 --> 01:52:09,740
untuk mendapatkan program yang mengatakan, Halo dunia.

1947
01:52:09,740 --> 01:52:11,990
Jadi spoiler-- dalam waktu\nbeberapa minggu lagi kita akan melakukannya

1948
01:52:11,990 --> 01:52:14,451
memperkenalkan bahasa\nlainnya yang lebih modern, seperti Python

1949
01:52:14,451 --> 01:52:18,631
Anda dapat menyaring logika yang sama\ninmenjadi satu baris kode.

1950
01:52:18,631 --> 01:52:20,301
Dan pada akhirnya kita sampai di sana.

1951
01:52:20,301 --> 01:52:23,294
Namun akan sangat membantu jika kita memahami\napa yang terjadi di sini

1952
01:52:23,293 --> 01:52:25,461
karena meskipun ini\ni sintaksis yang cukup samar

1953
01:52:25,461 --> 01:52:28,101
tidak ada apa pun setelah minggu ini dan,\n

1954
01:52:28,100 --> 01:52:30,920
dapat memahami bahkan tentang\nsesuatu yang terlihat saat ini

1955
01:52:30,921 --> 01:52:32,311
sesuatu yang kecil seperti ini.

1956
01:52:33,644 --> 01:52:35,811
Baiklah, saya sudah memberi kita\njawaban atas suatu masalah.

1957
01:52:35,810 --> 01:52:37,728
Bagaimana cara Anda mencetak, Halo,\ndunia, di layar?

1958
01:52:37,728 --> 01:52:39,177
Jadi apa yang harus saya lakukan dengan kode ini?

1959
01:52:39,177 --> 01:52:42,260
Ya, biasanya kami punya kebiasaan\n

1960
01:52:43,911 --> 01:52:48,030
And yeah, I could open up Word or\n

1961
01:52:48,030 --> 01:52:50,780
dan cukup transkripsikan\nkarakter tersebut demi karakter

1962
01:52:50,780 --> 01:52:53,390
simpan, dan boom, saya punya program.

1963
01:52:53,390 --> 01:52:56,630
Namun masalahnya, minggu lalu, adalah\n

1964
01:52:56,631 --> 01:52:59,164
bahasa apa lagi?

1965
01:53:00,081 --> 01:53:02,310
DAVID J. MALAN: Ya, jadi\nbiner, nol dan satu.

1966
01:53:02,310 --> 01:53:04,310
Jadi, tentu saja,\bukanlah angka nol dan satu.

1967
01:53:04,310 --> 01:53:07,040
Jadi tidak masalah jika saya memasukkannya\n

1968
01:53:07,632 --> 01:53:10,050
Komputer tidak akan\nmemahaminya sampai saya mengerti

1969
01:53:10,050 --> 01:53:11,570
terjemahkan ke nol dan satu.

1970
01:53:11,570 --> 01:53:14,121
Dan sejujurnya, tidak ada\nalat yang saya jelaskan

1971
01:53:14,121 --> 01:53:15,980
benar-benar sesuai untuk pemrograman.

1972
01:53:16,551 --> 01:53:19,011
Ya, keduanya hadir dengan fitur\nseperti huruf tebal dan miring

1973
01:53:19,011 --> 01:53:22,881
dan hal-hal yang halus dan estetis\n

1974
01:53:22,881 --> 01:53:24,631
yang Anda coba lakukan dengan kode Anda.

1975
01:53:24,631 --> 01:53:26,661
Dan mereka tidak memiliki\nkemampuan, itu akan terjadi

1976
01:53:26,661 --> 01:53:29,661
tampaknya, untuk mengubah kode itu\nakhirnya menjadi nol dan satu.

1977
01:53:29,661 --> 01:53:32,451
Namun alat yang memiliki\nkemampuan ini mungkin saja

1978
01:53:32,451 --> 01:53:36,350
disebut Pengembangan Terintegrasi\nLingkungan, atau IDE

1979
01:53:36,350 --> 01:53:38,180
atau, lebih sederhananya, editor teks.

1980
01:53:38,180 --> 01:53:42,560
Editor teks adalah alat yang mungkin digunakan\npemrogram setiap hari

1981
01:53:44,030 --> 01:53:46,850
Dan ini adalah program sederhana-- di sini,\n

1982
01:53:46,850 --> 01:53:49,542
disebut Visual Studio Code, atau VS Code.

1983
01:53:49,542 --> 01:53:51,500
Dan di bagian atas di sini, Anda\nmelihat bahwa saya sebenarnya sudah melakukannya

1984
01:53:51,501 --> 01:53:56,391
dibuat terlebih dahulu sebelum kelas a\n

1985
01:53:57,020 --> 01:54:00,740
Ya, .c menunjukkan berdasarkan konvensi bahwa\n

1986
01:54:01,640 --> 01:54:06,050
Ini bukan .docx, yang artinya dalam\n

1987
01:54:08,060 --> 01:54:12,621
Ini adalah .c, yang berarti dalam file ini ada\n

1988
01:54:12,621 --> 01:54:16,070
C. Angka 1 di sini hanyalah sebuah\n

1989
01:54:16,070 --> 01:54:18,440
saya mencatat berapa lama\atau pendeknya program ini.

1990
01:54:18,440 --> 01:54:21,050
Dan kursornya hanya\nberkedip di sana, menunggu

1991
01:54:21,051 --> 01:54:23,030
bagi saya untuk mulai mengetik beberapa kode.

1992
01:54:23,030 --> 01:54:26,030
Baiklah, izinkan saya mengetik\nkode yang sama persis.

1993
01:54:26,030 --> 01:54:28,260
Bagi saya, hal ini datang dari ingatan\ndengan cukup nyaman.

1994
01:54:28,261 --> 01:54:31,791
Jadi saya akan melanjutkan dan menyertakan\n

1995
01:54:32,961 --> 01:54:37,221
Saya akan mengetik int\n secara ajaib

1996
01:54:37,220 --> 01:54:38,610
kita akan membahasnya lagi nanti--

1997
01:54:38,610 --> 01:54:43,560
salah satu kurung kurawal ini dan kemudian a\n

1998
01:54:43,560 --> 01:54:46,610
Lalu saya akan menekan Tab\nuntuk membuat indentasi beberapa spasi.

1999
01:54:46,610 --> 01:54:52,850
Lalu saya akan mengetik, bukan mencetak,\n

2000
01:54:52,850 --> 01:54:55,850
tutup kutipan, tutup\ntanda kurung, titik koma.

2001
01:54:55,850 --> 01:55:00,050
Dan saya yakin ini pada dasarnya\n

2002
01:55:01,220 --> 01:55:03,291
Saya menulisnya untuk mengatakan, "Hai, CS50.

2003
01:55:03,291 --> 01:55:06,201
Sekarang hanya tertulis lebih kanonis,\n

2004
01:55:08,390 --> 01:55:11,240
Dan yang perlu saya lakukan sekarang adalah\nmungkin menekan Command-S atau Control-S

2005
01:55:12,110 --> 01:55:15,081
Dan voila, saya seorang programmer.

2006
01:55:15,081 --> 01:55:17,828
Namun kendalanya adalah,\nOK, bagaimana cara menjalankannya?

2007
01:55:17,828 --> 01:55:19,911
Misalnya, di Mac atau PC Anda,\nbagaimana Anda menjalankan suatu program?

2008
01:55:19,911 --> 01:55:21,411
Biasanya, klik dua kali pada sebuah ikon.

2009
01:55:21,411 --> 01:55:23,121
Di ponsel Anda, Anda mengetuk sebuah ikon.

2010
01:55:23,121 --> 01:55:26,810
Dalam lingkungan yang kami gunakan\n

2011
01:55:26,810 --> 01:55:31,670
katakanlah sebagian besar pemrogram-- gunakan, Anda tidak\n

2012
01:55:32,511 --> 01:55:35,734
Itu sangat mudah digunakan,\ntetapi tidak terlalu diperlukan.

2013
01:55:35,734 --> 01:55:38,151
Terutama ketika Anda merasa lebih\nnyaman dengan pemrograman

2014
01:55:38,150 --> 01:55:41,030
Anda akan ingin mengetikkan perintah\n

2015
01:55:42,020 --> 01:55:43,853
Dan Anda\ningin mengotomatiskan berbagai hal

2016
01:55:43,854 --> 01:55:46,791
yang akan jauh lebih mudah jika semuanya\n

2017
01:55:46,791 --> 01:55:49,131
untuk gerakan tikus dan otot.

2018
01:55:49,131 --> 01:55:52,011
Jadi di sini saya memiliki program saya.

2019
01:55:52,011 --> 01:55:54,591
Ia tinggal di file ini bernama "hello.c.

2020
01:55:54,591 --> 01:55:58,131
Sekarang saya perlu mengubahnya\nmenjadi nol dan satu.

2021
01:55:58,131 --> 01:56:02,331
Nah, bagaimana caranya melakukan hal ini,\n

2022
01:56:03,680 --> 01:56:06,470
atau kode sumber, demikian\nbiasa disebut--

2023
01:56:06,470 --> 01:56:11,040
untuk ini, angka nol ini dan angka itu\n

2024
01:56:11,041 --> 01:56:13,490
Angka nol dan satu dari\nminggu lalu tidak hanya dapat digunakan

2025
01:56:13,490 --> 01:56:18,751
untuk mewakili angka dan huruf,\n

2026
01:56:18,751 --> 01:56:24,051
Itu juga dapat mewakili instruksi ke a\n

2027
01:56:24,051 --> 01:56:26,091
atau menghapus file, atau menyimpan file.

2028
01:56:26,091 --> 01:56:28,761
Segala macam dasar\nkomputer

2029
01:56:28,761 --> 01:56:32,361
dapat diwakili oleh\npola nol dan satu lainnya.

2030
01:56:32,360 --> 01:56:34,934
Dan seperti minggu lalu,\ntergantung konteksnya

2031
01:56:34,934 --> 01:56:36,351
di mana nomor-nomor ini disimpan.

2032
01:56:36,350 --> 01:56:39,680
Terkadang angka tersebut diartikan sebagai\nangka, seperti di spreadsheet.

2033
01:56:39,680 --> 01:56:41,390
Terkadang mereka diartikan sebagai warna.

2034
01:56:41,390 --> 01:56:46,040
Terkadang diartikan sebagai\n

2035
01:56:46,041 --> 01:56:50,820
untuk melakukan operasi tingkat rendah,\n

2036
01:56:50,820 --> 01:56:55,610
Untungnya, definisi minggu lalu\n

2037
01:56:55,610 --> 01:56:58,020
adalah model mental yang bagus untuk\next tujuan yang ada.

2038
01:56:58,020 --> 01:57:00,800
Saya punya beberapa masukan, kode sumber AKA.

2039
01:57:00,801 --> 01:57:05,001
Saya pada akhirnya ingin menampilkan\nkode mesin, angka nol dan satu itu.

2040
01:57:05,001 --> 01:57:07,581
Saya tentu tidak ingin melakukan\nproses seperti ini dengan tangan.

2041
01:57:07,581 --> 01:57:11,181
Jadi semoga ada algoritmanya\n

2042
01:57:12,626 --> 01:57:14,751
Dan bagi Anda yang\nmemiliki pengalaman sebelumnya

2043
01:57:14,751 --> 01:57:16,947
program ini mungkin disebut a?

2044
01:57:18,150 --> 01:57:20,150
Jadi beberapa dari Anda,\nmemang, telah memprogramnya sebelumnya.

2045
01:57:20,150 --> 01:57:21,831
Tidak semua bahasa menggunakan kompiler.

2046
01:57:21,831 --> 01:57:24,351
Faktanya, C adalah bahasa\nyang menggunakan compiler.

2047
01:57:24,350 --> 01:57:27,680
Jadi aku hanya perlu menemukan diriku sendiri--

2048
01:57:27,680 --> 01:57:31,280
di komputer saya di suatu tempat,\nmungkin-- yang disebut kompiler

2049
01:57:31,280 --> 01:57:35,730
sebuah program yang tujuan hidupnya adalah\n

2050
01:57:35,730 --> 01:57:40,460
Dan kode sumber ditulis secara tekstual\n

2051
01:57:41,661 --> 01:57:44,490
Kode mesin adalah\nangka nol dan satu yang sesuai.

2052
01:57:44,490 --> 01:57:48,261
Jadi izinkan saya kembali ke\nlingkungan pemrograman yang sama bernama

2053
01:57:48,261 --> 01:57:50,421
Kode Visual Studio atau Kode VS.

2054
01:57:50,421 --> 01:57:53,541
Ini biasanya merupakan program yang Anda\n

2055
01:57:53,541 --> 01:57:57,351
dapat mengunduh ke Mac mereka sendiri atau\n

2056
01:57:57,350 --> 01:57:59,750
komputer yang Anda miliki menulis beberapa kode.

2057
01:57:59,751 --> 01:58:02,181
Namun kelemahan dari pendekatan\nitu adalah kita semua

2058
01:58:02,180 --> 01:58:04,790
memiliki\nversi Mac atau PC yang sedikit berbeda.

2059
01:58:04,791 --> 01:58:07,371
Kami memiliki\nversi sistem operasi yang sedikit berbeda.

2060
01:58:07,371 --> 01:58:08,931
Mereka mungkin mutakhir atau mungkin tidak.

2061
01:58:08,930 --> 01:58:13,020
Itu hanya mimpi buruk dukungan teknis\n

2062
01:58:13,020 --> 01:58:15,831
terutama untuk perkenalan\n

2063
01:58:15,831 --> 01:58:19,201
berada di halaman yang sama sehingga kami dapat\nmengaktifkan dan menjalankan Anda dengan cepat.

2064
01:58:19,201 --> 01:58:23,180
Jadi saya sebenarnya menggunakan\n berbasis cloud

2065
01:58:23,180 --> 01:58:25,970
yang Anda hanya memerlukan browser untuk mengaksesnya.

2066
01:58:25,970 --> 01:58:28,760
Lalu Anda dapat menggunakan\nkomputer mana pun, hari ini atau besok.

2067
01:58:28,761 --> 01:58:32,341
Pada akhir semester, kami\n

2068
01:58:32,341 --> 01:58:36,021
boleh dikatakan, semampu kami dan\nmenghubungkan Anda ke Mac atau PC Anda sendiri

2069
01:58:36,020 --> 01:58:39,530
sehingga setelah kelas ini, terutama jika\n

2070
01:58:39,530 --> 01:58:43,131
kamu merasa bisa melanjutkan\n

2071
01:58:45,270 --> 01:58:47,960
Namun untuk saat ini, yang luar biasa adalah\nversi browser VS Code

2072
01:58:47,961 --> 01:58:51,793
seharusnya hampir sama\n

2073
01:58:51,792 --> 01:58:53,000
versi yang sama akan menjadi.

2074
01:58:53,001 --> 01:58:55,521
Dan Anda akan melihat di soal\nset 1 cara mengaksesnya

2075
01:58:55,520 --> 01:58:58,791
dan cara memulai\nprogram pertama Anda.

2076
01:58:58,791 --> 01:59:01,641
Namun saya belum menyebutkan\nbagian bawah layar ini

2077
01:59:01,640 --> 01:59:03,140
bagian bawah layar ini.

2078
01:59:03,140 --> 01:59:06,570
Dan ini adalah area yang kami miliki\n

2079
01:59:06,570 --> 01:59:10,400
Jadi ini semacam teknologi kuno\n

2080
01:59:10,400 --> 01:59:15,380
untuk berinteraksi dengan komputer, di mana pun\n

2081
01:59:15,381 --> 01:59:17,601
atau bahkan, dalam hal ini, di cloud.

2082
01:59:17,600 --> 01:59:20,150
Jadi di bagian\natas layar ini

2083
01:59:20,150 --> 01:59:24,740
adalah editor teks saya, seperti bertab\n

2084
01:59:24,740 --> 01:59:26,930
Saya hanya bisa membuat file dan menulis kode.

2085
01:59:26,930 --> 01:59:30,050
Bagian bawah layar di sini,\nyang disebut jendela terminal

2086
01:59:30,051 --> 01:59:33,141
memberi saya kemampuan untuk\nmenjalankan perintah di server

2087
01:59:33,140 --> 01:59:35,600
yang saat ini saya punya\akses eksklusif.

2088
01:59:35,600 --> 01:59:39,680
Jadi karena saya login ke VS\nCode dengan akun saya online

2089
01:59:39,680 --> 01:59:44,451
Saya memiliki jenis virtual\n saya sendiri

2090
01:59:44,451 --> 01:59:46,701
atau dikenal sebagai, dalam\nkonteks ini, sebuah wadah.

2091
01:59:46,701 --> 01:59:49,770
Ini memiliki sistem operasinya sendiri\nbagi saya, hard drivenya sendiri

2092
01:59:49,770 --> 01:59:52,640
jika Anda mau, tempat saya dapat menyimpan\ndan membuat file saya sendiri

2093
01:59:52,640 --> 01:59:54,990
terpisah dari Anda dan sebaliknya.

2094
01:59:54,990 --> 01:59:57,381
Dan pada prompt yang sangat\nsederhana ini, yang mana

2095
01:59:57,381 --> 02:00:00,218
secara konvensional-- namun tidak selalu--\n

2096
02:00:00,217 --> 02:00:01,550
tidak ada hubungannya dengan mata uang.

2097
02:00:01,551 --> 02:00:03,644
Artinya, ketikkan perintah Anda di sini.

2098
02:00:03,644 --> 02:00:05,811
Di sinilah saya\ndapat mengetikkan perintah

2099
02:00:05,810 --> 02:00:09,871
seperti mengkompilasi kode\nsumber saya ke dalam kode mesin.

2100
02:00:09,871 --> 02:00:15,523
Jadi ini adalah Antarmuka Baris Perintah, atau\n

2101
02:00:15,523 --> 02:00:18,230
yang mungkin belum pernah Anda gunakan\n

2102
02:00:19,220 --> 02:00:23,730
Kemungkinan besar hampir semua dari kita ada di ruangan ini\n

2103
02:00:23,730 --> 02:00:26,990
tapi kita semua akan mulai menggunakan\n

2104
02:00:26,990 --> 02:00:30,140
berada dalam keluarga sistem operasi\n

2105
02:00:30,140 --> 02:00:33,230
antarmuka garis, tetapi tidak digunakan\n

2106
02:00:33,230 --> 02:00:35,850
situs web dan pengembangan\aplikasi dan sejenisnya.

2107
02:00:35,850 --> 02:00:40,290
Dan itu, memang, familiar dan sangat\n

2108
02:00:40,291 --> 02:00:45,801
Jadi bagaimana cara membuat file\nini, hello.c, menjadi sebuah program?

2109
02:00:45,801 --> 02:00:48,740
Tidak ada ikon untuk diklik dua kali,\ntetapi ada perintah.

2110
02:00:48,740 --> 02:00:54,140
Saya bisa mengetik, menyapa, dengan dolar ini\n

2111
02:00:54,140 --> 02:00:56,300
dan sepertinya tidak terjadi apa-apa.

2112
02:00:57,533 --> 02:00:59,490
Dan seperti yang akan kita lihat dalam\npemrograman, hampir selalu

2113
02:00:59,490 --> 02:01:02,661
jika Anda tidak melihat ada yang salah,\n

2114
02:01:02,661 --> 02:01:04,400
Jadi ini akan\nmenjadi hal yang langka pada awalnya

2115
02:01:04,400 --> 02:01:07,490
tapi ini adalah hal bagus yang\nsepertinya tidak menghasilkan apa-apa.

2116
02:01:07,490 --> 02:01:11,661
Tapi sekarang ada di\nfolder di akun saya

2117
02:01:11,661 --> 02:01:15,261
dalam hal ini di cloud\na file bernama "halo.

2118
02:01:15,261 --> 02:01:18,771
Dan ini perintah yang agak aneh,\n

2119
02:01:19,581 --> 02:01:22,581
. artinya masuk ke folder saya saat ini.

2120
02:01:22,581 --> 02:01:28,371
/hello berarti menjalankan program bernama\n

2121
02:01:28,371 --> 02:01:32,871
Jadi ./halo, lalu Enter, dan voila,\n

2122
02:01:40,110 --> 02:01:42,770
Saya akan melanjutkan dan membuka\nsidebar program ini

2123
02:01:42,770 --> 02:01:44,911
dan Anda akan melihat di soal\nset 1 bagaimana melakukan ini.

2124
02:01:44,911 --> 02:01:48,051
Dan ini mungkin terlihat sedikit berbeda\n

2125
02:01:48,051 --> 02:01:51,191
Bahkan skema warna yang saya gunakan mungkin\n

2126
02:01:51,190 --> 02:01:52,940
karena mendukung\nntema warna-warni yang bagus.

2127
02:01:52,940 --> 02:01:56,720
Jadi Anda dapat memiliki warna\nd kecerahan yang berbeda tergantung

2128
02:01:56,720 --> 02:01:58,250
pada suasana hati atau waktu Anda.

2129
02:01:58,251 --> 02:02:01,641
Apa yang saya buka di sini adalah\n

2130
02:02:01,640 --> 02:02:04,278
dan ini hanyalah semua\nfile di akun cloud saya.

2131
02:02:04,279 --> 02:02:05,571
Dan jumlahnya tidak banyak saat ini.

2132
02:02:06,576 --> 02:02:09,081
Salah satunya adalah file bernama\nhello.c, dan file tersebut disorot

2133
02:02:09,081 --> 02:02:10,851
karena aku sudah membukanya di sana.

2134
02:02:10,850 --> 02:02:14,330
Dan yang lainnya adalah file bernama\n"halo", yang merupakan file baru

2135
02:02:14,331 --> 02:02:17,331
dan dibuat ketika saya menjalankan perintah itu.

2136
02:02:17,331 --> 02:02:21,431
Dan yang perlu diperhatikan sekarang adalah\n

2137
02:02:22,780 --> 02:02:26,140
Seperti di sisi kiri, Anda punya\n

2138
02:02:26,140 --> 02:02:30,275
Namun di bagian bawah ini, sekali lagi, Anda\n

2139
02:02:30,275 --> 02:02:32,650
Ini hanyalah cara\nberinteraksi dengan komputer

2140
02:02:32,650 --> 02:02:34,193
dan Anda akan merasa nyaman dengan keduanya.

2141
02:02:34,193 --> 02:02:37,451
Dan sejujurnya, Anda pasti familiar\n

2142
02:02:37,451 --> 02:02:40,911
jadi ini adalah baris perintah\nyang akan kita gunakan untuk meluangkan waktu.

2143
02:02:40,911 --> 02:02:43,600
Sekarang misalkan saya hanya\ningin melakukan sesuatu

2144
02:02:43,600 --> 02:02:45,438
lebih dari sekedar mengkompilasi program ini.

2145
02:02:45,439 --> 02:02:47,231
Misalkan saya ingin melanjutkan\nahead dan menghapusnya.

2146
02:02:47,230 --> 02:02:48,701
Seperti, uh-uh, tidak, aku melakukan kesalahan.

2147
02:02:48,701 --> 02:02:51,070
Saya ingin mengatakan, "Halo,\nCS50," bukan "Halo, dunia.

2148
02:02:51,070 --> 02:02:55,121
Saya cukup mengarahkan kursor ke sini, seperti di\n

2149
02:02:55,121 --> 02:02:57,881
dan saya bisa melihat-lihat, dan\ndi sana, menghapusnya secara permanen.

2150
02:02:57,881 --> 02:03:00,371
Jadi sebagian besar dari kita mungkin memiliki\nnaluri tersebut pada Mac atau PC.

2151
02:03:00,371 --> 02:03:02,801
Anda klik kanan atau Control-klik,\ndan Anda melihat-lihat.

2152
02:03:02,801 --> 02:03:05,951
Namun dalam antarmuka baris perintah,\nbiarkan saya melakukan ini.

2153
02:03:05,951 --> 02:03:08,440
Perintah untuk menghapus\atau menghapus file

2154
02:03:08,440 --> 02:03:12,100
di dunia Linux, ini\sistem operasi lain

2155
02:03:12,100 --> 02:03:16,330
hanyalah ketik rm untuk menghapus,\ndan kemudian "halo," Enter.

2156
02:03:16,331 --> 02:03:19,091
Ini adalah konfirmasi yang agak samar\n

2157
02:03:19,961 --> 02:03:21,761
Saya akan melanjutkan\ndan mengetik Y untuk Ya.

2158
02:03:21,761 --> 02:03:24,191
Dan sekarang ketika saya menekan\nEnter, lihat apa yang terjadi

2159
02:03:24,190 --> 02:03:28,240
di kiri atas Explorer,\nGUI, antarmuka grafis.

2160
02:03:30,789 --> 02:03:32,980
Tidak terlalu menarik,\ntapi ini sungguh berarti

2161
02:03:32,980 --> 02:03:35,539
ini adalah versi grafis\ndari apa yang kita lihat di sini.

2162
02:03:35,539 --> 02:03:38,800
Dan faktanya, jika Anda ingin\ntidak pernah menggunakan GUI lagi--

2163
02:03:38,800 --> 02:03:41,690
Saya akan melanjutkan dan menutupnya\ndengan pintasan keyboard di sini--

2164
02:03:41,690 --> 02:03:45,430
Anda dapat selamanya mengetik\nls untuk daftar dan tekan Enter.

2165
02:03:45,430 --> 02:03:48,100
Dan Anda akan melihatnya di\nantarmuka baris perintah

2166
02:03:48,100 --> 02:03:50,617
semua file di folder Anda saat ini.

2167
02:03:50,618 --> 02:03:52,451
Jadi apa pun yang dapat Anda lakukan\ndengan mouse, Anda bisa

2168
02:03:52,451 --> 02:03:54,039
lakukan dengan antarmuka baris perintah ini.

2169
02:03:54,039 --> 02:03:57,411
Dan tentu saja, kita juga akan melihat lebih banyak\nhal yang dapat Anda lakukan.

2170
02:03:57,411 --> 02:04:01,091
Tapi penemunya, ini\n

2171
02:04:02,291 --> 02:04:04,360
Misalnya, perintahnya adalah rm untuk menghapus.

2172
02:04:07,390 --> 02:04:10,480
Karena mengetik lebih cepat.

2173
02:04:10,480 --> 02:04:14,260
Jadi sebelum kita melanjutkan pembuatan\n

2174
02:04:14,261 --> 02:04:16,181
cukup "Halo, dunia,"\nbiarkan saya berhenti sejenak di sini untuk melihatnya

2175
02:04:16,180 --> 02:04:19,420
jika ada pertanyaan tentang\nkode sumber atau mesin

2176
02:04:19,421 --> 02:04:24,221
kode atau kompiler atau\nantarmuka baris perintah ini.

2177
02:04:26,628 --> 02:04:28,921
DAVID J. MALAN: Pertanyaan yang sangat bagus\n, dan izinkan saya merangkumnya.

2178
02:04:28,921 --> 02:04:30,751
Jika saya membuat\nperubahan pada program

2179
02:04:30,751 --> 02:04:33,871
jalankan, lalu mungkin buat\nperubahan lain dan coba jalankan kembali

2180
02:04:33,871 --> 02:04:37,028
apakah perubahan tersebut akan diterapkan,\n

2181
02:04:37,860 --> 02:04:39,961
Saya sudah menghapus versi lama.

2182
02:04:39,961 --> 02:04:43,530
Jadi izinkan saya melanjutkan dan menunjukkan\nhal itu jika saya melakukannya ./hello sekarang

2183
02:04:43,530 --> 02:04:47,760
Saya akan melihat semacam kesalahan\n

2184
02:04:47,761 --> 02:04:50,431
Tidak ada file atau direktori seperti itu, jadi\ini tidak terlalu ramah pengguna

2185
02:04:50,430 --> 02:04:51,960
tapi ia mengatakan apa masalahnya.

2186
02:04:51,961 --> 02:04:55,231
Biarkan saya melanjutkan dan membuat ulang\nit dengan mengetik make hello.

2187
02:04:55,230 --> 02:04:59,911
Sekarang jika saya mengetik ls, saya tidak akan melihat satu pun\n

2188
02:04:59,911 --> 02:05:03,615
bahkan berwarna hijau dengan sedikit tanda bintang\n

2189
02:05:03,615 --> 02:05:05,490
Ini semacam versi\ntekstual dari sesuatu

2190
02:05:05,490 --> 02:05:07,251
Anda dapat mengeklik dua kali\di dunia manusia kami.

2191
02:05:07,251 --> 02:05:10,501
Jadi sekarang, tentu saja, jika saya menjalankan hello, kita\n

2192
02:05:10,501 --> 02:05:15,811
Tapi sekarang misalkan saya mengubahnya menjadi\n

2193
02:05:15,810 --> 02:05:21,000
Biarkan saya melanjutkan dan menyimpan file dengan\n

2194
02:05:21,001 --> 02:05:23,681
biarkan aku berlari ./hello lagi, dan voila.

2195
02:05:25,171 --> 02:05:27,431
Jadi izinkan saya meminta orang lain\nuntuk menjawab pertanyaan itu.

2196
02:05:29,011 --> 02:05:31,051
Mengapa tidak tertulis, "Halo, CS50.

2197
02:05:33,171 --> 02:05:35,240
DAVID J. MALAN: Ya, jadi\nSaya tidak mengkompilasinya lagi.

2198
02:05:35,240 --> 02:05:38,421
Jadi semacam kesalahan pemula, Anda akan melakukannya\n

2199
02:05:38,990 --> 02:05:42,051
Tapi sekarang izinkan saya melanjutkan\ndan membuat ulang halo, masuk.

2200
02:05:42,051 --> 02:05:45,171
Tampaknya\nmembuat program yang sama.

2201
02:05:45,171 --> 02:05:49,431
Namun kali ini saat saya menjalankan\nit, yang muncul adalah, "Halo, CS50.

2202
02:05:49,430 --> 02:05:53,180
Ada pertanyaan lain tentang beberapa\nelemen dasar ini?

2203
02:05:53,180 --> 02:05:56,580
Dan kita akan kembali ke semua\nsintaks gila yang saya ketik tak lama kemudian.

2204
02:05:56,581 --> 02:05:58,881
Namun untuk saat ini, kami fokus\bukan hanya pada keluarannya.

2205
02:06:00,853 --> 02:06:02,560
DAVID J. MALAN: Saat\nSaya terus menjalankan make

2206
02:06:02,560 --> 02:06:05,510
itu membuat versi baru\nkode mesin.

2207
02:06:05,511 --> 02:06:09,490
Jadi program hello terus berubah\n

2208
02:06:09,490 --> 02:06:12,599
Tidak ada file make, itu sendiri.

2209
02:06:13,634 --> 02:06:15,051
DAVID J. MALAN: Pertanyaan bagus, tidak.

2210
02:06:15,051 --> 02:06:18,141
Jika saya membuka direktori itu, Anda akan\n

2211
02:06:18,140 --> 02:06:21,230
Dan tidak peduli berapa\nkali saya menjalankan make hello--

2212
02:06:21,230 --> 02:06:25,251
tiga, empat, lima-- itu hanya\nterus menimpa yang asli.

2213
02:06:25,251 --> 02:06:28,753
Jadi ini seperti menabung\n

2214
02:06:29,461 --> 02:06:31,003
Namun ada langkah tambahan hari ini.

2215
02:06:31,002 --> 02:06:36,280
Kita kemudian harus mengubah kata-kataku menjadi\n

2216
02:06:38,541 --> 02:06:40,730
DAVID J. MALAN: Oh, apa yang terjadi jika saya menjalankan hello.c?

2217
02:06:40,730 --> 02:06:45,081
Jadi izinkan saya melanjutkan dan melakukan ./hello.c,\n

2218
02:06:48,801 --> 02:06:50,961
Di sinilah pesan kesalahan\nberarti sesuatu

2219
02:06:50,961 --> 02:06:53,661
kepada orang-orang yang merancang pengoperasian\n

2220
02:06:53,661 --> 02:06:55,701
Bukan berarti Anda tidak\nmemiliki akses ke file tersebut.

2221
02:06:55,701 --> 02:06:57,411
Artinya, itu tidak dapat dieksekusi.

2222
02:06:57,411 --> 02:07:00,201
Ini bukan sesuatu yang Anda\nmempunyai izin untuk menjalankannya

2223
02:07:00,201 --> 02:07:04,743
namun Anda memiliki izin untuk membaca\n

2224
02:07:06,520 --> 02:07:08,228
DAVID J. MALAN: Oh,\npertanyaan yang sangat bagus.

2225
02:07:08,229 --> 02:07:11,801
Jadi jika saya sudah memberi nama file saya, halo\n

2226
02:07:11,801 --> 02:07:15,761
titik C, salah satu hal yang\nMake lakukan adalah secara otomatis

2227
02:07:18,911 --> 02:07:20,711
kita akan membahas ini lebih banyak lagi minggu depan.

2228
02:07:20,711 --> 02:07:23,711
Membuat dirinya sendiri-- adalah salah satu\nkebohongan putih pertama saat ini--

2229
02:07:25,480 --> 02:07:30,820
Ini adalah program yang mengetahui cara menemukan\n

2230
02:07:30,820 --> 02:07:33,161
dan secara otomatis membuat program.

2231
02:07:33,161 --> 02:07:37,091
Kalau saya pakai, seperti yang akan kita bahas selanjutnya\n

2232
02:07:37,091 --> 02:07:41,081
Saya harus mengetik urutan yang lebih panjang\n

2233
02:07:41,081 --> 02:07:43,270
saya ingin nama\nprogram saya apa.

2234
02:07:43,270 --> 02:07:45,310
Make adalah program yang bagus,\nterutama di minggu ke-1

2235
02:07:45,310 --> 02:07:47,661
karena ini hanya mengotomatiskan\semuanya untuk kami.

2236
02:07:47,661 --> 02:07:51,221
Jadi di sini, kita sekarang memiliki\nprogram yang dapat mencetak dengan sangat sederhana

2237
02:07:52,220 --> 02:07:54,790
Jadi jangan masukkan ini\nin ke dalam konteks di mana

2238
02:07:54,791 --> 02:07:58,871
terakhir kali kita tinggalkan dalam konteks\n

2239
02:07:58,871 --> 02:08:01,961
Jadi kita bahas terakhir kali, tentu saja\nfungsi dan argumen.

2240
02:08:01,961 --> 02:08:07,011
Fungsi, sekali lagi, adalah tindakan dan\n

2241
02:08:07,011 --> 02:08:09,403
Dan argumennya adalah\ninput dari fungsi tersebut

2242
02:08:09,403 --> 02:08:11,860
umumnya dalam\noval putih kecil yang, di Scratch, Anda

2243
02:08:11,860 --> 02:08:13,961
bisa mengetikkan kata atau angka.

2244
02:08:13,961 --> 02:08:16,961
Kita lihat saja nanti, di semua bahasa\nkita akan melihat istilah ini

2245
02:08:18,283 --> 02:08:20,990
Dan mari kita mulai menerjemahkan\n

2246
02:08:20,990 --> 02:08:24,911
Jadi misalnya, mari kita letakkan\nprogram yang sama ini di C

2247
02:08:26,110 --> 02:08:29,621
Seperti inilah tampilan Hello, World\n

2248
02:08:29,621 --> 02:08:32,530
Minggu ini, tentu saja,\nit terlihat seperti berita cetak.

2249
02:08:32,530 --> 02:08:34,990
Lalu tanda kurungnya,\nperhatikan, adalah semacam itu

2250
02:08:34,990 --> 02:08:38,679
sengaja dirancang di dunia\n

2251
02:08:38,679 --> 02:08:40,721
Meskipun ini berbentuk\noval putih, Anda pasti paham

2252
02:08:40,720 --> 02:08:45,400
bahwa itu semacam membangkitkan\nide yang sama dengan tanda kurung.

2253
02:08:45,400 --> 02:08:49,180
Secara teknis fungsinya\nin C, tidak disebut katakanlah.

2254
02:08:51,671 --> 02:08:55,061
F adalah singkatan dari formatted, tapi kami akan\n

2255
02:08:55,060 --> 02:08:57,610
Tapi printf adalah fungsi\nanalog terdekat

2256
02:08:57,610 --> 02:09:00,881
misalnya di dunia\nC. Namun, perhatikan apakah Anda

2257
02:09:00,881 --> 02:09:05,501
ingin mencetak sesuatu seperti\nHalo, Dunia atau Halo CS50 di C

2258
02:09:05,501 --> 02:09:08,980
Anda tidak hanya menulis\nkata-kata seperti yang kita lakukan minggu lalu.

2259
02:09:08,980 --> 02:09:11,411
Anda juga menambahkan apa,\njika Anda sudah menyadarinya

2260
02:09:11,411 --> 02:09:13,360
apa yang hilang dari versi ini.

2261
02:09:13,360 --> 02:09:15,680
Ya, jadi tanda kutip ganda\bukan kiri dan kanan.

2262
02:09:15,680 --> 02:09:20,998
Jadi, itu diperlukan di C setiap kali\nAnda memiliki serangkaian kata.

2263
02:09:20,998 --> 02:09:22,541
Dan saya sengaja menggunakan kata itu.

2264
02:09:22,541 --> 02:09:26,831
Kapan pun Anda memiliki banyak kata\n

2265
02:09:27,461 --> 02:09:30,971
Dan Anda harus menaruhnya dalam tanda kutip ganda\n, bukan tanda kutip tunggal.

2266
02:09:30,970 --> 02:09:32,680
Anda harus menaruhnya dalam tanda kutip ganda.

2267
02:09:32,680 --> 02:09:36,880
Ada satu hal bodoh lain\nyang perlu kita miliki dalam kode C saya

2268
02:09:36,881 --> 02:09:40,971
untuk menjalankan fungsi ini\n

2269
02:09:41,841 --> 02:09:44,240
Jadi sama seperti di dunia manusia\nkami, pada akhirnya Anda

2270
02:09:44,240 --> 02:09:47,270
terbiasa menggunakan, di\n

2271
02:09:47,270 --> 02:09:50,690
Titik koma biasanya\nAnda gunakan untuk menyelesaikan pemikiran Anda

2272
02:09:50,690 --> 02:09:53,780
dalam dunia pemrograman dengan C.

2273
02:09:53,780 --> 02:09:55,911
Baiklah, jadi kita sudah menyiapkan\nfungsi itu.

2274
02:09:55,911 --> 02:09:59,661
Sekarang, apa yang cocok dengan ini\n

2275
02:09:59,661 --> 02:10:01,070
Ya, fungsi membutuhkan argumen.

2276
02:10:01,070 --> 02:10:04,760
Dan ternyata fungsi dapat\nmemiliki tipe keluaran berbeda.

2277
02:10:04,761 --> 02:10:07,071
Dan kami sebenarnya sudah melihat\nkeduanya minggu lalu.

2278
02:10:07,070 --> 02:10:11,360
Salah satu jenis keluaran dari suatu fungsi\n

2279
02:10:11,360 --> 02:10:13,430
Dan umumnya mengacu\npada sesuatu yang visual

2280
02:10:13,430 --> 02:10:17,570
seperti sesuatu yang muncul di layar\n

2281
02:10:17,570 --> 02:10:20,211
Ini semacam efek samping dari\nfungsi melakukan tugasnya.

2282
02:10:20,211 --> 02:10:24,231
Dan benar saja, minggu lalu kita melihatnya di\n

2283
02:10:24,230 --> 02:10:27,180
seperti Hello, World sebagai\ninput ke fungsi say.

2284
02:10:27,180 --> 02:10:31,040
Dan kami melihat di layar Halo,\n

2285
02:10:32,930 --> 02:10:35,840
Anda sebenarnya tidak dapat melakukan apa pun\ndengan keluaran visual tersebut

2286
02:10:35,841 --> 02:10:38,581
selain mengonsumsinya,\nsecara visual, dengan mata manusia.

2287
02:10:38,581 --> 02:10:43,251
Namun terkadang, ingat minggu lalu, kami\n

2288
02:10:43,251 --> 02:10:44,961
benar-benar memberi saya beberapa nilai.

2289
02:10:44,961 --> 02:10:47,001
Ingat pertanyaannya, siapa namamu.

2290
02:10:47,001 --> 02:10:50,684
Itu mengembalikanku\njawaban apa pun yang diketik manusia itu.

2291
02:10:50,684 --> 02:10:52,851
Ia tidak sembarangan\nmenampilkannya di layar.

2292
02:10:52,850 --> 02:10:55,190
Kucing itu belum tentu\nmengucapkannya di layar.

2293
02:10:55,190 --> 02:11:01,640
Sebaliknya, itu disimpan di\n khusus itu

2294
02:11:01,640 --> 02:11:05,510
Karena beberapa fungsi tidak mempunyai\nefek samping melainkan nilai kembalian.

2295
02:11:05,511 --> 02:11:09,321
Mereka mengembalikan keluaran\nyang dapat Anda gunakan dan gunakan kembali

2296
02:11:09,320 --> 02:11:11,961
tidak seperti efek samping, yang,\nagi tampilkan lagi dan hanya itu.

2297
02:11:11,961 --> 02:11:14,461
Anda tidak dapat menangkap\nit dan mempertahankannya.

2298
02:11:14,461 --> 02:11:17,601
Jadi, dalam konteks\nminggu lalu, kami memiliki blok tanya.

2299
02:11:17,600 --> 02:11:20,270
Dan itu memiliki nilai pengembalian\njawaban khusus ini.

2300
02:11:20,270 --> 02:11:22,970
Di C, kita akan\nmelihatnya sebentar lagi

2301
02:11:22,970 --> 02:11:25,400
kita bisa menerjemahkannya sebagai berikut.

2302
02:11:25,400 --> 02:11:29,001
Kecocokan terdekat yang dapat\nsaya usulkan untuk blok permintaan

2303
02:11:29,001 --> 02:11:31,581
adalah fungsi yang akan\nkita panggil get string.

2304
02:11:31,581 --> 02:11:34,730
String, sekali lagi, adalah sebuah kata, kumpulan kata, seperti frasa

2305
02:11:34,730 --> 02:11:36,710
atau kalimat dalam pemrograman.

2306
02:11:36,711 --> 02:11:41,331
Ini juga merupakan fungsi sejauh\n

2307
02:11:41,331 --> 02:11:43,551
hal ini tidak selalu benar--\ntetapi sering kali benar

2308
02:11:43,551 --> 02:11:48,261
Anda memiliki kata dalam C diikuti dengan open\n

2309
02:11:48,261 --> 02:11:50,961
kemungkinan besar itu adalah nama suatu fungsi.

2310
02:11:50,961 --> 02:11:53,461
Dan kita akan melihat bahwa\nada beberapa pengecualian terhadap hal tersebut.

2311
02:11:53,461 --> 02:11:55,791
Namun untuk saat ini memang\nterlihat seperti sebuah fungsi

2312
02:11:55,791 --> 02:11:57,201
karena cocok dengan pola itu.

2313
02:11:57,201 --> 02:12:00,668
Jika saya ingin bertanya,\nsiapa nama Anda, tanda tanya--

2314
02:12:00,668 --> 02:12:03,711
dan aku bahkan akan melakukannya dengan sengaja\n

2315
02:12:03,711 --> 02:12:07,161
kursor sedikit ke atas sehingga\n

2316
02:12:08,190 --> 02:12:10,201
Jadi itu hanya estetika yang rewel.

2317
02:12:10,201 --> 02:12:14,480
Ini mungkin analog\nyang paling mendekati dengan menanyakan pertanyaan itu.

2318
02:12:14,480 --> 02:12:18,680
Tetapi karena blok Ask\n mengembalikan sebuah nilai

2319
02:12:18,680 --> 02:12:22,020
analognya di sini lupa string adalah\nitu juga mengembalikan nilai.

2320
02:12:22,020 --> 02:12:23,960
Itu tidak hanya mencetak masukan manusia.

2321
02:12:23,961 --> 02:12:28,131
Ia menyerahkannya kembali kepada Anda dalam bentuk\n

2322
02:12:28,131 --> 02:12:30,501
yang kemudian dapat saya gunakan dan gunakan kembali.

2323
02:12:30,501 --> 02:12:33,471
Idealnya, hal ini akan menjadi\nsederhana seperti ini

2324
02:12:33,470 --> 02:12:36,890
mengatakan jawaban di sebelah kiri sama dengan.

2325
02:12:36,890 --> 02:12:38,780
Dan di sinilah\nsegala sesuatunya mulai berbeda

2326
02:12:38,780 --> 02:12:40,640
dari matematika dan semacam dunia manusia kita.

2327
02:12:40,640 --> 02:12:44,210
Tanda sama dengan ini, untuk selanjutnya,\nbukanlah tanda sama dengan.

2328
02:12:44,211 --> 02:12:46,521
Ini adalah operator penugasan.

2329
02:12:46,520 --> 02:12:50,030
Menetapkan nilai berarti\nmenyimpan nilai dalam beberapa variabel.

2330
02:12:50,030 --> 02:12:53,640
Dan Anda membaca hal-hal ini,\nanehnya, dari kanan ke kiri.

2331
02:12:53,640 --> 02:12:55,820
Jadi inilah fungsi yang disebut get string.

2332
02:12:55,820 --> 02:12:58,310
Saya menyatakan bahwa itu akan\nkembali kepada Anda apa pun

2333
02:12:58,310 --> 02:13:00,411
tipe manusia sesuai namanya.

2334
02:13:00,411 --> 02:13:03,320
Ini akan disimpan\nover di sini di sebelah kiri karena

2335
02:13:03,320 --> 02:13:06,331
dari apa yang disebut tugas ini\n

2336
02:13:06,331 --> 02:13:08,581
Namun hal ini tidak berarti\nekesetaraan dalam konteks ini.

2337
02:13:10,171 --> 02:13:14,961
Namun ia melakukannya dengan menyalin nilainya pada\n

2338
02:13:14,961 --> 02:13:16,940
Sayangnya, kita belum\nselesai dengan C.

2339
02:13:16,940 --> 02:13:19,670
Dan di sinilah, sekali lagi, awalnya sedikit mengganggu

2340
02:13:19,671 --> 02:13:23,780
di mana Scratch biarkan kami berekspresi\n

2341
02:13:23,780 --> 02:13:27,110
Di C ketika Anda memiliki\nvariabel, Anda tidak hanya melakukannya

2342
02:13:27,110 --> 02:13:29,001
beri nama seperti yang Anda lakukan di Scratch.

2343
02:13:29,001 --> 02:13:33,051
Anda juga harus memberi tahu komputer\nin terlebih dahulu jenis nilainya

2344
02:13:34,310 --> 02:13:37,340
String adalah salah satu jenis nilai tersebut.

2345
02:13:37,341 --> 02:13:40,070
Int, untuk bilangan bulat,\nakan menjadi yang lain.

2346
02:13:40,070 --> 02:13:42,860
Dan masih ada lebih dari itu\nyang akan kita lihat hari ini dan seterusnya.

2347
02:13:42,860 --> 02:13:46,070
Dan ini sebagian merupakan jawaban terhadap\n

2348
02:13:46,070 --> 02:13:49,970
minggu lalu, seperti itulah kinerja komputer\n

2349
02:13:51,320 --> 02:13:55,518
Seperti apakah ini sebuah huruf, angka,\na warna, sebuah video.

2350
02:13:55,518 --> 02:13:58,350
Dan saya baru saja mengklaimnya minggu lalu\n

2351
02:14:00,871 --> 02:14:04,190
Namun dalam\nprogram tersebut, sering kali hal ini bergantung

2352
02:14:04,190 --> 02:14:08,810
berdasarkan apa yang dikatakan oleh pemrogram manusia\njenis nilainya.

2353
02:14:08,810 --> 02:14:10,850
Jika ini menentukan\nstringnya, yang artinya

2354
02:14:10,850 --> 02:14:12,890
tafsirkan yang berikut\nnol dan yang itu

2355
02:14:12,890 --> 02:14:16,640
disimpan dalam program saya sebagai\nkata atau huruf, secara lebih umum.

2356
02:14:16,640 --> 02:14:20,960
Jika itu adalah int untuk bilangan bulat, itu akan\n

2357
02:14:20,961 --> 02:14:24,981
perlakukan angka nol dan\n berikut ini dalam program saya sebagai angka

2358
02:14:26,791 --> 02:14:29,661
Jadi di sinilah\nminggu ini, tidak seperti Scratch

2359
02:14:29,661 --> 02:14:33,081
yang merupakan gambaran tentang apa yang Anda\n

2360
02:14:33,081 --> 02:14:36,201
kamu harus terlalu bertele-tele\ndan menyampaikan maksudmu.

2361
02:14:36,201 --> 02:14:39,721
Masih ada satu hal bodoh\nyang hilang dari kode saya di sini.

2362
02:14:42,150 --> 02:14:44,230
DAVID J. MALAN: Dan kita masih\nmembutuhkan titik koma yang bodoh.

2363
02:14:44,230 --> 02:14:45,648
Dan saya agak meragukannya di sini.

2364
02:14:45,648 --> 02:14:48,060
Karena sejujurnya, ini adalah\nkesalahan bodoh

2365
02:14:48,060 --> 02:14:50,701
Anda akan melakukannya hari ini,\nbesok, akhir pekan ini, minggu depan

2366
02:14:50,701 --> 02:14:54,480
beberapa minggu dari sekarang, sampai Anda\n

2367
02:14:54,480 --> 02:14:58,440
serta Anda menggunakan bahasa Inggris atau\napa pun bahasa lisan Anda.

2368
02:15:00,511 --> 02:15:03,031
Misalkan saya mencampurkan apel dan\njeruk

2369
02:15:03,030 --> 02:15:06,421
dan saya mencoba memasukkan string ke dalam\nan int atau int ke dalam string

2370
02:15:06,421 --> 02:15:08,581
kompiler akan mengeluh.

2371
02:15:08,581 --> 02:15:10,841
Jadi ketika saya menjalankan perintah make\nseperti yang saya lakukan sebelumnya

2372
02:15:10,841 --> 02:15:14,893
itu tidak akan menyenangkan dan membahagiakan\n

2373
02:15:14,893 --> 02:15:17,100
Ia akan meneriaki saya\ndengan sejujurnya sangat samar

2374
02:15:17,100 --> 02:15:20,350
mencari pesan kesalahan sampai kita mendapatkan\n

2375
02:15:23,100 --> 02:15:24,990
Ah, apa yang terjadi dengan garis miring terbalik n.

2376
02:15:24,990 --> 02:15:26,820
Jadi, kita akan membahasnya\nin sebentar lagi, jika boleh.

2377
02:15:26,820 --> 02:15:29,778
Karena saya sengaja menghilangkan\n

2378
02:15:29,779 --> 02:15:32,311
Dan kita akan melihat perbedaan\nperilakunya sebentar lagi.

2379
02:15:37,470 --> 02:15:39,720
Ini adalah\nhal-hal yang penting.

2380
02:15:39,720 --> 02:15:43,710
Dan perlu waktu untuk mengenalinya\n

2381
02:15:43,711 --> 02:15:48,306
Semua yang saya ketik di sini kecuali,\n

2382
02:15:48,305 --> 02:15:50,430
Dan huruf W-nya menggunakan huruf kapital\nhanya karena itu bahasa Inggris.

2383
02:15:50,430 --> 02:15:51,900
Segala sesuatu yang lain adalah huruf kecil.

2384
02:15:51,900 --> 02:15:54,510
Dan hal ini bervariasi menurut\nbahasa dan juga konteks.

2385
02:15:54,511 --> 02:15:58,621
Jadi, dalam banyak bahasa, konvensi\n

2386
02:16:00,060 --> 02:16:02,440
Bahasa lain mungkin juga menggunakan\nbeberapa huruf kapital.

2387
02:16:02,440 --> 02:16:04,050
Tapi kita akan membicarakannya tidak lama lagi.

2388
02:16:04,051 --> 02:16:05,951
Tapi ini adalah\nhal yang penting

2389
02:16:05,951 --> 02:16:09,480
dan sulit dilihat pada awalnya, terutama\n

2390
02:16:09,480 --> 02:16:12,930
berbeda jika ditampilkan di layar\nlaptop kecil Anda dengan huruf kapital S.

2391
02:16:12,930 --> 02:16:15,850
Namun Anda akan mulai\nmengembangkan naluri ini.

2392
02:16:15,850 --> 02:16:18,060
Baiklah, selain\nblok khusus ini

2393
02:16:18,060 --> 02:16:22,180
mari kita lanjutkan dan pertimbangkan semampu kita\n

2394
02:16:22,180 --> 02:16:24,300
Jadi izinkan saya beralih kembali ke VS Code di sini.

2395
02:16:24,301 --> 02:16:26,081
Ini adalah program yang saya miliki sebelumnya.

2396
02:16:26,081 --> 02:16:28,891
Dan izinkan saya melanjutkan\nmengubah CS50 saya.

2397
02:16:30,720 --> 02:16:35,251
Jalankan kembali Make on Hello dengan yang asli\n

2398
02:16:35,251 --> 02:16:37,230
Masuklah,\nsepertinya tidak terjadi hal buruk.

2399
02:16:37,230 --> 02:16:40,740
Jadi titik miring Halo, masukkan Halo, Dunia.

2400
02:16:40,740 --> 02:16:43,140
Sekarang, jika Anda penasaran,\nini adalah naluri yang bagus

2401
02:16:43,140 --> 02:16:45,558
untuk mulai memahami apa\nyang terjadi jika saya menghilangkan ini.

2402
02:16:45,558 --> 02:16:47,850
Baiklah, saya mungkin tidak akan\nmerusak semuanya dengan parah.

2403
02:16:48,781 --> 02:16:51,240
Izinkan saya melanjutkan sekarang dan melakukan Make Hello.

2404
02:16:52,331 --> 02:16:53,980
Jadi itu bukan kesalahan yang buruk.

2405
02:16:53,980 --> 02:16:56,700
Jadi izinkan saya melanjutkan\nmenjalankan dot-slash Hello.

2406
02:16:58,921 --> 02:17:01,560
Ya, menurut Anda apa yang berbeda?

2407
02:17:01,560 --> 02:17:05,091
Ya, tanda dolar, yang saya sebut\n

2408
02:17:05,630 --> 02:17:08,780
Yah, sekarang kita mungkin bisa\nmenyimpulkan garis miring terbalik itu

2409
02:17:08,781 --> 02:17:12,531
n adalah notasi bagus untuk\nmengatakan membuat baris baru

2410
02:17:12,531 --> 02:17:14,881
pindahkan kursor, begitulah\nbicaranya, ke baris berikutnya.

2411
02:17:14,880 --> 02:17:18,770
Perhatikan bahwa kursor akan berpindah ke\n

2412
02:17:18,771 --> 02:17:20,781
Jika saya terus menekannya,\nit otomatis saja

2413
02:17:20,781 --> 02:17:22,371
secara alami menekan enter, apakah itu.

2414
02:17:22,370 --> 02:17:25,310
Tapi akan sangat bodoh jika ketika\n

2415
02:17:25,310 --> 02:17:28,310
sesederhana itu, jika\nperintah selanjutnya adalah sekarang

2416
02:17:28,310 --> 02:17:31,770
dengan jarak yang aneh di tengah\n

2417
02:17:33,111 --> 02:17:35,061
Ini sebenarnya hanya argumen estetika.

2418
02:17:35,060 --> 02:17:40,940
Dan perhatikan bahwa itu tidak dapat diterima atau\n

2419
02:17:40,941 --> 02:17:43,441
Biarkan saya menyimpannya\ndan lihat apa yang terjadi.

2420
02:17:43,441 --> 02:17:47,001
Biarkan saya melanjutkan sekarang dan\njalankan Make Hello enter.

2421
02:17:49,161 --> 02:17:53,390
Ini seperti, 10 baris\nkesalahan untuk program satu baris.

2422
02:17:53,390 --> 02:17:56,390
Dan di sinilah, sekali lagi, Anda akan memulai\n

2423
02:17:57,380 --> 02:18:00,530
Alat semacam ini, seperti\nalat kompiler yang kami gunakan

2424
02:18:00,531 --> 02:18:03,861
tidak dirancang dengan mempertimbangkan keramahan pengguna.

2425
02:18:03,861 --> 02:18:06,081
Hal ini telah berubah selama\npuluhan tahun, namun hal ini pasti terjadi pada tahap awal

2426
02:18:06,081 --> 02:18:09,810
padahal itu memang dimaksudkan untuk menjadi\n

2427
02:18:11,150 --> 02:18:13,941
Karakter penghentian\ntutup kutipan tidak ada

2428
02:18:13,941 --> 02:18:17,061
singkat cerita, ketika\nAnda memiliki string di C

2429
02:18:17,060 --> 02:18:20,511
tanda kutip ganda Anda hanya perlu\n

2430
02:18:20,511 --> 02:18:22,049
Sekarang, ada sedikit kebohongan putih.

2431
02:18:23,091 --> 02:18:29,631
Namun cara terbaik untuk mengatasinya adalah dengan\n

2432
02:18:29,630 --> 02:18:32,390
Untuk menghindari sesuatu biasanya berarti\nmeletakkan garis miring terbalik, lalu

2433
02:18:32,390 --> 02:18:34,710
simbol khusus seperti n untuk baris baru.

2434
02:18:34,710 --> 02:18:39,510
Dan ini hanya cara yang disepakati\n

2435
02:18:39,511 --> 02:18:42,650
Oke, Anda tidak hanya menekan tombol enter.

2436
02:18:42,650 --> 02:18:46,941
Anda malah meletakkan garis miring terbalik n\ndan yang memberitahu komputer

2437
02:18:46,941 --> 02:18:49,471
untuk memindahkan kursor ke baris baru.

2438
02:18:50,977 --> 02:18:52,310
Tapi begitu Anda mengetahuinya, itu saja.

2439
02:18:52,310 --> 02:18:55,470
Itu hanyalah kata lain\n dalam kosa kata kita.

2440
02:18:55,470 --> 02:18:58,550
Jadi sekarang izinkan saya beralih ke pembuatan\n

2441
02:18:58,550 --> 02:19:00,140
Daripada hanya mengucapkan\nHalo, dunia, izinkan saya

2442
02:19:00,140 --> 02:19:02,015
ubah seperti minggu lalu\nuntuk mengucapkan Halo, David

2443
02:19:02,015 --> 02:19:04,320
atau siapa pun yang berinteraksi\ndengan program.

2444
02:19:04,320 --> 02:19:07,851
Jadi saya akan melakukan string\njawaban dapatkan, dapatkan string

2445
02:19:07,851 --> 02:19:11,256
kutipan tanda kutip, siapa namamu.

2446
02:19:11,255 --> 02:19:13,130
Saya tidak akan repot\ndengan baris baru di sini.

2447
02:19:13,730 --> 02:19:15,181
Ini sekarang hanyalah keputusan penghakiman.

2448
02:19:15,181 --> 02:19:17,889
Saya sengaja ingin manusia itu\n

2449
02:19:20,790 --> 02:19:22,970
Nah minggu lalu ingat kita biasa berkata.

2450
02:19:22,970 --> 02:19:25,251
Dan kemudian kita menggunakan\blok lain yang disebut join.

2451
02:19:25,251 --> 02:19:27,681
Jadi idenya di sini sama.

2452
02:19:27,681 --> 02:19:30,181
Namun sintaksisnya minggu ini\nakan sedikit berbeda.

2453
02:19:30,181 --> 02:19:33,871
Ini akan menjadi printf, yang\nmencetak sesuatu di layar.

2454
02:19:33,870 --> 02:19:38,090
Saya akan melanjutkan\ndan mengucapkan Halo koma.

2455
02:19:38,091 --> 02:19:43,070
Dan izinkan saya memulainya dulu\n

2456
02:19:43,070 --> 02:19:46,700
Biarkan saya melanjutkan dan mengkompilasi ulang kode saya.

2457
02:19:46,700 --> 02:19:50,292
Ups, sialnya masih tidak berfungsi.

2458
02:19:50,292 --> 02:19:51,501
Dan lihat semua kesalahan ini.

2459
02:19:51,501 --> 02:19:54,441
Ada lebih banyak kesalahan daripada kode yang saya tulis.

2460
02:19:56,431 --> 02:19:58,881
Ini sebenarnya\nsesuatu, sebuah kesalahan yang akan Anda lihat

2461
02:19:58,880 --> 02:20:01,130
agak sering, setidaknya pada awalnya.

2462
02:20:01,130 --> 02:20:03,270
Dan mari kita mulai mencari tahu\napa yang terjadi di sini.

2463
02:20:03,271 --> 02:20:06,921
Jadi di sini, jika saya melihat yang pertama\n

2464
02:20:06,921 --> 02:20:09,921
jadi meskipun melompat\nlayar ke bawah cukup cepat

2465
02:20:09,921 --> 02:20:12,831
Saya menulis Make Hello di\ntanda dolar, cepat.

2466
02:20:12,831 --> 02:20:14,361
Dan inilah kesalahan pertama.

2467
02:20:17,120 --> 02:20:21,020
secara teknis karakter 5, tetapi secara umum\n

2468
02:20:21,021 --> 02:20:24,951
terjadi kesalahan, penggunaan string pengenal yang tidak dideklarasikan.

2469
02:20:28,101 --> 02:20:30,361
Dan ini bukanlah solusi\yang jelas pada awalnya.

2470
02:20:30,361 --> 02:20:34,161
Namun Anda akan mulai mengenali\npola ini dalam pesan kesalahan.

2471
02:20:34,161 --> 02:20:39,740
Ternyata kalau saya mau pakai\n

2472
02:20:39,740 --> 02:20:43,879
Saya harus menyertakan perpustakaan lain\nup di sini, baris kode lain

2473
02:20:43,879 --> 02:20:46,460
sebaliknya, disebut CS50\ndot H. Kami akan kembali

2474
02:20:46,460 --> 02:20:48,300
apa artinya ini sebentar lagi.

2475
02:20:48,300 --> 02:20:54,560
Tapi kalau sekarang saya katakan secara surut,\n

2476
02:20:55,670 --> 02:20:59,720
Sebelum saya menambahkan baris baru itu,\napa yang dilakukan I/O standar?

2477
02:20:59,720 --> 02:21:01,670
Nah, jika Anda berpikir\nkembali ke Scratch, itu dia

2478
02:21:01,670 --> 02:21:07,761
adalah beberapa contoh dengan kamera dan\n

2479
02:21:07,761 --> 02:21:10,281
Ingat saya harus melihat-lihat\nin tombol ekstensi.

2480
02:21:10,281 --> 02:21:12,110
Dan kemudian saya harus memuatnya ke Scratch.

2481
02:21:12,110 --> 02:21:14,240
Itu tidak datang secara asli dengan Scratch.

2482
02:21:15,920 --> 02:21:18,170
Beberapa fungsi disertakan dengan bahasa tersebut.

2483
02:21:18,170 --> 02:21:22,161
Namun pada umumnya, jika Anda ingin\n

2484
02:21:22,161 --> 02:21:26,570
seperti printf, Anda harus memuat\nekstensi itu

2485
02:21:26,570 --> 02:21:29,361
yang secara tradisional\nis disebut perpustakaan.

2486
02:21:29,361 --> 02:21:35,121
Jadi ada perpustakaan\nI/O standar, I/O STD, I/O standar

2487
02:21:35,120 --> 02:21:37,350
dimana I/O berarti input dan output.

2488
02:21:37,351 --> 02:21:39,441
Artinya, seperti\nin Dunia MIT, di sana

2489
02:21:39,441 --> 02:21:43,161
adalah ekstensi untuk melakukan teks\n

2490
02:21:43,161 --> 02:21:45,470
Di C, ada ekstensi, alias.

2491
02:21:45,470 --> 02:21:49,230
perpustakaan, untuk melakukan\ninput dan output standar.

2492
02:21:49,230 --> 02:21:53,450
Demikian pula jika Anda ingin menggunakan fungsi apa pun\n

2493
02:21:53,450 --> 02:21:58,130
seperti teks dari keyboard, Anda\nharus menyertakan titik I/O standar

2494
02:21:58,130 --> 02:22:02,360
H. Lalu bisakah Anda menggunakan printf.

2495
02:22:03,890 --> 02:22:08,690
Ternyata, mendapatkan string adalah\n

2496
02:22:08,691 --> 02:22:10,971
Dan seperti yang akan kita lihat dalam\nbeberapa minggu mendatang, hal itu memang terjadi

2497
02:22:10,970 --> 02:22:14,780
membuatnya lebih mudah\nmendapatkan masukan dari pengguna.

2498
02:22:14,781 --> 02:22:18,111
C sangat baik dengan printf saat\nmencetak keluaran di layar.

2499
02:22:18,111 --> 02:22:21,411
C membuatnya sangat mengganggu dan\n

2500
02:22:21,411 --> 02:22:23,191
untuk sekedar mendapatkan masukan dari pengguna.

2501
02:22:23,191 --> 02:22:25,820
Jadi kami menulis sebuah fungsi\ndisebut get_string

2502
02:22:25,820 --> 02:22:29,240
namun satu-satunya cara yang dapat Anda gunakan\nadalah dengan memuat ekstensi

2503
02:22:29,240 --> 02:22:32,271
alias memuat perpustakaan bernama CS50.

2504
02:22:32,271 --> 02:22:35,841
Dan kami akan kembali pada waktunya, misalnya,\n

2505
02:22:35,841 --> 02:22:39,291
Namun untuk saat ini, standard\nI/O adalah perpustakaan yang

2506
02:22:39,290 --> 02:22:42,540
memberi Anda akses ke hal-hal yang berhubungan dengan printf dan\ninput dan output.

2507
02:22:42,540 --> 02:22:45,110
CS50 adalah perpustakaan kedua\nyang menyediakan Anda

2508
02:22:45,111 --> 02:22:48,441
dengan akses ke fungsi\nyang tidak disertakan dengan C

2509
02:22:48,441 --> 02:22:51,501
itu termasuk sesuatu seperti get_string.

2510
02:22:51,501 --> 02:22:55,191
Jadi, kami\nsekarang agak saling menggoda

2511
02:22:55,191 --> 02:22:58,171
pada tingkat tinggi apa yang dilakukan baris\n2 dan sekarang 1.

2512
02:22:58,171 --> 02:23:00,380
Biarkan saya lanjutkan dan jalankan kembali sapaan.

2513
02:23:01,611 --> 02:23:05,099
Jadi semua pesan kesalahan gila itu\ndiselesaikan hanya dengan satu perbaikan

2514
02:23:05,099 --> 02:23:07,640
jadi kunci utamanya adalah jangan sampai\terkejut dengan banyaknya jumlah tersebut

2515
02:23:08,581 --> 02:23:13,521
Sekarang izinkan saya melakukan ./hello dan jika saya mengetik\n

2516
02:23:19,470 --> 02:23:24,091
Ya, halo jawab, karena\n

2517
02:23:24,091 --> 02:23:26,671
Dan ternyata jika\nAnda hanya menulis "halo

2518
02:23:26,671 --> 02:23:29,611
jawab" semuanya dalam tanda kutip ganda,\nAnda benar-benar hanya sekedar lewat saja

2519
02:23:29,611 --> 02:23:32,551
Bahasa Inggris sebagai input\nke fungsi printf

2520
02:23:32,550 --> 02:23:34,470
Anda sebenarnya tidak\nmemasukkan variabel.

2521
02:23:34,470 --> 02:23:37,320
Dan sayangnya di\nC, hasilnya tidak sama

2522
02:23:37,320 --> 02:23:40,861
mudah untuk menyambungkan sesuatu ke\hal lain yang Anda ketik.

2523
02:23:40,861 --> 02:23:43,111
Ingat di Scratch,\ntidak hanya ada blok Simpan

2524
02:23:43,111 --> 02:23:45,661
tapi blok Gabung,\nyang cukup bagus

2525
02:23:45,661 --> 02:23:47,460
Anda bisa menggabungkan apel dan jeruk--

2526
02:23:48,900 --> 02:23:52,640
Lalu kami mengubahnya menjadi hello dan kemudian\n

2527
02:23:52,640 --> 02:23:54,765
Di C, sintaksisnya akan\nmenjadi sedikit berbeda.

2528
02:23:54,765 --> 02:23:59,850
Anda memberi tahu komputer di dalam\n

2529
02:23:59,851 --> 02:24:05,191
pengganti di sana, yang disebut\n

2530
02:24:05,191 --> 02:24:08,041
letakkan string di sini pada akhirnya.

2531
02:24:08,040 --> 02:24:12,661
Lalu di luar tanda kutip Anda, Anda\n

2532
02:24:12,661 --> 02:24:18,421
dalam variabel apa pun yang Anda inginkan\n

2533
02:24:19,230 --> 02:24:23,671
Jadi %s adalah kode format yang\nberfungsi sebagai pengganti.

2534
02:24:23,671 --> 02:24:26,431
Dan sekarang fungsi printf\ndirancang oleh manusia selama bertahun-tahun

2535
02:24:26,431 --> 02:24:28,650
lalu untuk mencari tahu cara\ndo apel dan pisang

2536
02:24:28,650 --> 02:24:30,972
hal menggabungkan dua kata menjadi satu.

2537
02:24:30,972 --> 02:24:33,181
Ini hampir tidak mudah digunakan\seperti di Scratch

2538
02:24:33,181 --> 02:24:35,701
tapi ini adalah paradigma yang sangat umum.

2539
02:24:35,700 --> 02:24:38,880
Jadi izinkan saya mencoba dan menjalankannya kembali\nini sekarang. menyapa.

2540
02:24:42,630 --> 02:24:45,780
Jika saya mengetik Enter sekarang, sekarang halo.

2541
02:24:46,351 --> 02:24:48,810
Dan printfnya, inilah F di printf.

2542
02:24:48,810 --> 02:24:53,581
Ini memformat masukannya untuk Anda dengan menggunakan\n

2543
02:24:53,581 --> 02:24:58,201
string, diwakili lagi oleh %s.

2544
02:24:58,200 --> 02:25:02,650
Jadi pertanyaan singkatnya, jika saya fokus\n

2545
02:25:02,650 --> 02:25:09,480
dan bahkan memperbesar di sini, berapa\n

2546
02:25:09,480 --> 02:25:13,501
Beberapa saat yang lalu, saya akui itu memang\n

2547
02:25:14,790 --> 02:25:19,980
Berapa banyak masukan yang mungkin Anda\nduga diambil oleh printf saat ini?

2548
02:25:20,521 --> 02:25:25,201
Dan itu tersirat dalam koma di sini,\n

2549
02:25:25,200 --> 02:25:29,310
kutip, tanda kutip, "halo, %s"\ndari yang kedua, jawab.

2550
02:25:29,310 --> 02:25:32,730
Dan sebagai pengamanan cepat\nperiksa di sini, mengapa bukan 3?

2551
02:25:32,730 --> 02:25:35,320
Karena jelas ada\ndua koma di sini.

2552
02:25:35,320 --> 02:25:38,280
Mengapa sebenarnya bukan\n3 argumen atau masukan?

2553
02:25:43,001 --> 02:25:46,210
Koma di sebelah kiri sebenarnya\nbagian dari tata bahasa Inggris saya

2554
02:25:47,693 --> 02:25:50,110
Dan, sekali lagi, di sinilah\npemrograman bisa membingungkan

2555
02:25:50,111 --> 02:25:52,901
sejak awal karena kami menggunakan\n

2556
02:25:52,900 --> 02:25:55,730
hal yang berbeda, itu hanya\ntergantung pada konteksnya.

2557
02:25:55,730 --> 02:25:57,970
Jadi sekarang adalah\ waktu yang tepat untuk menunjukkannya

2558
02:25:57,970 --> 02:26:01,751
semua warna yang cantik itu\n

2559
02:26:02,290 --> 02:26:06,040
meskipun saya tidak akan memformat\n

2560
02:26:06,040 --> 02:26:08,990
Saya tentu saja tidak mengubah\nsesuatu menjadi merah atau biru atau yang lainnya--

2561
02:26:08,990 --> 02:26:13,900
itu karena editor teks seperti\n

2562
02:26:13,900 --> 02:26:17,050
Ini adalah fitur yang berbeda\n

2563
02:26:18,640 --> 02:26:23,020
Jika editor teks Anda memahami\n

2564
02:26:24,320 --> 02:26:28,700
itu menyorot dalam berbagai warna\n

2565
02:26:28,700 --> 02:26:31,870
Jadi, misalnya, string dan\njawaban di sini berwarna hitam

2566
02:26:31,870 --> 02:26:35,827
tetapi fungsi get_string ada dalam\nwarna coklat-kuning yang buruk

2567
02:26:35,827 --> 02:26:38,411
di sini sekarang, tapi itu hanya\nyang ditampilkan di layar.

2568
02:26:38,411 --> 02:26:41,111
Namun, talinya yang berwarna merah\nisseperti melompat ke arahku

2569
02:26:41,111 --> 02:26:42,791
dan itu sedikit berguna.

2570
02:26:44,113 --> 02:26:46,280
Itu bagus sekali, karena\itu mengejutkan saya.

2571
02:26:46,281 --> 02:26:49,601
Jadi itu hanya menggunakan warna yang berbeda\n

2572
02:26:49,601 --> 02:26:53,021
pop sehingga Anda dapat fokus pada\nbagaimana ide-ide ini saling terkait

2573
02:26:53,021 --> 02:26:55,121
dan sejujurnya, kapan Anda\nmungkin melakukan kesalahan.

2574
02:26:55,120 --> 02:26:58,030
Misalnya saja, izinkan saya secara tidak sengaja\nmenghilangkan kutipan ini di sini.

2575
02:26:58,031 --> 02:27:03,011
Dan sekarang tiba-tiba,\nperhatikan jika saya menghapus kutipan tersebut

2576
02:27:03,011 --> 02:27:05,711
warnanya mulai menjadi sedikit serba salah.

2577
02:27:05,710 --> 02:27:09,640
Namun jika saya kembali ke sana dan menaruhnya\n

2578
02:27:09,640 --> 02:27:11,470
Apa fitur lain\no dari editor teks ini?

2579
02:27:11,470 --> 02:27:15,251
Perhatikan ketika kursor saya berada di sebelah\ntanda kurung ini, yang mana

2580
02:27:15,251 --> 02:27:18,111
membatasi akhir\ninput ke fungsi

2581
02:27:18,111 --> 02:27:21,611
perhatikan yang disorot dengan warna hijau\n

2582
02:27:22,150 --> 02:27:24,237
Itu hanyalah sesuatu yang berguna secara visual\n, terutama saat

2583
02:27:24,237 --> 02:27:26,320
Anda mulai menulis lebih banyak\nkode lagi, hanya untuk membuatnya

2584
02:27:26,320 --> 02:27:28,240
yakin tanda kurung Anda sejajar.

2585
02:27:28,240 --> 02:27:31,390
Dan hal tersebut berlaku untuk kurung kurawal ini\n

2586
02:27:31,390 --> 02:27:33,011
Kami akan kembali membahasnya sebentar lagi.

2587
02:27:33,011 --> 02:27:36,820
Jika saya menaruh kursor di sana, Anda bisa\n

2588
02:27:37,700 --> 02:27:40,600
Jadi pada dasarnya kode Anda tidak ada apa-apanya, hanya editornya saja

2589
02:27:40,601 --> 02:27:42,911
mencoba membantu Anda, manusia, program.

2590
02:27:42,911 --> 02:27:45,251
Dan Anda bahkan dapat melihatnya,\nmeskipun agak halus--

2591
02:27:45,251 --> 02:27:48,130
lihat empat titik di sini\ndan empat titik di sini?

2592
02:27:49,691 --> 02:27:53,531
Saya mengonfigurasi VS Code menjadi\ndent sebanyak empat spasi, yang mana

2593
02:27:54,761 --> 02:27:58,091
Setiap kali saya menekan tombol Tab, ini\ntjuga dapat membantu Anda memastikan--

2594
02:27:58,091 --> 02:28:00,941
setelah kami memiliki program yang lebih menarik\dan lebih panjang--

2595
02:28:00,941 --> 02:28:04,121
agar semuanya tertata\ndengan baik dan rapi.

2596
02:28:05,380 --> 02:28:07,390
Baiklah, ada pertanyaan\nlalu tentang printf atau lebih?

2597
02:28:08,653 --> 02:28:11,122
HADIRIN: [? Akankah ?]\nprintf [Tak terdengar]??

2598
02:28:11,122 --> 02:28:12,831
DAVID J. MALAN: Jawaban singkat\nya. printf

2599
02:28:12,831 --> 02:28:16,130
dapat menangani lebih dari satu\njenis variabel atau nilai.

2600
02:28:17,240 --> 02:28:20,671
Kita akan melihat %i adalah cara lain\nuntuk memasukkan bilangan bulat.

2601
02:28:20,671 --> 02:28:24,261
Anda dapat memiliki beberapa i, beberapa\n

2602
02:28:24,261 --> 02:28:26,150
Kita akan membahasnya\nin sebentar.

2603
02:28:26,150 --> 02:28:29,841
printf dapat mengambil lebih banyak\argumen daripada hanya dua argumen tersebut.

2604
02:28:29,841 --> 02:28:32,150
Ini hanya dimaksudkan untuk mewakili.

2605
02:28:34,191 --> 02:28:36,201
Bisakah Anda mendeklarasikan variabel\ndi dalam printf?

2606
02:28:37,611 --> 02:28:39,651
Satu-satunya variabel yang saya\gunakan saat ini adalah jawaban

2607
02:28:39,650 --> 02:28:43,251
dan itu harus dilakukan di luar\n

2608
02:28:43,251 --> 02:28:46,310
Pertanyaan bagus, kita akan melihat\nlebih banyak lagi dalam waktu dekat.

2609
02:28:49,744 --> 02:28:51,911
DAVID J. MALAN: Bagaimana cara\nmengunduh perpustakaan CS50?

2610
02:28:51,911 --> 02:28:55,091
Jadi kami akan menunjukkan kepada Anda di soal\nset 1 bagaimana cara melakukannya.

2611
02:28:55,091 --> 02:28:58,421
Hal ini otomatis dilakukan untuk Anda di\n

2612
02:28:58,421 --> 02:29:01,810
Jika, pada akhirnya, Anda memprogram sendiri\n

2613
02:29:01,810 --> 02:29:03,700
aktif, itu juga dapat diinstal secara online.

2614
02:29:03,700 --> 02:29:07,073
Namun jika ingin menanyakannya\nmelalui online atau sesudahnya

2615
02:29:07,074 --> 02:29:08,740
kami dapat mengarahkan Anda ke arah yang benar.

2616
02:29:13,341 --> 02:29:16,970
DAVID J. MALAN: String adalah tipe\n

2617
02:29:16,970 --> 02:29:19,100
tipe data variabelnya.

2618
02:29:19,101 --> 02:29:22,281
int adalah kata kunci lain yang saya singgung\n

2619
02:29:22,281 --> 02:29:26,191
int, untuk bilangan bulat, akan menjadi\n

2620
02:29:26,191 --> 02:29:27,441
HADIRIN: Oke. [? Terima kasih. ?]

2621
02:29:29,691 --> 02:29:31,108
DAVID J. MALAN: Oh, pertanyaan bagus.

2622
02:29:31,108 --> 02:29:34,970
Bisakah saya melanjutkan dan\nmenyambungkan fungsi ini

2623
02:29:34,970 --> 02:29:39,261
seperti yang kita lakukan di Scratch,\n

2624
02:29:39,261 --> 02:29:42,470
dan lakukan saja ini, yang\ningat, mengingatkan pada apa

2625
02:29:42,470 --> 02:29:45,921
Saya melakukannya di Scratch dengan meletakkan\nblok di atas blok demi blok?

2626
02:29:48,271 --> 02:29:50,230
Bisakah saya meletakkan string di depan get_string?

2627
02:29:50,730 --> 02:29:53,700
Anda hanya meletakkan kata string\nin di depan variabel

2628
02:29:55,200 --> 02:29:57,870
And even though I'm apparently\nanswering the wrong question

2629
02:29:57,870 --> 02:30:01,710
izinkan saya memperkecil tampilannya,\nsimpan ini, buat salam lagi.

2630
02:30:03,450 --> 02:30:06,180
Jika saya menjalankan ./hello, ketik David, voila.

2631
02:30:07,450 --> 02:30:10,390
Jadi sebenarnya, mari kita turun\n

2632
02:30:10,390 --> 02:30:12,210
Jelas, itu masih benar--

2633
02:30:12,210 --> 02:30:14,610
setidaknya, berdasarkan pengujian terbatas saya.

2634
02:30:14,611 --> 02:30:18,001
Apakah ini dirancang lebih baik\atau dirancang lebih buruk?

2635
02:30:18,001 --> 02:30:20,130
Mari kita buka pertanyaan itu\nseperti yang kita lakukan minggu lalu.

2636
02:30:21,480 --> 02:30:23,820
Ya, saya agak setuju dengan itu.

2637
02:30:23,820 --> 02:30:26,011
Orang yang berakal sehat bisa saja\tidak setuju, tapi saya setuju

2638
02:30:26,011 --> 02:30:29,970
setuju bahwa ini tampaknya lebih sulit untuk\n

2639
02:30:29,970 --> 02:30:32,438
tapi tunggu sebentar. get_string\nis akan terbiasa terlebih dahulu

2640
02:30:32,438 --> 02:30:34,271
dan kemudian itu akan\ngmemberikan saya nilai kembali.

2641
02:30:34,271 --> 02:30:37,501
Jadi, ya, rasanya\nlebih enak membaca dari atas ke bawah

2642
02:30:40,615 --> 02:30:44,611
Jadi ini berguna jika saya hanya ingin\n

2643
02:30:44,611 --> 02:30:47,774
Jika saya ingin menggunakannya nanti dalam\nprogram yang lebih lama, saya kurang beruntung

2644
02:30:47,773 --> 02:30:49,440
jadi saya belum menyimpannya dalam variabel.

2645
02:30:49,441 --> 02:30:53,041
Jadi menurut saya, singkatnya, kita\nbisa berdebat tentang hal ini sepanjang hari.

2646
02:30:53,040 --> 02:30:56,150
Namun dalam kasus ini, eh, jika Anda bisa\nmembuat argumen yang masuk akal

2647
02:30:56,150 --> 02:30:59,240
entah bagaimana, itu adalah\ndasar yang cukup kokoh untuk dijadikan pijakan.

2648
02:30:59,240 --> 02:31:01,101
Namun, selalu saja\norang-orang yang berakal sehat akan pergi

2649
02:31:01,101 --> 02:31:05,641
untuk tidak setuju, baik untuk pertama kalinya\n

2650
02:31:05,640 --> 02:31:09,740
Jadi mari kita rangkai contoh terakhir ini\n

2651
02:31:09,740 --> 02:31:11,380
dalam mengambil input dan output.

2652
02:31:11,380 --> 02:31:13,130
Semua fungsi yang telah kita bicarakan

2653
02:31:13,130 --> 02:31:17,720
mengambil masukan, atau sekarang dikenal sebagai\n

2654
02:31:18,531 --> 02:31:21,740
Itu hanya kata mewah\nuntuk masukan ke suatu fungsi.

2655
02:31:21,740 --> 02:31:25,046
Dan beberapa fungsi memiliki\nefek samping, seperti yang kita lihat--

2656
02:31:25,046 --> 02:31:27,171
mencetak sesuatu, mengatakan\nsesuatu di layar

2657
02:31:27,171 --> 02:31:28,911
semacam secara visual atau terdengar--

2658
02:31:28,911 --> 02:31:33,921
atau mereka mengembalikan nilai, yaitu a\n

2659
02:31:35,251 --> 02:31:39,261
Jika kita melihat apa yang kita lakukan terakhir\n

2660
02:31:39,261 --> 02:31:41,810
masukannya siapa\nnama anda, fungsinya tanya

2661
02:31:41,810 --> 02:31:44,780
dan nilai kembaliannya adalah jawaban.

2662
02:31:44,781 --> 02:31:49,521
Dan sekarang mari kita lihat blok ini,\n

2663
02:31:49,521 --> 02:31:51,266
versi dari apa yang baru saja kita lakukan dengan %s.

2664
02:31:51,266 --> 02:31:54,921
Minggu lalu kami bilang simpan, lalu\ngabung, lalu halo dan jawab.

2665
02:31:54,921 --> 02:31:58,581
Namun hal yang menarik di sana\n

2666
02:31:58,581 --> 02:32:03,021
Fakta bahwa di Scratch\n2, output dari satu fungsi

2667
02:32:03,021 --> 02:32:08,150
seperti gabungan hijau, bisa menjadi\nmasukan ke fungsi lain

2668
02:32:09,501 --> 02:32:12,470
Sintaks dalam C memang sangat berbeda

2669
02:32:12,470 --> 02:32:14,480
tapi idenya pada dasarnya sama.

2670
02:32:14,480 --> 02:32:18,380
Namun di sini, kami memiliki\nhalo, penggantinya

2671
02:32:18,380 --> 02:32:21,890
tapi kita harus, di\ndunia C ini, memberitahu printf

2672
02:32:21,890 --> 02:32:25,110
apa yang ingin kita masukkan\nuntuk placeholder itu.

2673
02:32:25,980 --> 02:32:27,147
Tapi itulah cara untuk melakukannya.

2674
02:32:27,147 --> 02:32:29,690
Ketika kita membahas Python dan\nbahasa lain di kemudian hari

2675
02:32:29,691 --> 02:32:31,521
sebenarnya ada cara yang lebih mudah untuk melakukan ini.

2676
02:32:31,521 --> 02:32:34,311
Namun ini adalah paradigma\nyang sangat umum, khususnya ketika

2677
02:32:34,310 --> 02:32:37,490
Anda ingin memformat\ndata Anda dengan cara tertentu.

2678
02:32:37,490 --> 02:32:40,050
Baiklah, mari kita\nkembali ke awal

2679
02:32:40,050 --> 02:32:43,700
yang disertakan dengan seluruh\nprogram tersebut, yang menyertakannya

2680
02:32:43,700 --> 02:32:47,630
dan memiliki int main(void) dan\nsemua sintaks samar lainnya.

2681
02:32:47,630 --> 02:32:51,350
Karya Goresan minggu lalu\nseperti yang bisa dilakukan

2682
02:32:51,351 --> 02:32:53,869
kapan pun Anda ingin memiliki\nbagian utama dari program Anda.

2683
02:32:53,869 --> 02:32:55,911
Ini bukan satu-satunya cara untuk\nmemulai program Scratch.

2684
02:32:55,911 --> 02:32:59,181
Anda dapat mendengarkan klik atau lainnya\n

2685
02:32:59,181 --> 02:33:03,831
Tapi ini mungkin yang paling populer\n

2686
02:33:03,831 --> 02:33:07,478
Di C, analog terdekatnya adalah\nmenuliskannya secara harfiah.

2687
02:33:07,478 --> 02:33:10,520
Jadi sama seperti minggu lalu, jika Anda\n

2688
02:33:10,521 --> 02:33:13,101
ketika bendera hijau diklik,\nas seorang programmer C

2689
02:33:13,101 --> 02:33:15,771
hal pertama yang akan Anda lakukan adalah\nsetelah membuat file kosong

2690
02:33:15,771 --> 02:33:18,621
seperti yang saya lakukan dengan hello.c,\nAnda mungkin mengetik int

2691
02:33:18,620 --> 02:33:22,040
main(void) kurung kurawal terbuka\n, kurung kurawal tertutup

2692
02:33:22,040 --> 02:33:26,100
dan kemudian Anda dapat memasukkan semua\n Anda

2693
02:33:26,101 --> 02:33:29,211
Jadi sama seperti Scratch yang memiliki\nsifat magnetis seperti ini

2694
02:33:29,210 --> 02:33:33,530
ke tempat potongan puzzle akan patah\n

2695
02:33:33,531 --> 02:33:38,240
cenderung menggunakan kurung kurawal ini, satu\n

2696
02:33:38,240 --> 02:33:41,480
Dan apa pun yang ada di dalam\nkawat gigi itu, boleh dikatakan begitu

2697
02:33:41,480 --> 02:33:44,570
adalah bagian dari potongan puzzle ini, alias.

2698
02:33:47,450 --> 02:33:50,840
Kita pergi ke lubang kelinci ini beberapa saat yang lalu\n

2699
02:33:50,841 --> 02:33:52,674
meskipun aku tidak\nmemanggil mereka dengan nama ini.

2700
02:33:52,674 --> 02:33:56,856
Namun, tentu saja, ketika kita mempunyai keseluruhan\n

2701
02:33:56,855 --> 02:33:59,480
Cukup klik satu bendera hijau\nlalu ucapkan halo, dunia.

2702
02:34:00,681 --> 02:34:03,351
Bagaimanapun juga, ini dimaksudkan agar sangat\ramah pengguna dan grafis.

2703
02:34:03,351 --> 02:34:09,531
Namun, di C, secara teknis Anda tidak bisa\n begitu saja

2704
02:34:10,700 --> 02:34:16,340
Karena, sekali lagi, Anda perlu memberi tahu\n

2705
02:34:16,341 --> 02:34:22,041
kode yang ditulis orang lain-- sehingga\n

2706
02:34:22,040 --> 02:34:24,980
Anda harus memuat pustaka\nCS50 kapan saja

2707
02:34:24,980 --> 02:34:28,280
Anda ingin menggunakan get_string atau\fungsi lainnya, seperti get_int

2708
02:34:29,630 --> 02:34:32,690
Jika tidak, kompiler tidak akan\mengetahui apa itu get_string.

2709
02:34:32,691 --> 02:34:35,011
Anda hanya perlu melakukannya dengan cara ini.

2710
02:34:35,011 --> 02:34:37,341
Nama file spesifik\nSaya sebutkan di sini

2711
02:34:37,341 --> 02:34:44,310
stdio.h, cs50.h, itulah yang dimaksud dengan programmer C\n

2712
02:34:44,310 --> 02:34:46,831
Pada akhirnya kita akan melihat apa\nyang ada di dalam file tersebut.

2713
02:34:46,831 --> 02:34:51,060
Tapi singkat cerita, ini seperti menu\n

2714
02:34:51,060 --> 02:34:54,560
Jadi di cs50.h, ada menu\nmenyebutkan get_string, get_int

2715
02:34:56,150 --> 02:35:01,790
Dan di stdio.h, ada menu\n

2716
02:35:01,790 --> 02:35:04,640
Dan menu itulah yang\nmempersiapkan compiler

2717
02:35:04,640 --> 02:35:08,945
untuk mengetahui cara mengimplementasikan\nfungsi-fungsi yang sama.

2718
02:35:08,945 --> 02:35:10,310
Baiklah, izinkan saya berhenti sejenak di sini.

2719
02:35:16,960 --> 02:35:20,560
Perpustakaan menyediakan semua\nfungsi yang sedang kita bicarakan.

2720
02:35:20,560 --> 02:35:25,720
File header adalah file yang sangat spesifik\n

2721
02:35:25,720 --> 02:35:27,770
Dan kita akan membahasnya lebih lanjut minggu depan.

2722
02:35:27,771 --> 02:35:30,161
Untuk saat ini, pada dasarnya\nsama, namun kita akan membahasnya

2723
02:35:30,161 --> 02:35:32,800
nuansa antara keduanya minggu depan.

2724
02:35:32,800 --> 02:35:36,460
Ya, perpustakaannya akan menjadi standar\nI/O. Perpustakaan akan CS50.

2725
02:35:36,460 --> 02:35:41,720
File\nheader yang sesuai adalah stdio.h, cs50.h.

2726
02:35:50,480 --> 02:35:54,230
sangat umum di dunia\n

2727
02:35:54,230 --> 02:35:59,300
tapi di C, secara teknis tidak ada\n

2728
02:35:59,300 --> 02:36:02,216
Kami telah menyulapnya\nuntuk menyederhanakan beberapa minggu pertama.

2729
02:36:02,216 --> 02:36:05,091
Itu adalah roda pelatihan yang akan kami\n

2730
02:36:05,091 --> 02:36:09,411
ambil, dan kita akan lihat alasannya\n

2731
02:36:09,411 --> 02:36:14,161
Karena C sebaliknya membuat sesuatu\n

2732
02:36:14,161 --> 02:36:16,191
yang kemudian memberikan\npenting bagi kami.

2733
02:36:20,570 --> 02:36:23,480
Sejak awal, Anda harus menggunakan apa pun\n

2734
02:36:23,480 --> 02:36:24,950
Itu akan mencakup fungsi CS50.

2735
02:36:24,950 --> 02:36:28,190
Singkat cerita, Anda merujuk, saya\n

2736
02:36:28,191 --> 02:36:30,981
disebut scanf, kami tidak akan\nmembicarakannya selama beberapa minggu.

2737
02:36:30,980 --> 02:36:36,710
Singkat cerita, di C, ini cukup mudah\n

2738
02:36:36,710 --> 02:36:40,310
Masalahnya adalah sangat\mudah melakukannya secara berbahaya.

2739
02:36:40,310 --> 02:36:45,110
Dan C, karena ini adalah bahasa yang lebih tua\ntingkat lebih rendah

2740
02:36:45,111 --> 02:36:49,431
itu memberi Anda cukup banyak kehebatan\n

2741
02:36:49,431 --> 02:36:51,621
Sangat mudah untuk membuat kesalahan.

2742
02:36:51,620 --> 02:36:55,100
Dan tentu saja, itulah\nalasan kami menggunakan perpustakaan

2743
02:36:55,101 --> 02:36:58,541
sehingga kode Anda tidak akan crash secara tidak sengaja.

2744
02:36:58,540 --> 02:37:01,620
Baiklah, jadi dengan mengingat hal ini\nkita punya pemetaannya sekarang

2745
02:37:01,620 --> 02:37:03,370
antara versi\nScratch dan versi lainnya.

2746
02:37:03,370 --> 02:37:06,537
Izinkan saya memberi Anda tur singkat tentang\n

2747
02:37:06,538 --> 02:37:10,240
jenis yang akan mulai dilihat oleh siswa\n

2748
02:37:10,240 --> 02:37:13,511
Di dunia Linux, berikut\nilah daftarnya yang tidak lengkap

2749
02:37:13,511 --> 02:37:16,810
perintah yang akan Anda dapatkan\n

2750
02:37:16,810 --> 02:37:18,040
dengan bermain dengan kumpulan masalah.

2751
02:37:18,040 --> 02:37:22,783
Kami hanya melihat dua di antaranya sejauh ini\n, ls untuk daftar, rm untuk yang lain.

2752
02:37:22,783 --> 02:37:24,700
Namun saya menyebutkannya sekarang\nhanya agar tidak disebutkan

2753
02:37:24,700 --> 02:37:30,340
merasa terlalu asing saat melihatnya\n

2754
02:37:30,341 --> 02:37:32,411
cp akan mewakili salinan.

2755
02:37:32,411 --> 02:37:35,710
mkdir akan berdiri\nuntuk membuat direktori. mv adalah

2756
02:37:35,710 --> 02:37:38,470
akan berdiri untuk pindah atau mengganti nama.

2757
02:37:38,470 --> 02:37:44,470
rmdir akan menghapus direktori,\n

2758
02:37:44,470 --> 02:37:46,960
dan izinkan saya menunjukkan\nyang terakhir ini dulu di sini

2759
02:37:46,960 --> 02:37:49,510
hanya karena itu adalah sesuatu\nyang biasa Anda gunakan.

2760
02:37:49,511 --> 02:37:53,681
Jika saya kembali ke kode saya di sini pada\n

2761
02:37:53,681 --> 02:37:58,091
dan buka kembali GUI kecil di\n

2762
02:37:58,091 --> 02:38:01,451
mengungkapkan bahwa saya punya dua\nfile, hello dan hello.c

2763
02:38:01,450 --> 02:38:02,950
jadi tidak ada yang berubah sejak itu.

2764
02:38:02,950 --> 02:38:05,800
Misalkan sekarang kelas sudah\nabeberapa minggu memasuki kelas

2765
02:38:05,800 --> 02:38:07,661
dan saya ingin mulai\nmengatur kode saya

2766
02:38:07,661 --> 02:38:10,511
menulis sehingga saya memiliki folder\nuntuk minggu ini atau minggu depan

2767
02:38:10,511 --> 02:38:13,421
atau mungkin folder untuk\nkumpulan masalah 1, kumpulan masalah 2.

2768
02:38:15,130 --> 02:38:18,190
Di GUI, saya bisa naik\ndi sini dan melakukan apa yang sebagian besar dari Anda lakukan

2769
02:38:18,191 --> 02:38:19,961
akan dilakukan secara naluriah di Mac atau PC.

2770
02:38:19,960 --> 02:38:22,450
Kamu cari seperti\nikon folder, kamu klik

2771
02:38:22,450 --> 02:38:25,960
lalu beri nama\nfolder seperti PSet1, Enter.

2772
02:38:25,960 --> 02:38:28,690
Voila, Anda punya folder bernama PSet1.

2773
02:38:28,691 --> 02:38:34,701
Saya dapat mengonfirmasinya dengan perintah saya\n

2774
02:38:34,700 --> 02:38:36,890
Bagaimana cara membuat daftar apa yang ada di folder saya?

2775
02:38:39,504 --> 02:38:41,421
dan warnanya hijau dengan\nasterisk karena itu

2776
02:38:41,421 --> 02:38:43,581
program saya yang dapat dieksekusi, program saya yang dapat dijalankan--

2777
02:38:43,581 --> 02:38:46,701
hello.c, yang merupakan kode\nsumber saya, dan sekarang PSet1 dengan garis miring

2778
02:38:46,700 --> 02:38:50,030
di bagian akhir, yang hanya menyiratkan\nbahwa itu memang sebuah folder.

2779
02:38:50,031 --> 02:38:52,321
Baiklah, saya sebenarnya\ntidak ingin melakukannya seperti itu.

2780
02:38:52,320 --> 02:38:53,870
Saya ingin melakukannya dengan lebih maju.

2781
02:38:53,870 --> 02:38:57,530
Jadi izinkan saya melanjutkan dan klik kanan\non PSet1, hapus secara permanen.

2782
02:38:57,531 --> 02:38:59,711
Saya mendapat pesan kesalahan\nyang menakutkan.

2783
02:38:59,710 --> 02:39:01,460
Tapi tidak ada apa-apa\nin itu, jadi tidak apa-apa.

2784
02:39:01,460 --> 02:39:03,560
Sekarang saya sudah menghapusnya menggunakan GUI.

2785
02:39:03,560 --> 02:39:08,851
Namun sekarang izinkan saya melanjutkan dan mulai melakukan\n

2786
02:39:08,851 --> 02:39:11,060
Dan jika Anda bertanya-tanya bagaimana\nhal-hal tersebut terus menghilang

2787
02:39:11,060 --> 02:39:15,290
jika Anda menekan Control-L di terminal Anda\n

2788
02:39:15,290 --> 02:39:18,470
itu akan menghapus semua yang Anda lakukan sebelumnya\n

2789
02:39:18,470 --> 02:39:20,595
Dalam praktiknya, Anda tidak perlu\nsering melakukan hal ini.

2790
02:39:20,595 --> 02:39:23,480
Saya melakukannya hanya untuk tetap\nfokus pada perintah terbaru saya.

2791
02:39:23,480 --> 02:39:26,962
Jika saya melakukannya-- apa perintah\nuntuk membuat direktori baru?

2792
02:39:28,320 --> 02:39:30,540
DAVID J. MALAN: Ya, jadi\nmkdir, buatlah direktori.

2793
02:39:32,251 --> 02:39:34,621
Dan perhatikan di sebelah kiri, itu PSet1 saya.

2794
02:39:34,620 --> 02:39:37,210
Jika saya ingin sedikit\nterlalu bersemangat, rencanakan minggu depan

2795
02:39:39,120 --> 02:39:44,722
Misalkan sekarang saya ingin membukanya\n

2796
02:39:44,722 --> 02:39:46,681
Saya dapat mengeklik dua kali\nit seperti ini, dan Anda akan melakukannya

2797
02:39:46,681 --> 02:39:48,408
lihat panah kecil ini bergerak.

2798
02:39:48,407 --> 02:39:51,490
Ia tidak melakukan apa pun karena ada\n

2799
02:39:51,490 --> 02:39:55,050
Namun misalkan lagi saya ingin mendapatkan lebih banyak\n

2800
02:39:55,050 --> 02:39:59,130
Perhatikan jika saya mengetik ls sekarang, saya\nmelihat keempat hal yang sama.

2801
02:39:59,130 --> 02:40:05,820
Biarkan saya mengubah direktori\ndengan ruang cd PSet1 Enter.

2802
02:40:05,820 --> 02:40:08,460
Dan sekarang perhatikan dua hal\nakan terjadi.

2803
02:40:08,460 --> 02:40:14,070
Pertama, perintah saya telah berubah\nssedikit untuk mengingatkan saya di mana saya berada

2804
02:40:14,070 --> 02:40:17,730
hanya untuk membuatku tetap waras agar aku tidak\n

2805
02:40:17,730 --> 02:40:21,610
Jadi ini hanyalah pengingat visual\n

2806
02:40:21,611 --> 02:40:26,911
Jika saya mengetik ls sekarang, apa yang seharusnya\nsaya lihat setelah menekan Enter?

2807
02:40:26,911 --> 02:40:29,591
Tidak ada, karena sejauh ini saya hanya\nmembuat folder kosong.

2808
02:40:31,050 --> 02:40:35,490
Jika saya ingin membuat folder bernama\n

2809
02:40:35,490 --> 02:40:37,890
menelepon Mario minggu ini, saya bisa melakukannya.

2810
02:40:37,890 --> 02:40:40,530
Sekarang kalau saya ketik ls, di sana ada Mario.

2811
02:40:40,531 --> 02:40:42,871
Sekarang jika saya melakukan cd Mario,\nperhatikan perintah saya berjalan

2812
02:40:42,870 --> 02:40:44,520
untuk mengubah menjadi sedikit lebih tepat.

2813
02:40:47,191 --> 02:40:49,051
Dan perhatikan apa yang terjadi di kiri atas.

2814
02:40:49,050 --> 02:40:51,150
Tidak ada apa pun sekarang, karena\nfolder ini diciutkan.

2815
02:40:51,150 --> 02:40:54,390
Namun jika saya klik\nsegitiga kecil, di sana saya melihat Mario.

2816
02:40:54,390 --> 02:40:56,911
Tidak ada yang terjadi di sana\nkarena belum ada file.

2817
02:40:56,911 --> 02:41:00,810
Tapi misalkan sekarang saya ingin\nmembuat file bernama mario.c.

2818
02:41:00,810 --> 02:41:04,770
Saya bisa naik ke sini, saya bisa mengklik\n

2819
02:41:04,771 --> 02:41:07,591
Atau saya cukup mengetikkan kode mario.c.

2820
02:41:08,220 --> 02:41:10,082
Itu menciptakan tab baru bagi saya.

2821
02:41:10,083 --> 02:41:13,291
Saya tidak akan menulis kode apa pun di sini\n

2822
02:41:13,290 --> 02:41:16,950
Dan sekarang di kiri atas, Anda akan\nmelihat mario.c muncul.

2823
02:41:16,950 --> 02:41:19,492
Jadi suatu saat, Anda bisa\nakhirnya menutup Explorer.

2824
02:41:19,493 --> 02:41:22,158
Karena, sekali lagi, ini tidak memberikan\ninformasi baru apa pun kepada Anda.

2825
02:41:22,158 --> 02:41:23,970
Ini mungkin lebih\ramah pengguna, tapi ada

2826
02:41:23,970 --> 02:41:27,960
tidak ada yang tidak dapat Anda lakukan sesuai perintah\n

2827
02:41:27,960 --> 02:41:29,880
Baiklah, tapi sekarang aku agak terjebak.

2828
02:41:29,880 --> 02:41:32,220
Bagaimana cara keluar dari folder ini?

2829
02:41:32,220 --> 02:41:34,020
Di dunia Mac atau PC saya,\nSaya mungkin akan mengklik

2830
02:41:34,021 --> 02:41:37,320
tombol Kembali atau semacamnya\n

2831
02:41:37,320 --> 02:41:42,181
Di jendela terminal,\nSaya bisa melakukan cd dot dot.

2832
02:41:42,181 --> 02:41:46,650
Titik titik adalah nama panggilan, jika Anda\nmenghendakinya, untuk direktori induk.

2833
02:41:46,650 --> 02:41:48,101
Artinya, direktori sebelumnya.

2834
02:41:48,101 --> 02:41:52,601
Jadi jika saya menekan Enter sekarang, perhatikan saya\n

2835
02:41:52,601 --> 02:41:56,131
alias direktori, dan\nsekarang saya kembali ke PSet1.

2836
02:41:56,130 --> 02:42:00,240
Atau, jika saya ingin menjadi mewah, izinkan saya\n

2837
02:42:00,240 --> 02:42:03,300
Kalau saya ketik ls, ada\nmario.c, hanya untuk mengarahkan kita.

2838
02:42:03,300 --> 02:42:06,458
Jika saya ingin melakukan banyak hal\nat sekaligus, saya dapat melakukan cd../..

2839
02:42:09,271 --> 02:42:13,021
yang diberikan kepada orang tua saya, kepada kakek-nenek saya, semuanya dalam satu tarikan napas.

2840
02:42:13,021 --> 02:42:16,541
Dan voila, sekarang saya kembali ke folder\ndefault saya, jika Anda mau.

2841
02:42:16,540 --> 02:42:20,911
Dan satu trik kecil terakhir\n

2842
02:42:20,911 --> 02:42:24,181
beberapa saat yang lalu, dan Anda\nbosan dengan semua navigasi

2843
02:42:24,181 --> 02:42:26,881
jika Anda cukup mengetik cd dan\ntekan Enter, Anda akan dibawa

2844
02:42:26,880 --> 02:42:29,070
kembali ke folder\ndefault Anda, dan Anda tidak memilikinya

2845
02:42:29,070 --> 02:42:31,320
khawatir untuk sampai ke sana secara manual.

2846
02:42:31,320 --> 02:42:38,521
Namun, ingatlah beberapa saat yang lalu bahwa saya\n

2847
02:42:38,521 --> 02:42:42,751
Jika titik mengacu pada orang tua saya,\nmungkin menyimpulkan di sini secara sintaksis

2848
02:42:42,751 --> 02:42:46,720
apa arti satu titik saja?

2849
02:42:46,720 --> 02:42:49,480
Artinya direktori ini,\ndirektori Anda saat ini.

2850
02:42:50,900 --> 02:42:52,993
Itu hanya membuat super\neksplisit di komputer

2851
02:42:52,993 --> 02:42:55,451
bahwa saya ingin program bernama\nhello yang diinstal di sini

2852
02:42:55,450 --> 02:42:59,500
tidak di folder lain secara acak\selain hard drive saya, boleh dikatakan begitu.

2853
02:42:59,501 --> 02:43:02,425
Saya ingin yang ada\ndi sini saja.

2854
02:43:02,425 --> 02:43:04,300
Baiklah, selain\nperintah ini, ada

2855
02:43:04,300 --> 02:43:06,452
akan menjadi orang lain yang\nkita temui seiring berjalannya waktu.

2856
02:43:06,452 --> 02:43:07,661
Itulah dasar-dasarnya.

2857
02:43:07,661 --> 02:43:11,710
Hal ini memungkinkan Anda untuk berhenti sejenak\n

2858
02:43:11,710 --> 02:43:14,470
dan mulai menggunakannya dengan lebih nyaman,\ndengan latihan dan waktu

2859
02:43:14,470 --> 02:43:16,360
antarmuka baris perintah sebagai gantinya.

2860
02:43:16,361 --> 02:43:19,631
Nah, bagaimana dengan\ntipe lainnya, yang kini kembali ke dunia C?

2861
02:43:19,630 --> 02:43:23,950
Perintah tersebut bukan C. Itu adalah\n

2862
02:43:23,950 --> 02:43:28,300
antarmuka, seperti di Linux, yang,\n

2863
02:43:28,300 --> 02:43:30,310
Ini merupakan alternatif\nuntuk Mac OS dan Windows.

2864
02:43:30,310 --> 02:43:34,810
Kembali ke dunia C, kita telah\nmelihat string, yang merupakan kata-kata.

2865
02:43:34,810 --> 02:43:38,351
Saya menyebutkan int atau integer,\ntetapi ada yang lain juga.

2866
02:43:38,351 --> 02:43:42,581
Di dunia C, kita telah\nmelihat string, kita akan melihat int.

2867
02:43:42,581 --> 02:43:46,031
Jika Anda ingin bilangan bulat yang lebih besar, ada\n

2868
02:43:46,031 --> 02:43:49,451
Jika Anda menginginkan satu karakter,\nada sesuatu yang disebut char.

2869
02:43:49,450 --> 02:43:53,680
Jika Anda menginginkan nilai Boolean,\nbenar atau salah, ada nilai bool.

2870
02:43:53,681 --> 02:43:56,111
Dan jika Anda menginginkan nilai floating-point--

2871
02:43:56,111 --> 02:43:59,781
cara yang bagus untuk menyatakan bilangan real,\n

2872
02:43:59,781 --> 02:44:03,201
itulah yang disebut oleh C dan\nbahasa lain sebagai float.

2873
02:44:03,200 --> 02:44:06,610
Dan jika Anda ingin lebih banyak angka\nsetelah koma desimal itu

2874
02:44:06,611 --> 02:44:10,211
lebih presisi, Anda dapat\nmenggunakan sesuatu yang disebut double.

2875
02:44:10,210 --> 02:44:14,020
Artinya, sekali lagi, ini adalah\nan contoh dalam pemrograman

2876
02:44:14,021 --> 02:44:17,681
di mana sekarang terserah Anda untuk menyediakan\n

2877
02:44:17,681 --> 02:44:21,640
yang menjadi sandarannya untuk mengetahui apa\n

2878
02:44:23,331 --> 02:44:26,621
Apakah berupa suara, gambar,\na warna, atau sejenisnya?

2879
02:44:26,620 --> 02:44:30,970
Ini adalah jenis tipe data\n

2880
02:44:30,970 --> 02:44:35,800
Apa saja fungsi yang masuk\n

2881
02:44:35,800 --> 02:44:39,251
Kita membicarakan tentang I/O standar, dan\n

2882
02:44:39,251 --> 02:44:42,911
Di pustaka CS50, Anda dapat\nmelihat bahwa pustaka tersebut mengikuti suatu pola.

2883
02:44:42,911 --> 02:44:45,581
Pustaka C50 sebagian besar sudah ada\nselama beberapa minggu pertama

2884
02:44:45,581 --> 02:44:50,997
kelas untuk membuat hidup kita lebih mudah\n

2885
02:44:50,997 --> 02:44:53,831
Jadi jika Anda ingin mendapatkan string,\n

2886
02:44:54,700 --> 02:44:57,742
Jika Anda ingin mendapatkan bilangan bulat dari\n

2887
02:44:57,743 --> 02:45:01,091
Bila Anda ingin mendapatkan semua itu\n

2888
02:45:03,861 --> 02:45:06,221
Dan memang semuanya\nhuruf kecil menurut konvensi.

2889
02:45:07,331 --> 02:45:10,630
Jika sekarang kami memiliki kemampuan untuk\nmenyimpan berbagai jenis data

2890
02:45:10,630 --> 02:45:13,751
dan kami memiliki fungsi yang\ndapat mendapatkan berbagai jenis data

2891
02:45:13,751 --> 02:45:16,841
bagaimana cara Anda mencetak\ndiberbagai jenis data?

2892
02:45:16,841 --> 02:45:23,800
Ya, kita telah melihat %s untuk string,\n%i untuk integer, %c untuk char

2893
02:45:23,800 --> 02:45:30,130
%f untuk float atau double, itu\n

2894
02:45:30,130 --> 02:45:33,760
dan kemudian %li untuk bilangan bulat panjang.

2895
02:45:33,761 --> 02:45:36,281
Jadi, inilah\ncontoh ketidakkonsistenan yang pertama.

2896
02:45:36,281 --> 02:45:38,981
Idealnya, itu\nhanya %l dan kita akan melanjutkan.

2897
02:45:38,980 --> 02:45:42,940
Sebaliknya %li dalam kasus ini.

2898
02:45:42,941 --> 02:45:45,701
Itu printf dan beberapa\nkode formatnya.

2899
02:45:49,511 --> 02:45:51,858
tidak ada permainan kata-kata yang dimaksudkan-- ada\na sejumlah besar operator.

2900
02:45:51,858 --> 02:45:54,191
Dan, tentu saja, komputer, salah satu\nhal pertama yang mereka lakukan

2901
02:45:54,191 --> 02:45:57,941
banyak matematika dan perhitungan, jadi\n

2902
02:45:57,941 --> 02:46:01,161
Komputer, dan C, sangat\npandai dalam penjumlahan dan pengurangan

2903
02:46:01,161 --> 02:46:04,191
perkalian, pembagian,\ndan bahkan tanda persen

2904
02:46:04,191 --> 02:46:05,740
yang merupakan operator sisanya.

2905
02:46:05,740 --> 02:46:08,650
Ada simbol khusus\nin C dan bahasa lainnya

2906
02:46:08,650 --> 02:46:13,161
hanya untuk mendapatkan sisanya, kapan\n

2907
02:46:13,161 --> 02:46:18,911
Ada fitur lain di dunia\n

2908
02:46:18,911 --> 02:46:22,931
Dan ada juga yang\n

2909
02:46:22,931 --> 02:46:27,371
membuatnya lebih mudah dari waktu ke waktu\nmenulis lebih sedikit karakter

2910
02:46:27,370 --> 02:46:29,090
tapi ungkapkan pikiranmu dengan cara yang sama.

2911
02:46:29,091 --> 02:46:33,470
Jadi hanya sebagai satu contoh\noini, sebagai satu contoh

2912
02:46:33,470 --> 02:46:37,331
pertimbangkan penggunaan variabel\na ini minggu lalu.

2913
02:46:37,331 --> 02:46:41,740
Di sini, di Scratch adalah cara Anda\n

2914
02:46:41,740 --> 02:46:43,960
Di C, ini akan serupa.

2915
02:46:43,960 --> 02:46:46,240
Jika Anda ingin variabel\ndisebut counter

2916
02:46:46,240 --> 02:46:49,540
Anda benar-benar menulis penghitung kata,\n

2917
02:46:49,540 --> 02:46:53,350
Anda kemudian menggunakan penugasan\noperator, alias tanda sama dengan

2918
02:46:53,351 --> 02:46:56,931
dan Anda menetapkannya berapa pun inisialnya\n

2919
02:46:56,931 --> 02:47:01,001
Jadi, sekali lagi, angka 0 akan disalin\n

2920
02:47:01,001 --> 02:47:02,990
karena tanda sama dengan tunggal itu.

2921
02:47:02,990 --> 02:47:05,831
Tapi ini belum cukup\nin C. Apa lagi

2922
02:47:05,831 --> 02:47:08,890
hilang di sebelah kanan\n, secara naluriah sekarang?

2923
02:47:08,890 --> 02:47:11,485
Meskipun Anda belum pernah\nmemprogram ini sebelumnya.

2924
02:47:13,150 --> 02:47:14,775
DAVID J. MALAN: Titik koma di akhir.

2925
02:47:14,775 --> 02:47:16,941
Dan satu hal lainnya, menurut saya, mungkin hilang.

2926
02:47:18,414 --> 02:47:19,581
DAVID J. MALAN: Tipe data.

2927
02:47:19,581 --> 02:47:22,671
Jadi kalau kita bisa terus\nbolak-balik di sini

2928
02:47:22,671 --> 02:47:26,320
tipe data apa yang tampaknya cocok\secara intuitif untuk penghitung?

2929
02:47:27,431 --> 02:47:29,861
Jadi, tentu saja, kita perlu\nmemberi tahu komputer kapan

2930
02:47:29,861 --> 02:47:32,531
membuat variabel\ntipe data apa yang kita inginkan

2931
02:47:32,531 --> 02:47:35,721
dan kita perlu menyelesaikan\npemikiran kita dengan titik koma.

2932
02:47:35,720 --> 02:47:38,140
Jadi mungkin ada rekannya di sana.

2933
02:47:38,140 --> 02:47:43,270
Bagaimana dengan di Scratch jika kita ingin\n

2934
02:47:43,271 --> 02:47:45,671
Kami memiliki potongan\npuzzle yang sangat mudah digunakan ini terakhir kali

2935
02:47:45,671 --> 02:47:49,740
yaitu mengubah penghitung\ndengan 1, atau menambahkan 1 ke penghitung.

2936
02:47:49,740 --> 02:47:54,120
Di C, di sinilah segalanya menjadi\na sedikit lebih menarik.

2937
02:47:54,120 --> 02:47:58,110
Dan cukup umum dilakukan, Anda mungkin\n

2938
02:47:59,310 --> 02:48:02,220
Dan di sinilah, sekali lagi,\n

2939
02:48:03,361 --> 02:48:05,341
Kalau tidak, ini tidak masuk akal.

2940
02:48:05,341 --> 02:48:08,251
penghitung tidak bisa sama\npenghitung ditambah 1, kan?

2941
02:48:08,251 --> 02:48:11,171
Itu tidak akan berhasil jika kita\nberbicara tentang bilangan bulat di sini.

2942
02:48:11,171 --> 02:48:13,411
Itu karena tanda\nsama adalah tugas.

2943
02:48:13,411 --> 02:48:15,751
Jadi itu pasti bisa menjadi\nkasus yang Anda hitung

2944
02:48:15,751 --> 02:48:19,921
penghitung ditambah 1, apa pun itu,\n

2945
02:48:19,921 --> 02:48:22,871
dari kanan ke kiri menjadi nilai baru itu.

2946
02:48:22,870 --> 02:48:25,200
Seperti yang akan kita lihat, ini\adalah hal yang sangat umum

2947
02:48:25,200 --> 02:48:29,100
untuk dilakukan dalam pemrograman hanya untuk\n

2948
02:48:29,101 --> 02:48:30,931
Anda dapat menulis ini dengan lebih ringkas.

2949
02:48:30,931 --> 02:48:34,711
Kode inilah yang\nkita sebut gula sintaksis, sortir

2950
02:48:34,710 --> 02:48:39,540
cara yang bagus untuk mengatakan hal yang sama\n

2951
02:48:40,320 --> 02:48:44,220
Ini juga menambahkan 1, atau berapa pun\nangka yang Anda ketik di sini

2952
02:48:44,220 --> 02:48:46,081
ke variabel di sebelah kiri.

2953
02:48:46,081 --> 02:48:49,771
Dan ada satu bentuk sintaksis lainnya\n

2954
02:48:49,771 --> 02:48:51,601
dan ini bahkan lebih singkat dari ini.

2955
02:48:51,601 --> 02:48:56,851
Itu juga akan menambah penghitung sebesar 1\n

2956
02:48:56,851 --> 02:48:59,701
Atau jika Anda mengubahnya menjadi minus\nminus, kurangi 1 darinya.

2957
02:48:59,700 --> 02:49:02,310
Anda tidak dapat melakukannya dengan\n2, 3, dan 4, kecuali Anda

2958
02:49:02,310 --> 02:49:07,860
dapat melakukannya secara default hanya dengan plus plus\n

2959
02:49:12,611 --> 02:49:15,641
DAVID J. MALAN: Ah, jadi kalau begitu\n

2960
02:49:15,640 --> 02:49:20,200
telah dibuat, seperti yang kita lakukan dengan\nkode yang terlihat seperti ini

2961
02:49:20,200 --> 02:49:23,590
Anda tidak perlu lagi mengingatkan\nkomputer tentang tipe datanya.

2962
02:49:23,591 --> 02:49:27,220
Untungnya, komputer\namun secerdas itu.

2963
02:49:27,220 --> 02:49:31,990
Ini akan mengingat jenis\ndata yang Anda inginkan.

2964
02:49:31,990 --> 02:49:34,941
Pertanyaan atau komentar lain tentang ini?

2965
02:49:34,941 --> 02:49:36,191
Baiklah, itu cukup banyak.

2966
02:49:36,191 --> 02:49:38,570
Mengapa kita tidak langsung saja\nberistirahat 10 menit?

2967
02:49:38,570 --> 02:49:41,771
Dan kami akan kembali, kami akan\nmulai menulis beberapa kode.

2968
02:49:44,980 --> 02:49:48,581
Kita baru saja melihat beberapa\ndasar-dasar kompilasi

2969
02:49:48,581 --> 02:49:50,335
meskipun tidak\nterasa mendasar.

2970
02:49:50,335 --> 02:49:52,210
Namun sekarang, mari kita\nmulai benar-benar fokus

2971
02:49:52,210 --> 02:49:55,510
dalam menulis lebih banyak kode,\nlebih menarik

2972
02:49:55,511 --> 02:49:58,701
kode, seperti kita menyelam\nin ke Scratch minggu lalu.

2973
02:49:58,700 --> 02:50:00,610
Jadi di sini saya membuka kode ini.

2974
02:50:01,570 --> 02:50:04,361
Saya akan lebih fokus pada\n saya

2975
02:50:04,361 --> 02:50:07,444
Banyak cara berbeda yang bisa saya lakukan untuk membuat\n baru

2976
02:50:08,511 --> 02:50:11,501
Jadi, sekali lagi, dalam\nlingkungan VS Code ini

2977
02:50:11,501 --> 02:50:15,581
Saya benar-benar dapat menulis kode\n

2978
02:50:15,581 --> 02:50:18,371
dan itu hanya membuat\nfile baru untuk saya secara otomatis.

2979
02:50:18,370 --> 02:50:20,411
Atau saya bisa melakukannya di GUI.

2980
02:50:20,411 --> 02:50:23,382
Saya akan melanjutkan dan membuat\nfile ini bernama kalkulator.c

2981
02:50:23,382 --> 02:50:25,841
dan saya akan melanjutkan dan\nmemasukkan beberapa hal yang familiar.

2982
02:50:25,841 --> 02:50:30,851
Jadi saya lanjutkan saja dan\n

2983
02:50:30,851 --> 02:50:33,911
Saya akan melanjutkan dari\nmemori dan melakukan int void main--

2984
02:50:33,911 --> 02:50:38,248
lebih lanjut tentang itu minggu depan, mengapa\n

2985
02:50:38,248 --> 02:50:40,540
Dan sekarang izinkan saya menerapkan\na kalkulator yang sangat sederhana.

2986
02:50:40,540 --> 02:50:44,360
Kami melihat beberapa\nooperator matematika, seperti plus dan sejenisnya.

2987
02:50:45,861 --> 02:50:48,671
Jadi izinkan saya melanjutkan\npertama-tama berikan variabel pada diri saya sendiri

2988
02:50:48,671 --> 02:50:52,480
disebut x, seperti matematika atau aljabar kelas\nsekolah.

2989
02:50:52,480 --> 02:50:55,570
Biarkan saya lanjutkan dan\ndapatkan int, yang baru

2990
02:50:55,570 --> 02:50:57,251
tapi saya sebutkan ini ada.

2991
02:50:57,251 --> 02:51:00,640
Lalu izinkan saya bertanya kepada pengguna\nberapa nilai x mereka.

2992
02:51:00,640 --> 02:51:03,984
Yang ada di tanda kutip itu\nhanya bahasa Inggrisnya, atau stringnya

2993
02:51:03,984 --> 02:51:06,650
yang saya cetak di layar.\nsehingga saya bisa mengatakan apa pun yang saya inginkan.

2994
02:51:06,650 --> 02:51:09,931
Saya hanya akan mengucapkan x titik dua\nuntuk meminta pengguna melakukan hal tersebut.

2995
02:51:09,931 --> 02:51:12,431
Sekarang saya akan melanjutkan dan\nmengambil variabel lain bernama y.

2996
02:51:13,630 --> 02:51:16,270
Dan sekarang, saya akan\nmeminta pengguna untuk y.

2997
02:51:16,271 --> 02:51:18,551
Dan saya sangat rewel\menggunakan spasi saja

2998
02:51:18,550 --> 02:51:22,030
untuk memindahkan kursor agar tidak\nterlihat terlalu berantakan di layar.

2999
02:51:22,031 --> 02:51:27,221
Dan yang terakhir, izinkan saya melanjutkan dan\n

3000
02:51:27,220 --> 02:51:31,720
Idealnya, saya hanya\nmengatakan sesuatu seperti printf x y.

3001
02:51:31,720 --> 02:51:36,640
Tapi itu tidak berlaku di C.The\n

3002
02:51:36,640 --> 02:51:39,261
harus berupa string dalam tanda kutip ganda.

3003
02:51:39,261 --> 02:51:43,060
Jadi jika saya ingin mencetak\nnilai integer

3004
02:51:43,060 --> 02:51:47,320
Saya perlu memasukkan sesuatu ke dalam tanda kutip\n

3005
02:51:47,320 --> 02:51:49,220
jika saya ingin memindahkan kursor juga.

3006
02:51:49,220 --> 02:51:51,640
Jadi, sekali lagi, kami hanya melihat sekilas\nit sebentar, tapi apa

3007
02:51:51,640 --> 02:51:55,480
apakah saya mengganti tanda tanya ini dengan\n

3008
02:51:56,570 --> 02:51:57,980
DAVID J. MALAN: Ya, jadi %i.

3009
02:51:57,980 --> 02:52:00,591
Sama seperti %s adalah string, %i adalah bilangan bulat.

3010
02:52:02,361 --> 02:52:06,351
Dan sekarang jika saya ingin menambahkan x dan y, untuk\n

3011
02:52:06,351 --> 02:52:09,771
tidak melakukan banyak hal lain\n

3012
02:52:11,341 --> 02:52:14,091
Dan, sekali lagi, tampilannya jelas\nsamar pada pandangan pertama.

3013
02:52:14,091 --> 02:52:16,490
Itu akan terjadi jika pemrograman\ntidak sesempit ini.

3014
02:52:16,490 --> 02:52:18,511
Bahasa lain akan\nmenyelesaikannya untuk kami.

3015
02:52:18,511 --> 02:52:22,191
Namun, sekali lagi, jika Anda berfokus pada\n

3016
02:52:22,191 --> 02:52:26,150
yang merupakan string format dengan\nBahasa Inggris atau bahasa apa pun

3017
02:52:27,591 --> 02:52:31,550
maka dibutuhkan lebih banyak\nargumen setelah koma

3018
02:52:33,921 --> 02:52:36,800
Baiklah, izinkan saya melanjutkan\nsekarang dan membuat kalkulator

3019
02:52:36,800 --> 02:52:41,300
yang, sekali lagi, mengkompilasi\nkode sumber saya dalam C

3020
02:52:41,300 --> 02:52:44,480
digambarkan di atas, dan mengkonversi\nit menjadi mesin yang sesuai

3021
02:52:50,720 --> 02:52:53,841
Ayo lakukan 1 tambah 1 dan Enter.

3022
02:52:54,681 --> 02:52:57,531
Sekarang saya punya bakat untuk membuat kalkulator.

3023
02:52:57,531 --> 02:53:00,421
Sekarang mari kita mulai mengutak-atik\nsedikit ini.

3024
02:53:00,421 --> 02:53:02,271
Bagaimana jika saya yang melakukan ini?

3025
02:53:02,271 --> 02:53:08,150
int z = x y lalu masukkan z di sini.

3026
02:53:08,150 --> 02:53:14,841
Jika saya menjalankan kembali kalkulator, Enter,\n

3027
02:53:14,841 --> 02:53:20,791
masih sama dengan 2, dan izinkan saya mengklaimnya\n

3028
02:53:20,790 --> 02:53:22,820
versi mana yang\ndirancang lebih baik?

3029
02:53:22,820 --> 02:53:27,650
Jika keduanya tampaknya benar\n

3030
02:53:27,650 --> 02:53:30,710
atau yang sebelumnya tanpa z?

3031
02:53:30,710 --> 02:53:34,190
Oke, jadi yang ini bisa dibilang lebih baik\n

3032
02:53:34,191 --> 02:53:36,501
variabel bernama z yang saya\ntidak hanya bisa mencetak tetapi, sih

3033
02:53:36,501 --> 02:53:39,300
jika program saya lebih panjang,\nSaya dapat menggunakannya di tempat lain.

3034
02:53:42,272 --> 02:53:44,680
Masih bisa diperdebatkan, seperti sebelumnya, karena\ntergantung niat saya.

3035
02:53:44,681 --> 02:53:46,556
Dan, sejujurnya, menurut saya\argumennya cukup bagus

3036
02:53:46,556 --> 02:53:48,001
dapat dibuat untuk versi pertama.

3037
02:53:48,001 --> 02:53:50,851
Karena jika saya tidak\nberniat untuk-- seperti yang Anda catat--

3038
02:53:50,851 --> 02:53:53,801
menggunakan variabel itu\nagain, tahukah Anda?

3039
02:53:53,800 --> 02:53:55,800
Mungkin sebaiknya saya melakukan\nini, hanya karena memang demikian

3040
02:53:55,800 --> 02:53:57,331
berkurang satu hal yang perlu dipikirkan.

3041
02:53:58,441 --> 02:54:00,900
Kurang satu baris kode\nyang harus dipahami.

3042
02:54:02,040 --> 02:54:04,770
Jadi sekali lagi, ini\ntergantung pada niat Anda.

3043
02:54:04,771 --> 02:54:07,021
Tapi bidang ini cukup masuk akal.

3044
02:54:07,021 --> 02:54:09,301
Dan menurut saya, seperti yang\nseseorang sebutkan sebelumnya, kapan

3045
02:54:09,300 --> 02:54:13,411
Saya melakukan hal yang sama dengan get_string,\n

3046
02:54:13,411 --> 02:54:16,335
s baris karena get_string dan\napa nama Anda di dalamnya

3047
02:54:16,335 --> 02:54:17,460
itu jauh lebih lama.

3048
02:54:17,460 --> 02:54:20,850
Tapi x y, eh, tidak terlalu sulit\nuntuk memusatkan pikiran kita pada apa yang ada

3049
02:54:20,851 --> 02:54:23,060
terjadi di dalam argumen printf.

3050
02:54:23,060 --> 02:54:25,831
Jadi, sekali lagi, ini adalah jenis pemikiran yang mudah-mudahan Anda miliki

3051
02:54:25,831 --> 02:54:28,531
memperoleh naluri untuk\nbelum tentu mencapai

3052
02:54:28,531 --> 02:54:30,990
jawaban yang sama dengan orang lain, tapi, sekali lagi, pemikirannya

3053
02:54:30,990 --> 02:54:33,220
proses adalah yang penting di sini.

3054
02:54:33,220 --> 02:54:36,180
Baiklah, jadi bagaimana saya bisa menyempurnakan\nprogram ini sedikit?

3055
02:54:36,181 --> 02:54:38,471
Mari kita bicara tentang\ngaya sejenak.

3056
02:54:38,470 --> 02:54:42,990
Jadi x dan y, setidaknya dalam kasus ini,\n

3057
02:54:43,500 --> 02:54:45,750
Karena itulah nama\nvariabel yang digunakan dalam matematika

3058
02:54:45,750 --> 02:54:47,375
ketika Anda menambahkan dua hal bersama-sama.

3059
02:54:47,375 --> 02:54:48,909
Jadi x dan y sepertinya cukup masuk akal.

3060
02:54:48,909 --> 02:54:53,159
Saya bisa melakukan sesuatu seperti,\nyah, mungkin variabel pertama saya

3061
02:54:53,159 --> 02:54:56,730
harus dipanggil nomor\npertama dan variabel saya selanjutnya

3062
02:54:56,730 --> 02:54:58,552
harus disebut nomor kedua.

3063
02:54:58,552 --> 02:55:00,511
Lalu di sini, saya\nharus mengubahnya

3064
02:55:00,511 --> 02:55:04,329
ke angka pertama ditambah angka kedua.

3065
02:55:04,329 --> 02:55:07,050
Sepertinya, eh, ini sebenarnya tidak\menambahkan apa pun secara semantik

3066
02:55:08,341 --> 02:55:11,230
Tapi itu akan menjadi masalah lain\n

3067
02:55:11,230 --> 02:55:14,761
Jadi, jika Anda memiliki ide\nyang sangat sederhana dan konvensional

3068
02:55:14,761 --> 02:55:18,790
dinyatakan dengan nama variabel umum\n

3069
02:55:18,790 --> 02:55:22,591
Bagaimana jika saya ingin memberi anotasi pada program ini\n

3070
02:55:22,591 --> 02:55:25,381
Baiklah, saya bisa menambahkan di C\napa yang disebut komentar.

3071
02:55:25,380 --> 02:55:30,030
Dengan satu tebasan, dua tebasan ke depan,\n

3072
02:55:32,579 --> 02:55:35,400
Dan kemudian di sini, saya dapat\melakukan sesuatu seperti pengguna prompt

3073
02:55:35,400 --> 02:55:37,619
bagimu, hanya untuk mengingatkan\ndiriku sendiri apa yang aku lakukan di sana.

3074
02:55:37,620 --> 02:55:40,171
Dan di bawah sini, lakukan penambahan.

3075
02:55:40,171 --> 02:55:42,990
Sekarang, dalam hal ini, saya tidak\nyakin perintah-perintah ini benar adanya

3076
02:55:44,101 --> 02:55:47,820
Karena dalam waktu yang saya perlukan untuk menulis\n

3077
02:55:47,820 --> 02:55:49,950
Saya bisa saja membaca\ntiga baris kode.

3078
02:55:49,950 --> 02:55:52,890
Namun seiring dengan semakin canggihnya program kami

3079
02:55:52,890 --> 02:55:55,548
dan Anda mulai mempelajari lebih lanjut sintaksis--

3080
02:55:55,549 --> 02:55:58,091
sejujurnya, Anda mungkin lupa\nkeesokan harinya, minggu depan

3081
02:55:58,091 --> 02:56:01,890
bulan depan-- mungkin berguna\n

3082
02:56:01,890 --> 02:56:04,681
mengingatkan Anda tentang apa\nkode Anda lakukan atau bahkan mungkin

3083
02:56:06,421 --> 02:56:09,329
Dengan program awal ini,\ntidak terlalu diperlukan

3084
02:56:09,329 --> 02:56:11,671
tidak benar-benar menambah\nbanyak pemahaman kita

3085
02:56:11,671 --> 02:56:14,159
namun ini adalah mekanisme\nyang Anda miliki

3086
02:56:14,159 --> 02:56:18,060
dapat membantu Anda mengingatkan\ndiri sendiri atau mengingatkan seseorang

3087
02:56:18,060 --> 02:56:20,279
lain apa yang sedang terjadi.

3088
02:56:20,279 --> 02:56:23,070
Baiklah, izinkan saya menjalankannya kembali\n

3089
02:56:24,431 --> 02:56:27,001
Dan di sini juga, Anda mungkin\nmenganggap saya mengetik dengan sangat cepat--

3090
02:56:28,771 --> 02:56:32,201
Jadi ternyata\nLinux, sistem operasinya

3091
02:56:32,200 --> 02:56:33,510
kami menggunakan di sini di cloud--

3092
02:56:33,511 --> 02:56:36,961
namun sebenarnya, Windows dan Mac\nOS saat ini juga mendukung hal ini--

3093
02:56:38,800 --> 02:56:42,300
Jadi jika Anda hanya mempunyai satu\nprogram yang dimulai dengan C-A-L

3094
02:56:42,300 --> 02:56:45,210
Anda tidak perlu menyelesaikan penulisan\n

3095
02:56:45,210 --> 02:56:47,770
dan komputer akan\nmenyelesaikan pemikiran Anda untuk Anda.

3096
02:56:47,771 --> 02:56:51,931
Hal lain yang dapat Anda lakukan adalah\njika Anda menekan Naik dan terus naik

3097
02:56:51,931 --> 02:56:54,424
Anda akan menelusuri\nseluruh riwayat perintah Anda.

3098
02:56:54,424 --> 02:56:56,341
Jadi di sana juga, saya telah\nmenyimpan beberapa penekanan tombol

3099
02:56:56,341 --> 02:56:59,174
dengan menekan Naik dengan cepat, bukan\n

3100
02:56:59,831 --> 02:57:02,130
Jadi, sekali lagi, hanya\nsedikit kemudahan lainnya

3101
02:57:02,130 --> 02:57:05,911
untuk membuat pemrograman dan berinteraksi dengan\n

3102
02:57:05,911 --> 02:57:09,281
Baiklah, izinkan saya melanjutkan dan membuat\n

3103
02:57:09,281 --> 02:57:11,131
Komentar tersebut tidak memiliki dampak fungsional.

3104
02:57:11,130 --> 02:57:13,230
Benda-benda hijau ini\nhanyalah catatan untuk diri sendiri.

3105
02:57:13,230 --> 02:57:15,421
Izinkan saya menjalankan kalkulator dengan\nmungkin-- bagaimana kalau ini?

3106
02:57:15,421 --> 02:57:19,441
Daripada 1 tambah 1,\nbagaimana kalau 1 miliar--

3107
02:57:22,004 --> 02:57:23,171
ups, ayo lakukan itu lagi.

3108
02:57:24,460 --> 02:57:30,175
1 juta, 1 miliar, dan 1\n lainnya

3109
02:57:30,175 --> 02:57:31,550
Baiklah, jadi sepertinya itu benar.

3110
02:57:31,550 --> 02:57:33,092
Mari kita jalankan program ini sekali lagi.

3111
02:57:33,093 --> 02:57:39,281
Bagaimana kalau 2 miliar\nditambah 2 miliar lagi?

3112
02:57:42,120 --> 02:57:45,120
Jadi sepertinya itu tidak sepenuhnya benar.

3113
02:57:45,120 --> 02:57:49,590
Dan, jelasnya, menjalankan 1 tambah 1 adalah\n

3114
02:57:50,550 --> 02:57:53,235
Apa yang salah?

3115
02:57:53,236 --> 02:57:54,361
Apa yang salah?

3116
02:57:58,341 --> 02:58:00,511
Komputer mungkin kehabisan\nruang dengan bit.

3117
02:58:00,511 --> 02:58:05,271
Jadi ternyata dengan tipe data ini--\n

3118
02:58:05,271 --> 02:58:09,650
dan juga float dan char dan itu\n

3119
02:58:09,650 --> 02:58:13,280
dan, yang paling penting, jumlah\nbit yang terbatas untuk mewakilinya.

3120
02:58:14,960 --> 02:58:18,890
Komputer yang lebih baru menggunakan lebih banyak bit, komputer yang lebih lama\n

3121
02:58:18,890 --> 02:58:21,841
Ini belum tentu terstandar\nuntuk semua tipe data ini.

3122
02:58:21,841 --> 02:58:28,161
Namun dalam kasus ini, di lingkungan ini,\n

3123
02:58:28,835 --> 02:58:30,980
Jadi dengan 32 bit, Anda\ndapat menghitung cukup banyak.

3124
02:58:30,980 --> 02:58:34,161
Ini adalah 64 bola lampu di\npanggung dan bisa dihitung lebih banyak lagi.

3125
02:58:34,161 --> 02:58:38,331
Sebuah int hanya menggunakan setengahnya, atau\n

3126
02:58:38,331 --> 02:58:42,351
Sekarang, jika Anda mengingat kembali minggu lalu,\n

3127
02:58:42,351 --> 02:58:47,371
Dan jika Anda memiliki 8 bit, 8 nol dan\n

3128
02:58:47,370 --> 02:58:49,700
hanya angka yang bagus untuk\numumnya diingat sebagai hal-hal sepele.

3129
02:58:49,700 --> 02:58:53,540
8 bit memberi Anda 256\npermutasi nol dan satu.

3130
02:58:53,540 --> 02:58:57,440
32 memberi Anda kira-kira berapa\nbanyaknya, jika ada yang tahu?

3131
02:58:59,841 --> 02:59:02,511
Jadi kira-kira 4 miliar, 2 banding 32.

3132
02:59:02,511 --> 02:59:04,310
Jika Anda tidak mengetahuinya, tidak apa-apa.

3133
02:59:04,310 --> 02:59:07,310
Namun, sebagian besar pemrogram pada akhirnya\n

3134
02:59:10,790 --> 02:59:13,880
2 miliar ditambah 2 miliar\ntepatnya 4 miliar.

3135
02:59:13,880 --> 02:59:17,960
Dan itu seharusnya\nmuat dalam bilangan bulat 32-bit.

3136
02:59:17,960 --> 02:59:20,751
Tangkapannya adalah Mac saya,\nPC Anda, dan sejenisnya

3137
02:59:20,751 --> 02:59:22,791
juga suka mendukung angka negatif.

3138
02:59:22,790 --> 02:59:26,150
Dan jika Anda ingin mendukung keduanya secara positif\n

3139
02:59:26,150 --> 02:59:29,271
artinya dengan bilangan bulat 32-bit,\nAnda dapat menghitungnya sebagai tinggi

3140
02:59:29,271 --> 02:59:33,543
sekitar 2 miliar positif\atau 2 miliar negatif

3141
02:59:34,501 --> 02:59:38,060
Itu masih 4 miliar, kurang lebih, tapi jumlahnya hanya setengahnya

3142
02:59:38,060 --> 02:59:39,661
dalam satu arah atau yang lain.

3143
02:59:39,661 --> 02:59:44,210
Jadi bagaimana cara menerapkan\na kalkulator yang benar di sini?

3144
02:59:47,601 --> 02:59:50,181
Ya, jadi bukan hanya li,\nyang merupakan bilangan bulat panjang.

3145
02:59:50,181 --> 02:59:54,631
Saya harus melakukan satu perubahan lagi,\n

3146
02:59:54,630 --> 02:59:59,090
Jadi izinkan saya kembali ke sini dan berganti\n

3147
03:00:00,230 --> 03:00:02,400
Dan kemudian biarkan aku mengubahmu juga.

3148
03:00:02,400 --> 03:00:05,900
Lalu izinkan saya mengubah kode format\n

3149
03:00:07,970 --> 03:00:10,581
Biarkan saya mengkompilasi ulang kalkulator--

3150
03:00:14,060 --> 03:00:15,601
Itu jelas harus sama.

3151
03:00:15,601 --> 03:00:20,701
Sekarang mari kita lakukan 2 miliar\nd 2 miliar lainnya

3152
03:00:20,700 --> 03:00:22,330
dan silangkan jari kita kali ini.

3153
03:00:22,331 --> 03:00:24,720
Sekarang kita menghitung sebanyak 4 miliar.

3154
03:00:24,720 --> 03:00:27,870
Dan kita bisa mencapai lebih dari\n4 miliar, tapi kita hanya mampu melakukannya

3155
03:00:27,870 --> 03:00:29,760
menendang kaleng itu sedikit di jalan.

3156
03:00:29,761 --> 03:00:31,261
Meskipun kita sekarang menggunakan--

3157
03:00:32,431 --> 03:00:37,781
64 bit, sepanjang ini\n

3158
03:00:37,781 --> 03:00:40,381
Nilainya mungkin sangat besar\ntetapi tetap terbatas.

3159
03:00:40,380 --> 03:00:42,810
Dan kami akan kembali pada\nakhir hari ini untuk membahas hal-hal seperti ini

3160
03:00:44,040 --> 03:00:48,310
Karena bisa dibilang sekarang, kalkulator saya\n

3161
03:00:48,310 --> 03:00:51,280
miliaran masukan yang mungkin, tetapi tidak semuanya.

3162
03:00:51,281 --> 03:00:53,401
Dan itu bermasalah\njika Anda benar-benar menginginkannya

3163
03:00:53,400 --> 03:00:58,740
untuk menggunakan kalkulator saya untuk\nmasukan apa pun yang memungkinkan, bukan hanya

3164
03:00:58,740 --> 03:01:03,300
yang kira-kira kurang dari,\n

3165
03:01:03,300 --> 03:01:05,292
Baiklah, ada pertanyaan tentang itu?

3166
03:01:05,292 --> 03:01:07,501
Namun hal ini hanyalah awal\nawal dari semua masalah

3167
03:01:07,501 --> 03:01:10,505
yang pada akhirnya harus kita tangani nanti.

3168
03:01:15,688 --> 03:01:17,021
DAVID J. MALAN: Pertanyaan yang bagus.

3169
03:01:17,261 --> 03:01:20,351
Jika kami masih menggunakan z, kami akan\n

3170
03:01:20,351 --> 03:01:23,471
Jika tidak, kami akan mengabaikan\n32 bit itu

3171
03:01:23,470 --> 03:01:25,990
telah ditambahkan bersama-sama melalui rindu.

3172
03:01:27,831 --> 03:01:32,351
Baiklah, jadi bagaimana kalau kita membumbuinya\n

3173
03:01:32,351 --> 03:01:35,711
bagaimana dengan sesuatu\ndengan beberapa syarat?

3174
03:01:35,710 --> 03:01:37,630
Mari kita mulai mengajukan\nbeberapa pertanyaan aktual.

3175
03:01:37,630 --> 03:01:44,090
Jadi beberapa saat yang lalu, ingatlah bahwa kita telah\n

3176
03:01:44,091 --> 03:01:46,091
Sekarang mari kita lihat kembali\nsesuatu di Scratch itu

3177
03:01:46,091 --> 03:01:48,632
tampak seperti\nini, sekumpulan potongan puzzle

3178
03:01:48,632 --> 03:01:50,710
mengajukan pertanyaan melalui\npersyaratan ini

3179
03:01:50,710 --> 03:01:53,710
lalu ekspresi Boolean berikut\n

3180
03:01:55,240 --> 03:01:58,300
Di C, ini sebenarnya dipetakan dengan cukup rapi.

3181
03:01:58,300 --> 03:02:02,290
Jauh lebih bersih dari kiri ke kanan\n

3182
03:02:02,290 --> 03:02:04,990
Di sini, kita baru saja memiliki kode\nyang terlihat seperti ini.

3183
03:02:04,990 --> 03:02:09,251
Jika, spasi, dua tanda kurung\ndan x kurang dari y

3184
03:02:09,251 --> 03:02:12,224
dan kemudian kita memiliki sesuatu seperti\nprintf di tengahnya.

3185
03:02:12,224 --> 03:02:14,140
Jadi di sini, ini sebenarnya\nsebuah pemetaan yang bagus.

3186
03:02:14,140 --> 03:02:16,511
Perhatikan itu, sama seperti\npotongan puzzle kuning di Scratch

3187
03:02:16,511 --> 03:02:18,644
adalah semacam memeluk\npotongan puzzle ungu

3188
03:02:18,644 --> 03:02:21,310
itulah peran sebenarnya yang dimainkan\ntanda kurung kurawal ini.

3189
03:02:21,310 --> 03:02:24,700
Mereka semacam merangkum\semua kode di dalamnya.

3190
03:02:24,700 --> 03:02:27,850
Tanda kurung mewakili\nekspresi Boolean

3191
03:02:27,851 --> 03:02:32,411
yang perlu ditanyakan dan dijawab\n

3192
03:02:32,411 --> 03:02:34,841
Dan ini pengecualian terhadap\napa yang saya singgung sebelumnya.

3193
03:02:34,841 --> 03:02:38,890
Biasanya, saat Anda melihat sebuah kata dan\nkemudian tanda kurung, berarti sesuatu

3194
03:02:38,890 --> 03:02:42,130
lalu tanda kurung tutup, I\n

3195
03:02:42,130 --> 03:02:44,320
Dan saya masih merasa cukup\nsenang dengan klaim itu.

3196
03:02:45,761 --> 03:02:48,281
Dan kata if bukanlah sebuah fungsi.

3197
03:02:48,281 --> 03:02:50,501
Itu hanya konstruksi pemrograman.

3198
03:02:50,501 --> 03:02:55,421
Ini adalah fitur bahasa C\n

3199
03:02:55,421 --> 03:02:58,001
untuk tujuan berbeda\nuntuk ekspresi Boolean.

3200
03:02:58,001 --> 03:02:59,411
Bagaimana dengan hal seperti ini?

3201
03:02:59,411 --> 03:03:02,501
Minggu lalu, jika Anda ingin\nmemiliki persimpangan dua arah

3202
03:03:02,501 --> 03:03:05,501
pergi ke sini atau ke sana,\nAnda dapat melakukannya jika dan yang lain.

3203
03:03:05,501 --> 03:03:08,091
Di C, akan terlihat\nseperti ini.

3204
03:03:08,091 --> 03:03:11,111
Dan jika kita menambahkan printfnya,\nit sekarang terlihat sama saja

3205
03:03:11,111 --> 03:03:15,041
tapi tentu saja ia menambahkan kata lain\n

3206
03:03:15,040 --> 03:03:21,190
Selain itu, di C, Ini tidak sepenuhnya\n

3207
03:03:21,191 --> 03:03:25,781
jika Anda hanya memiliki satu baris\nkode yang menjorok ke bawah.

3208
03:03:25,781 --> 03:03:30,068
Namun, untuk praktik terbaik, lakukan saja,\n

3209
03:03:30,067 --> 03:03:31,900
dan pada akhirnya siapa saja\nyang membaca kode Anda

3210
03:03:31,900 --> 03:03:35,411
yang Anda inginkan hanya untuk hal itu\n

3211
03:03:35,411 --> 03:03:37,060
Bagaimana dengan ini dari minggu lalu?

3212
03:03:37,060 --> 03:03:38,681
Inilah pertigaan jalan tiga arah.

3213
03:03:38,681 --> 03:03:45,073
Jika x lebih kecil dari y, lain jika x adalah\n

3214
03:03:45,073 --> 03:03:47,531
Sekarang, di sinilah Anda menemukan beberapa\nperbedaan antara Scratch

3215
03:03:47,531 --> 03:03:52,751
dan C. Scratch menggunakan tanda sama dengan\n

3216
03:03:52,751 --> 03:03:55,841
C menggunakan satu tanda sama dengan\nuntuk penetapan dari kanan

3217
03:03:55,841 --> 03:03:58,611
ke kiri, perbedaan kecil\nantara kedua dunia.

3218
03:03:58,611 --> 03:04:02,831
Di C, kita bisa menerapkan hal yang sama\n

3219
03:04:02,831 --> 03:04:04,331
hanya tambahan ini lagi jika.

3220
03:04:04,331 --> 03:04:08,695
Dan jika kita menambahkan printfnya, itu\n

3221
03:04:08,695 --> 03:04:12,460
Hal ini benar baik di dunia\nScratch maupun di dunia C.

3222
03:04:12,460 --> 03:04:16,420
Namun bisakah seseorang mengajukan klaim bahwa\n

3223
03:04:18,581 --> 03:04:21,730
Setidaknya kita membutuhkan yang lain,\ntetapi kita tidak membutuhkan yang terakhir jika.

3224
03:04:21,730 --> 03:04:24,220
Sebab, setidaknya dalam\ndunia membandingkan bilangan bulat

3225
03:04:24,220 --> 03:04:27,220
nilainya akan lebih kecil\ntdari, lebih besar dari, atau sama dengan.

3226
03:04:28,730 --> 03:04:31,331
Jadi Anda dapat menghemat beberapa\ndetik, jika Anda mau

3227
03:04:31,331 --> 03:04:35,380
program Anda sedang berjalan-- sekejap\n

3228
03:04:35,380 --> 03:04:37,870
dan kemudian menyimpulkan apa\njawaban yang ketiga

3229
03:04:37,870 --> 03:04:41,480
pasti berdasarkan\nlogika kemanusiaan Anda sendiri di sini.

3230
03:04:41,480 --> 03:04:42,820
Sekarang, mengapa itu merupakan hal yang baik?

3231
03:04:42,820 --> 03:04:46,570
Jika, misalnya, x dan y\nkebetulan sama satu sama lain--

3232
03:04:46,570 --> 03:04:51,341
Saya mengetikkan 1 dan 1 untuk kedua nilai,\n

3233
03:04:51,341 --> 03:04:55,570
dalam kasus versi ini,\nAnda agak bodoh

3234
03:04:55,570 --> 03:04:59,021
menanyakan tiga pertanyaan, yang semuanya\nakan ditanyakan

3235
03:04:59,021 --> 03:05:02,320
padahal jawabannya tidak, tidak, ya.

3236
03:05:05,800 --> 03:05:09,640
Tampaknya hal itu tidak diperlukan karena\n

3237
03:05:09,640 --> 03:05:13,450
singkirkan if dan\n yang tidak diperlukan

3238
03:05:13,450 --> 03:05:16,480
jika tidak, cetak bahwa x sama dengan y--

3239
03:05:16,480 --> 03:05:20,960
sekarang jika x memang sama dengan y karena\n

3240
03:05:20,960 --> 03:05:26,200
sekarang kamu hanya akan bertanya dua\n

3241
03:05:26,200 --> 03:05:29,480
dan kemudian Anda akan mendapatkan\nhasil yang benar sama.

3242
03:05:29,480 --> 03:05:32,140
Jadi, sekali lagi, detail kecil,\ntapi, sekali lagi, hal-hal semacam itu

3243
03:05:32,140 --> 03:05:33,849
Anda harus memikirkan\ntentangnya, bukan hanya sebagai

3244
03:05:33,849 --> 03:05:36,431
Anda menulis kode Anda\nbenar tetapi juga menulis

3245
03:05:36,431 --> 03:05:38,831
itu harus dirancang dengan baik juga.

3246
03:05:38,831 --> 03:05:41,081
Baiklah, jadi mengapa kita tidak\nterjemahkan ini saja

3247
03:05:41,081 --> 03:05:44,650
ke dalam konteks program\naktual di sini?

3248
03:05:44,650 --> 03:05:46,570
Saya akan membuat jendela kosong di sini.

3249
03:05:46,570 --> 03:05:50,441
Dan mari kita lakukan sesuatu dengan poin,\n

3250
03:05:51,521 --> 03:05:54,641
Biarkan saya melanjutkan dan\nmenjalankan kode poin.c.

3251
03:05:54,640 --> 03:05:56,710
Itu hanya akan\ngmemberi saya file teks baru.

3252
03:05:56,710 --> 03:06:00,760
Lalu di sini, saya akan\ndo seperti biasa, menyertakan cs50.h.

3253
03:06:04,781 --> 03:06:08,231
Begitu banyak boilerplate, bisa dikatakan\ndalam program-program awal ini.

3254
03:06:09,521 --> 03:06:12,820
Mari kita tanyakan kepada pengguna, berapa\nbanyak poin yang mereka peroleh

3255
03:06:12,820 --> 03:06:15,060
kalah di PSet CS50 terbarunya?

3256
03:06:15,060 --> 03:06:19,040
Jadi seperti membangkitkan foto\n saya

3257
03:06:19,040 --> 03:06:20,690
di mana saya sendiri kehilangan beberapa poin.

3258
03:06:23,800 --> 03:06:27,740
Lalu saya akan mengajukan pertanyaan dalam bahasa Inggris\n

3259
03:06:29,300 --> 03:06:33,600
Dan setelah saya mendapatkan jawaban ini,\n

3260
03:06:33,601 --> 03:06:36,861
Jadi jika poin kurang dari 2--

3261
03:06:36,861 --> 03:06:40,521
meminjam sintaksis yang kita\nlihat di layar beberapa saat yang lalu--

3262
03:06:40,521 --> 03:06:42,921
mari kita lanjutkan dan mencetak\ntanpa penjelasan

3263
03:06:42,921 --> 03:06:49,191
seperti kamu kehilangan poin lebih sedikit\ntdari aku, garis miring terbalik n.

3264
03:06:49,191 --> 03:06:52,221
lain jika poin lebih besar dari 2--

3265
03:06:52,220 --> 03:06:53,990
yaitu, sekali lagi, berapa banyak yang hilang dariku--

3266
03:06:53,990 --> 03:06:59,661
Saya akan melanjutkan dan mencetak Anda\n

3267
03:06:59,661 --> 03:07:03,847
else if-- tunggu sebentar, yang lain sepertinya\n

3268
03:07:03,847 --> 03:07:05,931
Saya akan melanjutkan\ndan mencetak sesuatu

3269
03:07:05,931 --> 03:07:12,621
seperti kamu kehilangan jumlah\npoin yang sama denganku, garis miring terbalik n.

3270
03:07:12,620 --> 03:07:16,790
Jadi, sejujurnya saja\n

3271
03:07:16,790 --> 03:07:18,960
tapi untuk skenario konkret di sini.

3272
03:07:18,960 --> 03:07:21,090
Jadi izinkan saya menyimpan ini.

3273
03:07:21,091 --> 03:07:24,140
Biarkan saya melanjutkan dan\nmenjalankan poin, Enter.

3274
03:07:27,021 --> 03:07:29,331
Lalu, berapa poin yang hilang?

3275
03:07:31,102 --> 03:07:32,810
Baiklah, Anda kehilangan\npoin lebih sedikit daripada saya.

3276
03:07:37,081 --> 03:07:40,851
Jadi, sekali lagi, kami mempunyai kemampuan untuk\n

3277
03:07:40,851 --> 03:07:44,841
dari minggu lalu pada kenyataannya, yaitu\n

3278
03:07:46,111 --> 03:07:50,811
Tapi ada sesuatu yang tidak kentara di sini,\n

3279
03:07:50,810 --> 03:07:53,390
bahwa seseorang mungkin memanggil nomor ajaib.

3280
03:07:53,390 --> 03:07:56,581
Ini adalah pembicaraan pemrograman\nuntuk sesuatu yang telah saya lakukan di sini.

3281
03:07:56,581 --> 03:08:01,880
Ada sedikit redundansi yang tidak ada hubungannya\n

3282
03:08:01,880 --> 03:08:07,470
Tapi apakah ada sesuatu yang saya ketik dua kali\n

3283
03:08:07,470 --> 03:08:11,430
Tepatnya, saya sudah melakukan hardcode, boleh dikatakan,\n

3284
03:08:11,431 --> 03:08:13,771
di dua lokasi, dalam hal ini--

3285
03:08:13,771 --> 03:08:15,701
itu tidak datang dari pengguna.

3286
03:08:15,700 --> 03:08:18,600
Jadi, tampaknya, setelah saya\nmengkompilasi ini, inilah saatnya.

3287
03:08:18,601 --> 03:08:21,671
Kamu selalu membandingkan\ndirimu denganku seperti tahun 1996

3288
03:08:21,671 --> 03:08:24,630
yang mana, baik atau buruk,\nis keseluruhan yang dapat dilakukan oleh program.

3289
03:08:24,630 --> 03:08:27,930
Namun ini juga merupakan contoh\na angka ajaib dalam arti tertentu

3290
03:08:27,931 --> 03:08:31,691
seperti, tunggu, darimana datangnya itu\n

3291
03:08:31,691 --> 03:08:35,251
Rasanya seperti kita sedang menyetel\n

3292
03:08:35,251 --> 03:08:36,480
dari mengacau di jalan.

3293
03:08:36,480 --> 03:08:39,931
Karena semakin panjang kode ini,\n

3294
03:08:42,900 --> 03:08:45,030
apakah saya akan terus mengetik nomor 2?

3295
03:08:47,911 --> 03:08:49,861
Namun sejujurnya, pada akhirnya\nAnda akan gagal

3296
03:08:49,861 --> 03:08:52,411
dan Anda akan melewatkan salah satu\n

3297
03:08:52,411 --> 03:08:54,911
karena mungkin kinerja saya lebih buruk\ntahun depan, atau 1, kinerja saya lebih baik.

3298
03:08:54,911 --> 03:08:57,550
Dan Anda tidak ingin\nnomor-nomor ini tidak sinkron.

3299
03:08:57,550 --> 03:09:01,050
Jadi apa yang menjadi\npeningkatan logis pada desain ini

3300
03:09:01,050 --> 03:09:04,110
daripada melakukan hard-coding pada\nangka yang sama secara ajaib

3301
03:09:07,011 --> 03:09:09,689
Ya, kenapa saya tidak membuat\nvariabel yang bisa saya gunakan di sana?

3302
03:09:09,689 --> 03:09:11,480
Jadi, misalnya, saya\nbisa membuat variabel

3303
03:09:11,480 --> 03:09:14,540
seperti ini, bilangan bulat lain bernama milik saya.

3304
03:09:14,540 --> 03:09:16,370
Dan saya hanya akan\nmenginisialisasikannya ke 2.

3305
03:09:16,370 --> 03:09:19,370
Lalu saya akan mengubah\nsebutan 2 menjadi ini.

3306
03:09:19,370 --> 03:09:23,000
Dan nama saya adalah\nnama yang cukup masuk akal untuk sebuah variabel sejauh ini

3307
03:09:23,001 --> 03:09:27,261
karena merujuk pada\npoin siapa yang dipertanyakan.

3308
03:09:27,261 --> 03:09:29,781
Ada risiko di sini\nmeskipun kecil.

3309
03:09:29,781 --> 03:09:32,361
Saya bisa saja\nmengubah milik saya secara tidak sengaja suatu saat nanti.

3310
03:09:32,361 --> 03:09:36,451
Mungkin aku lupa apa yang diwakili oleh diriku,\n

3311
03:09:36,450 --> 03:09:39,020
Jadi ada cara untuk memberitahu\nkomputer "jangan percaya padaku

3312
03:09:39,021 --> 03:09:40,730
karena pada akhirnya aku akan mengacau

3313
03:09:40,730 --> 03:09:43,310
dengan membuat variabel konstan juga.

3314
03:09:43,310 --> 03:09:45,780
Jadi konstanta dalam\nbahasa pemrograman--

3315
03:09:45,781 --> 03:09:47,421
ini tidak ada di Scratch--

3316
03:09:47,421 --> 03:09:50,541
hanyalah petunjuk tambahan untuk\n

3317
03:09:50,540 --> 03:09:52,130
Anda untuk memprogram lebih defensif.

3318
03:09:52,130 --> 03:09:55,340
Jika Anda tidak percaya\npada diri sendiri, jangan lakukan itu

3319
03:09:55,341 --> 03:09:57,650
gagal nanti, atau\njujur saja, dalam praktiknya

3320
03:09:57,650 --> 03:10:01,161
jika Anda tahu angka tersebut\ntidak boleh berubah, buatlah menjadi konstan

3321
03:10:01,161 --> 03:10:02,820
dan jangan pernah memikirkannya lagi.

3322
03:10:02,820 --> 03:10:08,091
Ini memberitahu kompiler untuk memastikan\n

3323
03:10:09,740 --> 03:10:14,240
Dan konvensi lain di C dan\n lainnya

3324
03:10:14,240 --> 03:10:16,692
sering kali kita hanya\nmemanfaatkan huruf besar pada variabel.

3325
03:10:16,692 --> 03:10:18,650
Sepertinya Anda\nyelling, tapi itu sebenarnya adil

3326
03:10:18,650 --> 03:10:20,003
secara visual membuatnya menonjol.

3327
03:10:20,003 --> 03:10:21,711
Jadi ini semacam\na aturan praktis yang bagus

3328
03:10:21,710 --> 03:10:24,590
yang membantu Anda menyadari, oh,\nitu pasti sebuah konstanta.

3329
03:10:24,591 --> 03:10:27,291
Kapitalisasi saja\ntidak menjadikannya konstan.

3330
03:10:28,880 --> 03:10:31,130
Namun penggunaan huruf besar\nhanya sekadar pengingat visual

3331
03:10:31,130 --> 03:10:35,040
bahwa ini ada di suatu tempat,\nentah bagaimana sebuah konstanta.

3332
03:10:35,040 --> 03:10:37,490
Jadi hanya perbaikan kecil,\ntapi, sekali lagi, kami sudah memperbaikinya

3333
03:10:37,490 --> 03:10:41,450
semacam menjadi lebih baik dalam\npemrograman hanya dengan menanamkan

3334
03:10:43,700 --> 03:10:48,020
Lalu, ada pertanyaan tentang kondisi\nin C atau konstanta ini?

3335
03:10:48,756 --> 03:10:53,810
AUDIENCE: Mengapa Anda tidak menggunakan\n

3336
03:10:53,810 --> 03:10:58,761
DAVID J. MALAN: Ya, kenapa kamu\n

3337
03:10:59,361 --> 03:11:01,401
Ini adalah cara\nbahasa dirancang.

3338
03:11:03,501 --> 03:11:07,220
Secara umum, saat Anda\n

3339
03:11:08,181 --> 03:11:09,861
tidak ada titik koma yang terlibat.

3340
03:11:09,861 --> 03:11:14,781
Untuk saat ini, asumsikan bahwa titik koma biasanya\n

3341
03:11:14,781 --> 03:11:18,411
Itu tidak 100% dapat diandalkan untuk heuristik,\n

3342
03:11:20,720 --> 03:11:23,720
Tangan kiri tidak berbicara dengan tangan kanan\n

3343
03:11:25,191 --> 03:11:27,391
Baiklah, mari kita lakukan hal lain.

3344
03:11:28,681 --> 03:11:31,761
Jika saya memiliki kemampuan untuk menanyakan\nsesuatu dengan syarat--

3345
03:11:31,761 --> 03:11:33,740
apakah hal ini benar atau\nis hal lainnya--

3346
03:11:33,740 --> 03:11:36,650
bisakah saya menulis program yang sangat sederhana\n

3347
03:11:36,650 --> 03:11:39,980
memberitahuku apakah suatu bilangan yang\ntipe manusianya genap atau ganjil?

3348
03:11:39,980 --> 03:11:42,390
Baiklah, izinkan saya menyiapkan\nkerangka kerja untuk itu.

3349
03:11:42,390 --> 03:11:44,990
Biarkan saya melanjutkan dan\nmenulis kode paritas--

3350
03:11:44,990 --> 03:11:47,060
adalah cara yang bagus untuk mengatakan genap atau ganjil.

3351
03:11:47,060 --> 03:11:53,511
Dan biarkan saya melanjutkan dan memasukkan cs50.h,\n

3352
03:11:53,511 --> 03:11:55,521
sekali lagi, lebih banyak tentang hal-hal yang akan terjadi.

3353
03:11:55,521 --> 03:11:59,781
Namun, untuk saat ini, saya akan melanjutkan\n

3354
03:11:59,781 --> 03:12:03,351
dengan menelepon get_int dan menanyakan\nmereka apa pun nnya.

3355
03:12:03,351 --> 03:12:07,171
Dan sekarang saya akan\ninmemperkenalkan beberapa kodesemu.

3356
03:12:07,171 --> 03:12:08,931
Jadi, inilah\contoh program yang pertama

3357
03:12:08,931 --> 03:12:12,001
sejujurnya, saya tidak\nbegitu yakin bagaimana melanjutkannya.

3358
03:12:12,001 --> 03:12:14,691
Jadi izinkan saya menggunakan beberapa\npseudocode menggunakan komentar.

3359
03:12:14,691 --> 03:12:17,221
Pada akhirnya, saya akan membuang\nini dan menulis kode sebenarnya.

3360
03:12:17,220 --> 03:12:22,675
Tetapi jika n genap, maka cetak--

3361
03:12:22,675 --> 03:12:24,050
sebenarnya, izinkan saya mencetaknya saja.

3362
03:12:24,050 --> 03:12:27,411
Izinkan saya melanjutkan dan mengatakan\nprintf, kutip tanda kutip, "genap"

3363
03:12:27,411 --> 03:12:29,630
karena saya tahu cara menggunakan printf.

3364
03:12:29,630 --> 03:12:33,230
yang lain-- baiklah, saya\tahu cara mencetak ganjil

3365
03:12:33,230 --> 03:12:35,900
jadi izinkan saya mengatakan printf,\nquote unquote, "aneh".

3366
03:12:35,900 --> 03:12:39,630
Jadi di sini, saya sudah mencobanya\n

3367
03:12:39,630 --> 03:12:42,680
Dan izinkan saya melanjutkan dan menempatkan\nin placeholder kecil saya.

3368
03:12:42,681 --> 03:12:44,581
Saya ingin melakukan beberapa kondisi.

3369
03:12:44,581 --> 03:12:49,400
Jadi jika sekarang ada tanda tanya, biarkan saya pergi\n

3370
03:12:53,540 --> 03:12:55,640
Saya semakin dekat untuk menyelesaikan ini.

3371
03:12:55,640 --> 03:12:59,370
Namun saya masih memiliki\ntanda tanya di sini.

3372
03:12:59,370 --> 03:13:06,090
Caranya, menggunakan sintaks yang telah kita lihat, mungkin\n

3373
03:13:08,120 --> 03:13:12,050
Ada operator kecil ini, saya\n

3374
03:13:12,050 --> 03:13:14,100
operator, itu akan memungkinkan\nAnda melakukan hal itu.

3375
03:13:14,101 --> 03:13:16,663
Jika Anda membagi angka apa pun dengan\n2, itulah heuristik matematika

3376
03:13:16,663 --> 03:13:19,371
akan memberitahumu jika hasilnya genap\n

3377
03:13:21,290 --> 03:13:25,040
Dan itu bagus karena alternatifnya\n

3378
03:13:25,040 --> 03:13:33,440
seperti jika n == 0 atau jika n\nsama dengan 2 atau n sama dengan 4--

3379
03:13:33,441 --> 03:13:37,070
kode Anda akan sangat panjang jika\n

3380
03:13:37,070 --> 03:13:43,911
Tetapi jika saya tidak membaginya dengan 2\ndan melihat sisanya--

3381
03:13:43,911 --> 03:13:47,281
ini agak samar, tapi\nini memang akan berhasil.

3382
03:13:47,281 --> 03:13:51,471
Jadi tanda persennya adalah\noperator sisanya.

3383
03:13:51,470 --> 03:13:56,790
Itu adalah pembilang dibagi penyebut\n

3384
03:13:56,790 --> 03:13:58,980
tapi, lebih tepatnya, sisanya.

3385
03:13:58,980 --> 03:14:02,511
Jadi jika Anda membagi sesuatu dengan 2,\n

3386
03:14:02,511 --> 03:14:06,681
Dan jika, memang, 2 membagi\ninmenjadi n secara merata, sehingga menghasilkan 0

3387
03:14:06,681 --> 03:14:08,060
maka Anda akan mencetak genap.

3388
03:14:10,070 --> 03:14:14,751
Tapi ada sesuatu yang aneh-- permainan kata-kata\n

3389
03:14:14,751 --> 03:14:20,640
Apa sintaksis baru lainnya,\n

3390
03:14:25,540 --> 03:14:28,090
Dan saya bahkan mendapati diri saya\nmengatakannya secara verbal beberapa saat yang lalu

3391
03:14:28,091 --> 03:14:29,470
hanya karena itu sudah mendarah daging.

3392
03:14:34,581 --> 03:14:36,331
DAVID J. MALAN: Ya, jika\nsesuatu setara dengan yang lain.

3393
03:14:36,331 --> 03:14:38,480
Jadi sekarang ini adalah operator kesetaraan.

3394
03:14:38,480 --> 03:14:40,280
Ini bukan tugas dari kanan ke kiri.

3395
03:14:40,281 --> 03:14:42,561
Dan yang ini juga merupakan\contoh dari, secara harafiah

3396
03:14:42,560 --> 03:14:45,440
manusia tidak benar-benar merencanakan\nahke depan, mungkin, ke kiri

3397
03:14:45,441 --> 03:14:47,541
tidak berbicara dengan tangan kanan\nin yang diputuskan seseorang

3398
03:14:47,540 --> 03:14:49,161
mari kita gunakan tanda sama dengan\nuntuk tugas.

3399
03:14:49,161 --> 03:14:52,036
Dan kemudian beberapa menit atau\n

3400
03:14:52,036 --> 03:14:53,841
bagaimana kita sekarang membandingkan kesetaraan?

3401
03:14:55,054 --> 03:14:58,220
Dan jika menurut Anda ini agak aneh,\n

3402
03:14:58,220 --> 03:15:01,050
ada versi ketiga di mana\nAnda menggunakan tiga tanda sama dengan.

3403
03:15:01,050 --> 03:15:03,331
Jadi, sekali lagi, manusialah yang\nmendesain bahasa-bahasa ini.

3404
03:15:03,331 --> 03:15:06,528
Jadi, jika Anda merasa frustrasi karenanya,\n

3405
03:15:06,528 --> 03:15:08,361
ini mungkin bukan\ndesain yang terbaik.

3406
03:15:08,361 --> 03:15:11,191
Namun kami harus\nmenjalaninya sejak saat itu.

3407
03:15:11,191 --> 03:15:12,891
Jadi izinkan saya melanjutkan dan memperkecil tampilan di sini.

3408
03:15:12,890 --> 03:15:15,751
Izinkan saya melanjutkan dan membuat kesetaraan di sini.

3409
03:15:15,751 --> 03:15:20,570
Jadi buatlah paritas-- dan, sekali lagi, paritas\n

3410
03:15:20,570 --> 03:15:23,300
./parity, ketik angka seperti 2.

3411
03:15:26,421 --> 03:15:29,720
3, itu memang janggal, dan lain sebagainya.

3412
03:15:29,720 --> 03:15:32,870
Jika kami melanjutkan pengujian, mungkin,\n

3413
03:15:34,171 --> 03:15:37,701
Izinkan saya melanjutkan sekarang dan memulai\n

3414
03:15:37,700 --> 03:15:40,760
karena, memang, semakin\n

3415
03:15:40,761 --> 03:15:42,681
semua boilerplate di atas.

3416
03:15:42,681 --> 03:15:46,011
Izinkan saya membuat program\nyang disebut setuju.c itu

3417
03:15:46,011 --> 03:15:48,111
mengingatkan pada\nbentuk apa pun yang Anda miliki

3418
03:15:48,111 --> 03:15:52,291
untuk menyetujui online dengan kotak centang\n

3419
03:15:52,290 --> 03:15:55,460
Jadi izinkan saya membuang semua\ngisi program utama ini

3420
03:15:55,460 --> 03:15:57,780
dan sekarang tanyakan sesuatu seperti ini.

3421
03:15:57,781 --> 03:16:01,621
Izinkan saya melanjutkan dan meminta\pengguna menyetujui sesuatu.

3422
03:16:01,620 --> 03:16:06,800
Saya akan melanjutkan dan mengatakan, bagaimana caranya\n

3423
03:16:06,800 --> 03:16:12,110
apa pun pertanyaannya--\n

3424
03:16:12,111 --> 03:16:13,951
untuk ya atau tidak, masing-masing.

3425
03:16:13,950 --> 03:16:16,970
Jadi kalau hanya satu\nkarakter saja, sebenarnya saya

3426
03:16:16,970 --> 03:16:18,610
sebenarnya bisa bertahan hanya dengan get_char.

3427
03:16:18,611 --> 03:16:20,361
Belum pernah digunakan sebelumnya,\ntapi ada di menu kami

3428
03:16:20,361 --> 03:16:22,341
fungsi dari perpustakaan CS50.

3429
03:16:22,341 --> 03:16:25,431
Dan jika saya ingin mendapatkan\nrespons pengguna

3430
03:16:25,431 --> 03:16:28,501
nilai yang dikembalikan harus\na char juga di sebelah kiri.

3431
03:16:28,501 --> 03:16:31,281
Jadi sekarang kita telah melihat string,\nint, dan sekarang karakter

3432
03:16:31,281 --> 03:16:33,171
jika kita hanya peduli pada satu huruf saja.

3433
03:16:33,171 --> 03:16:38,150
Dan sekarang mari kita lanjutkan,\nperiksa apakah pengguna menyetujuinya.

3434
03:16:38,150 --> 03:16:47,751
Jadi bagaimana jika c == "y", izinkan saya\n

3435
03:16:47,751 --> 03:16:51,900
print out setuju atau\nkalimat seperti itu.

3436
03:16:51,900 --> 03:16:54,560
lain jika mereka tidak mengetik\nc-- atau tahukah Anda?

3437
03:16:54,560 --> 03:16:56,390
Mari kita jelaskan secara eksplisit di sini,\nsupaya mereka tidak bisa melakukannya

3438
03:16:56,390 --> 03:16:59,060
ketik z atau b atau huruf acak.

3439
03:16:59,060 --> 03:17:07,011
lain jika c=="n" n karena tidak, izinkan saya\n

3440
03:17:07,978 --> 03:17:10,520
Dan saya hanya akan mengabaikan\npengguna jika mereka tidak mau bekerja sama

3441
03:17:10,521 --> 03:17:14,781
dan mereka mengetik z atau b atau\nsesuatu yang bukan y atau n.

3442
03:17:14,781 --> 03:17:21,141
Baiklah, izinkan saya melanjutkan sekarang dan\n

3443
03:17:22,570 --> 03:17:25,251
Mari kita gunakan yang default.\nOK, jadi sepertinya berhasil.

3444
03:17:25,251 --> 03:17:27,201
Tidak, saya tidak setuju kali ini.

3445
03:17:28,411 --> 03:17:33,921
Bagaimana kalau tombol caps lock saya aktif atau\n

3446
03:17:37,972 --> 03:17:41,181
Jadi, tentu saja, ada bug, setidaknya jika saya mau\n

3447
03:17:41,181 --> 03:17:43,021
yang agak masuk akal.

3448
03:17:43,021 --> 03:17:48,480
Jadi, menurut Anda apa solusi\nyang mungkin ada di sini?

3449
03:17:48,480 --> 03:17:51,620
Bagaimana cara mengatasi masalah ini dan menoleransi\nhuruf besar dan kecil?

3450
03:17:51,620 --> 03:17:54,335
Mungkin implementasi apa yang paling sederhana dan paling naif?

3451
03:17:56,490 --> 03:17:58,990
DAVID J. MALAN: Ya, jadi kenapa\nsaya tidak menanyakan dua pertanyaan saja?

3452
03:17:58,990 --> 03:18:03,550
Atau tahukah Anda, bahkan lebih sederhana\n

3453
03:18:03,550 --> 03:18:06,911
jika berkenan, izinkan saya menyalin\nan menempelkan beberapa kode ini.

3454
03:18:06,911 --> 03:18:11,781
Ubah ini ke yang lain-- ups,\ntidak dalam huruf kapital-- lain jika "Y".

3455
03:18:11,781 --> 03:18:13,781
Dan kemudian saya yakin saya bisa\melakukan hal yang sama dengan n.

3456
03:18:13,781 --> 03:18:15,641
Namun di sini juga, seperti\ndengan Scratch, secepatnya

3457
03:18:15,640 --> 03:18:17,724
saat Anda mulai menemukan\nAnda sedang menyalin dan menempel

3458
03:18:17,724 --> 03:18:19,480
Anda mungkin melakukan sesuatu yang salah.

3459
03:18:19,480 --> 03:18:22,810
Dan apa yang Anda katakan secara lisan,\njika boleh, sebenarnya lebih baik.

3460
03:18:22,810 --> 03:18:29,501
Karena maksudmu aku bisa\n

3461
03:18:32,841 --> 03:18:39,711
Masalahnya adalah, Anda tidak dapat menggunakan kata OR\n

3462
03:18:39,710 --> 03:18:43,180
Jadi Anda bisa mengungkapkan satu\npertanyaan atau lainnya.

3463
03:18:43,181 --> 03:18:46,301
Anda hanya perlu salah satu\njawabannya adalah ya atau benar

3464
03:18:46,300 --> 03:18:48,220
dan Anda menggunakan dua batang vertikal.

3465
03:18:48,220 --> 03:18:50,980
Sebaliknya, supaya\nAnda pernah melihatnya, jika Anda

3466
03:18:50,980 --> 03:18:54,341
ingin memeriksa apakah ada yang sama\n

3467
03:18:54,341 --> 03:18:56,890
Anda bisa menggunakan dua ampersand.

3468
03:18:56,890 --> 03:18:59,411
Namun secara logika hal ini tidak masuk akal\ndi sini.

3469
03:18:59,411 --> 03:19:02,650
Tentu saja, apa yang diketik manusia tidak bisa\n

3470
03:19:03,921 --> 03:19:05,711
Jadi dalam hal ini, kami menginginkan OR.

3471
03:19:05,710 --> 03:19:07,475
Tapi itu memungkinkan saya\nmemperketat kode saya.

3472
03:19:07,476 --> 03:19:09,851
Saya tidak perlu mulai menyalin\nmenempelkan seluruh cabang.

3473
03:19:09,851 --> 03:19:13,560
Sekarang saya dapat mengajukan dua pertanyaan sekaligus.

3474
03:19:13,560 --> 03:19:16,870
Lalu, ada pertanyaan tentang variasi ini?

3475
03:19:17,869 --> 03:19:19,661
Bisakah Anda mengonversi\ninput menjadi huruf kecil semua?

3476
03:19:20,831 --> 03:19:22,480
Kami belum mempunyai kemampuan.

3477
03:19:22,480 --> 03:19:24,940
Ternyata itu akan membutuhkan--

3478
03:19:24,941 --> 03:19:27,166
mudahnya, perpustakaan lain,\nmeskipun kita bisa melakukannya

3479
03:19:27,165 --> 03:19:30,040
diri kita sendiri mengetahui sedikit tentang\n

3480
03:19:30,040 --> 03:19:34,113
Tapi, ya, itu bisa menjadi alternatif,\n

3481
03:19:37,140 --> 03:19:38,390
DAVID J. MALAN: Pertanyaan bagus.

3482
03:19:38,390 --> 03:19:41,987
Sayangnya, Anda harus eksplisit\n

3483
03:19:41,987 --> 03:19:44,320
meskipun itu\nbagaimana Anda mungkin memikirkannya.

3484
03:19:44,320 --> 03:19:49,240
Anda harus mengajukan pertanyaan lengkap\n

3485
03:19:50,230 --> 03:19:51,940
Izinkan saya mengajukan pertanyaan sekarang juga.

3486
03:19:53,050 --> 03:19:57,760
Saya sengaja menggunakan tanda kutip tunggal\n

3487
03:19:59,351 --> 03:20:03,521
Sebelumnya, kami menggunakan tanda kutip ganda\n

3488
03:20:05,911 --> 03:20:08,970
Benar, string adalah tanda kutip ganda untuk\n

3489
03:20:10,050 --> 03:20:14,210
Dan tanda kutip tunggal untuk karakter tunggal.

3490
03:20:14,210 --> 03:20:15,800
Karena tipe data saya berbeda.

3491
03:20:15,800 --> 03:20:18,770
Saya memilih rute sederhana\nhanya menggunakan satu karakter.

3492
03:20:18,771 --> 03:20:21,351
Faktanya, program ini\ntidak akan bekerja dengan Y-E-S

3493
03:20:21,351 --> 03:20:25,041
atau TIDAK. Itu tidak didukung di\n

3494
03:20:25,040 --> 03:20:27,831
Saya harus menggunakan tanda kutip tunggal\nkarena itulah cara C melakukannya.

3495
03:20:27,831 --> 03:20:29,790
Jika Anda berurusan dengan\nkarakter tunggal

3496
03:20:29,790 --> 03:20:31,850
alias karakter, gunakan tanda kutip tunggal.

3497
03:20:32,781 --> 03:20:36,591
bahkan jika itu hanya satu\nkarakter dalam sebuah string

3498
03:20:36,591 --> 03:20:39,623
seolah-olah Anda mulai menulis\n

3499
03:20:39,623 --> 03:20:40,790
itu akan menjadi tanda kutip ganda.

3500
03:20:40,790 --> 03:20:42,860
Dan kita akan melihat alasannya\ntidak lama lagi.

3501
03:20:42,861 --> 03:20:46,551
Namun, sekali lagi, hanya hal-hal yang perlu diingat\nin setiap kali menulis kode

3502
03:20:46,550 --> 03:20:48,740
dalam bahasa khusus ini.

3503
03:20:50,970 --> 03:20:56,060
Jadi, jawaban singkatnya, jika saya mengerti\n

3504
03:20:56,060 --> 03:20:58,270
Dan ini bahkan lebih salah lagi.

3505
03:20:58,271 --> 03:21:00,771
Namun jika Anda tidak keberatan, izinkan saya\nmengambil kalengnya selama beberapa minggu

3506
03:21:00,771 --> 03:21:02,480
tentang ini mengapa ini tidak berhasil.

3507
03:21:02,480 --> 03:21:06,852
Cara paling menyenangkan untuk melakukan hal ini adalah\n

3508
03:21:06,852 --> 03:21:08,810
Namun ini pun merupakan lereng\nyang licin, karena apa

3509
03:21:08,810 --> 03:21:12,179
jika pengguna melakukan sesuatu yang aneh,\n

3510
03:21:12,179 --> 03:21:13,970
Anda dapat membayangkan ini\nmenjadi berantakan dengan cepat.

3511
03:21:13,970 --> 03:21:16,310
Saya menyukai ide Anda sebelumnya\ntentang memaksakan segalanya

3512
03:21:16,310 --> 03:21:18,560
untuk huruf kecil hanya untuk membakukan sesuatu.

3513
03:21:18,560 --> 03:21:22,700
Sayangnya, Anda tidak dapat membandingkan\nstring untuk kesetaraan seperti ini

3514
03:21:22,700 --> 03:21:24,780
karena, sekali lagi, alasannya akan\nmuncul dalam waktu dekat.

3515
03:21:24,781 --> 03:21:27,681
Jadi untuk hari ini, kami menyimpannya\n

3516
03:21:27,681 --> 03:21:31,640
hampir tidak mudah digunakan untuk\tidak hanya mentoleransi setiap huruf.

3517
03:21:31,640 --> 03:21:34,820
Dan ada pertanyaan di sini.

3518
03:21:34,820 --> 03:21:36,980
Pada keyboard bahasa Inggris AS\nit geser lalu

3519
03:21:36,980 --> 03:21:40,081
tombol garis miring terbalik di atas Kembali,\ntetapi bergantung pada keyboard Anda

3520
03:21:42,320 --> 03:21:45,140
Baiklah, jadi sekarang mari kita melihat ke belakang

3521
03:21:45,140 --> 03:21:47,181
pada sesuatu yang kami lakukan\nsedikit minggu lalu.

3522
03:21:47,181 --> 03:21:49,971
Biarkan saya melanjutkan dan membuka\na file bernama meow.c

3523
03:21:49,970 --> 03:21:52,460
karena, ingat, itulah\nyang kami lakukan pada Scratch pada awalnya.

3524
03:21:52,460 --> 03:21:55,251
Izinkan saya tidak menyertakan pustaka\nC50 kali ini

3525
03:21:55,251 --> 03:21:59,150
tapi hanya stdio.h karena saya\tidak hanya ingin printf untuk demo ini.

3526
03:21:59,150 --> 03:22:02,720
Izinkan saya melanjutkan sekarang dan\nprint saja meow.

3527
03:22:02,720 --> 03:22:06,411
Lalu jika saya ingin kucing mengeong\n

3528
03:22:11,210 --> 03:22:14,120
Program ini ditulis--\nbenar, saya klaim.

3529
03:22:15,591 --> 03:22:17,841
Tapi, sekali lagi, ini adalah\nawal percakapan kami

3530
03:22:17,841 --> 03:22:20,541
minggu lalu karena\ntidak dirancang dengan baik.

3531
03:22:20,540 --> 03:22:23,630
Dan jika seseorang ingin\nmenunjukkan hal yang sudah jelas

3532
03:22:23,630 --> 03:22:28,380
mengapa hal ini tidak\ndirancang dengan baik?

3533
03:22:28,380 --> 03:22:29,820
Ya, itu hanya pengulangan, kan?

3534
03:22:29,820 --> 03:22:31,894
Sekali lagi, saya benar-benar\nmemilih untuk menyalin-menempel.

3535
03:22:31,894 --> 03:22:33,810
Itu seharusnya menjadi sinyal\nbahwa Anda mungkin mengalaminya

3536
03:22:33,810 --> 03:22:37,870
melakukan sesuatu yang salah atau, paling banter,\n

3537
03:22:37,870 --> 03:22:40,195
Jadi solusinya, seperti yang mungkin Anda peroleh dari minggu lalu

3538
03:22:40,195 --> 03:22:42,570
mungkin akan menjadi salah satu\nhal yang disebut loop.

3539
03:22:42,570 --> 03:22:45,271
Jadi mari kita lihat beberapa\nsintaks for loop di C.

3540
03:22:45,271 --> 03:22:48,084
Namun, sekali lagi, tidak ada ide baru,\ini hanya beberapa sintaksis baru

3541
03:22:48,084 --> 03:22:49,501
itu akan membutuhkan waktu untuk membiasakan diri.

3542
03:22:49,501 --> 03:22:53,130
Di Scratch, jika Anda ingin mengeong\n

3543
03:22:53,130 --> 03:22:57,880
tidak ada kata kunci selamanya di C, jadi\n

3544
03:22:57,880 --> 03:22:59,220
Tapi ini yang terbaik yang bisa kami lakukan.

3545
03:22:59,220 --> 03:23:03,331
Ternyata ada\nkata kunci yang dipanggil while di C.

3546
03:23:03,331 --> 03:23:05,550
Dan hal semacam itu memiliki\nsemantik yang tepat

3547
03:23:05,550 --> 03:23:08,740
karena ini seperti saat saya melakukan\nsesuatu lagi dan lagi

3548
03:23:10,230 --> 03:23:14,790
Namun seperti kondisi if\atau kondisi else if

3549
03:23:14,790 --> 03:23:18,060
itu mengambil ekspresi Boolean\ndalam tanda kurung

3550
03:23:18,060 --> 03:23:21,130
perulangan while juga menggunakan ekspresi Boolean\n dalam tanda kurung.

3551
03:23:22,531 --> 03:23:26,041
Sekarang, jika saya ingin melakukan sesuatu\n

3552
03:23:26,040 --> 03:23:30,540
katakanlah 2 lebih besar dari\n1, sedangkan 3 lebih besar dari 2

3553
03:23:30,540 --> 03:23:32,430
atau hanya sesuatu yang sepenuhnya sewenang-wenang.

3554
03:23:32,431 --> 03:23:36,240
Tapi itu akan membuat Anda salah\n

3555
03:23:36,240 --> 03:23:41,130
Mengapa 3-- jika ingin benar, katakan saja benar.

3556
03:23:41,130 --> 03:23:45,780
Jadi ternyata di C ada\n

3557
03:23:45,781 --> 03:23:48,901
yang masing-masing benar\nan salah.

3558
03:23:48,900 --> 03:23:53,341
Saya juga bisa memasukkan nomor 1 untuk\n

3559
03:23:53,341 --> 03:23:56,081
namun kebanyakan orang hanya\nmengatakan benar secara eksplisit.

3560
03:23:56,081 --> 03:23:59,431
Jadi ini sedikit hackish, jika\nAnda mau, tapi sangat konvensional.

3561
03:23:59,431 --> 03:24:03,781
Tidak ada kata kunci selamanya di C. If\n

3562
03:24:03,781 --> 03:24:06,191
Saya hanya akan menggunakan\nsesuatu seperti printf di sini.

3563
03:24:06,191 --> 03:24:08,731
Jadi, sekali lagi, bukan terjemahan yang sempurna\ndari satu terjemahan

3564
03:24:08,730 --> 03:24:11,708
ke yang lain, tapi sepenuhnya\nmungkin di C. Bagaimana dengan ini?

3565
03:24:11,708 --> 03:24:14,041
Ini sedikit lebih umum\njika Anda ingin melakukan sesuatu

3566
03:24:14,040 --> 03:24:17,280
beberapa kali, seperti pengulangan 3.

3567
03:24:17,281 --> 03:24:21,901
Ada beberapa cara berbeda yang dapat kami lakukan\n

3568
03:24:21,900 --> 03:24:25,470
Dan di sinilah C-- seperti\nbanyak bahasa berbasis teks

3569
03:24:25,470 --> 03:24:28,921
kamu harus menghilangkannya\n

3570
03:24:28,921 --> 03:24:31,171
blok dan pikirkan,\nbaiklah, bagaimana caranya

3571
03:24:31,171 --> 03:24:35,880
membangun mesin kecil dalam perangkat lunak itu\n

3572
03:24:35,880 --> 03:24:40,380
Baiklah, izinkan saya memberi diri saya sebuah variabel\n

3573
03:24:40,380 --> 03:24:46,740
Biarkan saya membuat loop yang Boolean\n

3574
03:24:46,740 --> 03:24:50,310
idenya ada di sini, mengapa saya tidak\nmenghitung 1, 2, 3 saja?

3575
03:24:50,310 --> 03:24:53,790
Jadi bagaimana cara menerapkan\nfisik ini dalam kode?

3576
03:24:53,790 --> 03:24:57,180
Saya memberi diri saya sebuah variabel,\nsetel ke 0, 0 jari ke atas.

3577
03:24:57,181 --> 03:25:00,001
Sekarang, saya bertanya,\apakah penghitungnya kurang dari 3?

3578
03:25:00,001 --> 03:25:02,970
Jika demikian, silakan cetak meong.

3579
03:25:02,970 --> 03:25:06,331
Dan secara intuitif, meskipun\n

3580
03:25:06,331 --> 03:25:09,480
sebelum Scratch, apa\nlagi yang harus saya lakukan?

3581
03:25:09,480 --> 03:25:12,421
Saya telah meninggalkan ruang di sini untuk\tidak ada lagi alur logika.

3582
03:25:13,990 --> 03:25:15,220
Kita harus meningkatkan serangan balik.

3583
03:25:15,220 --> 03:25:19,150
Jadi saya memerlukan kode seperti yang saya tunjukkan sebelumnya,\n

3584
03:25:19,150 --> 03:25:21,400
Dan di sinilah terkadang\npemrograman dilakukan

3585
03:25:21,400 --> 03:25:22,921
menjadi sedikit lebih seperti pipa ledeng.

3586
03:25:22,921 --> 03:25:25,421
Anda tidak bisa hanya mengatakan apa yang Anda\nmaksud, seperti Anda tidak bisa Menggaruk.

3587
03:25:25,421 --> 03:25:28,001
Anda harus membuat\nsemacam mesin perangkat lunak kecil

3588
03:25:28,001 --> 03:25:31,181
yang menginisialisasi suatu nilai, tidak\n

3589
03:25:31,181 --> 03:25:34,091
Jadi ini seperti\nmesin berbasis perangkat lunak ini

3590
03:25:34,091 --> 03:25:37,211
namun jika digabungkan, itu hanya menggunakan\nbeberapa elemen penyusun yang sudah dikenal.

3591
03:25:38,380 --> 03:25:40,672
Sama seperti di Scratch, Anda\nmungkin sering menggunakan loop

3592
03:25:40,673 --> 03:25:42,161
berkali-kali, cukup umum di C.

3593
03:25:42,161 --> 03:25:44,050
Jadi bisakah kita memperketat kode ini?

3594
03:25:44,050 --> 03:25:48,581
Ini benar, namun berikut ini\nbeberapa konvensi yang populer.

3595
03:25:48,581 --> 03:25:51,025
Jika Anda ingin menghitung, katakan saja i.

3596
03:25:51,025 --> 03:25:52,900
Sebuah konvensi dalam\npemrograman-- dengan, setidaknya

3597
03:25:52,900 --> 03:25:57,490
bahasa seperti C-- hanya menggunakan i\n

3598
03:25:57,490 --> 03:25:59,650
adalah menghitung dari suka, 0 ke atas.

3599
03:26:01,900 --> 03:26:04,780
Ini lebih bertele-tele\ntdari yang seharusnya.

3600
03:26:05,740 --> 03:26:07,532
Anda tidak memerlukan semantik lebih dari itu.

3601
03:26:07,532 --> 03:26:08,990
Baiklah, apa lagi yang bisa saya lakukan di sini?

3602
03:26:08,990 --> 03:26:12,177
Ada peluang lain\nuntuk memperketat kode ini.

3603
03:26:14,720 --> 03:26:17,720
Ya, gula sintaksis itu\ntidak menghasilkan hal baru

3604
03:26:17,720 --> 03:26:19,520
tapi ia melakukannya dengan lebih ringkas.

3605
03:26:19,521 --> 03:26:23,990
Saya dapat mengubahnya menjadi\n

3606
03:26:25,700 --> 03:26:27,920
Sekarang, ini cukup kanonik.

3607
03:26:27,921 --> 03:26:31,941
Ini adalah cara kebanyakan orang\nmengimplementasikan sesuatu

3608
03:26:31,941 --> 03:26:34,611
tiga kali menggunakan loop di C--

3609
03:26:34,611 --> 03:26:36,336
menggunakan while loop, yaitu.

3610
03:26:36,335 --> 03:26:39,350
Ternyata itu sangat umum\nin C dan bahasa lainnya

3611
03:26:39,351 --> 03:26:43,161
untuk melakukan sesuatu berkali-kali,\n

3612
03:26:43,161 --> 03:26:46,021
Dalam model ini, untuk lebih jelasnya, logikanya

3613
03:26:46,021 --> 03:26:49,221
adalah kita mulai dengan menginisialisasi\n

3614
03:26:49,220 --> 03:26:52,310
Kami kemudian mengajukan pertanyaan,\apakah saya kurang dari 0?

3615
03:26:52,310 --> 03:26:56,030
Jika iya, semua yang\\teridentifikasi di dalam kurung kurawal

3616
03:26:56,031 --> 03:26:59,240
akan dieksekusi-- yaitu,\nmeow lalu update.

3617
03:26:59,240 --> 03:27:02,931
Kemudian komputer\nharus memeriksa ulang kondisinya

3618
03:27:02,931 --> 03:27:06,531
untuk memastikan bahwa saya belum mendapatkannya\n

3619
03:27:06,531 --> 03:27:09,621
Namun jika tidak, ia akan melakukan ini\na lagi dan melakukan ini lagi.

3620
03:27:09,620 --> 03:27:12,045
Dan kemudian diulangi, terus-menerus\nmemeriksa kondisinya

3621
03:27:12,046 --> 03:27:14,421
dan mengeksekusi apa yang ada di\nblok, memeriksa kondisinya

3622
03:27:14,421 --> 03:27:15,837
dan mengeksekusi apa yang ada di blok.

3623
03:27:15,837 --> 03:27:20,390
Setelah tiga kali itu, kondisi\n

3624
03:27:21,620 --> 03:27:24,740
Itu hanya berlanjut ke apa pun\n

3625
03:27:24,740 --> 03:27:27,390
Ia melompat ke blok berikutnya di bawah.

3626
03:27:27,390 --> 03:27:30,181
Baiklah, apa lagi\ncara untuk melakukan ini?

3627
03:27:30,181 --> 03:27:32,181
Ya, saya sengaja\nmenghitung dari 0--

3628
03:27:32,181 --> 03:27:33,972
dan itu adalah konvensi\npemrograman, bukan?

3629
03:27:33,972 --> 03:27:36,688
Kami memulai minggu lalu dengan semua\nbola lampu mati, yaitu 0.

3630
03:27:36,688 --> 03:27:39,021
Jadi cukup masuk akal untuk\nmulai menghitung dari 0 saja

3631
03:27:39,853 --> 03:27:41,870
Seperti, tidak ada jari yang terangkat, ini 0--

3632
03:27:43,560 --> 03:27:47,841
Namun jika mau, Anda dapat\nmulai menghitung pada i sama dengan 1.

3633
03:27:47,841 --> 03:27:51,140
Tapi kemudian Anda tidak ingin\ndo melakukannya saat i kurang dari 3

3634
03:27:51,140 --> 03:27:54,200
yang ingin Anda lakukan i\nkurang dari atau sama dengan 3.

3635
03:27:54,200 --> 03:27:58,640
Pada sebagian besar keyboard, tidak ada simbol untuk\n

3636
03:27:58,640 --> 03:28:02,690
atau sama dengan, jadi di C, Anda\nmenggunakan dua karakter, kurang dari

3637
03:28:02,691 --> 03:28:05,811
lalu tanda sama dengan\ntanpa spasi di antaranya.

3638
03:28:05,810 --> 03:28:08,251
Artinya kurang dari atau sama dengan.

3639
03:28:08,251 --> 03:28:12,771
Kita dapat mengubahnya untuk menyetel i ke 2\n

3640
03:28:13,820 --> 03:28:18,900
Kita bisa menjadikannya 10\ndan kurang dari atau sama dengan 12.

3641
03:28:18,900 --> 03:28:20,810
Tapi, sekali lagi, tetap berpegang pada dasar-dasarnya.

3642
03:28:20,810 --> 03:28:23,931
Mulai dari 0 dan perhitungkan ke atas\nakan menjadi konvensi.

3643
03:28:23,931 --> 03:28:27,291
Atau jika Anda lebih suka menghitung\nmundur, tidak masalah juga.

3644
03:28:27,290 --> 03:28:31,700
Setel i ke 3 lalu lakukan ini\nselama i lebih besar dari 0

3645
03:28:31,700 --> 03:28:34,552
tetapi Anda harus mengurangi\bukannya menambah.

3646
03:28:34,552 --> 03:28:36,261
Jadi, sekali lagi, kita bisa\melakukannya sepanjang hari.

3647
03:28:36,261 --> 03:28:39,396
Benar-benar ada jumlah yang tak terhingga\n

3648
03:28:39,396 --> 03:28:41,271
Dan itulah mengapa saya terus\menekankan konvensi.

3649
03:28:41,271 --> 03:28:43,761
Panggil variabel i untuk\nsesuatu seperti ini

3650
03:28:43,761 --> 03:28:47,271
inisialisasi ke 0 untuk sesuatu seperti\n

3651
03:28:47,271 --> 03:28:49,161
kecuali Anda benar-benar lebih suka menghitung mundur.

3652
03:28:49,161 --> 03:28:51,921
Sekali lagi, hanya konvensi manusia tertentu.

3653
03:28:51,921 --> 03:28:55,111
Baiklah, bagaimana dengan\cara lain untuk melakukan ini?

3654
03:28:55,111 --> 03:28:59,070
Inilah yang disebut for\nloop di C, juga sangat umum.

3655
03:28:59,070 --> 03:29:02,091
Ini tidak semudah itu\n

3656
03:29:02,091 --> 03:29:04,011
ke bawah dengan cara yang persis sama.

3657
03:29:04,011 --> 03:29:07,400
Jenis ini memiliki lebih banyak\nlogika yang terselip di baris pertamanya.

3658
03:29:07,400 --> 03:29:09,921
Tapi itu melakukan hal yang persis sama.

3659
03:29:11,630 --> 03:29:15,350
perhatikan di dalam\ntanda kurung, di samping kata untuk

3660
03:29:15,351 --> 03:29:18,523
ada dua titik koma-- yang merupakan penggunaan sintaksis yang aneh.

3661
03:29:18,522 --> 03:29:20,480
Mereka tidak berada di akhir\ngaris, sekarang mereka sudah berada di garis akhir

3662
03:29:20,480 --> 03:29:21,855
di tengah tanda kurung.

3663
03:29:21,855 --> 03:29:24,030
Namun itulah yang\nmanusia pilih bertahun-tahun yang lalu.

3664
03:29:24,031 --> 03:29:30,951
Hal pertama sebelum titik koma\n

3665
03:29:30,950 --> 03:29:34,040
Hal berikutnya adalah kondisi\nyang akan terus didapat

3666
03:29:34,040 --> 03:29:36,560
memeriksa setiap siklus melalui loop ini.

3667
03:29:36,560 --> 03:29:41,360
Dan hal terakhir adalah\n

3668
03:29:41,361 --> 03:29:42,990
dalam hal ini akan dihitung.

3669
03:29:42,990 --> 03:29:45,710
Jadi, sekali lagi, jika saya memundurkan\nkita menginisialisasi i ke 0.

3670
03:29:45,710 --> 03:29:48,350
Kami kemudian mengajukan pertanyaan,\apakah saya kurang dari 3?

3671
03:29:48,351 --> 03:29:52,611
Jika ya, jalankan apa yang ada di dalam loop.

3672
03:29:52,611 --> 03:29:58,490
Kemudian komputer melakukan hal ini, dan\n

3673
03:29:58,490 --> 03:30:01,220
Dan kemudian ia tidak akan mengeong lagi secara membabi buta.

3674
03:30:01,220 --> 03:30:04,581
Ini akan memeriksa lagi\nkondisinya, apakah saya kurang dari 3?

3675
03:30:04,581 --> 03:30:06,351
Maka ia akan mengeong jika demikian.

3676
03:30:06,351 --> 03:30:10,761
Kemudian mungkin akan dilanjutkan dan bertambah\n

3677
03:30:10,761 --> 03:30:14,449
Jadi, sekali lagi, ini kurang tepat\n

3678
03:30:14,449 --> 03:30:16,740
Anda membacanya dari kiri ke\nkanan lalu melompat-lompat.

3679
03:30:16,740 --> 03:30:21,890
Namun, sekali lagi, inisialisasi,\nekspresi Boolean yang konstan

3680
03:30:21,890 --> 03:30:24,681
sedang diperiksa, dan\nperbarui setiap kali selesai

3681
03:30:24,681 --> 03:30:32,551
melakukan hal yang persis sama seperti yang kita lihat\n

3682
03:30:35,011 --> 03:30:37,052
Saya rasa sebagian besar orang\nmungkin pada akhirnya akan menggunakannya

3683
03:30:37,052 --> 03:30:42,570
perulangan for yang dulunya nyaman, tetapi hanya\n

3684
03:30:42,570 --> 03:30:45,671
Baiklah, jika ada pertanyaan, silakan\n

3685
03:30:47,923 --> 03:30:49,631
DAVID J. MALAN: Perulangan for\n dan perulangan while

3686
03:30:49,630 --> 03:30:53,140
keduanya dapat digunakan untuk melakukan\hal yang persis sama.

3687
03:30:53,140 --> 03:30:56,733
Terdapat sedikit perbedaan\nmengenai masalah cakupan

3688
03:30:56,733 --> 03:30:58,691
yang akan kita bahas sebelum\npanjang, di mana, kapan, dan kapan Anda

3689
03:30:58,691 --> 03:31:00,921
membuat variabel dalam loop for--

3690
03:31:00,921 --> 03:31:04,390
perhatikan bahwa, sekali lagi, di dalam\ntanda kurung itu, yang mana

3691
03:31:04,390 --> 03:31:08,831
secara teknis berarti itu hanya akan\n

3692
03:31:08,831 --> 03:31:12,581
Sebaliknya, dengan perulangan while,\nSaya mendeklarasikan variabel saya di luar

3693
03:31:13,210 --> 03:31:17,030
Variabel itu akan berlanjut\n

3694
03:31:17,031 --> 03:31:20,008
Jadi itulah salah satu\nperbedaan kecil di sana.

3695
03:31:20,591 --> 03:31:22,871
Namun Anda akan melihat beberapa lainnya seiring berjalannya waktu.

3696
03:31:22,870 --> 03:31:26,090
Baiklah, jadi kami mengklaim\nbahwa ini lebih baik dalam beberapa bentuk

3697
03:31:27,290 --> 03:31:29,331
Jadi mari kita kembali ke kodenya.

3698
03:31:29,331 --> 03:31:33,831
Izinkan saya melanjutkan dan menerapkannya kembali\n

3699
03:31:33,831 --> 03:31:39,701
Jadi bagaimana kalau int i\n= 0, i kurang dari 3, i .

3700
03:31:39,700 --> 03:31:44,440
Lalu di dalam kurung kurawalku, biarkan aku pergi\n

3701
03:31:44,441 --> 03:31:46,911
dengan baris baru dan titik koma.

3702
03:31:46,911 --> 03:31:50,661
Jadi saya melakukannya cukup cepat hanya karena\n

3703
03:31:50,661 --> 03:31:53,591
Tapi kalau sekarang saya mengeong, tidak ada kesalahan disana.

3704
03:31:57,101 --> 03:31:59,230
Baiklah, sekarang mari kita lakukan apa\nyang kita lakukan minggu lalu, yang mana

3705
03:31:59,230 --> 03:32:03,501
adalah mulai membuat\nfungsi khusus kami sendiri, jika Anda mau

3706
03:32:03,501 --> 03:32:09,431
dengan menggunakan milik kita sendiri di C. Jadi, inilah\n

3707
03:32:09,431 --> 03:32:13,841
tapi seiring berjalannya waktu kami akan menjelaskan apa\n

3708
03:32:13,841 --> 03:32:17,201
Jika saya ingin membuat\nfungsi bernama meow--

3709
03:32:17,200 --> 03:32:21,280
karena penulis C tidak membuat\n

3710
03:32:21,281 --> 03:32:23,951
Saya perlu memberinya nama, seperti meong.

3711
03:32:23,950 --> 03:32:26,530
Saya perlu menentukan apakah\nit menerima masukan apa pun.

3712
03:32:26,531 --> 03:32:28,391
Untuk saat ini, saya akan mengatakan tidak.

3713
03:32:28,390 --> 03:32:34,200
Dan saya akan secara eksplisit mengatakan tidak\n

3714
03:32:34,200 --> 03:32:37,080
Ini juga diperlukan ketika\nmengimplementasikan suatu fungsi di C--

3715
03:32:37,081 --> 03:32:38,851
yang tidak diperlukan di Scratch--

3716
03:32:38,851 --> 03:32:41,411
untuk menentukan jenis pengembaliannya.

3717
03:32:41,411 --> 03:32:45,060
Namun untuk saat ini, saya hanya akan mengatakan\n

3718
03:32:46,591 --> 03:32:49,531
dan itulah arti tanda kurung void\nin--

3719
03:32:49,531 --> 03:32:54,091
dan itu tidak mengembalikan\apa pun seperti yang diminta

3720
03:32:54,091 --> 03:32:56,220
atau seperti yang dilakukan get_string atau get_int.

3721
03:32:56,220 --> 03:32:59,940
tujuan hidup meow hanya untuk\n

3722
03:32:59,941 --> 03:33:01,990
dengan mencetak sesuatu di layar.

3723
03:33:01,990 --> 03:33:04,261
Jadi apa yang akan dilakukan meong?

3724
03:33:04,261 --> 03:33:06,480
Saya akan melakukannya\ncukup katakan printf

3725
03:33:06,480 --> 03:33:10,290
kutipan tanda kutip, "meong", garis miring terbalik n.

3726
03:33:10,290 --> 03:33:14,670
Dan sekarang, sama seperti di\nScratch, saya tinggal menelepon saja

3727
03:33:14,671 --> 03:33:16,831
fungsi baru yang disebut meong.

3728
03:33:16,831 --> 03:33:19,531
Dan di sinilah tempatnya juga, jika Anda\nbenar-benar tidak menyukai kurung kurawal

3729
03:33:19,531 --> 03:33:22,591
secara teknis, Anda dapat\nmenghapusnya bila ada

3730
03:33:22,591 --> 03:33:24,810
hanya satu baris kode di dalam loop Anda.

3731
03:33:24,810 --> 03:33:27,511
Namun, sekali lagi, secara gaya,\nSaya akan menganjurkannya

3732
03:33:27,511 --> 03:33:30,511
Anda harus menyimpannya agar\nsangat jelas bagi diri Anda sendiri dan orang lain

3733
03:33:32,470 --> 03:33:35,100
Biarkan saya menyimpan\nini dan membuat mengeong.

3734
03:33:39,970 --> 03:33:42,140
DAVID J. MALAN: Ya, jadi\n0 tidak pantas berada di sana.

3735
03:33:49,601 --> 03:33:51,621
Baiklah, masih berfungsi dengan baik.

3736
03:33:51,620 --> 03:33:54,770
Tapi ingat apa yang saya lakukan di Scratch,\n

3737
03:33:54,771 --> 03:33:57,820
Dan untuk memperjelas, izinkan saya\nmenyorotnya dan memindahkannya

3738
03:33:59,261 --> 03:34:02,291
Karena, sekali lagi, sekarang mengeong\berada, itu adalah sebuah abstraksi.

3739
03:34:02,290 --> 03:34:04,600
Saya baru tahu ada fungsi mengeong.

3740
03:34:04,601 --> 03:34:06,111
Saya ingin bisa menggunakannya.

3741
03:34:08,021 --> 03:34:09,730
Fungsi utama saya sama.

3742
03:34:09,730 --> 03:34:12,280
Biarkan aku melanjutkan dan mengeong lagi.

3743
03:34:12,281 --> 03:34:17,531
Dan sekarang, hanya dengan memindahkan fungsi itu,\n

3744
03:34:17,531 --> 03:34:18,851
Dan mari kita lihat yang pertama.

3745
03:34:18,851 --> 03:34:21,018
Sekali lagi, aturan praktisnya\ndi sini-- ini agak kecil

3746
03:34:21,018 --> 03:34:25,060
tapi tertulis meow.c dicetak tebal-- yaitu\n

3747
03:34:25,060 --> 03:34:27,911
5 adalah nomor baris,\ndan 20 adalah karakternya.

3748
03:34:27,911 --> 03:34:30,740
Jadi nomor barisnya saja sudah cukup.

3749
03:34:32,501 --> 03:34:36,611
Oh, inilah yang terjadi\nbila saya menggulir ke atas terlalu jauh.

3750
03:34:37,210 --> 03:34:39,760
Ini adalah kesalahan yang\nkita lihat, baris 7.

3751
03:34:39,761 --> 03:34:43,691
Saya sedang melihat pesan kesalahan lama\n

3752
03:34:45,550 --> 03:34:49,780
Baiklah, sepertinya C tidak\n

3753
03:34:49,781 --> 03:34:53,441
Deklarasi implisit\nfungsi meow tidak valid di C99.

3754
03:34:54,581 --> 03:34:57,941
Deklarasi fungsi berarti\npembuatan suatu fungsi oleh Anda.

3755
03:34:57,941 --> 03:35:01,511
Seperti, saya menyatakan bahwa meow\nexist, tapi ternyata belum

3756
03:35:02,501 --> 03:35:06,230
Dan C99 adalah versi\no C dari tahun 1999

3757
03:35:06,230 --> 03:35:09,190
yang biasanya kita gunakan di sini, itu\n

3758
03:35:12,460 --> 03:35:16,030
Bisakah Anda menyimpulkan berdasarkan fakta saja\n

3759
03:35:16,031 --> 03:35:19,041
dari file-- yang tadinya baik-baik saja\nin Gores tetapi sekarang buruk--

3760
03:35:21,865 --> 03:35:23,990
DAVID J. MALAN: Ya, C itu\nagak kuno.

3761
03:35:23,990 --> 03:35:25,681
Itu membaca kode Anda dari atas ke bawah.

3762
03:35:25,681 --> 03:35:30,001
Dan jika ia tidak tahu apa yang mengeong\n

3763
03:35:30,001 --> 03:35:32,911
itu hanya membuat panik dan mencetak\npesan kesalahan ini.

3764
03:35:32,911 --> 03:35:38,511
Jadi solusinya sederhana saja, jangan\n

3765
03:35:38,511 --> 03:35:42,470
Tapi Anda bisa membayangkan ini mendapatkan\n

3766
03:35:42,470 --> 03:35:46,761
karena main, menurut namanya, adalah\nbagian utama dari program Anda.

3767
03:35:46,761 --> 03:35:49,970
Dan sejujurnya, alangkah baiknya jika main selalu ada

3768
03:35:51,099 --> 03:35:53,390
Karena jika Anda ingin\nmemahami apa yang dilakukan suatu file

3769
03:35:53,390 --> 03:35:55,400
masuk akal untuk\nmembacanya dari atas ke bawah.

3770
03:35:55,400 --> 03:35:57,575
Nah, ada solusi untuk ini.

3771
03:35:57,575 --> 03:36:02,720
Anda dapat meletakkan fungsi di\n yang berbeda

3772
03:36:02,720 --> 03:36:07,501
seperti Anda-- dan ini mungkin\n

3773
03:36:07,501 --> 03:36:10,671
selama Anda menyisakan sedikit\nbreadcrumb untuk kompiler

3774
03:36:10,671 --> 03:36:13,130
di bagian paling atas\nfile Anda secara harfiah

3775
03:36:13,130 --> 03:36:17,090
mengulangi nilai kembalian,\nnama, dan argumen

3776
03:36:17,091 --> 03:36:19,681
untuk fungsi itu, titik koma.

3777
03:36:19,681 --> 03:36:22,791
Bisa dikatakan, ini\nmendeklarasikan fungsi Anda--

3778
03:36:22,790 --> 03:36:25,260
dan yang paling keren\nis ini adalah prototipe.

3779
03:36:25,261 --> 03:36:27,541
Sepertinya,\nhal ini akan terlihat seperti apa?

3780
03:36:27,540 --> 03:36:30,480
Namun titik koma berarti saya belum\nakan membahas hal ini.

3781
03:36:30,480 --> 03:36:32,331
Saya sebenarnya akan\nmendefinisikan fungsinya

3782
03:36:32,331 --> 03:36:34,701
atau terapkan di bawah sini.

3783
03:36:34,700 --> 03:36:36,680
Ini adalah detail yang bodoh.

3784
03:36:36,681 --> 03:36:40,221
Bahasa yang lebih baru\nmenghilangkan kebutuhan ini

3785
03:36:40,220 --> 03:36:41,993
Anda dapat menempatkan fungsi Anda dalam urutan apa pun.

3786
03:36:41,994 --> 03:36:43,911
Namun, sekali lagi, jika Anda hanya\nmemikirkan dasar-dasarnya

3787
03:36:43,911 --> 03:36:46,230
bahasa pemrograman\nseperti ini di sini--

3788
03:36:47,210 --> 03:36:49,350
itu pasti hanya membaca\nkode Anda dari atas ke bawah.

3789
03:36:49,351 --> 03:36:53,060
Menyebalkan sekali, ya, tapi\ndijelaskan, ya juga.

3790
03:36:53,060 --> 03:36:58,280
Jadi izinkan saya membuat satu suara mengeong\n

3791
03:36:58,281 --> 03:37:02,331
Dan izinkan saya melakukan satu penyempurnaan terakhir\npada program meong ini di sini.

3792
03:37:02,331 --> 03:37:05,220
Izinkan saya melanjutkan sekarang dan\nmengatakan sesuatu seperti ini.

3793
03:37:05,220 --> 03:37:07,190
Izinkan saya melanjutkan dan berkata,\nbaiklah, bukan

3794
03:37:07,191 --> 03:37:12,941
alangkah baiknya jika fungsi meong saya dapat melakukan\n

3795
03:37:12,941 --> 03:37:14,701
Jadi misalkan saya ingin melakukan ini.

3796
03:37:14,700 --> 03:37:17,870
Fungsi mengeong ini saat ini\nakan mengeong tiga kali.

3797
03:37:17,870 --> 03:37:21,110
Tapi misalkan saya ingin mengeong\nn kali, dimana n adil

3798
03:37:21,111 --> 03:37:23,181
beberapa nomor yang disediakan oleh pengguna.

3799
03:37:23,181 --> 03:37:27,560
Sama seperti di Scratch,\nfungsi khusus dapat menerima masukan

3800
03:37:27,560 --> 03:37:30,120
Saya baru saja mengatakan batal.

3801
03:37:30,120 --> 03:37:34,550
Tetapi jika saya mengubahnya menjadi int n,\ndengan demikian memberitahu kompiler

3802
03:37:34,550 --> 03:37:38,150
hei, meong masih belum\nmengembalikan apa pun

3803
03:37:38,150 --> 03:37:40,581
tapi itu memang membutuhkan sesuatu sebagai masukan.

3804
03:37:40,581 --> 03:37:43,581
Dibutuhkan bilangan bulat,\ndan saya ingin menyebutnya n.

3805
03:37:43,581 --> 03:37:46,070
Jadi ini adalah cara lain\nmendeklarasikan variabel

3806
03:37:46,070 --> 03:37:48,890
tapi cara mendeklarasikan\nvariabel yang dimasukkan

3807
03:37:50,431 --> 03:37:55,101
Jadi sekarang jika saya perketat main di sini, sekarang\n

3808
03:37:55,101 --> 03:37:58,551
seperti di Scratch, yaitu ini.

3809
03:37:58,550 --> 03:38:01,040
Jika sekarang saya melihat\nkode ini-- izinkan saya memperbesarnya di sini--

3810
03:38:01,040 --> 03:38:04,310
sekarang program utama saya benar-benar\nditulis dengan baik

3811
03:38:04,310 --> 03:38:07,190
bahwa ia hanya mengatakan apa yang dilakukannya, mengeong tiga kali.

3812
03:38:07,191 --> 03:38:11,031
Namun ini berhasil, karena saya\n

3813
03:38:11,031 --> 03:38:17,691
bilangan bulat bernama n, lalu menggunakan\n

3814
03:38:18,771 --> 03:38:21,271
Anda mungkin telah mengetahui satu kesalahan saya.

3815
03:38:21,271 --> 03:38:25,101
Saya juga harus mengingatkan diri saya sendiri\ndi sini untuk melakukan perubahan itu juga.

3816
03:38:25,101 --> 03:38:27,891
Sekali lagi, ini adalah satu-satunya\nredundansi atau salin-tempel

3817
03:38:29,511 --> 03:38:32,031
Tapi sekarang saya punya versi yang lebih baik.

3818
03:38:32,031 --> 03:38:36,381
Jadi izinkan saya menjalankan ulang\nini, buat meong, ./meong.

3819
03:38:36,980 --> 03:38:39,530
Jadi, sekali lagi, tidak ada perubahan\nin yang benar kecuali sekarang

3820
03:38:39,531 --> 03:38:41,391
sekali lagi, kami sedang melakukan modularisasi kode kami.

3821
03:38:41,390 --> 03:38:44,720
Dan, apa yang dapat Anda lakukan sekarang-- dan\n

3822
03:38:45,501 --> 03:38:48,320
file header yang kita bicarakan\nawalnya, perpustakaan itu

3823
03:38:48,320 --> 03:38:51,050
inilah jenis modularisasi\nyang sedang kita bicarakan.

3824
03:38:51,050 --> 03:38:54,921
Kami, para staf, menulis sebuah fungsi yang disebut\n

3825
03:38:54,921 --> 03:39:01,191
kami memasukkannya ke dalam file bernama CS50, dan kami\n

3826
03:39:01,191 --> 03:39:03,381
hal-hal ini disebut prototipe--

3827
03:39:05,570 --> 03:39:10,251
Sehingga ketika Anda semua, sebagai calon\nprogrammer, menyertakan cs50.h

3828
03:39:10,251 --> 03:39:14,300
kamu diam-diam memberi tahu\n

3829
03:39:14,300 --> 03:39:16,290
apa menu fungsi yang tersedia.

3830
03:39:16,790 --> 03:39:21,560
Karena di CS50 ada baris-baris seperti\nini-- jelas, bukan untuk meong

3831
03:39:21,560 --> 03:39:24,140
tapi untuk get_string,\nget_int, dan lain sebagainya.

3832
03:39:24,140 --> 03:39:29,540
Dan stdio.h adalah baris\nof kode yang sama untuk hal-hal seperti printf.

3833
03:39:29,540 --> 03:39:31,740
Jadi hanya itu yang terjadi di sana.

3834
03:39:31,740 --> 03:39:38,040
Itu hanya cara memberitahu komputer\n

3835
03:39:38,040 --> 03:39:40,920
Baiklah, ada pertanyaan,\nlalu tentang ini?

3836
03:39:44,310 --> 03:39:47,130
Jadi jika Anda tidak keberatan, saya\ningin terus melambai

3837
03:39:47,130 --> 03:39:49,050
tanganku pada detail itu untuk hari ini.

3838
03:39:49,050 --> 03:39:53,581
Memang, int main void agak aneh,\n

3839
03:39:53,581 --> 03:39:55,667
Kami belum memiliki mekanisme\nuntuk memberikan masukan.

3840
03:39:55,667 --> 03:39:57,751
Dan apa artinya\nmain mengembalikan sesuatu?

3841
03:39:57,751 --> 03:39:59,251
Seperti, kepada siapa itu kembali?

3842
03:39:59,251 --> 03:40:00,378
Untuk hari lain, kalau boleh.

3843
03:40:00,378 --> 03:40:02,461
Mereka akan ikut berperan\ntetapi itu saja, untuk saat ini

3844
03:40:02,460 --> 03:40:05,100
hari ini hanyalah sesuatu yang\nharus Anda anggap remeh

3845
03:40:05,101 --> 03:40:08,320
seperlunya salin-tempel\nuntuk memulai program.

3846
03:40:08,320 --> 03:40:11,490
Jadi meow adalah fungsi yang membutuhkan\n

3847
03:40:11,490 --> 03:40:14,970
tapi sebenarnya tidak memiliki\nnilai kembalian, sehingga batal.

3848
03:40:14,970 --> 03:40:17,520
Namun bagaimana jika kita sebenarnya ingin\nmembuat fungsi kita sendiri itu

3849
03:40:17,521 --> 03:40:20,431
tidak hanya membutuhkan 0 atau\nlebih banyak input sebagai argumen

3850
03:40:20,431 --> 03:40:24,060
tetapi juga mengembalikan beberapa nilai, mungkin sebuah\n

3851
03:40:24,990 --> 03:40:27,640
Ternyata di C,\nkita juga bisa melakukan hal itu.

3852
03:40:27,640 --> 03:40:31,081
Biarkan saya melanjutkan dan membuat\nfile baru di sini bernama diskon.

3853
03:40:31,081 --> 03:40:33,121
Dan mari kita terapkan\nprogram cepat yang dapat digunakan

3854
03:40:33,120 --> 03:40:35,640
kami dapat mendiskon beberapa harga reguler\ndengan persentase tertentu

3855
03:40:35,640 --> 03:40:37,740
seolah-olah sedang ada obral\ngada di toko.

3856
03:40:37,740 --> 03:40:44,490
Izinkan saya melanjutkan dan memasukkan yang biasa\n

3857
03:40:44,490 --> 03:40:47,550
Biarkan aku menyerahkan diriku ke dalam\nkekosongan seperti sebelumnya.

3858
03:40:47,550 --> 03:40:50,380
Dan di dalam main, ayo\naju dan lakukan sesuatu yang sederhana.

3859
03:40:50,380 --> 03:40:52,470
Mari kita beri diri kita\nfloat yang disebut reguler

3860
03:40:52,470 --> 03:40:55,350
mewakili harga\nbiasa sesuatu di toko.

3861
03:40:55,351 --> 03:40:58,111
Mari kita lanjutkan dan dapatkan float\ndari pengguna yang memintanya

3862
03:41:00,480 --> 03:41:04,740
Lalu, selanjutnya, mari kita deklarasikan\n

3863
03:41:04,740 --> 03:41:07,950
disebut penjualan, yang pada akhirnya\nmewakili harga jual

3864
03:41:07,950 --> 03:41:09,810
setelah beberapa persentase diskon.

3865
03:41:09,810 --> 03:41:13,020
Dan mari kita lanjutkan\nhitung berapa pun bilangan regulernya.

3866
03:41:13,021 --> 03:41:15,851
Dan, katakanlah, diskon 15% adalah\ndiskon yang cukup bagus.

3867
03:41:15,851 --> 03:41:20,471
Jadi mari kita diskon\nreguler, apa pun itu, sebesar 15%

3868
03:41:20,470 --> 03:41:23,911
yang tentu saja setara dengan\n

3869
03:41:25,681 --> 03:41:30,126
Tentu saja, jika kita mengambil potongan 15%,\n

3870
03:41:30,126 --> 03:41:32,251
Sekarang, mari kita lanjutkan dan\ncetak hasilnya di sini.

3871
03:41:32,251 --> 03:41:36,271
Izinkan saya melanjutkan dan mengatakan\nprintf harga jual, titik dua--

3872
03:41:36,271 --> 03:41:38,941
izinkan saya melanjutkan dan %f,\ntetapi, lebih spesifiknya

3873
03:41:38,941 --> 03:41:43,951
%.2f karena, setidaknya dalam mata uang AS\n

3874
03:41:45,751 --> 03:41:48,630
Lalu izinkan saya melanjutkan dan\nmemasukkan nilai penjualan.

3875
03:41:48,630 --> 03:41:52,230
Baiklah, ayo turun ke sini\dan buat diskon, Masuk.

3876
03:41:52,230 --> 03:41:54,780
Sejauh ini, bagus sekali-- ./diskon.

3877
03:41:54,781 --> 03:41:57,001
Dan harga regulernya mungkin $100.

3878
03:41:57,001 --> 03:41:59,560
Jadi harga jualnya seharusnya $85.

3879
03:41:59,560 --> 03:42:01,483
Jadi aritmetika kita tampaknya\nbenar di sini.

3880
03:42:01,483 --> 03:42:02,941
Namun mari kita percepat sekarang pada waktunya.

3881
03:42:02,941 --> 03:42:04,801
Misalkan kita mendapati\diri kita sedang memberikan diskon

3882
03:42:04,800 --> 03:42:07,727
banyak harga di\aplikasi, mungkin situs web

3883
03:42:07,727 --> 03:42:10,560
seperti Amazon tempat mereka menawarkan\n

3884
03:42:10,560 --> 03:42:13,200
Dan akan menyenangkan jika memiliki\na fungsi yang dapat digunakan kembali

3885
03:42:13,200 --> 03:42:16,420
lakukan saja aritmatika ini untuk\nus, meskipun sederhana saja.

3886
03:42:16,421 --> 03:42:18,511
Jadi ayo lanjutkan dan\nmodifikasi diskon kali ini

3887
03:42:18,511 --> 03:42:22,051
untuk memberikan fungsi\nkita sendiri yang disebut diskon

3888
03:42:22,050 --> 03:42:23,778
misalnya, itu membutuhkan masukan--

3889
03:42:23,778 --> 03:42:25,861
seperti harga reguler\nyang ingin Anda diskon--

3890
03:42:25,861 --> 03:42:28,073
dan kemudian itu juga mengembalikan nilai.

3891
03:42:28,073 --> 03:42:29,281
Itu tidak hanya mencetaknya.

3892
03:42:29,281 --> 03:42:34,081
Ia mengembalikan nilai, yaitu float\n

3893
03:42:34,081 --> 03:42:37,230
Jadi izinkan saya turun\ndi bawah utama dan lanjutkan

3894
03:42:37,230 --> 03:42:39,900
and define a function that's\ngoing to return a float

3895
03:42:39,900 --> 03:42:42,118
karena kita masih berurusan\ndengan jumlah dolar.

3896
03:42:42,118 --> 03:42:43,951
Fungsinya\nakan disebut diskon.

3897
03:42:43,950 --> 03:42:47,970
Dan itu akan membutuhkan satu masukan, seperti\n

3898
03:42:47,970 --> 03:42:50,171
Di sini, saya akan melakukan\nsesuatu yang sangat sederhana.

3899
03:42:50,171 --> 03:42:55,810
Saya akan mengatakan penjualan mengambang sama dengan\n

3900
03:42:55,810 --> 03:42:58,052
Lalu saya akan melanjutkan\nadan mengembalikan penjualan.

3901
03:42:58,052 --> 03:43:00,511
Sekarang, dalam hal ini, saya bisa\nmemperketatnya sedikit.

3902
03:43:00,511 --> 03:43:04,081
Jika saya hanya mendeklarasikan variabel\nuntuk menyimpan nilai, maka saya akan mendeklarasikannya

3903
03:43:04,081 --> 03:43:09,191
kembali dengan kata kunci ini kembali, I\n

3904
03:43:09,191 --> 03:43:11,041
Jadi saya bisa menghapus baris kedua.

3905
03:43:11,040 --> 03:43:13,680
Dan saya sebenarnya bisa melanjutkan\ndan membuang variabel itu

3906
03:43:13,681 --> 03:43:16,291
semuanya dan segera\nmengembalikan berapa pun aritmatikanya

3907
03:43:16,290 --> 03:43:20,161
hasilnya adalah mengambil masukan harga,\n

3908
03:43:21,900 --> 03:43:25,681
Fungsi yang sangat sederhana yang\nhanya memberikan diskon untuk saya.

3909
03:43:25,681 --> 03:43:29,011
Seperti biasa, izinkan saya\namenyalin-menempel--

3910
03:43:29,011 --> 03:43:32,251
satu-satunya waktu yang boleh untuk menyalin-menempel--\n

3911
03:43:32,251 --> 03:43:35,341
bagian atas file, sehingga\nsaat mengkompilasi kode ini

3912
03:43:35,341 --> 03:43:38,611
main sudah pernah melihat\nkata diskon sebelumnya.

3913
03:43:38,611 --> 03:43:40,271
Dan sekarang izinkan saya masuk ke kode di sini.

3914
03:43:40,271 --> 03:43:43,411
Dan daripada melakukan\nmenghitung sendiri di bagian utama

3915
03:43:43,411 --> 03:43:46,470
izinkan saya berasumsi bahwa kita\nsudah memiliki beberapa fungsi

3916
03:43:46,470 --> 03:43:50,790
dalam perangkat kami yang disebut diskon itu\n

3917
03:43:52,845 --> 03:43:54,970
Lalu di sini, kode saya\ndotidak perlu diubah.

3918
03:43:54,970 --> 03:43:58,200
Saya masih akan mencetak\npenjualan variabel di mana saya berada

3919
03:43:58,200 --> 03:44:00,440
menyimpan hasil itu. Tapi\nperhatikan apa yang telah saya lakukan di sini.

3920
03:44:00,441 --> 03:44:02,191
Saya sudah mengabstraksikan\ngagasannya

3921
03:44:02,191 --> 03:44:06,091
mengambil diskon dengan membuat\n

3922
03:44:06,091 --> 03:44:07,951
harga, atau apa pun sebagai masukan.

3923
03:44:07,950 --> 03:44:10,440
Ini sedikit menghitung,\nssederhana meskipun ada di sini

3924
03:44:10,441 --> 03:44:12,011
dan kemudian mengembalikan nilai.

3925
03:44:12,011 --> 03:44:14,941
Namun perhatikan bahwa diskon\tidak mencetak nilai tersebut.

3926
03:44:14,941 --> 03:44:17,191
Ini benar-benar menggunakan\nkata kunci lain yang disebut

3927
03:44:17,191 --> 03:44:21,811
kembalikan supaya aku bisa mengembalikannya\n

3928
03:44:21,810 --> 03:44:25,411
mengembalikan nilai, seperti get_int\n

3929
03:44:25,411 --> 03:44:29,851
untuk Anda-- sehingga saya di sini di\nline 9 dapat melanjutkan dan menyimpannya

3930
03:44:29,851 --> 03:44:33,721
nilai itu dalam variabel jika saya mau\n

3931
03:44:33,720 --> 03:44:38,440
Izinkan saya melanjutkan sekarang dan mengkompilasi ulang\nkode ini dengan membuat diskon.

3932
03:44:38,441 --> 03:44:40,381
Biarkan saya melanjutkan dan melakukan ./diskon.

3933
03:44:43,040 --> 03:44:46,530
Harga jualnya juga akan menjadi $85.

3934
03:44:46,531 --> 03:44:50,721
Sekarang, ternyata fungsinya tidak\n

3935
03:44:51,261 --> 03:44:53,240
Mereka sebenarnya dapat mengambil 2 atau 3 atau lebih.

3936
03:44:53,240 --> 03:44:57,200
Jadi, sebenarnya, misalkan kita menginginkannya sekarang\n

3937
03:44:57,200 --> 03:45:01,400
dan terima sebagai masukan untuk diskon\n

3938
03:45:01,400 --> 03:45:03,890
yang ingin saya diskon tetapi\njuga diskon persentasenya

3939
03:45:03,890 --> 03:45:08,150
sehingga memungkinkan kami untuk mendukung tidak hanya\n

3940
03:45:08,870 --> 03:45:13,610
Baiklah, izinkan saya ke sini dan menyatakan\n

3941
03:45:13,611 --> 03:45:15,951
Dan izinkan saya bertanya kepada pengguna\nberapa persentasenya

3942
03:45:15,950 --> 03:45:17,810
poin yang ingin mereka lepas landas.

3943
03:45:17,810 --> 03:45:21,501
Jadi saya akan mengatakan persen_off\nindi dalam perintah di sini

3944
03:45:21,501 --> 03:45:23,751
dapatkan int yang disebut persen_off.

3945
03:45:23,751 --> 03:45:26,871
Dan sekarang selain\nmeneruskan secara reguler sebagai masukan

3946
03:45:26,870 --> 03:45:30,800
ke fungsi diskon, saya\njuga akan memasukkan persen_off.

3947
03:45:30,800 --> 03:45:34,820
Tapi saya perlu memberitahu komputer\n

3948
03:45:34,820 --> 03:45:37,130
dan cara saya melakukannya\nihanya dengan koma

3949
03:45:37,130 --> 03:45:39,380
di sini dalam\ndefinisi fungsi itu sendiri.

3950
03:45:39,380 --> 03:45:43,610
Ini akan menjadi persentase\argumen, argumen kedua

3951
03:45:44,511 --> 03:45:50,091
Dan sekarang saya akan menggunakannya\n

3952
03:45:50,091 --> 03:45:53,480
Saya tidak ingin hanya melakukan persentase\n

3953
03:45:53,480 --> 03:45:56,744
itu akan meningkatkan\nukuran harga total.

3954
03:45:56,744 --> 03:45:59,661
Sebenarnya saya perlu melakukan sedikit\n

3955
03:45:59,661 --> 03:46:03,380
diskon persentase, seperti angka\n15 untuk 15 poin persentase

3956
03:46:03,380 --> 03:46:06,590
Saya perlu melakukan 100 dikurangi\nbanyak poin persentase itu

3957
03:46:06,591 --> 03:46:08,871
sehingga memberi saya 100 dikurangi 15--

3958
03:46:09,710 --> 03:46:13,130
Lalu saya perlu membaginya\ndengan 100 untuk mengurutkannya sekarang

3959
03:46:13,130 --> 03:46:18,030
untuk memberi diri saya 0,85 kali\nharga yang diberikan.

3960
03:46:18,031 --> 03:46:22,911
Tapi kalau aku lanjutkan sekarang dan simpan ini,\n

3961
03:46:22,911 --> 03:46:24,890
Saya perhatikan bahwa saya\sebenarnya mendapat kesalahan di sini.

3962
03:46:26,300 --> 03:46:28,220
Ya, saya perlu mengubah\nprototipe itu juga.

3963
03:46:28,220 --> 03:46:30,718
Dan, sekali lagi, ini memang\nan aspek menjengkelkan dari C

3964
03:46:30,718 --> 03:46:32,510
bahwa Anda harus menjaga\nkonsistensi di sini.

3965
03:46:33,177 --> 03:46:35,390
Saya hanya akan naik\nsini, ubah ini menjadi int

3966
03:46:35,390 --> 03:46:37,640
persentase-- ejaan salah.

3967
03:46:37,640 --> 03:46:40,581
Dan sekarang izinkan saya mencoba lagi\nkompilasi, membuat diskon

3968
03:46:40,581 --> 03:46:42,111
menyilangkan jariku kali ini.

3969
03:46:42,111 --> 03:46:46,701
Bekerja dengan baik. ./diskon, dan voila, $100.

3970
03:46:46,700 --> 03:46:49,220
Dan diskon persen, katakanlah, 15 poin.

3971
03:46:52,980 --> 03:46:55,310
Sekarang, perlu diperhatikan\nbahwa saya melakukannya dengan sengaja

3972
03:46:55,310 --> 03:46:58,400
mengembalikan hasil\nmatematika saya dari fungsi ini.

3973
03:46:58,400 --> 03:47:01,790
Saya belum hanya menghitung\n

3974
03:47:01,790 --> 03:47:03,950
Faktanya, jika kita melihat\nat versi kedua ini

3975
03:47:03,950 --> 03:47:07,770
di mana diskon kini mengambil harga\n

3976
03:47:07,771 --> 03:47:10,041
perhatikan bahwa saya tidak melakukan\nsesuatu seperti ini.

3977
03:47:10,040 --> 03:47:14,420
Saya tidak hanya mengatakan harga\nesama dengan harga dikalikan 100

3978
03:47:14,421 --> 03:47:18,261
dikurangi persentase dibagi\n100 dan berhenti di situ.

3979
03:47:18,261 --> 03:47:21,951
Masalahnya adalah\nharga variabel ini sedang naik daun

3980
03:47:21,950 --> 03:47:24,290
untuk dicakup ke fungsi diskon itu.

3981
03:47:24,290 --> 03:47:27,230
Dan kita akan menghadapi ini lagi\n

3982
03:47:27,230 --> 03:47:32,091
hanya mengacu pada tempat di mana a\n

3983
03:47:33,210 --> 03:47:36,200
Jadi ternyata kalau saya ubah harga\n

3984
03:47:36,200 --> 03:47:38,600
fungsinya, hal itu tidak akan\nmemiliki efek yang bertahan lama.

3985
03:47:38,601 --> 03:47:40,310
Jika saya benar-benar ingin\nmendapatkan hasilnya kembali

3986
03:47:40,310 --> 03:47:43,761
ke fungsi yang menggunakan fungsi\ndidiskon, yaitu main

3987
03:47:43,761 --> 03:47:47,001
Saya sebenarnya perlu mengambil\npendekatan ini untuk benar-benar kembali

3988
03:47:47,001 --> 03:47:51,720
nilai secara eksplisit sehingga pada akhirnya\n

3989
03:47:52,220 --> 03:47:54,345
Baiklah, mari kita lanjutkan dan\nmungkin bagaimana kalau kita saja

3990
03:47:54,345 --> 03:47:57,800
gunakan primitif ini\nhanya dalam beberapa cara berbeda.

3991
03:47:57,800 --> 03:48:02,300
Bagaimana dengan permainan kecil\niesteryear, Super Mario Brothers?

3992
03:48:02,300 --> 03:48:05,661
Dan di Super Mario asli\n

3993
03:48:05,661 --> 03:48:08,060
jadi Anda memiliki\ndunia gulir samping itu

3994
03:48:08,060 --> 03:48:11,470
terlihat seperti ini di mana ada beberapa koin\n

3995
03:48:11,970 --> 03:48:15,230
Jadi mari kita gunakan ini sebagai\nvisual untuk mempertimbangkan bagaimana di C bisa

3996
03:48:15,230 --> 03:48:17,060
Saya mulai membuat\nsesuatu yang semi-grafis.

3997
03:48:17,060 --> 03:48:20,270
Misalnya, bukan warna asli atau kemewahan,\n

3998
03:48:20,271 --> 03:48:23,011
hanya sesuatu seperti mencetak\ntanpa beberapa tanda tanya.

3999
03:48:23,011 --> 03:48:26,031
Baiklah, jika saya kembali ke sini,\nbiarkan saya membuat file yang sebenarnya

4000
03:48:30,290 --> 03:48:34,190
Izinkan saya melanjutkan dan memasukkan\nstdio.h, int main void, lagi

4001
03:48:34,191 --> 03:48:36,320
yang akan terus kami\nsalin-tempel untuk hari ini.

4002
03:48:36,320 --> 03:48:40,431
Lalu izinkan saya melanjutkan dan\n

4003
03:48:41,421 --> 03:48:44,609
Baiklah, inilah yang\nmungkin kita sebut sebagai seni ASCII, yang mana

4004
03:48:44,609 --> 03:48:47,400
hanya berarti grafik tetapi sebenarnya hanya\n

4005
03:48:47,400 --> 03:48:52,130
Dan jika saya membuat mario dan melakukan ./mario,\n

4006
03:48:52,130 --> 03:48:55,911
seperti ini, tapi ini adalah awal\npeta semacam ini untuk sebuah permainan.

4007
03:48:55,911 --> 03:49:00,050
Nah, jika sekarang saya ingin mencetak\nhal-hal itu secara dinamis

4008
03:49:00,050 --> 03:49:01,730
biarkan saya kembali ke kode saya di sini.

4009
03:49:01,730 --> 03:49:03,831
Dan alih-alih mencetak\nsemuanya sekaligus

4010
03:49:03,831 --> 03:49:08,451
Saya bisa melakukan sesuatu seperti empat int i\n

4011
03:49:08,450 --> 03:49:13,230
Lalu di dalam sini, saya hanya bisa\n

4012
03:49:13,230 --> 03:49:15,890
Biarkan aku menyimpannya, buat mario.

4013
03:49:15,890 --> 03:49:20,630
Dan, dengan risiko\nmengecewakan, hampir saja

4014
03:49:20,630 --> 03:49:23,800
tapi saya melakukan kesalahan,\nhanya estetika bodoh.

4015
03:49:23,800 --> 03:49:25,970
Promptnya tidak ada di baris baru.

4016
03:49:29,060 --> 03:49:31,810
DAVID J. MALAN: Ya, saya memerlukan\n

4017
03:49:35,540 --> 03:49:37,790
Oke, tidak, karena itu akan merugikan semua orang

4018
03:49:37,790 --> 03:49:40,498
dan itu akan menghasilkan hal ini\n

4019
03:49:40,498 --> 03:49:44,030
Jadi, logikanya, sama seperti di Scratch, masukkan\n

4020
03:49:44,751 --> 03:49:48,300
Dan cetak saja, misalnya\nonly, quote unquote, baris baru.

4021
03:49:48,300 --> 03:49:51,350
Dan sekarang jika saya membuat\nmario lagi, ./mario, oke.

4022
03:49:52,337 --> 03:49:54,171
Tapi sekarang saya dirancang\nsedikit lebih baik

4023
03:49:54,171 --> 03:49:57,390
tidak mengulanginya berkali-kali,\n

4024
03:49:57,390 --> 03:50:00,710
Tapi mari kita lakukan\nhal lain di sini dengan mario.

4025
03:50:00,710 --> 03:50:05,960
Biarkan saya bertanya kepada pengguna bagaimana caranya\n

4026
03:50:05,960 --> 03:50:09,710
Masalahnya di sini adalah ada yang lain\n

4027
03:50:09,710 --> 03:50:12,170
dan ini disebut perulangan do\n while, secara umum.

4028
03:50:12,171 --> 03:50:15,711
Perulangan do while\nmirip dengan perulangan while

4029
03:50:15,710 --> 03:50:19,220
tapi ia memeriksa kondisi\nterakhir, bukan yang pertama.

4030
03:50:19,220 --> 03:50:21,038
Ingat sebelumnya pada\nslide, kita punya waktu

4031
03:50:21,039 --> 03:50:22,581
kurung buka, kurung tutup.

4032
03:50:22,581 --> 03:50:25,941
Dan saya terus menyatakan bahwa kami telah memeriksa\n

4033
03:50:25,941 --> 03:50:29,070
itu, 3 di muka lagi dan lagi.

4034
03:50:29,070 --> 03:50:32,630
Perulangan do while hanya membalikkan\nlogika sehingga Anda benar-benar bisa

4035
03:50:34,040 --> 03:50:36,380
Di bagian atas program ini,\nSaya akan melanjutkan sekarang

4036
03:50:36,380 --> 03:50:40,460
dan berikan sendiri variabel\nn seperti ini bertipe integer.

4037
03:50:40,460 --> 03:50:44,870
Lalu saya akan melakukannya, secara harfiah,\n

4038
03:50:44,870 --> 03:50:48,590
n sama dengan get_int-- dan saya akan\nmenanyakan lebarnya kepada pengguna

4039
03:50:48,591 --> 03:50:51,441
seperti jumlah\ndolar tanda untuk dicetak.

4040
03:50:51,441 --> 03:50:56,031
Dan saya akan melakukan ini\nsementara n kurang dari, katakanlah, 1.

4041
03:50:56,031 --> 03:50:59,031
Jadi ini agak samar,\ntetapi ada perbedaan yang menonjol

4042
03:50:59,031 --> 03:51:04,191
adalah ekspresi Boolean sekarang\n

4043
03:51:07,380 --> 03:51:11,390
Nah, bedanya\njika saya membuat mario adalah--

4044
03:51:12,890 --> 03:51:16,620
Saya perlu menambahkan cs50.h, karena\nSaya sekarang menggunakan get_int.

4045
03:51:16,620 --> 03:51:22,050
Jika sekarang saya mengkompilasi versi\no Mario ini dan melakukan ./mario

4046
03:51:22,050 --> 03:51:26,640
perulangan do while berguna bila Anda ingin\n

4047
03:51:26,640 --> 03:51:30,931
lalu periksa beberapa kondisi atau beberapa\n

4048
03:51:30,931 --> 03:51:32,461
dalam hal ini, pengguna bekerja sama.

4049
03:51:32,460 --> 03:51:35,772
Tidak masuk akal jika\npengguna mengetik, katakanlah, 0

4050
03:51:35,772 --> 03:51:37,230
karena tidak ada pekerjaan yang harus diselesaikan.

4051
03:51:37,230 --> 03:51:39,450
Aneh sekali kalau\nmereka bilang negatif 100

4052
03:51:39,450 --> 03:51:41,220
karena itu tidak masuk akal secara logika.

4053
03:51:41,220 --> 03:51:46,261
Jadi dengan konstruksi sederhana ini\ndi sini, saya melakukan hal berikut

4054
03:51:48,810 --> 03:51:53,077
Implikasinya adalah segera\n

4055
03:51:53,077 --> 03:51:55,411
Saya akan keluar dari\nlingkaran ini, dan saya berhasil

4056
03:51:55,411 --> 03:52:00,630
sebuah variabel bernama n yang berisi,\pada dasarnya, nilai positif, 1

4057
03:52:03,210 --> 03:52:07,320
Dan sekarang saya dapat menggunakan ini, misalnya, di sini, ubah 4 menjadi n

4058
03:52:07,320 --> 03:52:09,810
jadi sekarang program saya sepenuhnya dinamis.

4059
03:52:09,810 --> 03:52:13,710
Biarkan saya melanjutkan\nmembuat mario, ./mario lagi.

4060
03:52:18,751 --> 03:52:22,140
Dan perbedaannya disini dengan\n

4061
03:52:22,140 --> 03:52:25,320
melibatkan mendapatkan masukan dari pengguna,\ntidak ada pertanyaan yang perlu ditanyakan.

4062
03:52:25,320 --> 03:52:27,161
Pengguna belum memberi Anda apa pun.

4063
03:52:27,161 --> 03:52:31,111
Jadi, Anda harus melakukan sesuatu terlebih dahulu,\n

4064
03:52:31,111 --> 03:52:35,808
jika manusia, misalnya,\nbekerja sama, dalam kasus ini.

4065
03:52:35,808 --> 03:52:37,891
Baiklah, kenapa kita tidak\nmelanjutkannya ke sesuatu

4066
03:52:37,890 --> 03:52:41,940
lebih seperti ini di game yang sama,\n

4067
03:52:41,941 --> 03:52:45,481
dan ini seperti dinding\ndua dimensi yang muncul di sini?

4068
03:52:45,480 --> 03:52:48,480
Ini terlihat seperti 3 kali 3, untuk\n

4069
03:52:48,480 --> 03:52:51,931
Dan itu seperti, terbuat dari batu bata, jadi\n

4070
03:52:51,931 --> 03:52:53,761
Yah, ternyata kita bisa membuat sarang--

4071
03:52:53,761 --> 03:52:57,310
yaitu, gabungkan-- beberapa\nide yang sama sebagai berikut.

4072
03:52:57,310 --> 03:53:01,110
Biarkan saya melanjutkan sekarang dan\nmengubah kembali ke kode ini.

4073
03:53:01,111 --> 03:53:05,501
Dan saya akan mempertahankan perulangan\ndo while dari sebelumnya.

4074
03:53:05,501 --> 03:53:07,441
Dan saya akan menanyakan\npertanyaan ini

4075
03:53:07,441 --> 03:53:09,091
berapa ukuran persegi ini?

4076
03:53:09,091 --> 03:53:13,841
Saya asumsikan jumlahnya n kali\nn, jadi 3 kali 3, 4 kali 4, terserah.

4077
03:53:13,841 --> 03:53:16,621
Jadi saya hanya akan menanyakan\nukuran batu bata persegi ini.

4078
03:53:18,373 --> 03:53:20,790
Baiklah, saya akan melanjutkan,\nmisalnya, dan mencetak--

4079
03:53:20,790 --> 03:53:25,907
bagaimana kalau int i =\n0, i kurang dari n, i .

4080
03:53:25,907 --> 03:53:27,990
Biar saya sederhanakan\dan mencetak sesuatu

4081
03:53:27,990 --> 03:53:32,790
seperti ini, hanya satu\nsimbol hash yaitu batu bata

4082
03:53:34,800 --> 03:53:36,270
Baiklah, mari kita buat mario.

4083
03:53:38,400 --> 03:53:40,320
Oke, hampir saja.

4084
03:53:41,431 --> 03:53:43,181
Baiklah, tapi saya perlu membuatnya lebih luas.

4085
03:53:43,181 --> 03:53:45,751
Jadi solusi terakhir\nadalah menghilangkan baris baru

4086
03:53:45,751 --> 03:53:49,921
dan mungkin meletakkan\nbaris baru di sini, setelah perulangan.

4087
03:53:49,921 --> 03:53:55,951
Baiklah, mari kita buat mario,\n

4088
03:53:55,950 --> 03:54:00,480
Baiklah, jadi saya perlu\nmenggabungkan kedua ide ini.

4089
03:54:00,480 --> 03:54:04,351
Jadi bagaimana kita mengatasi masalah ini?

4090
03:54:04,351 --> 03:54:10,591
Saya ingin mencetak baris dan\nkolom, bukan baris atau kolom.

4091
03:54:12,630 --> 03:54:15,015
AUDIENCE: Tambahkan\nloop lain di loop for.

4092
03:54:15,890 --> 03:54:17,570
Tambahkan loop lain di loop for, bukan?

4093
03:54:17,570 --> 03:54:21,890
Jika Anda menggunakan satu loop secara konseptual\n

4094
03:54:21,890 --> 03:54:24,470
ke bawah, lalu\ndalam setiap baris, Anda kemudian

4095
03:54:24,470 --> 03:54:26,870
semacam gaya mesin tik--\nmesin tik sekolahan--

4096
03:54:26,870 --> 03:54:30,020
lakukan suka, karakter, karakter,\n

4097
03:54:30,021 --> 03:54:32,521
Saya pikir kita bisa melakukan\napa yang ingin kita capai di sini.

4098
03:54:33,421 --> 03:54:36,441
Izinkan saya menghilangkan baris ini dan\nghilangkan baris ini untuk saat ini.

4099
03:54:36,441 --> 03:54:39,201
Dan izinkan saya memberi diri saya\nlingkaran lain di dalam.

4100
03:54:39,200 --> 03:54:42,920
Dan karena saya sudah menggunakan i,\nkonvensi lain yang masuk akal

4101
03:54:42,921 --> 03:54:45,021
di sini akan mengatakan sesuatu seperti j.

4102
03:54:45,021 --> 03:54:49,311
Jadi j juga mendapat 0, j lebih kecil dari n, j .

4103
03:54:49,310 --> 03:54:51,620
Dan sekarang, apa yang akan terjadi?

4104
03:54:51,620 --> 03:54:56,180
Biarkan saya melanjutkan dan mencetak\n

4105
03:54:56,181 --> 03:54:58,441
Dan izinkan saya menyimpannya dan biarkan saya menjalankan ini.

4106
03:54:58,441 --> 03:54:59,990
Biarkan aku melihat seberapa dekat kita.

4107
03:55:01,970 --> 03:55:06,421
Oke, tiga, itu jelas salah, tapi\n

4108
03:55:07,581 --> 03:55:12,890
Perbaikan apa yang perlu saya lakukan sekarang\n

4109
03:55:12,890 --> 03:55:15,200
turun ke baris berikutnya bila perlu?

4110
03:55:17,140 --> 03:55:19,091
Ya, saya memerlukan salah satu dari garis miring terbalik ini.

4111
03:55:19,091 --> 03:55:23,921
Dan izinkan saya menambahkan beberapa komentar sekarang ke\n

4112
03:55:23,921 --> 03:55:30,970
Untuk setiap baris, untuk setiap kolom,\nbagaimana kalau mencetak bata--

4113
03:55:30,970 --> 03:55:33,100
hanya untuk menjelaskan logikanya?

4114
03:55:33,101 --> 03:55:37,810
Jadi saya menambahkannya karena\nsekarang berpindah ke baris berikutnya

4115
03:55:37,810 --> 03:55:40,390
Saya bisa melakukan sesuatu seperti\nini dengan garis miring terbalik n.

4116
03:55:40,390 --> 03:55:43,751
Jadi di sinilah komentarnya,\nsungguh, pseudocode saya

4117
03:55:43,751 --> 03:55:46,730
sebenarnya agak menjelaskan\nsituasinya sedikit.

4118
03:55:46,730 --> 03:55:51,353
Biarkan saya melanjutkan dan mengkompilasi ulang\n

4119
03:55:51,353 --> 03:55:53,770
Ini bukan persegi sempurna,\nhanya karena simbol hash ini

4120
03:55:53,771 --> 03:55:57,551
sedikit lebih tinggi daripada lebarnya,\n

4121
03:55:57,550 --> 03:56:03,751
Sekarang saya telah melakukan sesuatu yang cukup\n

4122
03:56:03,751 --> 03:56:08,244
Baiklah, izinkan saya berhenti sejenak di sini\n

4123
03:56:08,244 --> 03:56:10,411
Sekali lagi, kodenya menjadi\nasedikit lebih rumit

4124
03:56:10,411 --> 03:56:14,115
tapi kami hanya membangun lebih banyak lagi\n

4125
03:56:14,115 --> 03:56:15,990
dengan potongan\npuzzle yang familiar-- beberapa variabel

4126
03:56:15,990 --> 03:56:17,341
beberapa loop, beberapa kondisional.

4127
03:56:17,341 --> 03:56:19,411
Semuanya sama seperti sebelumnya.

4128
03:56:20,880 --> 03:56:22,140
Bisakah Anda mengalikan string di C?

4129
03:56:22,890 --> 03:56:25,807
Namun ajukan pertanyaan yang sama lagi di\n

4130
03:56:25,808 --> 03:56:27,774
dan jawabannya adalah ya.

4131
03:56:29,880 --> 03:56:32,520
Di C, Anda harus menentukan\ntipe pengembalian, nama

4132
03:56:32,521 --> 03:56:34,581
fungsi, dan\ninput, atau argumen

4133
03:56:34,581 --> 03:56:35,831
ke fungsi dalam urutan itu.

4134
03:56:35,831 --> 03:56:39,181
Dan jika tidak ada satupun yang dapat diterapkan,\nAnda menulis kata batal.

4135
03:56:39,181 --> 03:56:42,060
Jadi pertanyaan yang sama seperti sebelumnya, biarkan\nsaya memulainya sekitar seminggu atau lebih

4136
03:56:42,060 --> 03:56:44,261
dan kita akan kembali ke\nitu dan kita akan mengetahui alasannya.

4137
03:56:44,261 --> 03:56:47,281
Namun untuk saat ini, percaya saja\n

4138
03:56:47,281 --> 03:56:49,651
Karena main sedikit\nistimewa, mirip dengan

4139
03:56:51,031 --> 03:56:54,271
Itu juga sedikit istimewa.

4140
03:57:02,411 --> 03:57:05,960
Jika Anda ingin keluar dari\nloop lebih awal, Anda dapat melakukan ini.

4141
03:57:05,960 --> 03:57:08,320
Jadi izinkan saya menjawab pertanyaan ini dengan cara ini.

4142
03:57:08,320 --> 03:57:14,390
Alternatif untuk perulangan do while\n

4143
03:57:15,880 --> 03:57:18,290
jadi lakukan hal berikut selamanya--

4144
03:57:18,290 --> 03:57:23,470
izinkan saya melanjutkan dan mengambil satu inci dari\n

4145
03:57:26,771 --> 03:57:28,611
yaitu bilangan bulat positif--

4146
03:57:28,611 --> 03:57:32,411
lalu lanjutkan dan gunakan\nkata kunci baru yang disebut break.

4147
03:57:32,411 --> 03:57:35,691
Ini identik dengan apa yang baru saja kita lakukan.

4148
03:57:37,130 --> 03:57:39,671
Ini seperti beberapa baris\ntambahan, banyak yang kosong.

4149
03:57:39,671 --> 03:57:41,111
Jadi itu hanya alternatif.

4150
03:57:41,111 --> 03:57:43,856
Namun do while melakukan hal yang sama\nnamun sedikit lebih ketat--

4151
03:57:43,855 --> 03:57:47,001
jika itu jawaban atas pertanyaan Anda.

4152
03:57:47,001 --> 03:57:51,434
Baiklah, sekarang mari kita perkenalkan,\n

4153
03:57:51,433 --> 03:57:53,350
bahwa aku telah\nmenyingkirkannya di bawah permadani

4154
03:57:53,351 --> 03:57:55,781
meskipun kami telah melihat sedikit\nbukti mengenai hal ini sebelumnya

4155
03:57:55,781 --> 03:57:57,881
ketika kami mencoba menambahkan 2\nmiliar dan 2 miliar

4156
03:57:57,880 --> 03:58:02,180
dan itu melebihi jumlah\nbit dalam sebuah int, bisa dikatakan begitu.

4157
03:58:02,181 --> 03:58:06,431
Biarkan saya melanjutkan dan membuat kode\nprogram bernama kalkulator lagi.

4158
03:58:06,431 --> 03:58:09,221
Namun saya akan melanjutkan sekarang\nd mengubahnya menjadi float.

4159
03:58:09,220 --> 03:58:12,820
Jadi saya akan mengubah x menjadi float,\n

4160
03:58:12,820 --> 03:58:15,650
Dan float, sekali lagi, hanyalah\na nilai floating point

4161
03:58:15,650 --> 03:58:19,070
yang merupakan cara yang bagus untuk mengatakan yang sebenarnya\n

4162
03:58:19,070 --> 03:58:22,480
Dan di sini, saya akan\nmelanjutkan dan menggunakan %f untuk float.

4163
03:58:22,480 --> 03:58:24,851
Dan saya akan melanjutkan\nsekarang dan melakukan satu hal lagi.

4164
03:58:24,851 --> 03:58:27,643
Daripada menambahkan, saya ingin melakukan\n

4165
03:58:29,501 --> 03:58:32,050
Dan saya akan memberikan diri saya\nanpelampung ketiga lainnya yang disebut z

4166
03:58:32,050 --> 03:58:33,730
seperti yang kami lakukan di awal hari ini.

4167
03:58:33,730 --> 03:58:37,331
Dan saya akan mencetak z\nin, bukan x dan y secara eksplisit.

4168
03:58:37,331 --> 03:58:42,011
Jadi saya akan lanjutkan sekarang dan\n

4169
03:58:42,011 --> 03:58:44,320
Dan mari kita lakukan sesuatu seperti, oh, 2/3.

4170
03:58:47,710 --> 03:58:49,600
Jadi itulah yang Anda harapkan.

4171
03:58:52,310 --> 03:58:54,501
Baiklah, jadi 0,1, dan banyak angka nol.

4172
03:58:54,501 --> 03:58:56,521
Itu juga yang\nAnda harapkan.

4173
03:58:56,521 --> 03:58:58,191
Tapi sekarang izinkan saya sedikit penasaran.

4174
03:58:58,191 --> 03:59:02,271
Ternyata di C, Anda bisa\n

4175
03:59:03,230 --> 03:59:05,390
Secara default, Anda mendapatkan 6 digit atau lebih.

4176
03:59:05,390 --> 03:59:07,850
Misalkan Anda ingin\nmendapatkan tepat 2 digit.

4177
03:59:07,851 --> 03:59:11,816
Anda dapat dengan lebih ringkas mengatakan 0,2\n

4178
03:59:11,816 --> 03:59:14,691
Ini adalah hal yang\n

4179
03:59:14,691 --> 03:59:16,911
dan Anda menemukan, Oke,\nformat kode untuk float

4180
03:59:16,911 --> 03:59:19,531
menggunakan 0,2 untuk melakukan dua koma desimal.

4181
03:59:19,531 --> 03:59:23,061
Jadi izinkan saya membuat kalkulator\nagain, ./calculator.

4182
03:59:25,501 --> 03:59:28,490
Jadi ini menangani tampilan\ndigit penting untuk kita di sini.

4183
03:59:28,490 --> 03:59:32,181
Dan sekarang izinkan saya melanjutkan\ndan melakukan 1/10 dan 0,10.

4184
03:59:33,494 --> 03:59:35,661
Yah, mungkin saya benar-benar menginginkan\na banyak ketelitian, bukan?

4185
03:59:35,661 --> 03:59:37,161
Saya punya komputer yang sangat kuat.

4186
03:59:37,161 --> 03:59:39,681
Coba saya lihat 50 angka\nsetelah koma desimal.

4187
03:59:39,681 --> 03:59:41,551
Itu angka penting yang banyak.

4188
03:59:41,550 --> 03:59:44,341
Izinkan saya membuat ulang\nkalkulator-- ups, salah ketik.

4189
03:59:44,341 --> 03:59:48,980
Izinkan saya membuat ulang kalkulatornya,\n./mario kalkulator.

4190
03:59:54,400 --> 03:59:58,390
Cukup yakin itu seharusnya\n

4191
03:59:59,531 --> 04:00:01,239
Baiklah, mungkin\nitu hanya bug.

4192
04:00:02,290 --> 04:00:05,050
Oke, itu semakin funky.

4193
04:00:06,400 --> 04:00:10,448
Tampaknya program saya tidak dapat\ntidak dapat melakukan penambahan dengan baik--

4194
04:00:10,448 --> 04:00:12,281
pada akhirnya kami menemui\nmasalah bernilai miliaran--

4195
04:00:12,281 --> 04:00:16,861
kami bahkan tidak dapat menghitung\nangka yang sangat tepat di sini.

4196
04:00:19,861 --> 04:00:22,201
Singkatnya, komputer\nmenaksir jawabannya

4197
04:00:22,200 --> 04:00:25,142
menggunakan angka sebanyak itu\nsetelah koma desimal.

4198
04:00:25,143 --> 04:00:26,851
Namun masalahnya\npada dasarnya memang demikian

4199
04:00:26,851 --> 04:00:30,101
sangat mirip dengan integer\noverflow dari sebelumnya.

4200
04:00:30,101 --> 04:00:31,801
Dan saya menggunakannya sekarang sebagai istilah seni.

4201
04:00:31,800 --> 04:00:36,210
Bilangan bulat bisa meluap jika Anda mencoba\n

4202
04:00:37,128 --> 04:00:40,378
Anda bisa mengubah semuanya menjadi satu, dan\n

4203
04:00:40,378 --> 04:00:42,761
Hal yang sama di sini, tetapi dalam\nkonteks float yang berbeda--

4204
04:00:42,761 --> 04:00:45,060
jika Anda hanya memiliki 32\nbit-- atau, sialnya, jika kami

4205
04:00:45,060 --> 04:00:48,720
ubah menjadi dua kali lipat dan hanya memiliki 64\n

4206
04:00:50,070 --> 04:00:54,070
Namun, cukup yakin ada\n

4207
04:00:54,070 --> 04:00:59,040
Di dunia, yaitu komputer\n

4208
04:00:59,040 --> 04:01:01,413
mewakili semua kemungkinan\number di dunia.

4209
04:01:01,414 --> 04:01:03,331
Karena, sekali lagi,\ntidak ada bilangan yang tak terhingga

4210
04:01:03,331 --> 04:01:06,570
permutasi 32 atau 64 bit.

4211
04:01:06,570 --> 04:01:10,351
Mungkin jumlahnya banyak, mencapai miliaran\n

4212
04:01:10,351 --> 04:01:13,771
Jadi, ini adalah\nperkiraan terdekat komputer

4213
04:01:13,771 --> 04:01:15,971
tentang apa yang sebenarnya terjadi di sana.

4214
04:01:15,970 --> 04:01:18,990
Jadi ini adalah contoh dari apa\n

4215
04:01:21,001 --> 04:01:26,341
Ketidaktepatan titik mengambang mengacu pada\n

4216
04:01:26,341 --> 04:01:29,341
untuk mewakili semua kemungkinan\nbilangan real 100%

4217
04:01:29,341 --> 04:01:33,118
tepatnya, setidaknya secara default\nin bahasa seperti C. Untungnya

4218
04:01:33,118 --> 04:01:35,201
di dunia ilmiah\nkomputasi dan lain sebagainya

4219
04:01:35,200 --> 04:01:38,820
ada solusi untuk masalah ini\n

4220
04:01:38,820 --> 04:01:42,070
Namun masalahnya secara mendasar\nmasih akan ada.

4221
04:01:42,070 --> 04:01:44,790
Jadi ada alasan saya\nmengubah x dan y menjadi float.

4222
04:01:44,790 --> 04:01:47,050
Mari kita lihat apa yang\nterjadi jika kita memutar ulang sedikit.

4223
04:01:47,050 --> 04:01:52,501
Dan daripada menggunakan float untuk x dan y,\n

4224
04:01:52,501 --> 04:01:56,161
Dan mari kita kembali ke masa lalu\ndan menggunakan get_int juga

4225
04:01:56,161 --> 04:01:59,138
sehingga memberi kita bilangan bulat x dan y.

4226
04:01:59,138 --> 04:02:01,721
Mari kita tetap membiarkan z sebagai float,\nkarena pada akhirnya

4227
04:02:01,720 --> 04:02:04,440
kami ingin mampu menangani\npecahan atau nilai floating-point.

4228
04:02:04,441 --> 04:02:07,381
Namun mari kita lanjutkan sekarang dan\ncetak nilai z ini

4229
04:02:07,380 --> 04:02:09,720
telah mengubah x dan y sekarang menjadi int.

4230
04:02:09,720 --> 04:02:15,390
membuat kalkulator, ./kalkulator, dan\n

4231
04:02:16,710 --> 04:02:21,960
Dan hasilnya bukan 0,666, dan\nbukan pembulatan ganjil.

4232
04:02:21,960 --> 04:02:23,760
Kali ini semuanya nol.

4233
04:02:24,970 --> 04:02:28,770
Nah, ternyata C, kapan\n

4234
04:02:28,771 --> 04:02:31,771
akan selalu memberi Anda\nkembali bilangan bulat, int.

4235
04:02:31,771 --> 04:02:34,951
Masalahnya adalah nilai floating-point\ntidak cocok dengan int.

4236
04:02:34,950 --> 04:02:37,650
Hanya bagian integral di\nkiri koma desimal yang dapat melakukannya.

4237
04:02:37,650 --> 04:02:41,490
Semuanya di luar desimal\n

4238
04:02:41,490 --> 04:02:44,281
dikenal sebagai fitur di\nC yang disebut pemotongan.

4239
04:02:44,281 --> 04:02:47,591
Saat membagi bilangan bulat dengan\ninteger, Anda mendapatkan kembali bilangan bulat.

4240
04:02:47,591 --> 04:02:51,181
Namun jika Anda mencoba, simpan\n

4241
04:02:51,181 --> 04:02:54,631
menghasilkan bilangan bulat itu, C hanya\nakan membuang semuanya

4242
04:02:54,630 --> 04:02:57,421
pada dan di luar koma desimal,\nmeninggalkan kasus ini

4243
04:02:57,421 --> 04:03:03,521
hanya dalam angka 0 dari yang seharusnya\njadi 0,666666 dan seterusnya.

4244
04:03:03,521 --> 04:03:05,230
Jadi mari kita lihat satu contoh lagi.

4245
04:03:05,229 --> 04:03:06,841
Biarkan saya kembali ke terminal saya di sini.

4246
04:03:06,841 --> 04:03:08,550
Biarkan saya melakukan ./calculator lagi.

4247
04:03:09,751 --> 04:03:13,751
Kali ini, Seharusnya\n1.33333 dan seterusnya.

4248
04:03:13,751 --> 04:03:20,729
Tapi mari kita lihat, 4 dibagi 3, keduanya sebagai\n

4249
04:03:20,729 --> 04:03:23,761
tapi di sana juga\njawabannya seharusnya 1,333.

4250
04:03:23,761 --> 04:03:27,871
Namun bagian floating-point\nya terpotong atau dibuang

4251
04:03:30,370 --> 04:03:33,970
Tentu saja, kita bisa menggunakan\n

4252
04:03:33,970 --> 04:03:37,591
Namun jika, berdasarkan sifat program Anda,\n

4253
04:03:37,591 --> 04:03:40,800
atau mungkin bahkan jangka panjang, yang\nmasalah yang sama akan terjadi--

4254
04:03:40,800 --> 04:03:44,069
apa yang sebenarnya bisa kita lakukan\ disebut konversi tipe.

4255
04:03:44,069 --> 04:03:47,040
Dan kami dapat secara eksplisit memberi tahu\nkomputer bahwa kami sebenarnya

4256
04:03:47,040 --> 04:03:50,229
ingin memperlakukan int ini seolah-olah\ini adalah nilai floating-point.

4257
04:03:50,229 --> 04:03:52,020
Dan kita bisa melakukannya untuk x dan y.

4258
04:03:52,021 --> 04:03:55,871
Jadi izinkan saya kembali ke kode saya di sini, dan\n

4259
04:03:55,870 --> 04:04:01,260
Saya dapat mengonversi y menjadi float dengan\n

4260
04:04:01,261 --> 04:04:04,261
dengan menulis type\nfloat di dalam tanda kurung

4261
04:04:05,431 --> 04:04:08,881
Dan jika saya benar-benar ingin menjelaskannya secara eksplisit,\n

4262
04:04:08,880 --> 04:04:12,790
Namun sebenarnya, itu sudah cukup\n

4263
04:04:14,069 --> 04:04:19,110
Izinkan saya melanjutkan sekarang dan melakukan make\ncalculator lagi, ./calculator

4264
04:04:19,111 --> 04:04:21,900
dan mari kita coba 2 dibagi 3.

4265
04:04:21,899 --> 04:04:25,139
Dan sekarang, kita kembali ke\njawaban yang mendekati kebenaran.

4266
04:04:25,139 --> 04:04:27,840
Namun, memang benar, kami masih mengalami\nbeberapa masalah pembulatan di sana.

4267
04:04:27,841 --> 04:04:31,621
Mari kita jalankan sekali lagi\nkali 4 dibagi 3.

4268
04:04:31,620 --> 04:04:33,989
Setidaknya kita semakin dekat dengan\njawaban yang benar.

4269
04:04:33,989 --> 04:04:36,450
Namun kita masih memiliki\nketidaktepatan floating-point

4270
04:04:36,450 --> 04:04:39,300
tapi itu akan menjadi\nmasalah lain yang harus dipecahkan.

4271
04:04:39,300 --> 04:04:41,220
Dan berikut ini sedikit\nlebih detailnya mengenai masalah tersebut

4272
04:04:41,220 --> 04:04:44,399
dari integer overflow, yang\nis dalam konteks int.

4273
04:04:44,399 --> 04:04:48,389
Misalkan kita mengingat kembali\nminggu lalu ketika kita memiliki tiga bit

4274
04:04:48,389 --> 04:04:53,970
dan kami menghitung dari 0 hingga\n7, 0, 1, 2, 3, 4, 5, 6, 7.

4275
04:04:53,970 --> 04:04:56,220
Sepertinya saya bertanya,\nbagaimana kita menghitung sampai 8?

4276
04:04:56,220 --> 04:04:58,290
Seseorang mengusulkan,\nkita memerlukan bagian keempat.

4277
04:04:58,290 --> 04:05:01,559
Tidak apa-apa jika Anda memiliki\nbit keempat, jika Anda memiliki akses

4278
04:05:01,559 --> 04:05:03,479
ke bola lampu atau transistor lain.

4279
04:05:03,479 --> 04:05:09,239
Namun jika tidak, nomor berikutnya\n

4280
04:05:09,239 --> 04:05:13,110
Namun jika Anda tidak mempunyai ruang untuk\atau perangkat keras untuk bit keempat itu

4281
04:05:13,111 --> 04:05:16,341
sebaiknya Anda\nmewakili angka 0 saja.

4282
04:05:16,341 --> 04:05:19,640
Jadi dalam dunia bilangan bulat, jika\nAnda hanya menggunakan tiga bit

4283
04:05:19,639 --> 04:05:23,360
ketiga bit itu pada akhirnya\tidak meluap ketika Anda menghitung lebih dari 7.

4284
04:05:23,361 --> 04:05:28,011
Karena yang seharusnya 8 tidak muat, jadi\n

4285
04:05:28,011 --> 04:05:30,841
Dan meskipun masalah ini mungkin tampak misterius

4286
04:05:30,841 --> 04:05:33,050
kami manusia telah melakukan\nini beberapa kali.

4287
04:05:33,050 --> 04:05:35,327
Anda mungkin ingat\mengetahui atau membaca

4288
04:05:35,327 --> 04:05:37,161
tentang masalah Y2K,\ndi mana banyak orang

4289
04:05:37,161 --> 04:05:38,460
mengira dunia akan berakhir.

4290
04:05:38,960 --> 04:05:43,911
Karena pada tanggal 1 Januari\n2000, banyak komputer

4291
04:05:43,911 --> 04:05:48,501
mungkin, kami akan memperbarui\n

4292
04:05:48,501 --> 04:05:51,831
Namun masalahnya, selama\ndekade ini, demi efisiensi, kita sebagai manusia

4293
04:05:51,831 --> 04:05:54,710
sejujurnya kami mempunyai kebiasaan\ntidak menyimpan tahun sebagai empat digit.

4294
04:05:55,233 --> 04:05:58,191
Karena itu hanya banyak ruang\n

4295
04:05:59,460 --> 04:06:02,540
Begitu banyak sistem komputer,\nterutama pada saat-saat awal

4296
04:06:02,540 --> 04:06:05,780
perangkat kerasnya sangat mahal\ndan memorinya sangat ketat

4297
04:06:05,781 --> 04:06:08,390
baru saja menyimpan\ndua digit terakhir tahun mana pun.

4298
04:06:08,389 --> 04:06:14,270
Masalahnya tentu saja pada tanggal 1 Januari\n

4299
04:06:14,271 --> 04:06:19,341
Namun jika Anda tidak memiliki ruang untuk\ndigit lain, maka yang digunakan hanyalah 00.

4300
04:06:19,341 --> 04:06:23,720
Dan jika kode Anda menggunakan awalan\n

4301
04:06:23,720 --> 04:06:26,862
1999 kembali ke tahun 1900.

4302
04:06:26,862 --> 04:06:29,570
Untungnya, singkat cerita, a\n

4303
04:06:29,570 --> 04:06:32,880
dalam banyak bahasa lama dan\nsebagian besar mengatasi masalah ini

4304
04:06:34,400 --> 04:06:39,980
Saat dunia mungkin berakhir\n

4305
04:06:39,980 --> 04:06:42,560
Sekarang, hal itu mungkin terasa\nseperti waktu yang lama sekali

4306
04:06:42,560 --> 04:06:44,931
tapi begitu pula tahun 2000, pada satu titik.

4307
04:06:44,931 --> 04:06:51,351
Mengapa jam bisa rusak lagi\n

4308
04:06:54,980 --> 04:06:57,150
Jadi ini mengacu pada beberapa\njumlah detik.

4309
04:06:57,150 --> 04:07:00,560
Jadi ternyata begitulah\n

4310
04:07:00,560 --> 04:07:04,130
apakah mereka menghitung jumlah total\nodetik sejak periode tersebut, yang mana

4311
04:07:04,130 --> 04:07:06,620
ditetapkan pada tanggal 1 Januari 1970.

4312
04:07:07,220 --> 04:07:09,890
Ini adalah tahun yang baik\nuntuk mulai menghitung

4313
04:07:09,890 --> 04:07:11,880
ketika komputer benar-benar\nmuncul.

4314
04:07:11,880 --> 04:07:16,400
Sayangnya, sebagian besar komputer menggunakan 32\n

4315
04:07:16,400 --> 04:07:20,331
sejak tanggal 1 Januari 1970,\niplikasinya adalah kita

4316
04:07:20,331 --> 04:07:23,210
hanya dapat menghitung hingga\nkira-kira 2 miliar detik.

4317
04:07:23,210 --> 04:07:29,810
2 miliar detik akan\nterjadi pada tahun 2038, yang mana 30 11 detik

4318
04:07:29,810 --> 04:07:31,700
akan berguling sebagai berikut.

4319
04:07:31,700 --> 04:07:34,898
Jumlah itu 2 miliar,\nyang merupakan jumlah maksimal--

4320
04:07:34,898 --> 04:07:37,440
karena jika Anda mewakili\nbilangan positif dan negatif

4321
04:07:37,441 --> 04:07:39,941
ingatlah bahwa Anda hanya dapat menghitung\nas sebanyak positif 2 miliar

4322
04:07:42,380 --> 04:07:44,421
Ini kira-kira merupakan angka\n2 miliar dalam biner.

4323
04:07:44,421 --> 04:07:47,041
Semuanya ada yang\nnol jauhnya di sini.

4324
04:07:47,040 --> 04:07:50,990
Jika saya menghitung satu detik melewati angka\n2 miliar itu, kurang lebih--

4325
04:07:50,990 --> 04:07:54,050
itu artinya, baiklah,\nsaya tambahkan 1, saya bawa 1--

4326
04:07:54,050 --> 04:07:57,290
seperti angka 9\nmenjadi 0 dalam desimal.

4327
04:07:57,290 --> 04:08:01,161
Jika saya membuat ini tetap sederhana\n

4328
04:08:01,161 --> 04:08:05,451
membawa 1, membawa 1, 1 detik\n

4329
04:08:05,450 --> 04:08:08,220
Saya memiliki nomor ini di\nmemori komputer.

4330
04:08:08,220 --> 04:08:11,780
Jadi masih ada 1 bit yang\na 1 ke kiri.

4331
04:08:11,781 --> 04:08:16,041
Sayangnya, hal tersebut\nsering kali mewakili hal-hal negatif

4332
04:08:16,040 --> 04:08:20,720
dimana jika bit pertama itu negatif,\n

4333
04:08:20,720 --> 04:08:22,280
entah bagaimana mewakili angka negatif.

4334
04:08:23,331 --> 04:08:24,831
Ada representasi yang lebih menarik.

4335
04:08:24,831 --> 04:08:27,800
Namun angka positif yang sangat besar\nsangat tiba-tiba

4336
04:08:27,800 --> 04:08:29,690
menjadi angka negatif yang sangat besar.

4337
04:08:29,691 --> 04:08:32,671
Dan jumlah itu kira-kira\nnegatif 2 miliar.

4338
04:08:32,671 --> 04:08:35,541
Itu berarti komputer\nin 2038 pada tanggal tersebut

4339
04:08:35,540 --> 04:08:37,970
akan secara tidak sengaja\nmenganggapnya demikian

4340
04:08:37,970 --> 04:08:43,610
menjadi negatif 2 miliar detik sejak\n

4341
04:08:43,611 --> 04:08:46,731
komputer mungkin mengira ini tahun 1901.

4342
04:08:46,730 --> 04:08:50,990
Jadi apa solusi untuk\nmasalah tahun 2038?

4343
04:08:50,990 --> 04:08:53,601
Y2K karena kami\menggunakan dua digit selama bertahun-tahun.

4344
04:08:55,970 --> 04:09:00,591
Dan, untungnya, kami mendapatkan\n

4345
04:09:00,591 --> 04:09:03,320
dan komputer sekarang\nsemakin banyak menggunakan 64 bit.

4346
04:09:03,320 --> 04:09:05,716
Dan kita semua akan lama\ngkehabisan waktu

4347
04:09:05,716 --> 04:09:08,091
dari jumlah detik tersebut, jadi\itu masalah orang lain

4348
04:09:09,841 --> 04:09:11,774
Namun itulah\nsolusi mendasarnya.

4349
04:09:11,773 --> 04:09:13,940
Jika Anda menghadapi\nsesuatu yang terbatas, ya

4350
04:09:13,941 --> 04:09:16,371
cukup tendang kalengnya lebih jauh lagi dan\nberikan diri Anda lebih banyak bagian.

4351
04:09:16,370 --> 04:09:18,710
Dan sejujurnya, karena perangkat keras\nisjauh lebih murah saat ini

4352
04:09:18,710 --> 04:09:21,200
komputer jauh lebih cepat,\itu bukan masalah besar

4353
04:09:21,200 --> 04:09:22,730
seperti yang mungkin terjadi beberapa dekade yang lalu.

4354
04:09:22,730 --> 04:09:24,501
Tapi itulah solusinya.

4355
04:09:24,501 --> 04:09:27,291
Namun hal ini muncul dalam konteks yang sangat umum.

4356
04:09:27,290 --> 04:09:32,120
Sebenarnya, izinkan saya melanjutkan dan menulis\n

4357
04:09:32,120 --> 04:09:35,150
Anda mungkin berpikir bahwa hanya mengonversi\n

4358
04:09:35,150 --> 04:09:37,730
mungkin sederhana, tapi biarkan\nsaya lanjutkan dan melakukan ini.

4359
04:09:37,730 --> 04:09:41,331
Di pennies.c, saya akan\nmelanjutkan dan menyertakan cs50.h.

4360
04:09:41,331 --> 04:09:48,271
Dan saya akan menyertakan stdio.h,\n

4361
04:09:48,271 --> 04:09:50,400
Dan sekarang di sini, saya akan melakukan ini.

4362
04:09:50,400 --> 04:09:52,370
Saya akan mendapatkan jumlah mengambang\nyang disebut, dan saya mendapatkannya

4363
04:09:52,370 --> 04:09:56,540
akan meminta sejumlah uang kepada pengguna\n

4364
04:09:56,540 --> 04:09:59,270
dan saya akan menyimpannya\nin dalam variabel bernama jumlah.

4365
04:09:59,271 --> 04:10:07,461
Lalu saya akan mengonversinya\n

4366
04:10:10,111 --> 04:10:16,281
Lalu saya akan melanjutkan dan mencetak\n

4367
04:10:16,281 --> 04:10:18,231
karena itu hanya\ninteger dalam sen--

4368
04:10:18,230 --> 04:10:22,490
garis miring terbalik n, kutipan\ntanda kutip, koma, sen.

4369
04:10:22,490 --> 04:10:26,181
Baiklah, jadi jika saya tidak membuat\n

4370
04:10:27,800 --> 04:10:31,700
Dan misalkan saya punya, katakanlah, $0,99, jadi 0,99.

4371
04:10:41,310 --> 04:10:42,931
Ada masalah ketidaktepatan.

4372
04:10:42,931 --> 04:10:45,240
Dan jumlah ini bahkan tidak terlalu besar.

4373
04:10:45,240 --> 04:10:49,302
Sekarang, bukan masalah besar jika kasir memberi\n

4374
04:10:49,302 --> 04:10:50,761
tapi Anda bisa membayangkan ini bertambah.

4375
04:10:50,761 --> 04:10:54,240
Anda dapat membayangkan hal ini mengkhawatirkan\nimplikasi finansialnya

4376
04:10:54,240 --> 04:10:57,630
untuk transaksi keuangan, untuk\n

4377
04:10:57,630 --> 04:10:59,860
Program saya bahkan tidak dapat menangani hal ini.

4378
04:10:59,861 --> 04:11:01,981
Ada beberapa solusi di sini.

4379
04:11:01,980 --> 04:11:04,171
Dan sepertinya apa yang\nsebenarnya terjadi--

4380
04:11:04,171 --> 04:11:08,730
jika saya mencetaknya menggunakan %f dengan a\n

4381
04:11:09,450 --> 04:11:14,280
mungkin komputer sedang bermasalah\n

4382
04:11:14,281 --> 04:11:20,761
Mungkin menyimpan 4 dolar\ndan 19,9999 sen.

4383
04:11:20,761 --> 04:11:23,551
Jadi sudah dekat, tapi belum cukup sampai disitu.

4384
04:11:23,550 --> 04:11:28,081
Jadi setidaknya saya bisa menyelesaikannya\ndengan mengumpulkan, misalnya.

4385
04:11:28,081 --> 04:11:31,081
Dan ternyata ada\na fungsi putaran di luar sana.

4386
04:11:31,081 --> 04:11:33,841
Dan ternyata itu ada di\nperpustakaan bernama perpustakaan matematika.

4387
04:11:33,841 --> 04:11:36,841
Dan Anda akan mengetahuinya dengan melihat\n

4388
04:11:37,950 --> 04:11:43,800
Dan jika sekarang saya menghasilkan uang lagi dan\n

4389
04:11:46,171 --> 04:11:49,531
Jadi setidaknya dalam konteks ini, ini\ntampaknya seperti masalah yang bisa dipecahkan.

4390
04:11:49,531 --> 04:11:53,461
Tapi itu pasti sesuatu yang saya\n

4391
04:11:53,460 --> 04:11:57,180
Sayangnya, bahkan profesional,\n

4392
04:11:57,181 --> 04:12:00,073
belum terlalu\memperhatikan detail semacam ini.

4393
04:12:00,073 --> 04:12:03,031
Dan di kelas seperti ini, tujuannya\n

4394
04:12:03,031 --> 04:12:06,551
tapi untuk benar-benar mengajarimu apa yang terjadi\n

4395
04:12:06,550 --> 04:12:09,600
sehingga Anda memiliki pemahaman\ndari bawah ke atas tentang cara kerja data

4396
04:12:09,601 --> 04:12:11,980
direpresentasikan, bagaimana komputer\na memanipulasinya

4397
04:12:11,980 --> 04:12:16,060
agar Anda tidak mengalami kegagalan\n

4398
04:12:16,060 --> 04:12:19,360
Dan agar kita sebagai masyarakat tidak\n

4399
04:12:19,861 --> 04:12:22,231
Dan sayangnya, hal ini terjadi sepanjang waktu.

4400
04:12:22,230 --> 04:12:26,011
Ini adalah pesawat Boeing\nyang dibutuhkan beberapa tahun lalu

4401
04:12:26,011 --> 04:12:29,621
untuk di-boot ulang setiap 248 hari.

4402
04:12:30,120 --> 04:12:34,740
Karena software pesawat Boeing ini\n

4403
04:12:34,740 --> 04:12:36,990
sepersepuluh detik untuk memantau\nmelacak sesuatu atau lainnya

4404
04:12:36,990 --> 04:12:38,761
berhubungan dengan daya listriknya.

4405
04:12:38,761 --> 04:12:43,470
Dan sayangnya, setelah 248 hari\n

4406
04:12:43,470 --> 04:12:45,690
yang di maskapai penerbangan\nindustri tampaknya tidak

4407
04:12:45,691 --> 04:12:49,381
jarang sekali membuat setiap dolar berarti,\n

4408
04:12:50,581 --> 04:12:54,511
angka 32-bit akan\nberputar dan daya

4409
04:12:54,511 --> 04:12:57,601
akan mati di pesawat\nas sebagai efek samping karena semacamnya

4410
04:12:57,601 --> 04:12:59,681
perilaku tidak terdefinisi dalam kasus itu.

4411
04:12:59,681 --> 04:13:02,941
Solusi sementara oleh Boeing di\n

4412
04:13:02,941 --> 04:13:06,150
semacam gaya sistem operasi,\n

4413
04:13:06,150 --> 04:13:09,841
Dan itu memang solusinya hingga mereka\n

4414
04:13:11,351 --> 04:13:14,400
Dan semakin banyak perangkat keras yang kami bawa\n

4415
04:13:14,400 --> 04:13:17,550
menggunakan perangkat semacam ini,\nsemakin banyak masalah yang muncul

4416
04:13:17,550 --> 04:13:20,430
kita akan bertemu di jalan.

4417
04:14:42,261 --> 04:14:45,086
DAVID MALAN: Ini\nCS50 dan ini minggu ke-2.

4418
04:14:45,085 --> 04:14:47,710
Sekarang Anda sudah memiliki pengalaman\pemrograman

4419
04:14:47,710 --> 04:14:50,170
dalam bahasa yang lebih misterius ini disebut c.

4420
04:14:50,171 --> 04:14:53,050
Salah satu tujuan kami hari ini adalah membantu\n

4421
04:14:53,050 --> 04:14:54,911
telah dilakukannya beberapa hari terakhir ini.

4422
04:14:54,911 --> 04:14:58,216
Bergulat dengan program pertama Anda di\n

4423
04:14:58,216 --> 04:15:00,341
meningkatkan pemahaman tentang apa\nbeberapa perintah ini lakukan.

4424
04:15:00,341 --> 04:15:02,841
Dan, pada akhirnya, apa lagi\nyang bisa kami lakukan dengan bahasa ini.

4425
04:15:02,841 --> 04:15:06,011
Jadi penarikan ini adalah\nprogram pertama yang Anda tulis

4426
04:15:06,011 --> 04:15:09,131
Saya menulis dalam bahasa ini\ndisebut C, lebih bersifat tekstual

4427
04:15:09,130 --> 04:15:11,230
tentu saja, dibandingkan dengan Scratch yang setara.

4428
04:15:11,230 --> 04:15:15,460
Namun pada akhirnya,\nkomputer, Mac Anda, PC Anda

4429
04:15:15,460 --> 04:15:18,815
VS Code tidak memahami\nkode sebenarnya ini.

4430
04:15:18,816 --> 04:15:21,941
Format apa yang kita perlukan\n

4431
04:15:23,462 --> 04:15:26,050
DAVID MALAN: Jadi biner,\atau dikenal sebagai kode mesin.

4432
04:15:26,550 --> 04:15:30,130
Angka 0 dan 1 yang\sebenarnya dipahami oleh komputer Anda.

4433
04:15:30,130 --> 04:15:32,290
Jadi entah bagaimana kita perlu\nmengambil format ini.

4434
04:15:32,290 --> 04:15:34,990
Dan hingga saat ini, kami telah\menggunakan perintah yang disebut make

4435
04:15:34,990 --> 04:15:37,931
yang merupakan nama yang tepat, karena\nit memungkinkan Anda membuat program.

4436
04:15:37,931 --> 04:15:40,691
Dan permohonannya\ncukup sederhana.

4437
04:15:40,691 --> 04:15:44,711
Buat tampilan halo di tampilan Anda saat ini\n

4438
04:15:44,710 --> 04:15:49,360
hello.c, secara implisit, lalu\n

4439
04:15:49,361 --> 04:15:51,911
yang mana dapat dieksekusi,\nyang berarti dapat dijalankan

4440
04:15:51,911 --> 04:15:54,161
sehingga Anda kemudian dapat melakukan ./hello.

4441
04:15:54,161 --> 04:15:58,451
Namun ternyata make\sebenarnya bukan kompiler itu sendiri.

4442
04:15:58,450 --> 04:16:00,100
Itu memang membantu Anda membuat program.

4443
04:16:00,101 --> 04:16:04,781
Namun utilitas inilah yang hadir\n

4444
04:16:04,781 --> 04:16:08,321
untuk benar-benar mengkompilasi kode dengan\menggunakan kompiler sebenarnya

4445
04:16:08,320 --> 04:16:12,550
program yang mengubah kode sumber\n

4446
04:16:12,550 --> 04:16:14,921
atau lingkungan cloud apa pun\nyang mungkin Anda gunakan.

4447
04:16:14,921 --> 04:16:17,591
Faktanya, apa yang membuat\ndoing bagi kita, adalah sebenarnya

4448
04:16:17,591 --> 04:16:21,490
menjalankan perintah secara otomatis\ndikenal sebagai dentang, untuk bahasa C.

4449
04:16:21,490 --> 04:16:25,851
Dan, jadi di sini, misalnya, di VS\n

4450
04:16:25,851 --> 04:16:27,730
kali ini dalam konteks\neditor teks

4451
04:16:27,730 --> 04:16:30,940
dan saya dapat mengkompilasi\nini dengan make hello.

4452
04:16:30,941 --> 04:16:33,828
Biarkan saya melanjutkan dan menggunakan\nkompiler itu sendiri secara manual.

4453
04:16:33,827 --> 04:16:36,911
Dan kita akan segera melihat mengapa kita melakukan\n

4454
04:16:36,911 --> 04:16:39,320
Aku akan lari dentang saja.

4455
04:16:39,320 --> 04:16:41,601
Dan kemudian saya akan menjalankan hello.c.

4456
04:16:41,601 --> 04:16:43,751
Jadi ini sedikit berbeda\ncara kompiler menggunakannya.

4457
04:16:43,751 --> 04:16:46,421
Ia perlu mengetahui, secara eksplisit,\napa nama file tersebut.

4458
04:16:46,421 --> 04:16:49,541
Saya akan melanjutkan dan menjalankan\nclang, hello.c, Enter.

4459
04:16:49,540 --> 04:16:52,675
Sepertinya tidak terjadi apa-apa, yang mana,\n

4460
04:16:52,675 --> 04:16:54,050
Karena tidak ada kesalahan yang muncul.

4461
04:16:54,050 --> 04:17:00,400
Dan jika saya melakukan ls untuk daftar, Anda akan melihat\n

4462
04:17:00,400 --> 04:17:03,490
Namun ada file\nbernama aneh bernama a.out.

4463
04:17:03,490 --> 04:17:06,880
Ini adalah konvensi historis,\nsingkatan dari keluaran assembler.

4464
04:17:06,880 --> 04:17:09,640
Dan ini hanyalah nama\nfile default untuk suatu program

4465
04:17:09,640 --> 04:17:13,661
sehingga Anda dapat mengkompilasinya sendiri,\nsecara manual, menggunakan clang itu sendiri.

4466
04:17:13,661 --> 04:17:16,091
Izinkan saya melanjutkan sekarang dan\ntunjukkan bahwa memang demikian

4467
04:17:16,091 --> 04:17:17,601
semacam nama yang bodoh untuk sebuah program.

4468
04:17:17,601 --> 04:17:20,695
Meskipun berhasil,\n./a.out akan berhasil.

4469
04:17:20,695 --> 04:17:23,320
Namun jika Anda sebenarnya ingin\nmenyesuaikan nama program Anda

4470
04:17:23,320 --> 04:17:26,980
kita bisa saja menggunakan make,\atau kita bisa melakukannya secara eksplisit

4471
04:17:28,181 --> 04:17:31,031
Ternyata, beberapa\nprogram, di antaranya membuat

4472
04:17:31,031 --> 04:17:33,251
mendukung apa yang disebut\nargumen baris perintah

4473
04:17:33,251 --> 04:17:34,570
dan lebih banyak lagi tentang itu hari ini.

4474
04:17:34,570 --> 04:17:37,931
Namun ini sebenarnya adalah kata-kata atau\n

4475
04:17:37,931 --> 04:17:41,591
setelah nama program yang\n

4476
04:17:44,300 --> 04:17:47,200
Dan ternyata, jika Anda membaca\ndokumentasi dentang

4477
04:17:47,200 --> 04:17:52,300
Anda sebenarnya bisa memberikan -o, untuk\n

4478
04:17:52,300 --> 04:17:54,520
memungkinkan Anda menentukan,\nsecara eksplisit apa yang Anda inginkan

4479
04:17:54,521 --> 04:17:56,056
program keluaran Anda untuk dipanggil?

4480
04:17:56,056 --> 04:17:58,931
Dan kemudian Anda lanjutkan dan ketik\n

4481
04:17:58,931 --> 04:18:01,371
ingin dikompilasi, dari\nkode sumber ke kode mesin.

4482
04:18:02,980 --> 04:18:06,251
Sekali lagi, sepertinya tidak terjadi apa-apa,\ndan saya mengetik ls dan voila.

4483
04:18:06,251 --> 04:18:09,271
Sekarang kita masih punya a.out yang lama,\nkarena saya belum menghapusnya.

4484
04:18:10,271 --> 04:18:14,681
Jadi ./halo, voila, jalankan\nhalo, dunia lagi.

4485
04:18:14,681 --> 04:18:16,421
Dan izinkan saya melanjutkan\ndan menghapus file ini.

4486
04:18:16,421 --> 04:18:20,854
Tentu saja saya dapat menggunakan\n

4487
04:18:20,853 --> 04:18:23,770
Yang mana, saya punya kebiasaan menutupnya,\n

4488
04:18:23,771 --> 04:18:26,501
Namun saya dapat melanjutkan dan mengeklik kanan\atau mengontrol-klik pada a.out

4489
04:18:26,501 --> 04:18:27,626
jika aku ingin menghilangkannya.

4490
04:18:27,626 --> 04:18:30,560
Atau sekali lagi, izinkan saya fokus pada\nantarmuka baris perintah.

4491
04:18:32,290 --> 04:18:35,260
Kami tidak terlalu sering menggunakannya,\ntetapi perintah apa yang menghapus file?

4492
04:18:36,925 --> 04:18:40,690
DAVID MALAN: Jadi, mintalah\nhapus. rm, a.keluar, Masuk.

4493
04:18:40,691 --> 04:18:44,320
Hapus file biasa,\na.out, y untuk ya, enter.

4494
04:18:44,320 --> 04:18:46,900
Dan sekarang, jika saya melakukannya ls\na lagi, voila, semuanya hilang.

4495
04:18:46,900 --> 04:18:48,911
Baiklah, jadi, mari\nsekarang kita tingkatkan program ini

4496
04:18:48,911 --> 04:18:54,550
untuk melakukan versi kedua yang pernah kami lakukan,\n

4497
04:18:54,550 --> 04:18:57,409
sehingga kita memiliki akses ke fungsi\n

4498
04:18:57,409 --> 04:19:04,601
Biarkan saya mengerjakan string, nama, dapatkan,\nget string, siapa nama Anda

4499
04:19:05,810 --> 04:19:10,270
Dan sekarang, izinkan saya menyapa\n

4500
04:19:11,181 --> 04:19:13,421
Jadi ini adalah versi 2\program kami yang terakhir kali

4501
04:19:13,421 --> 04:19:17,560
yang sangat mudah dikompilasi dengan make\n

4502
04:19:17,560 --> 04:19:20,620
Jika saya ingin mengkompilasi\nhal ini sendiri dengan dentang, gunakan

4503
04:19:20,620 --> 04:19:22,780
pelajaran yang sama,\nbaiklah, ayo kita lakukan.

4504
04:19:22,781 --> 04:19:29,561
dentang-o, halo, supaya aku menjadi lebih baik\n

4505
04:19:29,560 --> 04:19:34,011
Dan muncul kesalahan baru yang menyebabkan beberapa\n

4506
04:19:34,011 --> 04:19:37,841
Jadi agak misterius di sini, dan itu\n

4507
04:19:37,841 --> 04:19:39,591
dengan suhu untuk sementara di sana.

4508
04:19:39,591 --> 04:19:42,820
Namun, masalah saya ada\nutama, seperti yang bisa kita lihat di sini.

4509
04:19:42,820 --> 04:19:44,518
Ini entah bagaimana berhubungan dengan hello.c.

4510
04:19:44,518 --> 04:19:47,351
Meskipun kita mungkin belum melihatnya\n

4511
04:19:47,351 --> 04:19:50,230
tapi ada referensi\nyang tidak terdefinisi untuk mendapatkan string.

4512
04:19:50,230 --> 04:19:52,060
Seolah-olah get string tidak ada.

4513
04:19:52,060 --> 04:19:55,601
Sekarang, insting pertama Anda mungkin adalah, ya\n

4514
04:19:56,441 --> 04:19:58,570
Itu adalah\nbaris pertama program saya.

4515
04:19:58,570 --> 04:20:02,171
Namun ternyata, make berhasil\n

4516
04:20:02,171 --> 04:20:06,191
Cukup letakkan cs50.h, atau file\nheader apa pun di bagian atas kode Anda

4517
04:20:06,191 --> 04:20:10,990
dalam hal ini, cukup ajarkan\n

4518
04:20:10,990 --> 04:20:13,570
Ini, semacam, meminta kompiler\nuntuk-- ia meminta kompiler

4519
04:20:13,570 --> 04:20:16,870
untuk percaya bahwa pada akhirnya aku akan melakukannya,\n

4520
04:20:16,870 --> 04:20:22,390
seperti get string, dan cs50.h,\ndan stdio.h, printf, di dalamnya.

4521
04:20:22,390 --> 04:20:28,091
Tapi kesalahan ini, semacam\n

4522
04:20:28,091 --> 04:20:30,220
bahwa sebenarnya ada proses\nterpisah

4523
04:20:30,220 --> 04:20:34,540
menemukan angka 0 dan 1 yang\ncs50 telah lama dikompilasi untuk Anda.

4524
04:20:34,540 --> 04:20:38,110
Penulis operasi ini\n

4525
04:20:39,161 --> 04:20:42,101
Kita perlu,\ntmemberi tahu kompiler bahwa kita

4526
04:20:42,101 --> 04:20:44,711
perlu menautkan kode\nyang ditulis orang lain

4527
04:20:44,710 --> 04:20:48,010
kode mesin sebenarnya yang dimiliki seseorang\n

4528
04:20:48,011 --> 04:20:51,757
Jadi untuk melakukan itu, Anda harus\nmengetik -lcs50, misalnya

4529
04:20:52,841 --> 04:20:55,809
Selain itu, beri tahu clang\n

4530
04:20:55,808 --> 04:20:58,600
file bernama hello, dan Anda ingin\n

4531
04:20:58,601 --> 04:21:03,461
Anda juga ingin mengutip-menghapus tanda kutip\ntautan dalam kumpulan 0 dan 1

4532
04:21:03,460 --> 04:21:07,270
yang secara kolektif mengimplementasikan\nget string dan printf.

4533
04:21:07,271 --> 04:21:11,480
Jadi sekarang, jika saya menekan enter,\nkali ini kompilasinya OK.

4534
04:21:11,480 --> 04:21:17,403
Dan sekarang jika saya menjalankan ./hello, itu berhasil\n

4535
04:21:17,403 --> 04:21:20,361
Tapi sejujurnya, ini hanya akan terjadi\n

4536
04:21:20,361 --> 04:21:22,191
Perhatikan, cukup\nkompilasi kode saya

4537
04:21:22,191 --> 04:21:25,677
Saya harus menjalankan clang-o,\nhello, hello.c, lcs50

4538
04:21:25,677 --> 04:21:27,761
dan Anda juga harus\nmengetik lebih banyak hal.

4539
04:21:27,761 --> 04:21:31,150
Jika Anda ingin menggunakan perpustakaan matematika,\n

4540
04:21:31,150 --> 04:21:33,700
Anda juga harus\nmelakukan -lm, biasanya

4541
04:21:33,700 --> 04:21:37,150
untuk menentukan, beri saya\nbit matematika yang dikompilasi orang lain.

4542
04:21:37,150 --> 04:21:39,230
Dan perintahnya menjadi\nsemakin lama.

4543
04:21:39,230 --> 04:21:43,780
Jadi ke depan, kita tidak akan memiliki\n

4544
04:21:43,781 --> 04:21:45,591
tapi clang memang merupakan kompilernya.

4545
04:21:45,591 --> 04:21:48,640
Itu adalah program yang mengkonversi\n

4546
04:21:48,640 --> 04:21:52,699
Namun kami akan terus menggunakan make because\n

4547
04:21:52,699 --> 04:21:54,490
Dan perintahnya\tidak akan menghasilkan lebih banyak

4548
04:21:54,490 --> 04:21:58,900
samar semakin canggih dan\n

4549
04:21:58,900 --> 04:22:03,880
Dan sekali lagi, make hanyalah sebuah alat\nyang membuat semua itu terjadi.

4550
04:22:03,880 --> 04:22:08,560
Biarkan saya berhenti sejenak di sana untuk melihat apakah\n

4551
04:22:08,560 --> 04:22:10,150
lihat lebih jauh di bawah tenda.

4552
04:22:11,445 --> 04:22:14,445
HADIRIN: Bisa dijelaskan lagi apa\n

4553
04:22:14,445 --> 04:22:16,779
DAVID MALAN: Tentu, izinkan saya\nmengulasnya sebentar lagi.

4554
04:22:18,011 --> 04:22:20,177
Kami akan membahasnya kembali,\nsecara visual, sebentar lagi.

4555
04:22:20,177 --> 04:22:23,111
Namun itu berarti menghubungkan\n0 dan 1 secara kolektif

4556
04:22:23,111 --> 04:22:24,695
mengimplementasikan get string dan printf.

4557
04:22:24,695 --> 04:22:26,320
Tapi kita akan melihatnya, secara visual, sebentar lagi.

4558
04:22:31,334 --> 04:22:32,751
DAVID MALAN: Pertanyaan yang sangat bagus.

4559
04:22:32,751 --> 04:22:35,111
Mengapa saya tidak memiliki\ntautan di I/O standar?

4560
04:22:35,111 --> 04:22:37,211
Karena saya menggunakan printf di versi 1.

4561
04:22:37,210 --> 04:22:40,540
I/O standar, secara harfiah,\nsangat standar yang sudah ada di dalamnya

4562
04:22:43,060 --> 04:22:45,341
Itu tidak disertakan dengan\nbahasa C atau kompilernya.

4563
04:22:46,511 --> 04:22:50,861
Dan perpustakaan lainnya, meskipun\n

4564
04:22:50,861 --> 04:22:54,861
fitur tersebut mungkin tidak diaktifkan secara default,\n

4565
04:22:54,861 --> 04:22:57,731
Jadi Anda tidak memuat lebih banyak 0s\ndan 1 ke dalam memori komputer

4566
04:22:58,540 --> 04:23:01,510
Jadi I/O standar itu spesial, jika Anda mau.

4567
04:23:05,681 --> 04:23:07,421
DAVID MALAN: Oh, apa maksudnya -o?

4568
04:23:07,421 --> 04:23:10,451
Jadi -o adalah singkatan untuk\nkeluaran kata bahasa Inggris

4569
04:23:10,450 --> 04:23:15,520
dan -o menyuruh dentang untuk\nmohon keluarkan file bernama hello

4570
04:23:15,521 --> 04:23:18,111
karena hal berikutnya yang saya\ntulis setelah baris perintah

4571
04:23:18,111 --> 04:23:24,190
ingatannya adalah dentang -o halo, lalu\n

4572
04:23:24,190 --> 04:23:27,667
Dan di sinilah perintah-perintah ini\ndo menjadi dan tetap misterius.

4573
04:23:27,667 --> 04:23:29,501
Itu hanya melalui memori\notot dan latihan

4574
04:23:29,501 --> 04:23:31,871
yang akan mulai kamu ingat, oh\n

4575
04:23:31,870 --> 04:23:34,537
apa argumen baris perintah\nyang dapat Anda berikan pada program?

4576
04:23:34,538 --> 04:23:35,831
Tapi kita pernah melihat ini sebelumnya.

4577
04:23:35,831 --> 04:23:39,040
Secara teknis, saat Anda menjalankan make\n

4578
04:23:39,040 --> 04:23:41,240
hello adalah argumen baris perintah.

4579
04:23:41,240 --> 04:23:43,300
Ini merupakan masukan ke fungsi\nmake

4580
04:23:43,300 --> 04:23:46,510
diketik saat diminta, yang memberitahu\nbuat apa yang ingin Anda buat.

4581
04:23:46,511 --> 04:23:50,441
Bahkan ketika saya menggunakan rm a moment\nago, dan melakukan rm of a.out

4582
04:23:50,441 --> 04:23:52,541
argumen baris perintah\ndisebut a.out

4583
04:23:52,540 --> 04:23:55,000
dan ia memberi tahu rm apa yang harus dihapus.

4584
04:23:55,001 --> 04:23:59,531
Hal ini sepenuhnya bergantung pada program\n

4585
04:23:59,531 --> 04:24:02,351
apakah Anda menggunakan tanda hubung ini\atau tanda hubung itu, namun kami akan melakukannya

4586
04:24:02,351 --> 04:24:05,066
lihat dari waktu ke waktu, mana yang\namun sebenarnya penting dalam praktiknya.

4587
04:24:05,066 --> 04:24:10,481
Jadi kembali ke pertanyaan pertama\n

4588
04:24:10,480 --> 04:24:12,823
mari kita pertimbangkan kodenya lebih dekat.

4589
04:24:12,823 --> 04:24:14,531
Jadi inilah\nkode versi pertama

4590
04:24:14,531 --> 04:24:18,851
sekali lagi, dengan stdio.h dan hanya\nprintf, jadi belum ada barang cs50.

4591
04:24:18,851 --> 04:24:21,101
Sampai kami menambahkannya kembali\ndan memiliki versi kedua

4592
04:24:21,101 --> 04:24:23,891
di mana kita sebenarnya mendapatkan nama manusia itu.

4593
04:24:23,890 --> 04:24:27,043
Saat Anda menjalankan perintah ini,\nada beberapa hal

4594
04:24:27,043 --> 04:24:28,960
yang sedang terjadi\ndi balik terpal, dan kita

4595
04:24:28,960 --> 04:24:30,911
memang tidak akan membahas\ndetail semacam ini

4596
04:24:30,911 --> 04:24:33,130
kita akan mengabstraksikannya dengan menggunakan make.

4597
04:24:33,130 --> 04:24:35,200
Namun hal ini perlu dipahami\nsejak awal

4598
04:24:35,200 --> 04:24:38,140
seberapa banyak otomatisasi yang terjadi, jadi\n

4599
04:24:39,111 --> 04:24:42,201
Anda memiliki pemahaman dari bawah ke atas\ntentang apa yang terjadi.

4600
04:24:42,200 --> 04:24:45,790
Jadi ketika kami mengatakan Anda telah\nmengkompilasi kode Anda dengan make

4601
04:24:45,790 --> 04:24:47,860
itu sedikit penyederhanaan yang berlebihan.

4602
04:24:47,861 --> 04:24:51,041
Secara teknis, setiap kali\nAnda mengkompilasi kode Anda

4603
04:24:51,040 --> 04:24:53,831
Anda membuat komputer melakukan\nempat hal berbeda untuk Anda.

4604
04:24:53,831 --> 04:24:57,281
Dan ini bukanlah empat hal yang berbeda\n

4605
04:24:57,281 --> 04:24:59,441
setiap kali Anda menjalankan\nprogram Anda, apa yang terjadi

4606
04:24:59,441 --> 04:25:02,081
namun akan membantu jika memecahnya\nmenjadi blok-blok penyusunnya

4607
04:25:02,081 --> 04:25:06,371
tentang bagaimana kami memperolehnya dari sumber\n

4608
04:25:06,370 --> 04:25:10,900
Ternyata ketika Anda mengkompilasi,\n

4609
04:25:10,900 --> 04:25:14,771
berbicara, Anda melakukan empat hal\n

4610
04:25:14,771 --> 04:25:18,221
Memprosesnya terlebih dahulu, mengompilasinya,\ merakitnya, dan menautkannya.

4611
04:25:18,220 --> 04:25:21,610
Hanya manusia yang memutuskan, ayo\n

4612
04:25:21,611 --> 04:25:24,490
Namun sejenak, mari\npertimbangkan apa saja langkah-langkah tersebut.

4613
04:25:24,490 --> 04:25:26,950
Jadi pra-pemrosesan mengacu pada ini.

4614
04:25:26,950 --> 04:25:30,970
Jika kita melihat kode sumber kita,\n

4615
04:25:30,970 --> 04:25:34,702
dan oleh karena itu dapatkan string, perhatikan itu\n

4616
04:25:34,702 --> 04:25:36,911
Dan kode tersebut agak istimewa\ndibandingkan semua kode lainnya

4617
04:25:36,911 --> 04:25:39,970
kami telah menulis, karena mereka memulai\n

4618
04:25:39,970 --> 04:25:41,921
Dan itu semacam\nsintaks khusus yang dimaksud

4619
04:25:41,921 --> 04:25:44,861
bahwa ini, secara teknis,\ndisebut arahan praprosesor.

4620
04:25:44,861 --> 04:25:49,551
Cara yang bagus untuk mengatakan bahwa mereka sudah ditangani\n

4621
04:25:49,550 --> 04:25:54,130
Faktanya, jika kita fokus pada\ncs50.h, ingat kembali minggu lalu

4622
04:25:54,130 --> 04:26:00,130
bahwa saya memberikan petunjuk tentang apa\n

4623
04:26:00,130 --> 04:26:04,840
Apa satu hal yang menonjol itu\n

4624
04:26:04,841 --> 04:26:07,736
mengapa kami menyertakan\nit sejak awal?

4625
04:26:08,611 --> 04:26:11,111
DAVID MALAN: Jadi dapatkan\nstring, secara spesifik

4626
04:26:11,111 --> 04:26:13,421
prototipe untuk mendapatkan string.

4627
04:26:13,421 --> 04:26:15,671
Kami belum membuat banyak\nfungsi kami sendiri

4628
04:26:15,671 --> 04:26:18,101
tapi ingatlah bahwa kapan saja\nkita telah membuat fungsi kita sendiri

4629
04:26:18,101 --> 04:26:20,591
dan kami telah menuliskannya\ndi bawah main dalam sebuah file

4630
04:26:20,591 --> 04:26:23,050
kami juga harus, agak\nsbodoh, menyalin tempel

4631
04:26:23,050 --> 04:26:25,630
prototipe fungsi\nat bagian atas file

4632
04:26:25,630 --> 04:26:29,470
hanya untuk mengajari kompiler bahwa\n

4633
04:26:29,470 --> 04:26:31,690
memang ada di bawah sana, tapi itu akan tetap ada.

4634
04:26:32,560 --> 04:26:35,240
Jadi sekali lagi, itulah yang\nprototipe lakukan untuk kita.

4635
04:26:35,240 --> 04:26:37,601
Jadi oleh karena itu, dalam\nkode saya, Jika saya ingin menggunakan

4636
04:26:37,601 --> 04:26:41,021
fungsi seperti get string,\nor printf, dalam hal ini

4637
04:26:41,021 --> 04:26:43,411
mereka tidak diimplementasikan\ndengan jelas dalam file yang sama

4638
04:26:43,411 --> 04:26:44,661
mereka diterapkan di tempat lain.

4639
04:26:44,661 --> 04:26:46,952
Jadi saya perlu memberi tahu kompiler\nuntuk memercayai saya bahwa mereka memang benar

4640
04:26:46,952 --> 04:26:48,261
diterapkan di tempat lain.

4641
04:26:48,261 --> 04:26:51,070
Dan secara teknis,\nindi dalam cs50.h, yang mana

4642
04:26:51,070 --> 04:26:54,671
dipasang di suatu tempat di\nhard drive cloud

4643
04:26:54,671 --> 04:26:59,081
yang Anda semua akses melalui VS Code,\n

4644
04:26:59,081 --> 04:27:03,130
Prototipe untuk fungsi get string\n

4645
04:27:03,130 --> 04:27:07,090
mendapatkan string, dibutuhkan satu input,\atau argumen, yang disebut prompt

4646
04:27:07,091 --> 04:27:09,970
dan jenis\nprompt itu adalah string.

4647
04:27:09,970 --> 04:27:15,411
Dapatkan string, tidak mengherankan, memiliki\n

4648
04:27:15,411 --> 04:27:19,060
Jadi secara harfiah, baris itu dan\nbanyak baris lainnya, ada di cs50.h.

4649
04:27:19,060 --> 04:27:22,540
Jadi, daripada Anda semua harus\nmenyalin dan menempelkan prototipenya

4650
04:27:22,540 --> 04:27:25,420
Anda cukup percaya bahwa\ncs50 sudah mengetahuinya.

4651
04:27:25,421 --> 04:27:29,230
Anda dapat memasukkan cs50.h\ndan kompiler akan berjalan

4652
04:27:29,230 --> 04:27:31,681
untuk mencari prototipe itu untuk Anda.

4653
04:27:31,681 --> 04:27:33,740
Hal yang sama dalam standar\nI/O. Orang lain-- apa

4654
04:27:33,740 --> 04:27:37,880
jelas harus berada di stdio.h,\antara lain, itu

4655
04:27:37,880 --> 04:27:41,850
memotivasi kami termasuk stdio.h juga?

4656
04:27:43,058 --> 04:27:45,290
DAVID MALAN: Printf,\nprototipe untuk printf

4657
04:27:45,290 --> 04:27:48,270
dan di sini saya ubah saja\nin menjadi kuning, agar sama.

4658
04:27:48,271 --> 04:27:49,671
Dan ternyata, formatnya--

4659
04:27:49,671 --> 04:27:52,851
prototipe untuk printf\nis, sebenarnya, cukup mewah

4660
04:27:52,851 --> 04:27:56,001
karena, seperti yang mungkin Anda ketahui,\n

4661
04:27:56,001 --> 04:28:00,171
sesuatu untuk dicetak, 2, jika Anda mau\n

4662
04:28:00,171 --> 04:28:02,880
Jadi titik titik titik\nmewakili hal tersebut.

4663
04:28:02,880 --> 04:28:06,590
Prototipenya tidak sesederhana itu\n

4664
04:28:07,376 --> 04:28:10,310
Jadi apa yang dimaksud dengan\nmemproses kode Anda terlebih dahulu?

4665
04:28:10,310 --> 04:28:14,120
Hal pertama yang\nkompiler, dentang, dalam kasus ini

4666
04:28:14,120 --> 04:28:18,530
lakukan untuk Anda saat ia membaca\n

4667
04:28:18,531 --> 04:28:22,221
pemberitahuan, oh, ini hash include,\n

4668
04:28:22,220 --> 04:28:27,350
Dan, pada dasarnya, ia menemukan file-file itu\n

4669
04:28:27,351 --> 04:28:31,251
dan melakukan hal yang sama dengan menyalin\n

4670
04:28:31,251 --> 04:28:33,621
ke dalam kode Anda di bagian paling atas.

4671
04:28:33,620 --> 04:28:36,710
Dengan demikian mengajarkan kompiler\nyang mendapatkan string dan printf

4672
04:28:36,710 --> 04:28:38,690
pada akhirnya akan ada di suatu tempat.

4673
04:28:38,691 --> 04:28:42,740
Jadi itulah langkah prapemrosesan\nyang sekali lagi dilakukan

4674
04:28:42,740 --> 04:28:46,341
hanya melakukan pencarian dan penggantian\n

4675
04:28:46,341 --> 04:28:48,771
Ini memasukkan file\ndi sana sehingga Anda, pada dasarnya

4676
04:28:48,771 --> 04:28:52,041
dapatkan semua prototipe\nyang Anda perlukan secara otomatis.

4677
04:28:53,091 --> 04:28:55,490
Lalu apa maksudnya\nmengkompilasi hasilnya?

4678
04:28:55,490 --> 04:28:57,710
Karena pada titik\nin cerita ini, kode Anda

4679
04:28:57,710 --> 04:28:59,938
sekarang terlihat seperti ini di\nmemori komputer.

4680
04:28:59,939 --> 04:29:01,730
Itu tidak mengubah\nfile Anda, itu melakukan semuanya

4681
04:29:01,730 --> 04:29:04,251
dari ini di\nmemori komputer, atau RAM, untuk Anda.

4682
04:29:04,251 --> 04:29:06,331
Tapi pada dasarnya, terlihat seperti ini.

4683
04:29:06,331 --> 04:29:09,861
Nah, langkah berikutnya adalah,\nsecara teknis, sebenarnya kompilasi.

4684
04:29:09,861 --> 04:29:12,681
Meskipun sekali lagi, kami menggunakan\nkompilasi sebagai istilah umum.

4685
04:29:12,681 --> 04:29:15,771
Mengkompilasi kode di C\nberarti mengambil kode itu

4686
04:29:15,771 --> 04:29:18,001
sekarang terlihat seperti ini di\nmemori komputer

4687
04:29:18,001 --> 04:29:21,150
dan mengubahnya menjadi sesuatu\nyang terlihat seperti ini.

4688
04:29:22,611 --> 04:29:25,251
Namun hal itu baru terjadi beberapa\ndekade yang lalu, jika Anda

4689
04:29:25,251 --> 04:29:28,191
mengambil kelas seperti\nCS50 dalam bentuk sebelumnya

4690
04:29:28,191 --> 04:29:32,001
kami tidak akan menggunakan C, itu tidak ada\n

4691
04:29:32,001 --> 04:29:33,951
sesuatu yang disebut bahasa assembly.

4692
04:29:33,950 --> 04:29:37,490
Dan ada berbagai jenis,\n

4693
04:29:37,490 --> 04:29:41,271
Tapi ini levelnya serendah\n

4694
04:29:41,271 --> 04:29:43,671
mengerti, baik itu\nMac, atau PC, atau ponsel

4695
04:29:43,671 --> 04:29:46,911
sebelum Anda mulai\ninmenjadi 0 dan 1 yang sebenarnya.

4696
04:29:46,911 --> 04:29:48,273
Dan sebagian besarnya bersifat samar.

4697
04:29:48,273 --> 04:29:51,440
Saya tidak bisa memberi tahu Anda apa yang dilakukannya\n

4698
04:29:51,441 --> 04:29:54,561
dan memutar ulang secara mental, bertahun-tahun yang lalu, setelah mempelajarinya

4699
04:29:54,560 --> 04:29:57,140
namun mari kita soroti beberapa\nbeberapa kata kunci dengan warna kuning.

4700
04:29:57,140 --> 04:30:01,640
Perhatikan bahwa bahasa assembly ini\n

4701
04:30:01,640 --> 04:30:04,790
untuk Anda secara otomatis,\nmasih menyebutkan main

4702
04:30:04,790 --> 04:30:07,550
dan disebutkan get string,\ndan disebutkan printf.

4703
04:30:07,550 --> 04:30:10,618
Jadi ada hubungannya dengan\nkode C yang kita lihat beberapa saat yang lalu.

4704
04:30:10,619 --> 04:30:12,411
Lalu jika saya menyoroti\nhal-hal lainnya

4705
04:30:12,411 --> 04:30:14,691
inilah yang disebut\ninstruksi komputer.

4706
04:30:14,691 --> 04:30:17,001
Pada akhirnya,\nMac Anda, PC Anda

4707
04:30:17,001 --> 04:30:20,601
ponsel Anda sebenarnya hanya\nmemahami petunjuk yang sangat mendasar

4708
04:30:20,601 --> 04:30:25,281
seperti penjumlahan, pengurangan, pembagian,\n

4709
04:30:25,281 --> 04:30:30,451
memuat dari memori, mencetak sesuatu ke\n

4710
04:30:30,450 --> 04:30:32,015
Dan itulah yang Anda lihat di sini.

4711
04:30:32,015 --> 04:30:37,011
Petunjuk perakitan ini\namun tentang komputer sebenarnya

4712
04:30:37,011 --> 04:30:41,131
dimasukkan ke dalam otak komputer,\n

4713
04:30:41,130 --> 04:30:44,030
Dan itu adalah CPU Intel,\atau apa pun yang Anda miliki

4714
04:30:44,031 --> 04:30:47,481
yang memahami instruksi ini, dan\n

4715
04:30:47,480 --> 04:30:50,120
Dan secara kolektif,\nsingkatnya, semua yang mereka lakukan

4716
04:30:50,120 --> 04:30:52,880
adalah mencetak halo, dunia di\nlayar, tetapi dengan cara tertentu

4717
04:30:52,880 --> 04:30:56,171
bahwa mesin memahami cara melakukannya.

4718
04:30:58,761 --> 04:31:01,271
Apakah ada pertanyaan tentang\napa yang kami maksud dengan prapemrosesan?

4719
04:31:01,271 --> 04:31:05,111
Yang menemukan dan menggantikan hash\n

4720
04:31:05,111 --> 04:31:08,711
dan kompilasi, yang secara teknis\nmenggunakan kode sumber Anda

4721
04:31:08,710 --> 04:31:12,430
setelah diproses sebelumnya, dan mengubahnya menjadi\n

4722
04:31:12,431 --> 04:31:14,603
AUDIENCE: [Tak terdengar] setiap CPU memiliki--

4723
04:31:15,550 --> 04:31:18,970
Setiap jenis CPU mempunyai set instruksinya sendiri.

4724
04:31:19,540 --> 04:31:23,230
Dan sebagai teaser, inilah alasannya,\namun setidaknya di masa lalu, kapan

4725
04:31:23,230 --> 04:31:27,161
kami biasa menginstal perangkat lunak dari\n

4726
04:31:27,161 --> 04:31:32,483
inilah sebabnya Anda tidak dapat mengikuti program\n

4727
04:31:32,483 --> 04:31:33,941
dan menjalankannya di Mac, atau sebaliknya.

4728
04:31:33,941 --> 04:31:38,681
Karena perintahnya, instruksinya\n

4729
04:31:39,761 --> 04:31:44,411
Sekarang Microsoft, atau perusahaan mana pun, bisa\n

4730
04:31:44,411 --> 04:31:48,370
seperti C atau lainnya, dan mereka bisa\n

4731
04:31:50,050 --> 04:31:54,369
Ini membutuhkan pekerjaan dua kali lebih banyak dan terkadang\n

4732
04:31:54,370 --> 04:31:57,401
tapi itulah mengapa langkah-langkah ini\nagak berbeda.

4733
04:31:57,400 --> 04:32:00,970
Anda sekarang dapat menggunakan kode yang sama dan\n

4734
04:32:03,911 --> 04:32:07,060
Untungnya, bagian ini cukup\n

4735
04:32:07,060 --> 04:32:10,511
Untuk merakit kode, yang merupakan langkah\nketiga dari empat, itu saja

4736
04:32:10,511 --> 04:32:14,621
terjadi pada Anda setiap kali\nAnda menjalankan make atau, pada gilirannya, clang

4737
04:32:14,620 --> 04:32:17,830
bahasa assembly ini, yang\n

4738
04:32:17,831 --> 04:32:21,341
untuk Anda dari kode sumber Anda,\nis diubah menjadi 0 dan 1.

4739
04:32:21,341 --> 04:32:25,043
Jadi itulah langkah yang,\nminggu lalu, saya sederhanakan dan katakan

4740
04:32:25,043 --> 04:32:28,210
saat Anda mengkompilasi kode, Anda mengonversi\n

4741
04:32:29,230 --> 04:32:31,945
Secara teknis, hal ini terjadi\nsaat Anda menyusun kode.

4742
04:32:31,945 --> 04:32:35,200
Namun tak seorang pun dalam percakapan\nnormal mengatakan hal itu, hanya saja

4743
04:32:35,200 --> 04:32:37,540
katakanlah kompilasi untuk semua istilah ini.

4744
04:32:43,331 --> 04:32:46,661
Bahkan dalam program sederhana ini\nuntuk mendapatkan nama pengguna

4745
04:32:46,661 --> 04:32:51,380
dan kemudian menghubungkannya ke printf, saya\n

4746
04:32:51,880 --> 04:32:54,460
Milik saya, yang ada di hello.c.

4747
04:32:54,460 --> 04:32:59,860
Beberapa CS50, yaitu\nin hello.c, maaf-- yang mana

4748
04:32:59,861 --> 04:33:03,341
ada di cs50.c, yang bukan\na file yang saya sebutkan

4749
04:33:03,341 --> 04:33:07,480
tapi masuk akal, jika\n

4750
04:33:07,480 --> 04:33:09,640
ternyata,\nimplementasi sebenarnya dari get string

4751
04:33:09,640 --> 04:33:11,861
dan hal lainnya ada di cs50.c.

4752
04:33:11,861 --> 04:33:15,550
Dan ada file ketiga\ndi suatu tempat di hard drive

4753
04:33:15,550 --> 04:33:18,521
yang terlibat dalam kompilasi\nbahkan program sederhana ini.

4754
04:33:18,521 --> 04:33:24,231
hello.c, cs50.c, dan dengan\nlogika itu, apa yang lain?

4755
04:33:27,861 --> 04:33:30,951
Dan itu sedikit kebohongan,\n

4756
04:33:30,951 --> 04:33:34,011
bahwa sebenarnya ada banyak file\n

4757
04:33:34,010 --> 04:33:35,640
dan kami akan melakukan penyederhanaan.

4758
04:33:35,640 --> 04:33:40,460
Jadi ketika saya memiliki kode ini,\ndan saya mengkompilasi kode saya

4759
04:33:40,460 --> 04:33:45,560
Saya mendapatkan angka 0 dan 1 yang akhirnya memakan waktu\n

4760
04:33:45,561 --> 04:33:51,091
menjadi 0 dan 1 yang digabungkan dengan\n

4761
04:33:52,100 --> 04:33:57,560
Ini mungkin angka 0 dan 1 untuk kode saya,\n

4762
04:33:57,561 --> 04:34:02,181
Ini mungkin angka 0 dan 1 untuk apa\n

4763
04:34:02,181 --> 04:34:06,471
Ini mungkin angka 0 dan 1 yang dimiliki seseorang\n

4764
04:34:06,471 --> 04:34:09,980
Langkah terakhir dan terakhir\adalah perintah penautan

4765
04:34:09,980 --> 04:34:12,591
yang menghubungkan semua\n0 dan 1 ini bersama-sama

4766
04:34:12,591 --> 04:34:18,081
pada dasarnya menyatukannya\n

4767
04:34:18,080 --> 04:34:20,645
atau disebut a.out, apa pun namanya.

4768
04:34:20,646 --> 04:34:25,911
Langkah terakhir itulah yang menggabungkan semua\n

4769
04:34:25,911 --> 04:34:28,311
Ya Tuhan, sekarang kami\nbenar-benar berada di tengah rumput liar.

4770
04:34:28,311 --> 04:34:31,281
Siapa yang ingin memikirkan\nmenjalankan kode pada level ini?

4771
04:34:33,440 --> 04:34:36,008
Saat Anda menjalankan make,\nada beberapa langkah yang sangat konkrit

4772
04:34:36,008 --> 04:34:38,550
yang terjadi yang telah dikembangkan manusia\nselama bertahun-tahun

4773
04:34:38,550 --> 04:34:41,960
selama beberapa dekade, kerusakan tersebut\n

4774
04:34:41,960 --> 04:34:46,670
ke 0 dan 1, atau kode mesin,\ninke langkah-langkah yang sangat spesifik ini.

4775
04:34:46,670 --> 04:34:50,360
Namun untuk selanjutnya, Anda dapat\nmemanggil semua kompilasi ini.

4776
04:34:52,856 --> 04:34:55,064
HADIRIN: Bisakah Anda menjelaskan\naga lagi apa arti a.out?

4777
04:34:57,530 --> 04:35:02,150
a.out hanyalah yang konvensional,\n

4778
04:35:02,151 --> 04:35:05,541
yang Anda kompilasi langsung\ndengan kompiler, seperti dentang.

4779
04:35:05,541 --> 04:35:07,941
Tapi itu nama yang tidak ada artinya.

4780
04:35:07,940 --> 04:35:11,510
Itu singkatan dari keluaran assembler, dan\n

4781
04:35:11,510 --> 04:35:12,950
dari proses perakitan ini.

4782
04:35:12,951 --> 04:35:15,411
Itu nama yang jelek untuk\nprogram komputer, dan kami

4783
04:35:15,411 --> 04:35:20,710
dapat menimpanya dengan mengeluarkan\nsesuatu seperti hello.

4784
04:35:27,687 --> 04:35:32,121
DAVID MALAN: Singkatnya, ada\n

4785
04:35:32,120 --> 04:35:36,170
cs50.h, stdio.h, secara teknis, itu\n

4786
04:35:36,170 --> 04:35:38,720
meskipun sebenarnya\nAnda tidak memerlukan sebagian besarnya

4787
04:35:38,721 --> 04:35:42,451
namun mereka ada di sana, untuk berjaga-jaga\nkalau Anda menginginkannya.

4788
04:35:42,451 --> 04:35:43,921
Dan terakhir, ada pertanyaan lain?

4789
04:35:48,138 --> 04:35:51,181
DAVID MALAN: Apa pun urutannya\n

4790
04:35:51,181 --> 04:35:53,401
Terkadang dengan perpustakaan,\nye, itu penting

4791
04:35:53,401 --> 04:35:55,781
dalam urutan apa mereka dihubungkan bersama.

4792
04:35:55,780 --> 04:35:58,591
Namun untuk tujuan kami, itu\ntidak menjadi masalah.

4793
04:35:58,591 --> 04:36:03,010
Ini akan-- make akan memakan waktu\n

4794
04:36:03,510 --> 04:36:06,055
Jadi, untuk selanjutnya,\nkompilasi, secara teknis

4795
04:36:06,931 --> 04:36:10,951
Namun kami akan memfokuskannya sebagai konsep\ntingkat lebih tinggi, sebuah abstraksi

4796
04:36:14,140 --> 04:36:16,771
Jadi proses lain yang\nsekarang kita akan mulai fokus pada semuanya

4797
04:36:16,771 --> 04:36:19,951
lebih banyak minggu ini karena, selalu,\n

4798
04:36:19,951 --> 04:36:21,421
menghadapi beberapa tantangan.

4799
04:36:21,420 --> 04:36:24,810
Anda mungkin membuat\n

4800
04:36:24,811 --> 04:36:28,201
jadi mari kita fokus sejenak pada\n

4801
04:36:28,201 --> 04:36:31,320
Seiring Anda menghabiskan lebih banyak waktu\nsemester ini, dalam beberapa tahun ke depan

4802
04:36:31,320 --> 04:36:34,530
akan datang Jika Anda melanjutkan program,\n

4803
04:36:34,530 --> 04:36:37,837
pada akhirnya akan menulis kode bebas bug\n.

4804
04:36:37,837 --> 04:36:40,920
Meskipun program Anda akan mendapatkan\n

4805
04:36:40,920 --> 04:36:44,490
dan kita semua akan mulai\n

4806
04:36:44,491 --> 04:36:46,831
Dan sampai hari ini, saya selalu menulis\nkode buggy.

4807
04:36:46,830 --> 04:36:48,780
Dan saya selalu merasa ngeri\nsaat melakukannya di sini.

4808
04:36:48,780 --> 04:36:50,880
Namun mudah-mudahan hal tersebut\ntidak terjadi terlalu sering.

4809
04:36:50,881 --> 04:36:54,361
Namun ketika hal itu terjadi, itu adalah sebuah proses,\nsekarang, proses debug, percobaan

4810
04:36:54,361 --> 04:36:56,491
untuk menemukan kesalahan dalam program Anda.

4811
04:36:56,491 --> 04:36:59,861
Anda tidak perlu menatap kode Anda,\n

4812
04:36:59,861 --> 04:37:02,851
Ada alat sebenarnya\nyang merupakan pemrogram dunia nyata

4813
04:37:02,850 --> 04:37:06,120
gunakan untuk membantu men-debug\nkode mereka dan menemukan kesalahan ini.

4814
04:37:06,120 --> 04:37:08,716
Jadi, apa saja teknik\ndan alat yang digunakan orang-orang?

4815
04:37:08,716 --> 04:37:13,701
Selain itu, jika Anda pernah--

4816
04:37:13,701 --> 04:37:17,101
bug dalam suatu program adalah kesalahan,\n

4817
04:37:17,100 --> 04:37:22,270
Jika Anda pernah mendengar kisah ini,\nsekitar 50 tahun lebih yang lalu, pada tahun 1947.

4818
04:37:22,271 --> 04:37:27,030
Ini adalah entri dalam buku log yang ditulis\n

4819
04:37:27,030 --> 04:37:29,490
sebagai-- bernama Grace Hopper,\nyang kebetulan adalah orangnya

4820
04:37:29,491 --> 04:37:33,606
untuk mencatat penemuan pertama a\n

4821
04:37:33,605 --> 04:37:36,120
Ini seperti ngengat\nyang terbang ke dalamnya

4822
04:37:36,120 --> 04:37:41,341
pada saat itu, sistem yang sangat canggih\n

4823
04:37:41,341 --> 04:37:44,311
sistem tipe\nyang sangat besar dan berukuran lemari es

4824
04:37:44,311 --> 04:37:48,421
di mana bug sebenarnya menyebabkan masalah.

4825
04:37:48,420 --> 04:37:51,450
Etimologi bug,\nsudah ada sebelum kejadian khusus ini

4826
04:37:51,451 --> 04:37:54,841
tapi ini yang Anda miliki, seperti komputer mana pun\n

4827
04:37:54,841 --> 04:37:57,105
dari bug fisik pertama di komputer.

4828
04:37:57,105 --> 04:37:59,582
Namun, bagaimana cara\nAnda menghapus hal seperti itu?

4829
04:37:59,582 --> 04:38:02,040
Baiklah, mari kita pertimbangkan skenario yang sangat\nsederhana dari sebelumnya

4830
04:38:02,041 --> 04:38:05,041
misalnya, ketika kami mencoba\n

4831
04:38:05,041 --> 04:38:07,230
seperti kolom 3 batu bata ini.

4832
04:38:07,230 --> 04:38:10,920
Mari kita pertimbangkan bagaimana cara saya melakukannya\n

4833
04:38:10,920 --> 04:38:15,390
Izinkan saya beralih kembali ke VS\nCode di sini, dan saya akan menjalankan--

4834
04:38:17,010 --> 04:38:18,900
Dan aku tidak akan\nmempercayai diriku sendiri, jadi aku percaya

4835
04:38:18,901 --> 04:38:20,768
akan menyebutnya\nbuggy.c sejak awal

4836
04:38:20,768 --> 04:38:22,600
mengetahui bahwa aku akan\nmengacaukan sesuatu.

4837
04:38:22,600 --> 04:38:25,411
Namun saya akan melanjutkan\ndan menyertakan stdio.h.

4838
04:38:25,411 --> 04:38:28,201
Dan saya akan mendefinisikan main, seperti biasa.

4839
04:38:28,201 --> 04:38:30,210
Jadi mudah-mudahan belum ada kesalahan.

4840
04:38:30,210 --> 04:38:32,970
Dan sekarang, saya ingin mencetak\n3 batu bata itu di layar menggunakan

4841
04:38:34,530 --> 04:38:40,681
Jadi bagaimana kalau 4 int saya mendapat 0, saya kurang\n

4842
04:38:40,681 --> 04:38:42,541
Sekarang, di dalam\nkurung kurawalku, aku pergi

4843
04:38:42,541 --> 04:38:48,221
untuk melanjutkan dan mencetak hash\n

4844
04:38:48,221 --> 04:38:52,236
Baiklah, simpan file, lakukan\n

4845
04:38:52,236 --> 04:38:57,601
Jadi tidak ada kesalahan sintaksis,\n

4846
04:38:57,600 --> 04:39:00,900
Namun beberapa dari Anda mungkin\nmelihat kesalahan logisnya

4847
04:39:00,901 --> 04:39:03,631
karena ketika saya menjalankan\nprogram ini saya tidak mengerti

4848
04:39:03,631 --> 04:39:09,691
gambar ini, yang terdiri dari 3 batu bata\n

4849
04:39:09,690 --> 04:39:12,190
Sekarang, ini mungkin mengejutkan\namun Anda, mengapa hal ini terjadi

4850
04:39:12,190 --> 04:39:14,190
tapi saya telah membuat programnya\nssederhana agar kita bisa

4851
04:39:14,190 --> 04:39:18,271
tidak perlu menemukan bug sebenarnya, kami bisa\n

4852
04:39:20,230 --> 04:39:23,311
Apa strategi pertama\nuntuk menemukan bug seperti ini

4853
04:39:23,311 --> 04:39:27,552
daripada menatap kode Anda,\n

4854
04:39:28,385 --> 04:39:31,950
Baiklah, mari kita coba mendiagnosis\n

4855
04:39:31,951 --> 04:39:34,681
Dan cara paling sederhana untuk melakukan\nini sekarang, dan bertahun-tahun dari sekarang

4856
04:39:34,681 --> 04:39:38,131
sejujurnya, akan menggunakan fungsi seperti printf.

4857
04:39:38,131 --> 04:39:40,050
Printf adalah fungsi yang sangat\nberguna, bukan

4858
04:39:40,050 --> 04:39:42,810
untuk memformat-- mencetak\nstring yang diformat dan sebagainya, untuk

4859
04:39:42,811 --> 04:39:45,691
hanya melihat ke dalam\nnilai variabel

4860
04:39:45,690 --> 04:39:48,612
sehingga Anda mungkin penasaran\nuntuk melihat apa yang terjadi.

4861
04:39:50,580 --> 04:39:53,370
Saya lihat ada 4 yang keluar\n, tapi saya bermaksud 3.

4862
04:39:53,370 --> 04:39:56,001
Jelas sekali, ada\nyang salah dengan variabel i saya.

4863
04:39:56,001 --> 04:39:58,350
Jadi izinkan saya menjadi sedikit lebih bertele-tele.

4864
04:39:58,350 --> 04:40:01,560
Biarkan saya masuk ke dalam\nloop ini dan, untuk sementara

4865
04:40:01,561 --> 04:40:04,741
katakan sesuatu yang eksplisit, seperti, aku--

4866
04:40:04,741 --> 04:40:09,461
andi /n, lalu\nmasukkan saja nilai i.

4867
04:40:09,960 --> 04:40:13,230
Ini bukan program yang saya inginkan\n

4868
04:40:13,230 --> 04:40:18,661
menulis, karena sekarang saya akan\nmengatakan buat buggy, ./buggy.

4869
04:40:18,661 --> 04:40:20,760
Dan jika saya lihat, sekarang,\na pada hasilnya, saya punya

4870
04:40:20,760 --> 04:40:25,350
beberapa informasi diagnostik yang berguna.\n

4871
04:40:25,350 --> 04:40:27,870
dan saya mendapatkan hash, 2 dan saya\nmendapatkan hash, 3 dan saya mendapatkan hash.

4872
04:40:28,788 --> 04:40:30,870
Saya jelas mengambil terlalu banyak\nlangkah karena, mungkin, saya

4873
04:40:30,870 --> 04:40:33,510
lupa bahwa komputer,\pada dasarnya, menghitung dari 0

4874
04:40:33,510 --> 04:40:35,710
dan sekarang, oh, kurang dari atau sama dengan.

4875
04:40:37,291 --> 04:40:40,201
Sekali lagi, contoh sepele,\ntetapi hanya dengan menggunakan printf

4876
04:40:40,201 --> 04:40:43,171
Anda dapat melihat bagian dalam\nmemori komputer

4877
04:40:43,170 --> 04:40:45,390
dengan hanya mencetak hal-hal seperti ini.

4878
04:40:45,390 --> 04:40:50,030
Dan sekarang, setelah Anda mengetahuinya, oh,\n

4879
04:40:50,030 --> 04:40:52,400
atau saya harus mulai\nmenghitung dari 1, itu

4880
04:40:52,401 --> 04:40:53,901
sejumlah cara yang bisa saya lakukan untuk memperbaikinya.

4881
04:40:53,901 --> 04:40:56,916
Namun cara paling konvensional\nmungkin hanya mengatakan kurang dari 3.

4882
04:40:56,916 --> 04:41:03,441
Sekarang, saya dapat menghapus cetakan sementara saya\n

4883
04:41:06,050 --> 04:41:08,091
Baiklah, dan sampai hari ini, saya melakukan ini.

4884
04:41:08,091 --> 04:41:11,120
Baik itu membuat baris perintah\n

4885
04:41:11,120 --> 04:41:13,310
atau aplikasi seluler,\nSangat umum digunakan

4886
04:41:13,311 --> 04:41:15,531
printf, atau yang setara\dalam bahasa apa pun

4887
04:41:15,530 --> 04:41:19,611
hanya untuk melihat-lihat dan melihat apa\nyang ada di dalam memori komputer.

4888
04:41:19,611 --> 04:41:22,831
Untungnya, masih ada\nalat yang lebih canggih dari ini.

4889
04:41:22,830 --> 04:41:25,190
Izinkan saya melanjutkan dan\nmemunculkan kembali bug tersebut di sini.

4890
04:41:25,190 --> 04:41:28,880
Dan izinkan saya membuka\nsidebar saya di sebelah kiri sini.

4891
04:41:28,881 --> 04:41:32,811
Izinkan saya mengkompilasi ulang kodenya\nuntuk memastikan kodenya terkini.

4892
04:41:32,811 --> 04:41:35,570
Dan saya akan menjalankan\nperintah bernama debug50.

4893
04:41:35,570 --> 04:41:39,350
Yang merupakan perintah yang\nmewakili suatu jenis program

4894
04:41:41,001 --> 04:41:43,940
Dan debugger ini\sebenarnya dibangun ke dalam VS Code.

4895
04:41:43,940 --> 04:41:47,960
Dan semua yang dilakukan debug50 untuk kita adalah\n

4896
04:41:47,960 --> 04:41:49,911
Debugger bawaan VS Code.

4897
04:41:49,911 --> 04:41:52,521
Jadi ini bahkan bukan alat khusus\nCS50, kami sudah melakukannya

4898
04:41:52,521 --> 04:41:55,431
baru saja memberi Anda perintah debug50\nuntuk membuatnya lebih mudah

4899
04:41:55,431 --> 04:41:57,116
untuk memulainya dari awal.

4900
04:41:57,116 --> 04:42:01,821
Dan cara Anda menjalankan debugger ini\n

4901
04:42:01,820 --> 04:42:04,381
nama program\nyang ingin Anda debug.

4902
04:42:06,471 --> 04:42:08,271
Jadi Anda tidak menyebutkan file c Anda.

4903
04:42:08,271 --> 04:42:10,911
Anda menyebutkan kode yang sudah Anda kompilasi.

4904
04:42:10,911 --> 04:42:16,491
Dan apa yang sedang dilakukan debugger ini\n

4905
04:42:16,491 --> 04:42:19,191
telusuri kode saya selangkah demi selangkah.

4906
04:42:19,190 --> 04:42:23,190
Karena setiap program yang kami tulis\n

4907
04:42:23,190 --> 04:42:26,585
meskipun saya belum selesai memikirkan\nsetiap langkah dalam satu waktu.

4908
04:42:26,585 --> 04:42:30,111
Dengan debugger, saya sebenarnya dapat mengklik nomor baris

4909
04:42:30,111 --> 04:42:33,441
dan ucapkan jeda eksekusi\ndi sini, dan debugger

4910
04:42:33,440 --> 04:42:38,390
akan membiarkan saya menelusuri kode saya terlebih dahulu\n

4911
04:42:38,390 --> 04:42:41,001
satu menit setiap kalinya,\namun dengan kecepatan manusia saya sendiri.

4912
04:42:41,001 --> 04:42:43,730
Hal ini sangat menarik ketika\nprogram menjadi lebih rumit

4913
04:42:43,730 --> 04:42:46,861
dan jika tidak, mereka mungkin\nterbang di layar.

4914
04:42:46,861 --> 04:42:50,120
Jadi saya akan klik\ndi sebelah kiri baris 5.

4915
04:42:50,120 --> 04:42:52,230
Dan perhatikan\ntitik merah kecil ini muncul.

4916
04:42:52,230 --> 04:42:55,550
Dan jika saya klik salah satunya, warnanya\ntetap, dan menjadi lebih merah.

4917
04:42:55,550 --> 04:42:58,490
Dan saya akan menjalankan debug50 di ./buggy.

4918
04:42:58,491 --> 04:43:03,351
Dan sebentar lagi, Anda akan melihatnya a\n

4919
04:43:03,350 --> 04:43:06,170
Ia melakukan beberapa\nkonfigurasi layar.

4920
04:43:06,170 --> 04:43:10,950
Izinkan saya memperkecil sedikit di sini, jadi\n

4921
04:43:10,951 --> 04:43:14,701
Dan terkadang, Anda akan melihatnya di VS\n

4922
04:43:14,701 --> 04:43:18,741
yang terlihat sangat samar, kembali saja\n

4923
04:43:18,741 --> 04:43:22,136
Karena di jendela terminal adalah tempat\n

4924
04:43:22,135 --> 04:43:24,380
Dan sekarang mari kita lihat\napa yang terjadi.

4925
04:43:24,381 --> 04:43:28,911
Jika saya memperbesar\nkode buggy.c saya di sini, Anda akan melakukannya

4926
04:43:28,911 --> 04:43:35,151
perhatikan bahwa kita mempunyai program yang sama\n

4927
04:43:36,080 --> 04:43:39,920
Bukan suatu kebetulan, itulah garisnya\n

4928
04:43:39,920 --> 04:43:44,661
Titik merah kecil berarti istirahat\ndi sini, jeda eksekusi di sini.

4929
04:43:44,661 --> 04:43:47,976
Dan garis kuning belum\ntereksekusi.

4930
04:43:47,976 --> 04:43:51,860
Namun jika saya, sekarang, berada di puncak\n

4931
04:43:53,010 --> 04:43:55,010
Ada satu untuk ini,\nyang mana, jika saya mengarahkan kursor ke atasnya

4932
04:43:55,010 --> 04:43:58,400
bertuliskan Step Over, ada\nlainnya yang bertuliskan Step Into

4933
04:43:58,401 --> 04:44:00,081
ada yang ketiga bertuliskan Step Out.

4934
04:44:00,080 --> 04:44:02,780
Saya hanya akan menggunakan\nyang pertama, Step Over.

4935
04:44:02,780 --> 04:44:05,841
Dan saya akan melakukan ini, dan\n

4936
04:44:05,841 --> 04:44:09,921
dipindahkan dari baris 5 ke baris\n7 karena sekarang sudah siap

4937
04:44:09,920 --> 04:44:12,215
tetapi belum mencetak hash itu.

4938
04:44:12,216 --> 04:44:16,078
Namun hal yang paling kuat di sini,\nperhatikan, adalah kiri atas di sini.

4939
04:44:16,078 --> 04:44:18,411
Agak samar, karena\nada banyak hal

4940
04:44:18,411 --> 04:44:21,170
hal yang terjadi akan menjadi lebih\nsense seiring berjalannya waktu, namun pada akhirnya

4941
04:44:21,170 --> 04:44:22,730
ada bagian yang disebut variabel.

4942
04:44:22,730 --> 04:44:25,010
Di bawahnya, sesuatu\ndisebut penduduk lokal, yang artinya

4943
04:44:25,010 --> 04:44:27,080
lokal ke fungsi saya saat ini, main.

4944
04:44:27,080 --> 04:44:31,670
Dan perhatikan, itu variabel saya\n

4945
04:44:31,670 --> 04:44:37,070
Jadi sekarang, setelah saya mengeklik Step Over\na lagi, lihat apa yang terjadi.

4946
04:44:37,070 --> 04:44:39,920
Kami pergi dari jalur 7 kembali ke jalur 5.

4947
04:44:39,920 --> 04:44:43,715
Tapi lihat di jendela terminal,\tidak ada hash yang dicetak.

4948
04:44:43,716 --> 04:44:46,311
Tapi sekarang, itu dicetak sesuai keinginan saya.

4949
04:44:46,311 --> 04:44:48,291
Saya bisa memikirkan ini langkah demi langkah.

4950
04:44:48,291 --> 04:44:50,601
Perhatikan bahwa saya belum berubah.

4951
04:44:50,600 --> 04:44:53,960
Masih 0 karena warna kuning\n

4952
04:44:53,960 --> 04:44:58,400
Namun saat saya mengklik Step Over,\itu akan mengeksekusi baris 5.

4953
04:44:58,401 --> 04:45:05,271
Sekarang, perhatikan di kiri atas, saya telah menjadi\n

4954
04:45:05,271 --> 04:45:07,550
karena sekarang yang disorot adalah baris 7.

4955
04:45:07,550 --> 04:45:12,260
Jadi jika saya klik Step Over\na lagi, kita akan melihat hashnya.

4956
04:45:12,260 --> 04:45:16,190
Jika saya mengulangi proses ini dengan\kecepatan saya yang manusiawi dan nyaman

4957
04:45:16,190 --> 04:45:21,300
Saya dapat melihat variabel saya berubah, saya\n

4958
04:45:21,300 --> 04:45:24,163
dan saya hanya bisa memikirkan\nseandainya hal itu terjadi.

4959
04:45:24,163 --> 04:45:26,120
Saya bisa berhenti sejenak dan memikirkan apa yang sebenarnya

4960
04:45:26,120 --> 04:45:30,501
berlangsung tanpa mencoba balapan\n

4961
04:45:30,501 --> 04:45:32,751
Saya akan melanjutkan dan\nberhenti di sini karena kita sudah melakukannya

4962
04:45:32,751 --> 04:45:35,690
tahu apa masalah khusus ini\nis, dan itu membuat saya kembali

4963
04:45:35,690 --> 04:45:36,980
ke jendela terminal default saya.

4964
04:45:36,980 --> 04:45:40,440
Namun debugger ini, izinkan saya\ndinonaktifkan breakpoint sekarang

4965
04:45:40,440 --> 04:45:42,830
jadi tidak terus\nrusak, debugger ini

4966
04:45:42,830 --> 04:45:45,020
akan menjadi temanmu\nbergerak maju secara berurutan

4967
04:45:45,021 --> 04:45:49,550
untuk menelusuri kode Anda langkah demi langkah,\n

4968
04:45:49,550 --> 04:45:51,080
dimana ada yang tidak beres.

4969
04:45:51,080 --> 04:45:54,657
Printf bagus, tapi akan mengganggu jika\n

4970
04:45:54,657 --> 04:45:57,740
cetak ini, cetak ini, cetak ini,\n

4971
04:45:59,241 --> 04:46:04,041
Debugger memungkinkan Anda melakukan\ hal yang setara, tetapi secara otomatis.

4972
04:46:04,041 --> 04:46:10,221
Pertanyaan tentang debugger ini, yang akan Anda\n

4973
04:46:12,814 --> 04:46:14,820
AUDIENCE: Anda menggunakan\na fitur Step Over.

4974
04:46:14,820 --> 04:46:17,563
Apa fungsi\nfitur lain di debugger--

4975
04:46:17,563 --> 04:46:18,980
DAVID MALAN: Pertanyaan yang sangat bagus.

4976
04:46:18,980 --> 04:46:21,980
Kita akan melihatnya sebentar lagi, tapi itu\n

4977
04:46:21,980 --> 04:46:26,721
sebenarnya masuk dan keluar\n

4978
04:46:26,721 --> 04:46:28,461
jika saya punya lebih dari yang utama.

4979
04:46:28,460 --> 04:46:31,220
Jadi jika main memanggil\nfungsi memanggil sesuatu

4980
04:46:31,221 --> 04:46:34,640
dan sesuatu yang disebut fungsi\n

4981
04:46:34,640 --> 04:46:38,990
melangkahi seluruh eksekusi\n

4982
04:46:38,991 --> 04:46:41,366
dan telusuri\nbaris kodenya satu per satu.

4983
04:46:41,366 --> 04:46:43,281
Jadi, kapan pun Anda mempunyai\na masalah, Andalah yang menghadapinya

4984
04:46:43,280 --> 04:46:46,400
mengerjakan yang memiliki banyak fungsi,\n

4985
04:46:46,401 --> 04:46:50,511
jika Anda mau, atau Anda dapat mengaturnya di dalam\n

4986
04:46:50,510 --> 04:46:53,390
untuk memusatkan perhatian Anda hanya pada itu.

4987
04:46:53,390 --> 04:46:56,900
Dan kita akan melihat contohnya\ndari waktu ke waktu.

4988
04:46:58,041 --> 04:47:02,361
Dan apa itu, gajah\di dalam ruangan, boleh dikatakan begitu

4989
04:47:02,361 --> 04:47:04,011
sebenarnya adalah bebek dalam hal ini.

4990
04:47:04,010 --> 04:47:06,420
Mengapa ada bebek ini dan\nsemua bebek ini di sini?

4991
04:47:06,420 --> 04:47:10,700
Ternyata, yang ketiga, sungguh\n

4992
04:47:10,701 --> 04:47:14,316
sedang membicarakan masalah, berbicara\n

4993
04:47:14,315 --> 04:47:16,880
Sekarang, karena tidak adanya\na anggota keluarga, atau teman

4994
04:47:16,881 --> 04:47:20,781
atau teman sekamar yang sebenarnya ingin\n

4995
04:47:20,780 --> 04:47:25,580
umumnya, pemrogram beralih ke a\n

4996
04:47:25,580 --> 04:47:27,620
jika sesuatu yang bernyawa tidak tersedia.

4997
04:47:27,620 --> 04:47:31,021
Ide dibalik bebek karet\ndebugging, boleh dikatakan begitu

4998
04:47:31,021 --> 04:47:37,011
apakah itu cukup dengan melihat kode Anda\n

4999
04:47:37,010 --> 04:47:41,300
Saya memulai loop 4 dan\nSaya menginisialisasi i ke 0.

5000
04:47:41,300 --> 04:47:43,251
Oke, kalau begitu, saya sedang mencetak hash.

5001
04:47:43,251 --> 04:47:48,372
Hanya dengan membicarakan\nkode Anda, langkah demi langkah, tanpa henti

5002
04:47:48,372 --> 04:47:51,080
menemukan Anda memiliki pepatah\n

5003
04:47:51,080 --> 04:47:53,300
karena kamu sadar, tunggu sebentar\nAku baru saja mengatakan sesuatu yang bodoh

5004
04:47:53,300 --> 04:47:54,771
atau aku hanya mengatakan sesuatu yang salah.

5005
04:47:54,771 --> 04:47:58,761
Dan ini sebenarnya hanyalah proksi untuk semua\n

5006
04:48:00,320 --> 04:48:02,701
Tapi karena tidak adanya\norang-orang itu di ruangan itu

5007
04:48:02,701 --> 04:48:04,618
silakan ambil,\bukan jalan keluar hari ini.

5008
04:48:04,617 --> 04:48:08,540
Salah satunya, bebek karet kecil dan\n

5009
04:48:08,541 --> 04:48:12,081
Anda ingin membicarakan salah satu\nomasalah Anda di CS50

5010
04:48:12,080 --> 04:48:13,400
atau mungkin kehidupan secara lebih umum.

5011
04:48:13,401 --> 04:48:15,741
Namun menyimpannya di\nmeja Anda hanyalah sebuah cara

5012
04:48:15,741 --> 04:48:19,401
untuk membantu Anda mendengarkan pendapat yang tidak masuk akal\nin

5013
04:48:19,401 --> 04:48:22,051
mungkin, jika tidak, merupakan kode logis.

5014
04:48:22,050 --> 04:48:26,661
Jadi printf, debugging, bebek karet\n

5015
04:48:26,661 --> 04:48:29,468
Anda akan melihatnya seiring waktu, untuk\ndapatkan sumber kodenya

5016
04:48:29,468 --> 04:48:31,050
yang akan Anda tulis memiliki kesalahan.

5017
04:48:31,050 --> 04:48:33,140
Hal ini akan terjadi,\nnamun hal ini akan memberdayakan Anda

5018
04:48:33,140 --> 04:48:36,260
terlebih lagi untuk mengatasi kesalahan tersebut.

5019
04:48:36,260 --> 04:48:41,700
Baiklah, ada pertanyaan tentang proses debug,\n

5020
04:48:44,001 --> 04:48:46,911
DAVID MALAN: Apa bedanya\n

5021
04:48:46,911 --> 04:48:50,241
Saat ini, satu-satunya yang\n

5022
04:48:50,241 --> 04:48:53,601
adalah Step Over, karena artinya\nmelangkahi setiap baris kode.

5023
04:48:53,600 --> 04:48:58,310
Namun, jika saya memiliki fungsi lain\n

5024
04:48:58,311 --> 04:49:03,561
mungkin di bagian bawah file, i\n

5025
04:49:03,561 --> 04:49:05,730
dan berjalan melewatinya satu per satu.

5026
04:49:05,729 --> 04:49:07,911
Jadi kita akan kembali ke sini\ndengan contoh nyata

5027
04:49:07,911 --> 04:49:10,491
namun langkah ke dalamnya akan memungkinkan\nsaya melakukan hal tersebut.

5028
04:49:10,491 --> 04:49:13,471
Faktanya, ini adalah segmen yang sempurna untuk\n

5029
04:49:13,471 --> 04:49:15,893
Biarkan saya melanjutkan dan membuka\nfile lain di sini.

5030
04:49:15,893 --> 04:49:17,600
Dan sebenarnya, kami akan\nmenggunakan hal yang sama, buggy.

5031
04:49:17,600 --> 04:49:20,580
Dan kami juga akan menulis satu\hal lain yang bermasalah.

5032
04:49:20,580 --> 04:49:24,260
Izinkan saya naik ke sini dan\nsertakan, seperti sebelumnya, cs50.h.

5033
04:49:29,780 --> 04:49:32,310
Jadi, menurut saya semua ini\sejauh ini benar.

5034
04:49:32,311 --> 04:49:35,541
Dan mari kita lakukan ini, mari\ngberikan diri saya sebuah int bernama i

5035
04:49:35,541 --> 04:49:38,791
dan mari kita tanyakan kepada pengguna\n bilangan bulat negatif.

5036
04:49:38,791 --> 04:49:41,561
Secara teknis, ini bukan fungsi yang\berikutnya.

5037
04:49:41,561 --> 04:49:44,311
Tapi saya akan berasumsi, untuk\n

5038
04:49:44,311 --> 04:49:47,961
Lalu, saya hanya akan mencetak\nout, dengan %i dan baris baru

5039
04:49:47,960 --> 04:49:49,620
apa pun yang diketik manusia.

5040
04:49:49,620 --> 04:49:52,580
Jadi pada bagian cerita ini,\nprogram saya, menurut saya, sudah benar.

5041
04:49:52,580 --> 04:49:55,190
Kecuali fakta bahwa\nget int negatif tidak

5042
04:49:55,190 --> 04:49:57,950
fungsi di perpustakaan\nCS50 atau di mana pun.

5043
04:49:57,951 --> 04:49:59,721
Saya harus menciptakannya sendiri.

5044
04:49:59,721 --> 04:50:05,570
Jadi misalkan, dalam hal ini, saya mendeklarasikan\n

5045
04:50:05,570 --> 04:50:09,890
Jadi, tipe pengembaliannya seharusnya\n

5046
04:50:09,890 --> 04:50:12,620
Saya ingin mengembalikan\nin integer kepada pengguna, dan semuanya berjalan

5047
04:50:12,620 --> 04:50:14,570
untuk tidak mengambil masukan agar tetap sederhana.

5048
04:50:14,570 --> 04:50:16,070
Jadi saya hanya akan mengatakan batal di sana.

5049
04:50:16,070 --> 04:50:19,070
Tidak ada masukan, tidak ada perintah\nkhusus, tidak ada yang seperti itu.

5050
04:50:19,070 --> 04:50:21,861
Izinkan saya, sekarang, memberi diri saya\nbeberapa kurung kurawal.

5051
04:50:21,861 --> 04:50:24,771
Dan izinkan saya melakukan sesuatu yang familier,\nmungkin, dari rangkaian masalah 1.

5052
04:50:24,771 --> 04:50:29,811
Izinkan saya memberi diri saya sebuah variabel,\n

5053
04:50:31,580 --> 04:50:37,850
Tetapkan n nilai get int, tanyakan\n

5054
04:50:39,111 --> 04:50:43,011
Dan saya ingin melakukan ini ketika\nn kurang dari 0, karena saya

5055
04:50:43,010 --> 04:50:44,650
ingin mendapatkan hal negatif dari pengguna.

5056
04:50:44,651 --> 04:50:48,401
Dan ingat, karena pernah\menggunakan blok ini di masa lalu

5057
04:50:48,401 --> 04:50:52,031
Saya sekarang dapat mengembalikan n sebagai\nlangkah terakhir untuk mengembalikannya

5058
04:50:52,030 --> 04:50:56,050
apa pun yang diketik pengguna, jadi\n

5059
04:50:58,010 --> 04:51:00,970
Sekarang, saya sengaja\nmembuat kesalahan di sini

5060
04:51:00,971 --> 04:51:03,341
dan ini adalah matematika yang halus,\nkonyol

5061
04:51:03,341 --> 04:51:08,171
tapi izinkan saya mengkompilasi program ini setelah\n

5062
04:51:08,170 --> 04:51:09,640
agar aku tidak melakukan kesalahan itu lagi.

5063
04:51:09,640 --> 04:51:12,730
Biarkan saya membuat buggy, Masuk.

5064
04:51:14,980 --> 04:51:18,280
Saya akan memberikannya negatif\ninteger, seperti negatif 50.

5065
04:51:29,260 --> 04:51:33,341
Jadi, jelas saja, ini berjalan mundur,\n

5066
04:51:33,341 --> 04:51:35,061
Jadi bagaimana saya bisa men-debug ini?

5067
04:51:35,061 --> 04:51:36,686
Ya, bisakah saya melakukan apa yang pernah saya lakukan sebelumnya?

5068
04:51:36,686 --> 04:51:43,181
Saya bisa menggunakan teknik printf saya dan\n

5069
04:51:43,181 --> 04:51:49,570
baris baru, koma n, hanya untuk mencetak\nit, izinkan saya mengkompilasi ulang buggy

5070
04:51:49,570 --> 04:51:52,901
biarkan saya menjalankan kembali buggy, biarkan\nsaya mengetikkan negatif 50.

5071
04:51:54,890 --> 04:51:57,434
Jadi itu tidak terlalu\nmembantu saya saat ini

5072
04:51:57,434 --> 04:51:58,851
karena itu sama seperti sebelumnya.

5073
04:51:58,850 --> 04:52:02,290
Jadi izinkan saya melakukan ini, debug50, ./buggy.

5074
04:52:02,291 --> 04:52:04,131
Oh, tapi aku telah melakukan kesalahan.

5075
04:52:04,131 --> 04:52:05,961
Jadi saya belum menetapkan breakpoint saya.

5076
04:52:05,960 --> 04:52:09,190
Jadi izinkan saya melakukan ini, dan kali ini saya akan\nmenetapkan breakpoint.

5077
04:52:09,190 --> 04:52:11,591
Saya bisa mengaturnya di sini, di baris 8.

5078
04:52:11,591 --> 04:52:13,600
Mari kita lakukan secara utama, seperti sebelumnya.

5079
04:52:17,230 --> 04:52:19,451
Antarmuka pengguna yang mewah\nakan muncul.

5080
04:52:19,451 --> 04:52:22,570
Ini akan menyorot baris\nyang saya atur breakpointnya.

5081
04:52:22,570 --> 04:52:25,510
Perhatikan itu, di sisi\nkiri layar

5082
04:52:25,510 --> 04:52:28,911
saya default, saat ini ke 0,\n

5083
04:52:29,411 --> 04:52:35,076
Namun izinkan saya, sekarang, Melangkahi ini\n

5084
04:52:35,076 --> 04:52:36,701
dan Anda akan melihat bahwa saya diminta.

5085
04:52:36,701 --> 04:52:40,480
Jadi mari kita ketik negatif saya 50, Enter.

5086
04:52:40,480 --> 04:52:45,730
Perhatikan sekarang bahwa saya\nterjebak dalam fungsi itu.

5087
04:52:46,510 --> 04:52:50,780
Jelas sekali, masalahnya tampaknya\n

5088
04:52:50,780 --> 04:52:54,380
Jadi, oke, izinkan saya menghentikan eksekusi ini.

5089
04:52:54,381 --> 04:52:57,436
Masalahku sepertinya bukan di\n

5090
04:52:58,061 --> 04:53:00,251
Izinkan saya menetapkan breakpoint yang sama di baris 8.

5091
04:53:00,251 --> 04:53:02,771
Biarkan saya menjalankan kembali debug50 sekali lagi.

5092
04:53:02,771 --> 04:53:07,370
Namun kali ini, alih-alih hanya melangkah\n

5093
04:53:07,370 --> 04:53:09,670
Jadi perhatikan baris 8, sekali lagi,\ndisorot dengan warna kuning.

5094
04:53:09,670 --> 04:53:11,950
Sebelumnya saya telah\nmengklik Step Over.

5095
04:53:14,440 --> 04:53:17,740
Ketika saya mengklik Step Into,\nboom, sekarang, debugger

5096
04:53:17,741 --> 04:53:20,651
melompat ke fungsi spesifik itu.

5097
04:53:20,651 --> 04:53:23,591
Sekarang, saya dapat menelusuri\nbaris kode ini, lagi dan lagi.

5098
04:53:23,591 --> 04:53:25,960
Saya dapat melihat nilai\nn saat saya mengetiknya.

5099
04:53:25,960 --> 04:53:27,760
Saya bisa memikirkan logika saya, dan voila.

5100
04:53:27,760 --> 04:53:31,900
Mudah-mudahan, setelah saya menyelesaikan masalahnya,\n

5101
04:53:33,440 --> 04:53:36,310
Jadi Step Over hanya melewati\ngaris, namun mengeksekusinya

5102
04:53:36,311 --> 04:53:41,471
Step Into memungkinkan Anda masuk ke\fungsi lain yang telah Anda tulis.

5103
04:53:41,471 --> 04:53:43,661
Jadi mari kita lanjutkan dan lakukan ini.

5104
04:53:43,661 --> 04:53:47,811
Kami memiliki banyak\npendekatan yang memungkinkan

5105
04:53:47,811 --> 04:53:49,811
dapat menyelesaikan beberapa\nmasalah, mari kita lanjutkan

5106
04:53:49,811 --> 04:53:50,991
dan mengatur kecepatan diri kita hari ini.

5107
04:53:50,991 --> 04:53:52,161
Mari kita istirahat lima menit, nih.

5108
04:53:52,161 --> 04:53:54,949
Dan saat kami kembali, kami akan mengambil\n

5109
04:54:05,260 --> 04:54:11,120
Hingga saat ini, keduanya, pada minggu ke-1\n

5110
04:54:11,120 --> 04:54:14,920
kami baru saja menerjemahkan dari Awal ke\n

5111
04:54:14,920 --> 04:54:17,960
seperti loop dan kondisional,\nekspresi Boolean, variabel.

5112
04:54:17,960 --> 04:54:19,210
Kurang lebih sama.

5113
04:54:19,210 --> 04:54:22,690
Namun ada fitur di C yang\n

5114
04:54:22,690 --> 04:54:26,560
seperti tipe data, tipe variabel\n

5115
04:54:26,561 --> 04:54:28,711
namun kenyataannya, hal itu\ada dalam bahasa lain.

5116
04:54:28,710 --> 04:54:30,460
Faktanya, ada beberapa\nyang akan kita lihat tidak lama lagi.

5117
04:54:30,460 --> 04:54:34,931
Jadi untuk meringkas tipe yang kita lihat terakhir\n

5118
04:54:34,931 --> 04:54:39,311
Kita punya int, float,\nlong, double, dan karakter

5119
04:54:39,311 --> 04:54:42,771
ada juga Booles dan juga string,\n

5120
04:54:42,771 --> 04:54:46,091
Namun hari ini, mari kita mulai\n

5121
04:54:46,091 --> 04:54:50,021
dan sebenarnya apa yang dilakukan Mac dan PC Anda\n

5122
04:54:50,021 --> 04:54:53,431
sebagai int versus char, versus\na string, versus sesuatu yang lain.

5123
04:54:53,431 --> 04:54:56,181
Dan lihat apakah kami tidak dapat menambahkan alat lainnya\n

5124
04:54:56,181 --> 04:54:59,890
sehingga kita dapat mulai menulis dengan cepat\n

5125
04:55:01,061 --> 04:55:04,901
Ternyata, hal tersebut terjadi pada\nsebagian besar sistem saat ini

5126
04:55:04,901 --> 04:55:07,271
meskipun hal ini dapat berbeda-beda di setiap\komputer sebenarnya, ini

5127
04:55:07,271 --> 04:55:10,300
adalah seberapa besar masing-masing\ntipe data, biasanya

5128
04:55:10,300 --> 04:55:15,850
ada di C. Saat Anda menyimpan nilai Boolean,\n

5129
04:55:17,111 --> 04:55:19,361
Itu sedikit berlebihan,\nkarena sebenarnya

5130
04:55:19,361 --> 04:55:22,841
Anda hanya memerlukan 1 bit,\nyaitu 1/8 dari ukuran ini.

5131
04:55:22,841 --> 04:55:25,451
Namun untuk mempermudah,\nkomputer menggunakan seluruh byte

5132
04:55:25,451 --> 04:55:28,001
untuk mewakili Boole, benar atau salah.

5133
04:55:28,001 --> 04:55:32,300
Sebuah char, yang kita lihat minggu lalu,\nis hanya 1 byte, atau 8 bit.

5134
04:55:32,300 --> 04:55:37,210
Dan inilah mengapa ASCII, yang menggunakan 1\n

5135
04:55:37,210 --> 04:55:41,861
aktif, dibatasi hanya pada 256\nkarakter maksimal yang mungkin.

5136
04:55:41,861 --> 04:55:46,201
Perhatikan bahwa int adalah\n4 byte, atau 32 bit.

5137
04:55:46,201 --> 04:55:48,841
Float juga berukuran 4 byte atau 32 bit.

5138
04:55:48,841 --> 04:55:52,111
Namun hal yang kami sebut panjang,\n

5139
04:55:54,690 --> 04:55:58,161
Ganda adalah presisi 64 bit\nuntuk nilai floating point.

5140
04:55:58,161 --> 04:56:01,475
Dan sebuah string, untuk hari ini, kami\n

5141
04:56:01,475 --> 04:56:03,600
Kami akan membahasnya lagi,\nhari ini dan minggu depan

5142
04:56:03,600 --> 04:56:06,780
mengenai berapa banyak ruang yang digunakan\nstring, namun, cukuplah untuk mengatakannya

5143
04:56:06,780 --> 04:56:09,748
ini akan memakan\njumlah ruang yang bervariasi

5144
04:56:09,748 --> 04:56:11,791
tergantung pada apakah\nstringnya pendek atau panjang.

5145
04:56:11,791 --> 04:56:14,730
Namun kita akan melihat apa\nmaksudnya, tidak lama lagi.

5146
04:56:14,730 --> 04:56:19,291
Jadi inilah foto\na bagian kenangan yang khas

5147
04:56:19,291 --> 04:56:22,021
di dalam Mac, atau PC, atau ponsel Anda.

5148
04:56:22,021 --> 04:56:24,421
Kemungkinannya, ukurannya mungkin sedikit\nlebih kecil di beberapa perangkat.

5149
04:56:24,420 --> 04:56:27,210
Ini dikenal sebagai RAM,\atau memori akses acak.

5150
04:56:27,210 --> 04:56:29,670
Masing-masing chip\nhitam kecil di sirkuit ini

5151
04:56:29,670 --> 04:56:31,980
papan, benda hijau,\nkepingan hitam kecil ini

5152
04:56:31,980 --> 04:56:34,890
adalah tempat 0 dan 1 sebenarnya disimpan.

5153
04:56:34,890 --> 04:56:36,931
Masing-masing menyimpan\nsejumlah byte.

5154
04:56:36,931 --> 04:56:39,390
Mungkin megabyte, mungkin\nbahkan gigabyte, saat ini.

5155
04:56:39,390 --> 04:56:45,690
Jadi mari kita fokus pada salah satu chip tersebut,\n

5156
04:56:45,690 --> 04:56:49,650
Mari kita pertimbangkan fakta bahwa, genap\n

5157
04:56:49,651 --> 04:56:53,731
bagaimana hal semacam ini dibuat, jika\n

5158
04:56:53,730 --> 04:56:56,190
demi diskusi,\namun masuk akal

5159
04:56:56,190 --> 04:57:00,091
jika benda ini menyimpan 1\nmiliar byte, 1 gigabyte

5160
04:57:00,091 --> 04:57:02,370
lalu kita bisa menomorinya sesuka hati.

5161
04:57:02,370 --> 04:57:05,850
Mungkin ini byte\n0, 1, 2, 3, 4, 5, 6, 7, 8.

5162
04:57:05,850 --> 04:57:09,260
Lalu, mungkin, jauh di bawah sini\n

5163
04:57:09,260 --> 04:57:13,020
Kita cukup menghitung hal-hal ini,\nas mungkin menjadi konvensi kita.

5164
04:57:13,021 --> 04:57:14,971
Mari kita gambarkan secara grafis.

5165
04:57:14,971 --> 04:57:17,351
Bukan dengan satu miliar persegi,\ntapi lebih sedikit dari itu.

5166
04:57:17,350 --> 04:57:19,670
Dan mari kita perbesar lebih jauh,\ndan pertimbangkan hal itu.

5167
04:57:19,670 --> 04:57:21,420
Pada titik\ncerita ini, mari kita abstrak

5168
04:57:21,420 --> 04:57:23,640
singkirkan semua perangkat keras,\ndan semua kabel kecil

5169
04:57:23,640 --> 04:57:27,990
dan anggap saja ingatan sebagai pengambilan\n

5170
04:57:27,991 --> 04:57:30,431
seperti mengambil sejumlah byte.

5171
04:57:30,431 --> 04:57:34,081
Jadi, misalnya, jika Anda ingin menyimpan\n

5172
04:57:34,080 --> 04:57:38,490
adalah 1 byte, mungkin disimpan\nat lokasi kiri atas ini

5173
04:57:38,491 --> 04:57:40,456
dari chip hitam memori ini.

5174
04:57:40,455 --> 04:57:44,550
Jika Anda ingin menyimpan sesuatu seperti\n

5175
04:57:44,550 --> 04:57:47,820
mungkin menggunakan empat byte tersebut,\n

5176
04:57:47,820 --> 04:57:49,480
berturut-turut, dalam hal ini.

5177
04:57:49,480 --> 04:57:53,530
Jika Anda ingin menyimpan long atau double,\n

5178
04:57:53,530 --> 04:57:55,650
Jadi saya mengisi\nkotak ini untuk mewakili

5179
04:57:55,651 --> 04:58:00,421
berapa banyak memori dan variabel yang diberikan\n

5180
04:58:00,420 --> 04:58:03,490
1, atau 4, atau 8, dalam hal ini, di sini.

5181
04:58:03,491 --> 04:58:06,421
Nah, dari sini, mari kita abstrak\namun jauh dari semua perangkat keras

5182
04:58:06,420 --> 04:58:08,580
dan benar-benar fokus pada\nmemori sebagai sebuah grid.

5183
04:58:08,580 --> 04:58:11,911
Atau, sebenarnya, seperti kanvas yang\nkita bisa melukiskan jenis data apa pun

5184
04:58:13,111 --> 04:58:16,861
Pada akhirnya, semua ini\n

5185
04:58:16,861 --> 04:58:20,761
Namun terserah Anda dan saya untuk membangun\nabstraksi di atas semua itu.

5186
04:58:20,760 --> 04:58:24,390
Hal-hal seperti angka sebenarnya,\nwarna, gambar, film, dan lainnya.

5187
04:58:24,390 --> 04:58:26,701
Tapi kita akan mulai\ndari tingkat yang lebih rendah, di sini, dulu.

5188
04:58:26,701 --> 04:58:30,210
Misalkan saya mempunyai program\nyang membutuhkan tiga bilangan bulat.

5189
04:58:30,210 --> 04:58:33,060
Sebuah program sederhana yang tujuan\ninhidupnya adalah menghitung rata-rata ketiganya

5190
04:58:33,061 --> 04:58:36,661
nilai pada ujian, atau semacamnya.

5191
04:58:36,661 --> 04:58:41,280
Misalkan ketiga skor Anda adalah\n

5192
04:58:42,405 --> 04:58:47,290
Mari kita tulis sebuah program yang\nmelakukan rata-rata seperti ini untuk kita.

5193
04:58:47,291 --> 04:58:49,121
Izinkan saya kembali ke VS Code, di sini.

5194
04:58:49,120 --> 04:58:52,530
Izinkan saya membuka file bernama score.c.

5195
04:58:52,530 --> 04:58:55,091
Biarkan saya menerapkan ini sebagai berikut.

5196
04:58:55,091 --> 04:59:00,120
Izinkan saya menyertakan stdio.h di\ntop, int main(void) seperti sebelumnya.

5197
04:59:00,120 --> 04:59:05,580
Lalu, di dalam main, izinkan saya\nmendeklarasikan skor 1, yaitu 72.

5198
04:59:08,251 --> 04:59:11,401
Lalu, skor ketiga, disebut\nskor 3, yang akan menjadi 33.

5199
04:59:11,401 --> 04:59:15,001
Sekarang, saya akan menggunakan printf untuk mencetak\n

5200
04:59:15,001 --> 04:59:16,780
dan saya dapat melakukan ini dengan\na beberapa cara berbeda.

5201
04:59:16,780 --> 04:59:22,111
Tapi saya akan mencetak %f, dan\n

5202
04:59:22,111 --> 04:59:28,021
ditambah skor 3, dibagi 3,\ntanda kurung tutup titik koma.

5203
04:59:28,021 --> 04:59:31,561
Beberapa aritmatika yang relatif sederhana untuk\n

5204
04:59:31,561 --> 04:59:34,831
jika saya penasaran berapa nilai rata-rata saya\n

5205
04:59:35,881 --> 04:59:39,877
Izinkan saya, sekarang, membuat skor.

5206
04:59:39,877 --> 04:59:43,501
Baiklah, jadi saya sudah\nmembuat kesalahan.

5207
04:59:43,501 --> 04:59:49,411
Namun yang ini, sebenarnya, berkaitan dengan\nmasalah kami, semoga saja

5208
04:59:49,411 --> 04:59:51,120
tidak akan terlalu sering bertemu.

5209
04:59:52,120 --> 04:59:55,620
Jadi digarisbawahi hingga skor 1, plus\n

5210
04:59:55,620 --> 05:00:00,510
Format menentukan tipe ganda, tetapi\n

5211
05:00:02,791 --> 05:00:04,691
Karena aritmatikanya\ntampaknya berhasil.

5212
05:00:05,190 --> 05:00:08,820
AUDIENCE: Jadi komputer sedang melakukan\n

5213
05:00:08,820 --> 05:00:13,521
hanya memberikan nilai di\nakhir karena, yah [Tak terdengar]

5214
05:00:14,471 --> 05:00:15,901
Dan kita akan kembali ke\nini secara lebih rinci

5215
05:00:15,901 --> 05:00:18,783
tapi, memang benar, apa yang terjadi di sini\n

5216
05:00:18,782 --> 05:00:20,740
tentu saja, karena saya\nmendefinisikannya di sini.

5217
05:00:20,741 --> 05:00:23,731
Dan saya membaginya dengan yang lain\nint, 3, tapi hasil tangkapannya

5218
05:00:23,730 --> 05:00:28,150
adalah, ingat bahwa C ketika melakukan matematika,\n

5219
05:00:28,151 --> 05:00:30,070
Namun bilangan bulat bukanlah\nnilai titik mengambang.

5220
05:00:30,070 --> 05:00:33,151
Jadi, jika Anda benar-benar ingin mendapatkan\nnilai rata-rata yang tepat untuk skor Anda

5221
05:00:33,151 --> 05:00:37,021
tanpa membuang sisanya,\n

5222
05:00:37,021 --> 05:00:39,690
ternyata, kita harus--

5223
05:00:42,690 --> 05:00:46,980
[TERTAWA] kita harus\n

5224
05:00:47,611 --> 05:00:50,491
Dan ada beberapa cara untuk\melakukannya tetapi cara termudah

5225
05:00:50,491 --> 05:00:52,801
untuk saat ini, saya akan melanjutkan\nadan melakukan ini di sini

5226
05:00:52,800 --> 05:00:55,620
Saya akan mengubah\ndibagi 3 menjadi membagi 3,0.

5227
05:00:55,620 --> 05:00:59,701
Karena ternyata, singkat cerita,\n

5228
05:00:59,701 --> 05:01:01,561
berpartisipasi dalam\ekspresi naritmatika

5229
05:01:01,561 --> 05:01:03,991
seperti ini adalah sesuatu\nseperti pelampung, sisanya

5230
05:01:03,991 --> 05:01:08,471
akan diperlakukan sebagai dipromosikan ke\na nilai floating point juga.

5231
05:01:08,471 --> 05:01:13,756
Jadi izinkan saya, sekarang, mengkompilasi ulang\nkode ini dengan membuat skor, Enter.

5232
05:01:13,756 --> 05:01:17,761
Kali ini berhasil, karena\nSaya memperlakukan pelampung sebagai pelampung.

5233
05:01:19,861 --> 05:01:24,411
Baiklah, rata-rata saya adalah\n59.33333 dan seterusnya.

5234
05:01:24,911 --> 05:01:27,600
Jadi perhitungannya, mungkin, sudah tepat.

5235
05:01:27,600 --> 05:01:30,480
Ketidaktepatan floating point\nper minggu lalu.

5236
05:01:30,480 --> 05:01:33,541
Namun mari kita pertimbangkan\ndesain program ini.

5237
05:01:33,541 --> 05:01:40,941
Apa yang buruk tentang hal itu, atau jika\n

5238
05:01:40,940 --> 05:01:43,740
apakah kita akan menyesali\ndesain program ini?

5239
05:01:43,741 --> 05:01:45,251
Apa yang mungkin tidak ideal di sini?

5240
05:01:54,625 --> 05:01:58,480
DAVID MALAN: Ya, jadi dalam hal ini,\n

5241
05:01:58,480 --> 05:02:01,400
Jadi, jika saya mendengar\nsalah, program ini

5242
05:02:01,401 --> 05:02:03,861
hanya akan memberi tahu\nsaya rata-rata spesifik ini.

5243
05:02:03,861 --> 05:02:05,991
Saya bahkan tidak menggunakan\nsesuatu seperti, masuk

5244
05:02:05,991 --> 05:02:09,051
atau mendapatkan float untuk mendapatkan tiga\nskor berbeda, jadi itu tidak bagus.

5245
05:02:09,050 --> 05:02:11,202
Dan misalkan kita menunggu\nnanti di semester ini

5246
05:02:11,203 --> 05:02:12,661
Saya pikir masalah lain bisa saja muncul.

5247
05:02:13,161 --> 05:02:15,280
HADIRIN: Hanya memikirkan\nsedikit suatu masalah

5248
05:02:15,280 --> 05:02:17,161
bahwa Anda tidak dapat menggunakan kembali nomor itu.

5249
05:02:17,161 --> 05:02:19,710
DAVID MALAN: Saya tidak dapat\nmenggunakan kembali nomor tersebut karena saya

5250
05:02:19,710 --> 05:02:23,348
belum menyimpan rata-ratanya di beberapa\n

5251
05:02:23,348 --> 05:02:25,890
merupakan masalah besar, namun tentu saja, jika\nsaya ingin menggunakannya kembali di tempat lain

5252
05:02:26,911 --> 05:02:29,286
Mari kita percepat lagi,\ndi semester nanti

5253
05:02:29,286 --> 05:02:31,651
Saya tidak hanya memiliki tiga\nnilai ujian atau nilai ujian

5254
05:02:34,951 --> 05:02:36,562
HADIRIN: Ya, jika Anda\tidak ingin harus mengambil

5255
05:02:36,562 --> 05:02:39,161
rata-rata sejumlah\nskor selain 3, [Tak terdengar]

5256
05:02:39,161 --> 05:02:42,370
DAVID MALAN: Ya, saya sudah mengurutkan\nof, membatasi program ini menjadi 3.

5257
05:02:42,370 --> 05:02:45,202
Dan sejujurnya, ini agak\nhampir seperti salin tempel.

5258
05:02:45,203 --> 05:02:48,161
Padahal variabelnya ya, punya\n

5259
05:02:49,061 --> 05:02:51,491
Bayangkan melakukan ini untuk\nseluruh buku nilai di sebuah kelas.

5260
05:02:51,491 --> 05:02:57,251
Harus mencetak skor 4, 5, 6, 11 10, 12,\n

5261
05:02:57,251 --> 05:02:59,681
Anda dapat membayangkan\nbetapa jeleknya kode tersebut dimulai

5262
05:02:59,681 --> 05:03:02,896
untuk mendapatkan jika Anda hanya mendefinisikan variabel\n

5263
05:03:02,896 --> 05:03:07,001
Ternyata, ada\ncara yang lebih baik, dalam bahasa seperti C

5264
05:03:07,001 --> 05:03:11,501
jika Anda ingin menyimpan beberapa\nnilai dalam memori itu

5265
05:03:11,501 --> 05:03:13,300
kebetulan memiliki tipe data yang sama.

5266
05:03:13,300 --> 05:03:14,681
Mari kita lihat kembali\nat kenangan ini, di sini

5267
05:03:14,681 --> 05:03:16,806
untuk melihat seperti apa\nhal-hal ini dalam ingatan.

5268
05:03:16,806 --> 05:03:18,431
Inilah kisi-kisi memori itu.

5269
05:03:18,431 --> 05:03:20,710
Masing-masing penarikan ini mewakili satu byte.

5270
05:03:20,710 --> 05:03:23,951
Untuk lebih jelasnya, jika saya menyimpan\nskor 1 di memori terlebih dahulu

5271
05:03:23,951 --> 05:03:25,390
berapa byte yang dibutuhkan?

5272
05:03:28,690 --> 05:03:32,838
Jadi saya mungkin akan mendapat skor 1 saat\nmengisi bagian memori ini.

5273
05:03:32,838 --> 05:03:36,131
Terserah komputer apakah itu\n

5274
05:03:36,131 --> 05:03:39,550
Saya hanya menjaga kebersihan gambar\n

5275
05:03:39,550 --> 05:03:42,341
Jika saya mendeklarasikan\nvariabel lain, yang disebut skor 2

5276
05:03:42,341 --> 05:03:44,991
mungkin berakhir di sana,\njuga menghabiskan 4 byte.

5277
05:03:44,991 --> 05:03:47,591
Dan kemudian skor 3 mungkin berakhir di sini.

5278
05:03:47,591 --> 05:03:51,140
Jadi itu hanya mewakili apa yang terjadi\n

5279
05:03:51,140 --> 05:03:54,940
Namun secara teknis, untuk\nlebih jelasnya, per minggu 0, apa itu

5280
05:03:54,940 --> 05:03:58,841
benar-benar disimpan di komputer\n

5281
05:03:58,841 --> 05:04:03,611
Total 32, dalam hal ini,\nkarena 32 bit sama dengan 4 byte.

5282
05:04:03,611 --> 05:04:07,541
Namun sekali lagi, berpikir dan melihatnya menjadi membosankan\ndengan cepat

5283
05:04:09,021 --> 05:04:11,381
Jadi secara umum kita akan mengabstraksi\nini hanya dengan menggunakan

5284
05:04:11,381 --> 05:04:13,811
angka desimal, dalam hal ini, sebagai gantinya.

5285
05:04:13,811 --> 05:04:18,431
Namun mungkin ada cara yang lebih baik untuk\n

5286
05:04:18,431 --> 05:04:21,761
tapi mungkin empat, mungkin,\nlima, mungkin 10, mungkin, lebih

5287
05:04:21,760 --> 05:04:27,370
dengan mendeklarasikan satu variabel untuk disimpan\n

5288
05:04:27,370 --> 05:04:30,010
atau lebih variabel individual.

5289
05:04:30,010 --> 05:04:34,510
Cara melakukan ini adalah dengan\nsesuatu yang disebut array.

5290
05:04:34,510 --> 05:04:42,580
Array adalah tipe data lain yang\n

5291
05:04:42,580 --> 05:04:45,240
dari jenis yang sama berturut-turut.

5292
05:04:45,241 --> 05:04:46,491
Artinya, secara berdekatan.

5293
05:04:46,491 --> 05:04:54,101
Jadi array memungkinkan Anda membuat\n

5294
05:04:54,100 --> 05:04:56,860
atau bahkan lebih dari\nitu, tapi jelaskan

5295
05:04:56,861 --> 05:05:00,651
semua menggunakan variabel\nnama yang sama, satu nama yang sama.

5296
05:05:00,651 --> 05:05:05,001
Jadi misalnya, jika, untuk satu\n

5297
05:05:05,001 --> 05:05:10,061
tapi saya tidak ingin menyatakannya secara sembarangan\n

5298
05:05:11,221 --> 05:05:13,390
Ini adalah sintaksis\nbaru pertama hari ini

5299
05:05:13,390 --> 05:05:15,550
tanda kurung siku\nyang kita lihat sekarang.

5300
05:05:15,550 --> 05:05:21,400
Baris kode ini\nsmirip dengan skor int 1 titik koma

5301
05:05:21,401 --> 05:05:24,621
atau int skor 1 sama dengan 72 titik koma.

5302
05:05:24,620 --> 05:05:30,040
Baris kode ini mendeklarasikan untuk\n

5303
05:05:30,041 --> 05:05:33,521
Dan array itu akan\nmenyimpan tiga bilangan bulat.

5304
05:05:34,030 --> 05:05:39,251
Karena tipe\narraynya adalah int, di sini.

5305
05:05:39,251 --> 05:05:42,370
Tanda kurung siku memberi tahu\nkomputer berapa banyak int yang Anda inginkan.

5306
05:05:43,241 --> 05:05:45,401
Dan namanya tentu saja skor.

5307
05:05:45,401 --> 05:05:47,801
Yang mana, dalam bahasa Inggris, saya\nsengaja mempluralkannya

5308
05:05:47,800 --> 05:05:52,361
sehingga saya bisa mendeskripsikan array ini\n

5309
05:05:52,361 --> 05:05:57,230
Jadi jika saya ingin sekarang menetapkan nilai\n

5310
05:05:59,021 --> 05:06:04,421
Saya dapat mengatakan, skor dalam kurung 0 sama dengan\n

5311
05:06:04,420 --> 05:06:06,450
dan skor braket 2 sama dengan 33.

5312
05:06:06,451 --> 05:06:08,201
Satu-satunya hal yang aneh\n memang ada

5313
05:06:08,201 --> 05:06:10,091
tanda kurung siku yang masih baru.

5314
05:06:10,091 --> 05:06:14,081
Namun kami juga, perhatikan,\n0 mengindeks sesuatu.

5315
05:06:14,080 --> 05:06:16,605
Indeks nol berarti\nmulai menghitung dari 0.

5316
05:06:16,605 --> 05:06:18,730
Ketika kita telah membicarakan\nitu sebelumnya, empat loop kita

5317
05:06:18,730 --> 05:06:20,260
umumnya tidak terindeks.

5318
05:06:20,260 --> 05:06:24,130
Array di C tidak diindeks.

5319
05:06:24,131 --> 05:06:25,691
Dan Anda tidak punya pilihan untuk itu.

5320
05:06:25,690 --> 05:06:28,810
Anda tidak dapat mulai menghitung pada 1\nin array karena Anda menginginkannya

5321
05:06:28,811 --> 05:06:31,091
Anda akan mengorbankan\tidak satupun elemennya.

5322
05:06:31,091 --> 05:06:33,881
Anda harus memulai dalam\narrays menghitung dari 0.

5323
05:06:33,881 --> 05:06:37,390
Jadi di luar konteks, ini\ndotidak menyelesaikan masalah

5324
05:06:37,390 --> 05:06:39,460
tapi, pastinya, hal itu\nakan terjadi setelah kita memiliki lebih banyak

5325
05:06:39,460 --> 05:06:41,170
daripada, bahkan, tiga skor di sini.

5326
05:06:41,170 --> 05:06:44,010
Sebenarnya, izinkan saya mengubah\nprogram ini sedikit.

5327
05:06:45,710 --> 05:06:48,280
Dan hapus tiga baris ini, di sini.

5328
05:06:48,280 --> 05:06:51,341
Dan ganti dengan variabel\nscores itu

5329
05:06:51,341 --> 05:06:54,401
siap untuk menyimpan tiga bilangan bulat total.

5330
05:06:54,401 --> 05:06:58,391
Lalu, inisialisasi sebagai\nberikut, skor braket 0 adalah 72

5331
05:06:58,390 --> 05:07:02,560
seperti sebelumnya, skor braket 1\nakan menjadi 73, skor braket 2

5332
05:07:04,001 --> 05:07:08,329
Perhatikan, saya tidak perlu mengatakan\nint sebelum baris-baris ini

5333
05:07:08,329 --> 05:07:10,121
karena itu sudah\ndiurus

5334
05:07:10,120 --> 05:07:14,830
bagi saya di jalur 5, di mana saya sudah\n

5335
05:07:17,591 --> 05:07:21,280
Sekarang, di sini, kode ini memerlukan\n

5336
05:07:21,280 --> 05:07:23,560
tiga variabel, skor 1, 2, dan 3.

5337
05:07:23,561 --> 05:07:28,211
Saya memiliki 1 variabel, tetapi\ndapat saya indeks.

5338
05:07:28,210 --> 05:07:33,010
Kalau begitu, saya akan melakukan skor\n

5339
05:07:33,010 --> 05:07:37,630
plus skor braket 2, yaitu\n

5340
05:07:37,631 --> 05:07:39,161
mengembalikan tiga bilangan bulat itu kepada saya.

5341
05:07:39,161 --> 05:07:42,120
Namun perhatikan, saya menggunakan nama\nvariabel yang sama, setiap saat.

5342
05:07:42,120 --> 05:07:45,330
Dan sekali lagi, saya menggunakan kotak baru ini\n

5343
05:07:45,330 --> 05:07:50,850
indeks ke dalam array untuk mendapatkan\n pertama

5344
05:07:50,850 --> 05:07:53,100
dan kemudian, melakukannya lagi di sini.

5345
05:07:53,100 --> 05:07:56,167
Sekarang, program ini, masih belum\n

5346
05:07:56,168 --> 05:07:58,501
Saya masih hanya bisa menyimpan tiga\nskor, tapi kami akan kembali

5347
05:07:58,501 --> 05:08:00,190
untuk sesuatu seperti itu tidak lama lagi.

5348
05:08:00,190 --> 05:08:03,210
Namun untuk saat ini, kami baru memperkenalkan\n

5349
05:08:03,210 --> 05:08:09,240
dimana, sekarang saya dapat menyimpan beberapa\nnilai dalam variabel yang sama.

5350
05:08:09,241 --> 05:08:11,371
Baiklah, mari kita tingkatkan ini sedikit lagi.

5351
05:08:11,370 --> 05:08:14,920
Daripada susah payah mengkodekan skor ini,\n

5352
05:08:14,920 --> 05:08:19,050
mari kita gunakan get int untuk menanyakan\nskor kepada pengguna.

5353
05:08:19,050 --> 05:08:22,591
Mari kita gunakan get int untuk\menanyakan skor lain kepada pengguna.

5354
05:08:22,591 --> 05:08:25,800
Mari kita gunakan get int untuk menanyakan\nskor ketiga kepada pengguna

5355
05:08:25,800 --> 05:08:28,661
menyimpannya di\nlokasi masing-masing.

5356
05:08:28,661 --> 05:08:34,080
Dan, sekarang, jika saya melanjutkan dan menyimpan\n

5357
05:08:35,161 --> 05:08:38,251
Sekarang kesalahan ini seharusnya\nsedikit familiar.

5358
05:08:41,010 --> 05:08:42,135
Izinkan saya memberi waktu sebentar kepada orang-orang.

5359
05:08:45,361 --> 05:08:48,480
Itu tidak disengaja, jadi tetap saja\n

5360
05:08:50,580 --> 05:08:53,830
Sekarang, saya akan kembali ke bawah\n

5361
05:08:54,330 --> 05:08:55,930
Kami kembali berbisnis, ./scores.

5362
05:08:55,931 --> 05:08:58,181
Kini, program ini menjadi\na sedikit lebih menarik.

5363
05:08:58,181 --> 05:09:02,280
Jadi mungkin tahun ini lebih baik dan saya dapat\n

5364
05:09:05,161 --> 05:09:06,631
Jadi sekarang, ini sedikit lebih dinamis.

5365
05:09:06,631 --> 05:09:07,531
Ini sedikit lebih menarik.

5366
05:09:07,530 --> 05:09:10,238
Tapi itu masih membatasi jumlahnya\n

5367
05:09:10,239 --> 05:09:15,001
Namun sekarang, saya telah memperkenalkan yang lain,\n

5368
05:09:15,001 --> 05:09:18,368
Ada ungkapan ini dalam pemrograman,\n

5369
05:09:18,368 --> 05:09:20,161
[SNIFFS AIR] ada yang\nbaunya agak aneh.

5370
05:09:20,161 --> 05:09:24,811
Dan ada sesuatu yang aneh di sini\n

5371
05:09:24,811 --> 05:09:29,341
Apakah ada yang melihat peluang untuk\n

5372
05:09:29,341 --> 05:09:32,491
jika tujuanku tetap mendapatkan tiga\n

5373
05:09:32,491 --> 05:09:34,691
tanpa baunya [SNIFF] agak buruk?

5374
05:09:35,190 --> 05:09:37,200
AUDIENCE: [Tak terdengar] menggunakan 4 loop?

5375
05:09:37,201 --> 05:09:40,219
Dengan begitu Anda tidak perlu menyalin\nan menempelkan semua skor tersebut.

5376
05:09:40,219 --> 05:09:41,421
DAVID MALAN: Ya, tepat sekali.

5377
05:09:41,420 --> 05:09:43,282
Baris kode tersebut\nhampir sama.

5378
05:09:43,282 --> 05:09:45,740
Dan sejujurnya, satu-satunya\nyang berubah adalah angkanya

5379
05:09:45,741 --> 05:09:47,361
dan itu hanya bertambah 1.

5380
05:09:47,361 --> 05:09:49,591
Kami memiliki semua landasan\nuntuk melakukan hal ini dengan lebih baik.

5381
05:09:49,591 --> 05:09:51,390
Jadi izinkan saya melanjutkan dan memperbaikinya.

5382
05:09:55,980 --> 05:10:00,411
Jadi untuk int saya mendapat 0, i\nkurang dari 3, i plus plus.

5383
05:10:00,411 --> 05:10:03,320
Lalu, di dalam 4 loop ini,\nSaya dapat menyaring ketiganya

5384
05:10:03,320 --> 05:10:05,120
dari baris-baris tersebut menjadi\nsesuatu yang lebih umum

5385
05:10:05,120 --> 05:10:10,790
seperti braket skor, saya sama dengan dapatkan\n

5386
05:10:10,791 --> 05:10:13,166
sekali, melalui get int, untuk mendapatkan skor.

5387
05:10:13,166 --> 05:10:16,261
Jadi di sinilah array\nmulai menjadi cukup kuat.

5388
05:10:16,260 --> 05:10:18,260
Anda tidak perlu melakukan hard\ncode, secara harfiah

5389
05:10:18,260 --> 05:10:20,722
ketik semua\nangka ajaib ini seperti 0, 1, dan 2.

5390
05:10:20,723 --> 05:10:22,431
Anda dapat mulai melakukan\nit secara terprogram

5391
05:10:24,030 --> 05:10:25,611
Jadi sekarang, saya sudah memperketat segalanya.

5392
05:10:25,611 --> 05:10:28,491
Saya sekarang, secara dinamis, mendapatkan\ntiga skor berbeda

5393
05:10:28,491 --> 05:10:31,027
tetapi menempatkannya di tiga\ndilokasi berbeda.

5394
05:10:31,026 --> 05:10:34,730
Jadi, pada akhirnya, program ini\n

5395
05:10:34,730 --> 05:10:41,780
Buatlah skor, ./scores, dan 100, 99,\n

5396
05:10:41,780 --> 05:10:43,700
Tapi desainnya juga sedikit lebih baik.

5397
05:10:43,701 --> 05:10:45,620
Jika saya benar-benar ingin\nmengutuk, ada sesuatu

5398
05:10:45,620 --> 05:10:47,361
masih sedikit berbau di sini.

5399
05:10:47,361 --> 05:10:51,800
Fakta yang saya miliki, ini\n

5400
05:10:51,800 --> 05:10:54,150
harus sama dengan nomor ini di sini.

5401
05:10:54,151 --> 05:10:56,431
Jika tidak, siapa yang tahu\napa yang akan terjadi.

5402
05:10:56,431 --> 05:10:58,640
Jadi, apa yang mungkin menjadi\nsolusinya, per minggu lalu

5403
05:10:58,640 --> 05:11:01,221
untuk membersihkan kode itu lebih lanjut juga?

5404
05:11:01,221 --> 05:11:04,011
AUDIENCE: [Tak terdengar]\nkebijaksanaan pengguna

5405
05:11:04,010 --> 05:11:06,002
berapa banyak skor masukan [Tak terdengar].

5406
05:11:06,003 --> 05:11:09,050
DAVID MALAN: Oke, jadi kita bisa berangkat\n

5407
05:11:09,050 --> 05:11:11,760
Jadi sebenarnya kami bisa\melakukan sesuatu seperti ini.

5408
05:11:11,760 --> 05:11:13,460
Biarkan saya mengambil ini beberapa langkah ke depan.

5409
05:11:13,460 --> 05:11:20,490
Izinkan saya mengatakan sesuatu seperti, int n mendapat\n

5410
05:11:20,491 --> 05:11:24,861
maka saya bisa mengubahnya\n

5411
05:11:24,861 --> 05:11:27,230
dan, tentu saja, membuat\nkeseluruhan program menjadi dinamis?

5412
05:11:27,230 --> 05:11:29,931
Tanyakan pada manusia sudah berapa ulangan\nsemester ini?

5413
05:11:29,931 --> 05:11:31,761
Lalu, Anda dapat mengetik\nsetiap skor tersebut

5414
05:11:31,760 --> 05:11:33,968
karena loop akan\nberulang berkali-kali.

5415
05:11:33,969 --> 05:11:37,281
Lalu Anda akan mendapatkan rata-rata\ndari satu pengujian, dua pengujian, tiga--

5416
05:11:37,280 --> 05:11:41,780
ya, kalah lagi-- atau berapa pun\nskor yang sebenarnya

5417
05:11:41,780 --> 05:11:45,021
ditentukan oleh pengguna Ya, pertanyaan?

5418
05:11:45,021 --> 05:11:50,026
AUDIENCE: Berapa banyak bit atau\nbyte yang digunakan dalam sebuah array?

5419
05:11:50,026 --> 05:11:52,320
DAVID MALAN: Berapa\nbyte yang digunakan dalam sebuah array?

5420
05:11:52,320 --> 05:11:56,784
AUDIENCE: [Tak terdengar] maksud dari\melakukan ini adalah untuk menyelamatkan [Tak terdengar]

5421
05:11:56,784 --> 05:11:59,760
DAVID MALAN: Jadi tujuan\nan array bukan untuk menghemat ruang.

5422
05:11:59,760 --> 05:12:03,270
Ini untuk menghilangkan\nbeberapa nama variabel

5423
05:12:03,271 --> 05:12:05,161
karena itu menjadi sangat berantakan dengan cepat.

5424
05:12:05,161 --> 05:12:09,241
Jika Anda memiliki skor 1, skor 2,\nskor 3, titik, titik, titik, skor 99

5425
05:12:09,241 --> 05:12:12,361
itu, misalnya, 99 variabel\nberbeda, secara potensial

5426
05:12:12,361 --> 05:12:18,421
sehingga Anda dapat menciutkannya menjadi satu\nvariabel yang memiliki 99 lokasi.

5427
05:12:18,420 --> 05:12:20,490
Pada indeks atau indeks yang berbeda.

5428
05:12:20,491 --> 05:12:22,831
Seperti yang dikatakan seseorang,\nindeks untuk sebuah array

5429
05:12:22,830 --> 05:12:25,016
adalah apa pun yang ada dalam tanda kurung siku.

5430
05:12:35,820 --> 05:12:37,541
DAVID MALAN: Jadi itu pertanyaan yang bagus.

5431
05:12:37,541 --> 05:12:39,631
Jadi jika Anda-- Saya menggunakan\nints untuk semuanya--

5432
05:12:39,631 --> 05:12:41,820
dan sejujurnya, kami tidak terlalu membutuhkan int untuk mencetak skor

5433
05:12:41,820 --> 05:12:46,030
karena saya tidak mungkin mendapatkan\n

5434
05:12:46,030 --> 05:12:47,880
Jadi Anda bisa menggunakan\ntipe data yang berbeda.

5435
05:12:47,881 --> 05:12:50,548
Dan daftar yang ada di layar,\sebelumnya, bukanlah semuanya.

5436
05:12:50,547 --> 05:12:54,030
Ada tipe data yang disebut short,\nyang lebih pendek dari int

5437
05:12:54,030 --> 05:12:59,111
Anda bisa, secara teknis, menggunakan char, di\n

5438
05:12:59,111 --> 05:13:01,201
Secara umum, pada\ntahun 2021, ini

5439
05:13:01,201 --> 05:13:05,251
cenderung terlalu optimal--\tidak terlalu mengoptimalkan keputusan.

5440
05:13:05,251 --> 05:13:07,201
Semua orang hanya menggunakan\nints, meskipun tidak ada seorang pun

5441
05:13:07,201 --> 05:13:10,561
akan mendapatkan nilai ujian sebesar 2\n

5442
05:13:11,521 --> 05:13:14,512
Bertahun-tahun yang lalu, ingatan itu mahal.

5443
05:13:14,512 --> 05:13:16,470
Dan semua\ninsting Anda pasti akan seperti itu

5444
05:13:16,471 --> 05:13:18,961
tepat karena ingatannya sangat ketat.

5445
05:13:18,960 --> 05:13:21,190
Namun, saat ini, kami tidak terlalu mengkhawatirkan hal tersebut.

5446
05:13:21,690 --> 05:13:26,816
HADIRIN: Saya mempunyai pertanyaan\ntentang kesalahan [TIDAK TERDENGAR]..

5447
05:13:26,816 --> 05:13:30,865
Mungkinkah-- saat Anda melakukan\nmasalah hash pada kumpulan masalah--

5448
05:13:30,866 --> 05:13:34,271
DAVID MALAN: Jadi apa\ndperbedaan antara membagi dua int

5449
05:13:34,271 --> 05:13:36,640
dan tidak mendapatkan kesalahan, seperti\nyang mungkin Anda alami

5450
05:13:36,640 --> 05:13:40,181
dalam program seperti uang tunai,\nversus membagi dua int

5451
05:13:40,181 --> 05:13:42,411
dan mendapatkan kesalahan\nseperti yang saya alami beberapa saat yang lalu?

5452
05:13:42,411 --> 05:13:46,541
Masalah dengan skenario yang saya buat\n

5453
05:13:46,541 --> 05:13:52,241
Dan saya menyuruh printf untuk menggunakan %f,\n

5454
05:13:52,241 --> 05:13:54,841
cara membagi bilangan bulat dengan bilangan bulat lain.

5455
05:13:54,841 --> 05:13:57,190
Jadi printf-lah yang meneriaki saya.

5456
05:13:57,190 --> 05:14:00,190
Saya rasa dalam skenario ini Anda\n

5457
05:14:00,190 --> 05:14:03,440
printf tidak terlibat dalam\nbaris kode tertentu.

5458
05:14:03,440 --> 05:14:05,126
Jadi itulah perbedaannya.

5459
05:14:05,920 --> 05:14:09,370
Jadi, sekarang kita memiliki\nkemampuan untuk membuat array.

5460
05:14:09,370 --> 05:14:11,771
Dan sebuah array dapat menyimpan banyak nilai.

5461
05:14:11,771 --> 05:14:15,710
Lalu, apa yang bisa kami lakukan, itu lebih dari itu\n

5462
05:14:16,210 --> 05:14:18,490
Baiklah, mari kita ambil satu langkah lebih jauh.

5463
05:14:18,491 --> 05:14:25,391
Berbeda dengan hanya menyimpan 72, 73, 33 atau\n

5464
05:14:25,390 --> 05:14:30,190
karena sekali lagi, sebuah array memberi Anda satu\n

5465
05:14:30,190 --> 05:14:32,620
atau indeks di dalamnya,\ntanda kurung 0, tanda kurung 1

5466
05:14:32,620 --> 05:14:35,591
tanda kurung 2 ke atas, jika\nlebih besar dari itu.

5467
05:14:35,591 --> 05:14:40,361
Sekarang mari kita mulai mempertimbangkan sesuatu\n

5468
05:14:40,361 --> 05:14:43,091
Karakter, masing-masing berukuran 1 byte,\njadi lebih kecil lagi

5469
05:14:43,091 --> 05:14:44,350
mereka memakan lebih sedikit ruang.

5470
05:14:44,350 --> 05:14:46,308
Dan tentu saja, jika saya ingin\nmengatakan pesan seperti

5471
05:14:46,309 --> 05:14:48,460
hai saya bisa menggunakan tiga variabel.

5472
05:14:48,460 --> 05:14:52,780
Jika saya ingin suatu program dicetak,\nhai, tanda seru H-I

5473
05:14:52,780 --> 05:14:57,490
Tentu saja saya dapat menyimpannya di\n

5474
05:14:57,491 --> 05:15:00,971
Dan mari kita berdiskusi,\n

5475
05:15:00,971 --> 05:15:03,941
Izinkan saya membuat\nprogram baru, sekarang, dalam VS Code.

5476
05:15:03,940 --> 05:15:07,181
Kali ini, saya akan menyebutnya hi.c.

5477
05:15:07,181 --> 05:15:09,911
Dan saya tidak akan repot\ndengan perpustakaan CS50.

5478
05:15:09,911 --> 05:15:11,920
Saya hanya memerlukan yang standar\nI/O, untuk saat ini.

5479
05:15:13,480 --> 05:15:16,661
Lalu, di dalam main, saya pergi\n

5480
05:15:16,661 --> 05:15:20,021
Dan, mudah-mudahan, ini sudah\nmenangkap Anda sebagai ide yang buruk.

5481
05:15:20,021 --> 05:15:22,570
Namun kami akan menempuh\njalan ini untuk sementara

5482
05:15:22,570 --> 05:15:26,561
dengan c1, dan c2, dan, akhirnya, c3.

5483
05:15:26,561 --> 05:15:29,921
Menyimpan setiap karakter dalam\nfrasa yang ingin saya cetak

5484
05:15:29,920 --> 05:15:33,710
dan saya akan mencetak ini\nin dengan cara yang berbeda dari biasanya.

5485
05:15:35,140 --> 05:15:38,740
Dan secara umum, kami telah menangani\n

5486
05:15:38,741 --> 05:15:45,861
Tapi %c, %c, %c, izinkan saya mencetak\n

5487
05:15:45,861 --> 05:15:48,681
Jadi, semacam cara bodoh\nmencetak sebuah string.

5488
05:15:48,681 --> 05:15:51,201
Jadi kami sudah mempunyai solusi\nuntuk masalah ini minggu lalu.

5489
05:15:51,201 --> 05:15:54,800
Tapi mari kita lihat apa yang ada\n

5490
05:15:58,736 --> 05:16:00,611
Namun, sekali lagi, kami bisa\nmelakukannya minggu lalu

5491
05:16:00,611 --> 05:16:03,791
dengan string dan hanya satu\nvariabel, atau bahkan, 0, pada saat itu.

5492
05:16:03,791 --> 05:16:07,480
Namun mari kita mulai mengonversi\nkarakter-karakter ini

5493
05:16:07,480 --> 05:16:12,010
dengan persamaan numeriknya\n

5494
05:16:12,010 --> 05:16:16,570
Izinkan saya memodifikasi %c ini,\nhanya untuk bersenang-senang, menjadi milik %i.

5495
05:16:16,570 --> 05:16:20,440
Dan izinkan saya menambahkan beberapa spasi sehingga\n

5496
05:16:20,440 --> 05:16:24,610
Izinkan saya, sekarang, mengkompilasi ulang\nhi, dan izinkan saya menjalankannya kembali.

5497
05:16:24,611 --> 05:16:27,161
Coba tebak, apa yang seharusnya\nsaya lihat di layar sekarang?

5498
05:16:30,960 --> 05:16:32,296
HADIRIN: Nilai-nilai ASCII?

5499
05:16:32,296 --> 05:16:34,020
DAVID MALAN: Nilai-nilai ASCII.

5500
05:16:34,021 --> 05:16:36,480
Dan memang disengaja\nSaya tetap menggunakan kata yang sama

5501
05:16:36,480 --> 05:16:42,510
hai, karena memang seharusnya begitu, semoga saja,\n

5502
05:16:42,510 --> 05:16:46,380
Artinya, c mengetahui tentang\n

5503
05:16:46,381 --> 05:16:48,581
dan dapat melakukan konversi ini\nuntuk kami secara otomatis.

5504
05:16:48,580 --> 05:16:51,930
Dan sepertinya hal ini dilakukan\nsecara implisit untuk kita.

5505
05:16:51,931 --> 05:16:55,261
Perhatikan bahwa c1, c2 dan\nc3 jelas merupakan karakter

5506
05:16:55,260 --> 05:16:58,680
tetapi printf mampu menoleransi\nmencetaknya sebagai bilangan bulat.

5507
05:16:58,681 --> 05:17:03,131
Jika saya benar-benar ingin tampilannya bertele-tele,\n

5508
05:17:03,131 --> 05:17:05,581
dikenal sebagai typecasting,\nyang sebenarnya bisa saya lakukan

5509
05:17:05,580 --> 05:17:10,870
mengonversi satu tipe data ke tipe data lainnya,\n

5510
05:17:10,870 --> 05:17:14,161
Dan kita melihatnya di minggu 0,\nkarakter, atau karakter

5511
05:17:14,161 --> 05:17:17,760
hanyalah angka, seperti 72, 73, dan 33.

5512
05:17:17,760 --> 05:17:21,940
Jadi saya bisa menggunakan tanda kurung ini\n

5513
05:17:21,940 --> 05:17:26,883
[TERTAWA] tiga karakter menjadi\ntiga bilangan bulat.

5514
05:17:26,883 --> 05:17:28,800
Jadi itulah yang saya maksud\nmengetik pertama kali.

5515
05:17:30,061 --> 05:17:33,541
Jadi tanda kurung, int,\nkata tanda kurung tutup

5516
05:17:33,541 --> 05:17:39,101
ambil variabel apa pun setelah ini,\n

5517
05:17:39,100 --> 05:17:42,900
Efeknya pun tidak akan berbeda,\n

5518
05:17:42,901 --> 05:17:49,171
lalu menjalankan ./hi masih berfungsi sama,\n

5519
05:17:49,920 --> 05:17:53,520
Dan kita bisa melakukan ini sepanjang hari,\nchars ke int, float ke int

5520
05:17:54,510 --> 05:17:56,148
Terkadang, itu setara.

5521
05:17:56,149 --> 05:17:58,066
Di lain waktu, Anda\nkehilangan informasi.

5522
05:17:58,065 --> 05:18:01,530
Melakukan perjalanan ke\nint, secara intuitif

5523
05:18:01,530 --> 05:18:04,050
akan membuang semuanya\nsetelah koma desimal

5524
05:18:04,050 --> 05:18:06,940
karena int tidak memiliki titik desimal.

5525
05:18:06,940 --> 05:18:09,360
Namun, untuk saat ini, saya akan\nmemutar ulang ke versi ini

5526
05:18:09,361 --> 05:18:13,411
yang baru saja melakukan konversi\ntipe implisit, atau transmisi implisit

5527
05:18:13,411 --> 05:18:17,611
hanya untuk menunjukkan bahwa kita memang bisa,\n

5528
05:18:18,210 --> 05:18:20,630
Biarkan saya melanjutkan dan melakukan\nini, sekarang, dalam minggu pertama.

5529
05:18:21,631 --> 05:18:24,466
Mari kita lakukan printf, quote-unquote--

5530
05:18:24,466 --> 05:18:28,890
Sebenarnya, mari kita lakukan ini, string\ns sama dengan kutipan-tanda kutip hai

5531
05:18:28,890 --> 05:18:33,940
lalu mari kita lakukan printf\n sederhana

5532
05:18:33,940 --> 05:18:36,780
Jadi sekarang saya kembali ke\nminggu lalu, saat kita memulai cerita ini

5533
05:18:36,780 --> 05:18:40,920
tapi Anda akan menyadarinya, jika kita\nterus bermain-main dengan ini--

5534
05:18:43,120 --> 05:18:47,730
Oh, dan izinkan saya memperkenalkan perpustakaan C50\n

5535
05:18:47,730 --> 05:18:50,521
Biarkan saya melanjutkan dan\nkompilasi ulang, jalankan ulang ini

5536
05:18:50,521 --> 05:18:52,529
sepertinya kita sedang membuat kode dalam lingkaran, di sini.

5537
05:18:52,528 --> 05:18:55,070
Misalnya, saya baru saja melakukan hal yang sama\ndengan berbagai cara dan cara yang berbeda.

5538
05:18:55,070 --> 05:18:57,661
Tapi jelas ada\nan kesetaraan

5539
05:18:57,661 --> 05:19:01,239
antara urutan karakter dan string.

5540
05:19:01,239 --> 05:19:03,031
Dan jika Anda melakukannya dengan\ncara yang benar-benar bertele-tele, Anda

5541
05:19:03,030 --> 05:19:07,650
memiliki tiga variabel berbeda, c1, c2,\n

5542
05:19:07,651 --> 05:19:12,131
atau Anda bisa mengolah semuanya bersama-sama\n

5543
05:19:12,131 --> 05:19:16,291
Namun ternyata\nstring sebenarnya ada

5544
05:19:16,291 --> 05:19:22,320
diimplementasikan oleh komputer\nin dengan cara yang sudah tidak asing lagi.

5545
05:19:22,320 --> 05:19:28,643
String apa yang sebenarnya ada\na dari poin cerita ini?

5546
05:19:28,643 --> 05:19:29,850
Ke mana kita akan pergi dengan ini?

5547
05:19:29,850 --> 05:19:31,183
Izinkan saya mencoba melihat lebih jauh ke belakang.

5548
05:19:32,611 --> 05:19:34,861
AUDIENCE: Bisakah string seperti\nini berupa array karakter?

5549
05:19:34,861 --> 05:19:37,671
DAVID MALAN: Ya, sebuah string\nmungkin saja, dan memang benar, adil

5550
05:19:39,061 --> 05:19:41,451
Jadi minggu lalu kami menganggap\nganggap bahwa string itu ada.

5551
05:19:41,451 --> 05:19:43,791
Secara teknis, string memang ada,\nnamun string tersebut diimplementasikan

5552
05:19:43,791 --> 05:19:47,331
sebagai array karakter,\nyang sebenarnya terbuka

5553
05:19:47,330 --> 05:19:50,030
beberapa kemungkinan menarik bagi kami.

5554
05:19:50,030 --> 05:19:52,560
Karena, coba saya lihat, coba\nsaya lihat apakah saya bisa melakukan ini.

5555
05:19:52,561 --> 05:19:55,820
Izinkan saya mencoba mencetak,\nsekarang, tiga bilangan bulat lagi.

5556
05:19:55,820 --> 05:20:01,791
Tetapi jika string s hanyalah sebuah array, seperti yang Anda\n

5557
05:20:01,791 --> 05:20:04,021
s braket 1, dan s braket 2.

5558
05:20:04,021 --> 05:20:07,911
Jadi mungkin saya bisa mulai mencari\nke dalam string

5559
05:20:07,911 --> 05:20:09,890
meskipun kita tidak\melakukannya minggu lalu, jadi aku

5560
05:20:09,890 --> 05:20:11,521
dapat mencapai nilai-nilai individual tersebut.

5561
05:20:11,521 --> 05:20:15,530
Jadi sapa, ./hai dan,\nvoila, ini dia lagi.

5562
05:20:15,530 --> 05:20:20,468
Sama saja 72, 73, 33, tapi\nsekarang, saya kira-kira, semoga saja

5563
05:20:20,469 --> 05:20:22,761
seperti, memikirkan\nfakta itu, oke

5564
05:20:22,760 --> 05:20:25,911
string hanyalah array\nkarakter, dan array, Anda

5565
05:20:25,911 --> 05:20:29,221
dapat mengindeksnya menggunakan\nnotasi tanda kurung siku baru ini.

5566
05:20:29,221 --> 05:20:32,301
Jadi saya bisa mendapatkan salah satu dari\nkarakter individual ini

5567
05:20:32,300 --> 05:20:38,315
dan, ubahlah menjadi\ninteger seperti yang kita lakukan di minggu 0.

5568
05:20:38,315 --> 05:20:41,271
Biarkan saya sedikit penasaran sekarang.

5569
05:20:41,271 --> 05:20:44,280
Apa lagi yang mungkin ada\nmemori komputer?

5570
05:20:44,280 --> 05:20:47,810
Baiklah, ayo-- Aku akan kembali ke\n

5571
05:20:47,811 --> 05:20:50,121
Ini mungkin cara kami\nawalnya menerapkan hai

5572
05:20:50,120 --> 05:20:53,060
dengan tiga variabel, c1, c2, c3.

5573
05:20:53,061 --> 05:20:55,761
Tentu saja, itu dipetakan ke\ndigit desimal ini atau yang setara

5574
05:20:57,140 --> 05:20:59,570
Tapi seperti apa\nyang terlihat dalam ingatan ini?

5575
05:20:59,570 --> 05:21:02,510
Secara harfiah, saat Anda membuat\nstring di memori, seperti ini

5576
05:21:02,510 --> 05:21:05,501
string s sama dengan kutipan-tanda kutip hai,\nmari kita pertimbangkan apa yang terjadi

5577
05:21:05,501 --> 05:21:06,876
di bawah tenda, bisa dikatakan begitu.

5578
05:21:06,876 --> 05:21:11,751
Ya, sebagai abstraksi, string,\n

5579
05:21:11,751 --> 05:21:13,177
sepertinya 3 byte kan?

5580
05:21:13,177 --> 05:21:15,260
Saya telah menghilangkan\nbilah tersebut, karena jika Anda

5581
05:21:15,260 --> 05:21:19,911
menganggap string sebagai tipe, saya hanya\n

5582
05:21:19,911 --> 05:21:24,471
Namun secara teknis, sebuah string, yang baru saja kami\nungkapkan, adalah sebuah array

5583
05:21:26,091 --> 05:21:28,010
Jadi secara teknis, jika\nstring disebut s

5584
05:21:28,010 --> 05:21:30,230
s bracket 0 akan memberi\nAnda karakter pertama

5585
05:21:30,230 --> 05:21:34,070
s braket 1, yang kedua,\ndan s braket 3, yang ketiga.

5586
05:21:34,070 --> 05:21:37,550
Tapi izinkan saya menanyakan pertanyaan ini sekarang,\n

5587
05:21:37,550 --> 05:21:40,820
adalah satu-satunya yang ada\nmemori komputer Anda

5588
05:21:40,820 --> 05:21:45,050
dan kemampuannya, seperti kanvas untuk menggambar\n

5589
05:21:45,050 --> 05:21:46,881
atau apa pun yang ada di dalamnya, tapi\nitu saja, seperti ini

5590
05:21:46,881 --> 05:21:50,031
itulah yang akhirnya direduksi menjadi Mac, PC, dan\nponsel Anda.

5591
05:21:50,030 --> 05:21:53,990
Misalkan saya sedang menjalankan sebuah karya\n

5592
05:21:53,991 --> 05:21:57,261
dan sekarang saya menuliskan\ntanda serunya.

5593
05:21:57,260 --> 05:21:59,120
Nah, di manakah hal itu bisa tersimpan dalam ingatan?

5594
05:22:00,105 --> 05:22:03,594
SELAMAT TINGGAL. Dan hal berikutnya yang saya ketik\n

5595
05:22:03,594 --> 05:22:05,511
Ingatanku mungkin\nterisi seiring berjalannya waktu

5596
05:22:05,510 --> 05:22:08,570
dengan hal-hal yang Anda atau\norang lain ketikkan.

5597
05:22:08,570 --> 05:22:14,841
Namun bagaimana komputer mengetahui jika,\n

5598
05:22:14,841 --> 05:22:20,411
tepat setelah tanda seru H-I\n

5599
05:22:23,690 --> 05:22:27,330
Yang kita miliki hanyalah byte, atau 0 dan 1.

5600
05:22:27,330 --> 05:22:29,990
Jadi jika Anda merancang\nini, bagaimana Anda akan melakukannya

5601
05:22:29,991 --> 05:22:32,541
menerapkan semacam\npembatas di antara keduanya?

5602
05:22:32,541 --> 05:22:34,521
Atau cari tahu berapa\npanjang stringnya?

5603
05:22:36,408 --> 05:22:39,367
DAVID MALAN: Oke, jadi\njawaban yang benar adalah menggunakan karakter null

5604
05:22:39,367 --> 05:22:41,450
dan bagi yang belum\tahu, apa maksudnya?

5605
05:22:43,753 --> 05:22:45,710
DAVID MALAN: Ya, jadi\ini adalah karakter yang spesial.

5606
05:22:45,710 --> 05:22:47,780
Izinkan saya menggambarkannya sebagai\na karakter penjaga.

5607
05:22:47,780 --> 05:22:49,835
Manusia memutuskan beberapa\nwaktu lalu agar Anda mengetahuinya

5608
05:22:49,835 --> 05:22:52,820
bagaimana, jika kita ingin menggambarkan\ndi mana satu string berakhir

5609
05:22:52,820 --> 05:22:56,271
dan di mana langkah berikutnya dimulai,\nkita hanya memerlukan simbol khusus.

5610
05:22:56,271 --> 05:22:59,450
Dan simbol yang akan mereka gunakan\numumnya ditulis sebagai garis miring terbalik 0.

5611
05:22:59,450 --> 05:23:03,816
Ini hanyalah notasi singkat\nuntuk delapan 0 bit.

5612
05:23:06,800 --> 05:23:10,400
Dan nama panggilan untuk delapan\n0 bit, dalam konteks ini

5613
05:23:13,190 --> 05:23:16,170
Dan hal ini sebenarnya dapat kita lihat sebagai berikut.

5614
05:23:16,170 --> 05:23:18,173
Jika Anda melihat\nangka desimal yang sesuai

5615
05:23:18,173 --> 05:23:20,841
seperti yang dapat Anda lakukan dengan\nmenghitung atau melakukan konversi

5616
05:23:20,841 --> 05:23:25,820
seperti yang telah kita lakukan dalam kode, Anda akan\n

5617
05:23:25,820 --> 05:23:30,861
tapi kemudian 1 byte tambahan itu semacam\n

5618
05:23:30,861 --> 05:23:33,381
Dan sekarang saya baru saja menulis\nit sebagai angka desimal 0.

5619
05:23:33,381 --> 05:23:36,381
Implikasi dari hal ini adalah\nbahwa komputer tersebut tampaknya

5620
05:23:36,381 --> 05:23:40,956
menggunakan, bukan 3 byte untuk menyimpan\na kata seperti hai, tetapi 4 byte.

5621
05:23:40,955 --> 05:23:46,310
Berapa pun panjang stringnya,\n

5622
05:23:46,311 --> 05:23:48,901
yang membatasi akhir string.

5623
05:23:48,901 --> 05:23:50,941
Jadi kita mungkin menggambarnya seperti ini.

5624
05:23:50,940 --> 05:23:55,610
Dan karakter ini, sekali lagi,\ndiucapkan nul, atau ditulis N-U-L.

5625
05:23:56,580 --> 05:23:59,330
Kalau manusia, pada akhirnya,\n

5626
05:23:59,330 --> 05:24:01,163
mereka hanya perlu\nmemutuskan, baiklah

5627
05:24:01,163 --> 05:24:04,251
bagaimana kita membedakan\tidak ada string dari yang lain?

5628
05:24:04,251 --> 05:24:06,920
Jauh lebih mudah dengan\nchars, secara individual

5629
05:24:06,920 --> 05:24:09,710
jauh lebih mudah dengan int, bahkan lebih mudah lagi dengan float, mengapa?

5630
05:24:09,710 --> 05:24:13,880
Karena, berdasarkan bagan tadi,\n

5631
05:24:13,881 --> 05:24:16,070
Setiap int selalu 4 byte.

5632
05:24:16,070 --> 05:24:19,010
Setiap panjangnya selalu 8 byte.

5633
05:24:20,540 --> 05:24:24,021
Hai, 1, 2, 3 dengan\nan tanda seru.

5634
05:24:24,021 --> 05:24:27,290
Sampai jumpa adalah 1, 2, 3, 4 dengan\nan tanda seru.

5635
05:24:27,290 --> 05:24:30,710
David adalah D-A-V-I-D, lima\ntanpa tanda seru.

5636
05:24:30,710 --> 05:24:34,470
Jadi sebuah string bisa panjangnya\nberapa pun byte

5637
05:24:34,471 --> 05:24:36,961
jadi entah bagaimana Anda perlu\nmenggambar garis di pasir

5638
05:24:36,960 --> 05:24:40,967
untuk memisahkan dalam memori\none string dari yang lain.

5639
05:24:40,967 --> 05:24:43,672
Jadi apa implikasinya?

5640
05:24:43,672 --> 05:24:45,130
Baiklah, izinkan saya kembali ke kode, di sini.

5641
05:24:46,471 --> 05:24:51,390
Ini agak berbahaya, tapi aku pergi\n

5642
05:24:53,471 --> 05:24:57,511
Jadi izinkan saya melanjutkan\nkompilasi ulang, sapa.

5643
05:25:02,881 --> 05:25:06,811
Sekarang izinkan saya melanjutkan dan\njalankan kembali make hi, ./hi, Enter.

5644
05:25:07,841 --> 05:25:10,921
Jadi Anda sebenarnya dapat melihatnya di\nkomputer, tanpa sepengetahuan Anda

5645
05:25:10,920 --> 05:25:14,090
sebelumnya, memang ada\nhal lain yang terjadi di sana.

5646
05:25:14,091 --> 05:25:17,140
Dan jika saya membuat satu\varian lain dari program ini--

5647
05:25:17,140 --> 05:25:19,890
mari kita hilangkan satu-satunya kata ini\ndan kita buat dua kata.

5648
05:25:19,890 --> 05:25:21,810
Jadi izinkan saya memberi diri saya\nstring lain bernama t

5649
05:25:21,811 --> 05:25:26,070
misalnya, hal yang umum\n

5650
05:25:26,070 --> 05:25:29,161
Biarkan saya, lalu cetak dengan %s.

5651
05:25:29,161 --> 05:25:35,045
Dan izinkan saya juga mencetaknya dengan %s,\n

5652
05:25:35,045 --> 05:25:38,580
Biarkan saya mengkompilasi ulang program ini,\ndan tentu saja hasilnya--

5653
05:25:38,580 --> 05:25:41,730
ugh-- ini yang terjadi\nkalau aku melaju terlalu cepat.

5654
05:25:41,730 --> 05:25:45,001
Baiklah, kesalahan ketiga\nhari ini, kutipan penutup.

5655
05:25:52,471 --> 05:25:54,871
Sekarang kita mempunyai program yang\nmencetak salam dan selamat tinggal

5656
05:25:54,870 --> 05:25:58,980
hanya agar kita dapat mempertimbangkan apa\n

5657
05:25:58,980 --> 05:26:04,471
Jika s menyimpan hi dan\nampaknya satu byte bonus itu

5658
05:26:04,471 --> 05:26:07,501
membatasi akhir\nstring itu, tampaknya sampai jumpa

5659
05:26:07,501 --> 05:26:10,673
akan langsung masuk ke\nlokasi setelahnya.

5660
05:26:10,673 --> 05:26:13,591
Dan itu membungkus, tapi itu\n

5661
05:26:13,591 --> 05:26:16,260
Tapi sampai jumpa, tanda seru B-Y-E\nmulai digunakan

5662
05:26:16,260 --> 05:26:23,208
1, 2, 3, 4, ditambah byte kelima juga.

5663
05:26:23,208 --> 05:26:27,841
Baiklah, ada pertanyaan tentang ini\n

5664
05:26:27,841 --> 05:26:29,820
Dan kami akan mengkontekstualisasikannya\nini, tidak lama lagi

5665
05:26:29,820 --> 05:26:32,100
sehingga ini tidak hanya\nseperti, oke, siapa yang benar-benar peduli?

5666
05:26:32,100 --> 05:26:34,990
Ini akan menjadi sumber\nimplementasi berbagai hal.

5667
05:26:34,991 --> 05:26:37,771
Faktanya untuk kumpulan masalah 2, seperti\nkriptografi, dan enkripsi

5668
05:26:37,771 --> 05:26:39,728
dan mengacak pesan manusia yang sebenarnya.

5669
05:26:40,771 --> 05:26:44,911
AUDIENCE: Jadi biasanya jika\nAnda tidak menggunakan string

5670
05:26:44,911 --> 05:26:47,741
Anda cukup membuat karakter\nrange yang akan dideklarasikan

5671
05:26:47,741 --> 05:26:50,841
berapa banyak karakter yang ada jadi\n

5672
05:26:51,591 --> 05:26:53,741
DAVID MALAN: Pertanyaan yang bagus\nbiarkan saja

5673
05:26:53,741 --> 05:26:56,376
saya simpulkan sebagai, jika kita\nalih-alih menggunakan karakter sepanjang waktu

5674
05:26:56,376 --> 05:26:59,501
kami memang harus mengetahuinya terlebih dahulu\n

5675
05:26:59,501 --> 05:27:03,010
string yang Anda simpan, lalu bagaimana caranya,\n

5676
05:27:03,010 --> 05:27:05,260
karena ketika Anda CS50 menulis\nfungsi get string

5677
05:27:05,260 --> 05:27:07,450
kami jelas tidak tahu\nberapa panjang kata-katanya

5678
05:27:07,451 --> 05:27:09,281
akan menjadi bahwa Anda semua sedang mengetik.

5679
05:27:09,280 --> 05:27:12,820
Ternyata, dua minggu dari\nsekarang kita akan melihat string tersebut

5680
05:27:12,820 --> 05:27:15,580
menggunakan teknik yang dikenal sebagai\nalokasi memori dinamis.

5681
05:27:15,580 --> 05:27:20,030
Dan itu akan bertambah atau menyusut\n

5682
05:27:22,181 --> 05:27:25,710
AUDIENCE: Mengapa kita menggunakan nilai null?

5683
05:27:26,986 --> 05:27:28,111
DAVID MALAN: Pertanyaan bagus.

5684
05:27:28,111 --> 05:27:31,140
Mengapa kita menggunakan nilai null,\bukankah itu membuang-buang satu byte?

5685
05:27:31,890 --> 05:27:37,471
Tapi menurutku tidak ada jalan lain\n

5686
05:27:37,471 --> 05:27:44,009
dari awal yang lain, kecuali kita\n

5687
05:27:44,008 --> 05:27:46,800
Semua yang kita miliki, pada akhirnya,\n

5688
05:27:46,800 --> 05:27:50,161
Oleh karena itu, yang bisa kita lakukan hanyalah memutar\nbagian-bagian itu dengan cara yang kreatif

5689
05:27:51,780 --> 05:27:54,970
Jadi kita hanya akan menghabiskan\n1 byte untuk mengatasi masalah ini.

5690
05:27:55,471 --> 05:28:00,158
AUDIENCE: Bagaimana perangkat memori kita\n

5691
05:28:00,157 --> 05:28:03,530
/n jika kita tidak menyimpan\nit sebagai char?

5692
05:28:05,170 --> 05:28:08,950
bagaimana komputer tahu untuk bergerak\n

5693
05:28:08,951 --> 05:28:12,251
Jadi /n, meskipun\nterlihat seperti dua karakter

5694
05:28:12,251 --> 05:28:16,151
itu sebenarnya hanya disimpan sebesar 1\nbyte di memori komputer.

5695
05:28:16,151 --> 05:28:18,618
Ada pemetaan antara\nit dan angka sebenarnya.

5696
05:28:18,617 --> 05:28:21,700
Dan Anda dapat melihatnya, misalnya,\n

5697
05:28:21,701 --> 05:28:25,485
AUDIENCE: Jadi jika disimpan\nakan menjadi [TIDAK TERDENGAR]..

5698
05:28:26,681 --> 05:28:32,471
Jika saya memasukkan /n pada kode saya di sini,\n

5699
05:28:32,471 --> 05:28:36,101
dan di sini, hal itu akan berubah\n

5700
05:28:36,100 --> 05:28:41,001
perlu memberi ruang untuk /n\ndi sini dan satu lagi di sini.

5701
05:28:41,001 --> 05:28:43,173
Jadi tepatnya dibutuhkan dua\nbyte lagi.

5702
05:28:43,841 --> 05:28:50,311
HADIRIN: Jadi kalau hai seru\n

5703
05:28:50,311 --> 05:28:56,891
juga seperti 72, 73, 33, jika kita ingin\n

5704
05:28:56,890 --> 05:29:03,350
dan mengubahnya menjadi biner caranya\n

5705
05:29:04,651 --> 05:29:06,651
DAVID MALAN: Dan apa\nhal terakhir yang Anda katakan?

5706
05:29:08,066 --> 05:29:09,960
DAVID MALAN: Ini peka terhadap konteks.

5707
05:29:09,960 --> 05:29:12,710
Jadi jika, pada akhirnya, semuanya\n

5708
05:29:12,710 --> 05:29:16,640
seperti 72, 73, 33, ingat\nitu terserah programnya

5709
05:29:16,640 --> 05:29:19,730
untuk memutuskan, berdasarkan konteks,\ncara menafsirkannya.

5710
05:29:19,730 --> 05:29:23,570
Dan saya menyederhanakan cerita ini di minggu 0\n

5711
05:29:23,570 --> 05:29:27,170
sebagai warna RGB, dan iMessage\nor program pesan teks

5712
05:29:27,170 --> 05:29:31,700
menafsirkannya sebagai huruf, dan\n

5713
05:29:31,701 --> 05:29:36,800
Cara program tersebut melakukannya adalah dengan\n

5714
05:29:37,341 --> 05:29:39,133
Dan faktanya nanti\nsemester ini kita lihat saja

5715
05:29:39,133 --> 05:29:43,761
tipe data yang dapat Anda gunakan untuk merepresentasikan\n

5716
05:29:43,760 --> 05:29:46,501
dan nilai merah, nilai\nhijau, dan nilai biru.

5717
05:29:46,501 --> 05:29:48,861
Jadi kita akan melihat tipe data lainnya juga.

5718
05:29:49,361 --> 05:29:53,581
AUDIENCE: Tampaknya cukup mudah untuk\n

5719
05:29:53,580 --> 05:29:56,450
jadi kenapa kita punya bilangan bulat\ndan bilangan bulat panjang?

5720
05:29:56,451 --> 05:29:59,453
Mengapa kita tidak bisa membuat semua\nukuran datanya berubah-ubah?

5721
05:29:59,453 --> 05:30:01,161
DAVID MALAN: Pertanyaan yang sangat\nmenarik.

5722
05:30:01,161 --> 05:30:04,370
Mengapa kita tidak membuat semua\ntipe data berukuran variabel?

5723
05:30:04,370 --> 05:30:07,820
Dan beberapa bahasa, beberapa\nperpustakaan melakukan hal ini.

5724
05:30:07,820 --> 05:30:11,361
C adalah bahasa yang lebih tua, dan\nkarena memorinya mahal

5725
05:30:12,561 --> 05:30:14,901
Kenyataannya adalah Anda\nmendapatkan manfaat dari hal tersebut

5726
05:30:14,901 --> 05:30:17,271
menstandardisasi ukuran benda-benda ini.

5727
05:30:17,271 --> 05:30:19,671
Anda juga mendapatkan peningkatan\nkinerja dalam arti tertentu

5728
05:30:19,670 --> 05:30:23,880
bahwa jika Anda mengetahui setiap int adalah\n4 byte, Anda dapat melakukannya dengan sangat cepat

5729
05:30:23,881 --> 05:30:26,480
dan kita akan melihatnya minggu depan,\nmelompat dari bilangan bulat ke bilangan bulat lainnya

5730
05:30:26,480 --> 05:30:30,861
ke memori lain hanya dengan menambahkan\n

5731
05:30:30,861 --> 05:30:32,691
Anda dapat dengan cepat melihat-lihat.

5732
05:30:32,690 --> 05:30:35,782
Sedangkan, jika Anda memiliki angka\npanjang variabel, Anda harus memilikinya

5733
05:30:35,782 --> 05:30:38,240
semacam, ikuti, ikuti, ikuti,\nmencari akhirnya.

5734
05:30:38,241 --> 05:30:41,041
Ikuti, ikuti-- Anda harus\n

5735
05:30:41,041 --> 05:30:42,583
Jadi itu adalah topik yang akan kita bahas kembali.

5736
05:30:42,582 --> 05:30:44,960
Tapi umumnya untuk efisiensi.

5737
05:30:46,431 --> 05:30:52,203
AUDIENCE: Mengapa tidak menyimpan karakter\nnul [Tak terdengar]

5738
05:30:52,203 --> 05:30:55,781
DAVID MALAN: Pertanyaan bagus\nkenapa tidak disimpan--

5739
05:30:55,780 --> 05:30:59,800
mengapa tidak menyimpan karakter nul\n di awal?

5740
05:30:59,800 --> 05:31:06,150
Anda bisa-- coba lihat, mengapa\ntidak menyimpannya dari awal?

5741
05:31:09,341 --> 05:31:12,585
Anda benar-benar bisa--\nya, bisakah Anda melakukan ini?

5742
05:31:15,841 --> 05:31:20,640
Jika Anda melakukan itu\nat di awal--

5743
05:31:22,681 --> 05:31:24,888
Tidak, karena saya akhirnya memikirkan\tidak ada masalah dengan ini.

5744
05:31:24,888 --> 05:31:26,743
Jika Anda menyimpannya di\nawal saja

5745
05:31:26,743 --> 05:31:29,161
kita akan lihat sebentar lagi bagaimana\nAnda sebenarnya bisa menulis kode

5746
05:31:29,161 --> 05:31:31,411
untuk mencari tahu di mana\nakhir string

5747
05:31:31,411 --> 05:31:33,811
dan masalahnya\nbelum tentu ada

5748
05:31:33,811 --> 05:31:37,261
know if you eventually hit a\n0 at the end of the string

5749
05:31:37,260 --> 05:31:41,070
karena itu angka 0 di\n

5750
05:31:41,070 --> 05:31:44,440
atau jika itu adalah konteks dari beberapa\tipe data lain, semuanya.

5751
05:31:44,440 --> 05:31:46,860
Jadi fakta bahwa kami telah melakukan standarisasi--

5752
05:31:46,861 --> 05:31:50,820
fakta bahwa kami telah membakukan\nstring sebagai diakhiri dengan nol

5753
05:31:50,820 --> 05:31:54,916
berarti kami dapat membedakan\n dengan pasti

5754
05:31:54,916 --> 05:31:56,820
Dan itu sebenarnya cara yang\nsempurna untuk saat ini

5755
05:31:56,820 --> 05:31:59,954
untuk benar-benar menggunakan\nprimitif ini untuk membangun

5756
05:31:59,954 --> 05:32:02,621
kode kita sendiri yang memanipulasi\nhal-hal yang levelnya lebih rendah ini.

5757
05:32:03,820 --> 05:32:05,911
Izinkan saya membuat file baru bernama length.

5758
05:32:05,911 --> 05:32:10,260
Dan mari kita gunakan ide dasar ini untuk\n

5759
05:32:10,260 --> 05:32:14,980
adalah setelah disimpan dalam variabel.

5760
05:32:16,120 --> 05:32:20,790
Izinkan saya menyertakan header\nCS50 dan header I/O standar

5761
05:32:20,791 --> 05:32:25,511
berikan diriku int main(void) lagi\n

5762
05:32:25,510 --> 05:32:28,320
Biarkan saya meminta pengguna untuk\na string s dan saya akan menanyakannya

5763
05:32:28,320 --> 05:32:32,431
untuk string seperti namanya, di sini.

5764
05:32:32,431 --> 05:32:37,681
Dan izinkan saya menamainya dengan lebih\nnamanya kali ini.

5765
05:32:37,681 --> 05:32:39,431
Sekarang izinkan saya melanjutkan dan melakukan ini.

5766
05:32:39,431 --> 05:32:44,521
Izinkan saya mengulangi setiap\nkarakter dalam string ini

5767
05:32:44,521 --> 05:32:46,440
untuk mengetahui\nberapa panjangnya.

5768
05:32:46,440 --> 05:32:49,320
Jadi pada awalnya, saya\nakan melanjutkan dan mengatakan ini

5769
05:32:49,320 --> 05:32:52,300
int panjangnya sama dengan 0, karena\nSaya belum tahu apa itu.

5770
05:32:52,300 --> 05:32:53,550
Jadi kita akan mulai dari 0.

5771
05:32:53,550 --> 05:32:56,670
Dan meskipun yang berikut ini benar--

5772
05:32:56,670 --> 05:33:01,630
sementara-- biarkan aku-- apakah aku ingin melakukan ini?

5773
05:33:01,631 --> 05:33:04,320
Izinkan saya mengubahnya menjadi i,\nuntuk kejelasan, izinkan saya melakukannya

5774
05:33:04,320 --> 05:33:10,050
ini, sedangkan braket nama i tidak\n

5775
05:33:10,050 --> 05:33:13,440
Jadi saya mengetiknya di slide adalah N-U-L,\n

5776
05:33:13,440 --> 05:33:17,925
Anda sebenarnya menggunakan padanan numeriknya,\n

5777
05:33:17,925 --> 05:33:23,190
Sedangkan braket nama i tidak sama dengan\n

5778
05:33:23,190 --> 05:33:26,730
dan menambah i menjadi i plus plus.

5779
05:33:26,730 --> 05:33:29,730
Lalu di sini saya akan\nmencetak nilai i

5780
05:33:29,730 --> 05:33:33,530
untuk melihat apa yang sebenarnya kita dapatkan,\nmencetak nilai i.

5781
05:33:33,530 --> 05:33:35,280
Baiklah, jadi apa\nyang akan terjadi di sini?

5782
05:33:39,001 --> 05:33:43,831
./length dan izinkan saya mengetikkan sesuatu\n

5783
05:33:45,001 --> 05:33:48,210
Biar saya coba sampai jumpa,\ntanda seru, Enter.

5784
05:33:50,131 --> 05:33:52,771
Izinkan saya mencoba nama saya sendiri, David, Enter.

5785
05:33:54,230 --> 05:33:56,140
Jadi apa yang sebenarnya terjadi di sini?

5786
05:33:56,140 --> 05:33:58,751
Tampaknya\nmelalui 4 putaran ini

5787
05:33:58,751 --> 05:34:00,883
kita menentukan\nvariabel lokal yang dipanggil

5788
05:34:00,883 --> 05:34:03,841
saya menginisialisasi ke 0, karena kami\n

5789
05:34:04,841 --> 05:34:08,311
Saya kemudian mengajukan\npertanyaan, apakah lokasi 0

5790
05:34:08,311 --> 05:34:13,561
itu adalah i dalam nama string,\nyang sekarang kita ketahui adalah sebuah array

5791
05:34:15,960 --> 05:34:19,905
Karena jika tidak, berarti\n

5792
05:34:21,901 --> 05:34:25,171
Kalau begitu, ayo kembali ke barisan\n

5793
05:34:26,850 --> 05:34:30,681
Jadi apakah braket nama 1 tidak sama dengan /0?

5794
05:34:30,681 --> 05:34:36,331
Nah, jika tidak, dan tidak akan\njika itu i, atau a y, atau a

5795
05:34:36,330 --> 05:34:39,750
berdasarkan apa yang saya ketik, kami\nakan menambah i sekali lagi.

5796
05:34:39,751 --> 05:34:43,201
Maju cepat ke akhir cerita,\n

5797
05:34:43,201 --> 05:34:46,681
secara teknis, satu spasi\nmelewati akhir string

5798
05:34:46,681 --> 05:34:49,771
braket nama i akan sama dengan /0.

5799
05:34:49,771 --> 05:34:54,221
Jadi aku tidak menambah i lagi, aku\n

5800
05:34:54,221 --> 05:34:58,771
Jadi apa yang tampaknya kita miliki di sini dengan beberapa\n

5801
05:34:58,771 --> 05:35:03,331
adalah program yang mengetahui panjangnya\n

5802
05:35:03,330 --> 05:35:06,120
Mari kita latih abstraksi kita\nd uraikan menjadi

5803
05:35:06,120 --> 05:35:07,530
mungkin, fungsi pembantu di sini.

5804
05:35:07,530 --> 05:35:11,370
Izinkan saya mengambil semua\nkode ini di sini, dan berasumsi

5805
05:35:11,370 --> 05:35:15,841
demi diskusi sejenak,\n

5806
05:35:18,001 --> 05:35:21,091
Dan panjang string\nis nama yang ingin saya dapatkan

5807
05:35:21,091 --> 05:35:25,260
lalu saya akan melanjutkan dan mencetak\nout, sama seperti sebelumnya dengan %i

5808
05:35:26,658 --> 05:35:28,951
Jadi sekarang saya mengabstraksi\ngagasan mencari tahu ini

5809
05:35:29,992 --> 05:35:32,730
Itu adalah kesempatan bagi saya\nuntuk membuat fungsi saya sendiri.

5810
05:35:32,730 --> 05:35:35,775
Jika saya ingin membuat\nfungsi yang disebut panjang string

5811
05:35:35,776 --> 05:35:39,871
Saya akan menyatakan bahwa saya ingin\nmengambil string sebagai masukan

5812
05:35:39,870 --> 05:35:45,120
dan fungsi\nini harus saya kembalikan sebagai tipe pengembaliannya?

5813
05:35:45,120 --> 05:35:50,350
Apa yang seharusnya mendapatkan string\nmungkin dikembalikan?

5814
05:35:53,280 --> 05:35:55,198
Float benar-benar tidak\nmasuk akal karena memang demikian

5815
05:35:55,198 --> 05:35:57,637
mengukur benda-benda yang bilangan bulat.

5816
05:35:57,637 --> 05:35:59,220
Dalam hal ini, panjang sesuatu.

5817
05:35:59,221 --> 05:36:00,901
Jadi memang benar, mari kita kembalikan int.

5818
05:36:00,901 --> 05:36:03,641
Saya bisa menggunakan\nkode yang sama seperti sebelumnya, jadi saya bisa

5819
05:36:03,640 --> 05:36:06,435
akan menempelkan apa yang saya\npotong sebelumnya di file.

5820
05:36:06,436 --> 05:36:10,921
Satu-satunya hal yang harus saya ubah\adalah nama variabel.

5821
05:36:10,920 --> 05:36:14,501
Karena sekarang fungsi ini,\nSaya putuskan seenaknya

5822
05:36:14,501 --> 05:36:17,390
itulah yang akan saya sebut\ns, agar lebih umum.

5823
05:36:17,390 --> 05:36:20,175
Jadi saya akan melihat s\nbracket i di setiap lokasi.

5824
05:36:20,175 --> 05:36:23,050
Dan saya tidak ingin mencetaknya di\n

5825
05:36:23,050 --> 05:36:25,510
Baris kode apa yang harus saya\nsertakan di sini jika memang benar

5826
05:36:25,510 --> 05:36:28,265
ingin mengembalikan panjang totalnya?

5827
05:36:31,372 --> 05:36:33,530
DAVID MALAN: Kembalikan i, dalam hal ini.

5828
05:36:33,530 --> 05:36:35,800
Jadi saya akan mengembalikannya, bukan mencetaknya.

5829
05:36:35,800 --> 05:36:40,751
Karena sekarang, fungsi utama saya bisa\n

5830
05:36:40,751 --> 05:36:42,791
dan mencetaknya pada baris berikutnya.

5831
05:36:42,791 --> 05:36:46,781
Saya hanya butuh prototipe, jadi itu\n

5832
05:36:46,780 --> 05:36:48,431
Saya akan memutar ulang make length.

5833
05:36:48,431 --> 05:36:49,901
Mudah-mudahan aku tidak mengacau.

5834
05:36:49,901 --> 05:36:53,591
saya tidak melakukannya. ./length,\nSaya akan mengetik hai-- oops--

5835
05:36:56,140 --> 05:36:59,230
Saya akan mengetik selamat tinggal lagi, dan seterusnya.

5836
05:36:59,230 --> 05:37:02,963
Jadi sekarang kita punya fungsi itu\n

5837
05:37:02,963 --> 05:37:05,381
Ternyata, selama ini kita tidak\sebenarnya membutuhkan hal ini.

5838
05:37:05,381 --> 05:37:10,302
Ternyata kita bisa menyingkirkan\n

5839
05:37:10,302 --> 05:37:12,760
Saya pasti bisa menghapus\nseluruh implementasi di sini.

5840
05:37:12,760 --> 05:37:16,420
Karena ternyata, di\na file bernama string.h

5841
05:37:16,420 --> 05:37:19,780
yang merupakan file header baru hari ini, kami\n

5842
05:37:19,780 --> 05:37:23,950
disebut, lebih ringkasnya,\nstrlen, S-T-R-L-E-N. Yang mana

5843
05:37:25,390 --> 05:37:29,501
Ini adalah fungsi yang disertakan dengan C,\n

5844
05:37:29,501 --> 05:37:33,710
dan ia melakukan apa yang baru saja\ndiimplementasikan secara manual.

5845
05:37:33,710 --> 05:37:37,600
Jadi inilah contoh, memang, a\n

5846
05:37:38,741 --> 05:37:41,111
Dan bagaimana jenis\nfungsi apa yang ada?

5847
05:37:41,111 --> 05:37:45,521
Baiklah, izinkan saya keluar dari\nbrowser saya di sini ke situs web itu

5848
05:37:45,521 --> 05:37:48,716
adalah inkarnasi CS50 dari\napa yang disebut halaman manual.

5849
05:37:48,716 --> 05:37:52,331
Ternyata di banyak\nosistem, Mac, dan Unix

5850
05:37:52,330 --> 05:37:55,360
dan sistem Linux, termasuk\nVisual Studio Code

5851
05:37:55,361 --> 05:37:57,280
contohnya kita punya\nin cloud, di sana

5852
05:37:57,280 --> 05:38:00,550
dapat diakses publik\nhalaman manual untuk berbagai fungsi.

5853
05:38:00,550 --> 05:38:04,030
Mereka cenderung ditulis dengan sangat\nahli, dengan cara yang seperti itu

5854
05:38:05,420 --> 05:38:09,911
Jadi yang kami miliki di sini di\nmanual.cs50.io adalah versi CS50

5855
05:38:09,911 --> 05:38:13,001
halaman manual yang memiliki\nmode kurang nyaman itu

5856
05:38:13,001 --> 05:38:15,550
memberi Anda, semacam, contekan\nsheet yang sangat sering digunakan

5857
05:38:15,550 --> 05:38:19,271
fungsi-fungsi bermanfaat di C. Dan\nkami telah menerjemahkan pakarnya

5858
05:38:19,271 --> 05:38:22,335
notasi untuk hal-hal yang\npemula dapat pahami.

5859
05:38:22,335 --> 05:38:26,451
Jadi, misalnya, izinkan saya melanjutkan dan\n

5860
05:38:26,451 --> 05:38:30,460
Anda akan melihat bahwa ada dokumentasi\n

5861
05:38:30,460 --> 05:38:32,771
tapi yang lebih menarik\ndi sini, ada

5862
05:38:32,771 --> 05:38:35,111
sejumlah\nfungsi terkait string

5863
05:38:35,111 --> 05:38:36,881
yang sebagian besarnya belum pernah kita lihat.

5864
05:38:36,881 --> 05:38:38,921
Namun memang ada\ndi sini yang disebut strlen

5865
05:38:38,920 --> 05:38:40,880
menghitung panjang suatu string.

5866
05:38:40,881 --> 05:38:46,421
Jadi jika saya melakukan strlen di sini, saya akan\n

5867
05:38:47,230 --> 05:38:49,661
Dan cara kerja halaman\nmanual pada umumnya

5868
05:38:49,661 --> 05:38:52,570
baik dalam format CS50\atau sistem lainnya

5869
05:38:52,570 --> 05:38:55,210
apakah Anda biasanya melihat\nsinopsis header apa

5870
05:38:55,210 --> 05:38:57,591
file yang Anda perlukan untuk menggunakan fungsi tersebut.

5871
05:38:57,591 --> 05:39:00,221
Jadi, Anda akan menyalin dan menempelkan\nbeberapa baris ini di sini.

5872
05:39:00,221 --> 05:39:03,791
Anda lihat apa prototipe\nis fungsinya

5873
05:39:03,791 --> 05:39:06,794
agar Anda mengetahui masukannya,\n

5874
05:39:06,794 --> 05:39:09,461
Kemudian di bawah Anda mungkin melihat\ndeskripsi, yang dalam hal ini

5875
05:39:10,580 --> 05:39:12,430
Fungsi ini menghitung\npanjang s.

5876
05:39:12,431 --> 05:39:15,370
Lalu Anda akan melihat\nnilai yang dikembalikan, jika ada

5877
05:39:15,370 --> 05:39:18,570
dan Anda bahkan mungkin melihat contohnya, seperti\n

5878
05:39:18,570 --> 05:39:21,273
Jadi halaman panduan ini\nsekali lagi dapat diakses

5879
05:39:21,273 --> 05:39:23,980
di sini, dan kami akan menautkannya di\n

5880
05:39:23,980 --> 05:39:26,771
adalah tempat yang tepat untuk\nmemulai ketika Anda ingin mencari tahu

5881
05:39:26,771 --> 05:39:29,471
apakah roda sudah ditemukan?

5882
05:39:29,471 --> 05:39:32,751
Apakah ada fungsi yang mungkin membantu\n

5883
05:39:32,751 --> 05:39:36,161
sehingga saya tidak perlu terlalu\nterlibat dalam melakukan semuanya

5884
05:39:36,161 --> 05:39:37,973
langkah-langkah tingkat rendah seperti yang pernah saya lakukan.

5885
05:39:37,973 --> 05:39:40,931
Terkadang jawabannya adalah\n

5886
05:39:40,931 --> 05:39:43,421
Tapi sekali lagi, inti dari\nkita baru saja melakukan ini bersama-sama

5887
05:39:43,420 --> 05:39:46,210
adalah untuk mengungkapkan bahwa\nfungsi yang mulai Anda gunakan

5888
05:39:46,210 --> 05:39:50,396
memang benar, semuanya tereduksi menjadi beberapa\nkomponen dasar berikut ini.

5889
05:39:50,396 --> 05:39:53,861
Pada akhirnya, ini adalah\n

5890
05:39:55,210 --> 05:39:57,320
Kami baru saja belajar\nsekarang bagaimana memanfaatkannya

5891
05:39:57,320 --> 05:40:01,480
dan bagaimana memanipulasinya sendiri.

5892
05:40:08,065 --> 05:40:16,039
HADIRIN: Kami baru saja melihat\n[Tak terdengar] Apakah itu sangat umum

5893
05:40:16,040 --> 05:40:18,296
bahwa kita harus\nmenentukannya, atau bukan?

5894
05:40:18,295 --> 05:40:19,420
DAVID MALAN: Pertanyaan bagus.

5895
05:40:19,420 --> 05:40:22,180
Apakah hal ini sangat umum sehingga Anda\nharus menentukannya atau tidak?

5896
05:40:22,181 --> 05:40:24,431
Anda perlu menyertakan\nfile headernya karena itu

5897
05:40:24,431 --> 05:40:25,931
di mana semua prototipe itu berada.

5898
05:40:25,931 --> 05:40:29,451
Anda tidak perlu khawatir\nmenautkannya dengan -l apa pun.

5899
05:40:29,451 --> 05:40:31,601
Dan kenyataannya, ke depan, Anda tidak akan pernah melakukannya

5900
05:40:31,600 --> 05:40:35,170
perlu khawatir tentang penautan\n

5901
05:40:35,170 --> 05:40:39,200
Kami, staf, telah mengonfigurasi make to\n

5902
05:40:39,201 --> 05:40:41,291
Kami ingin Anda memahami\nbahwa mereka melakukan hal tersebut

5903
05:40:41,291 --> 05:40:43,601
tapi kami akan mengurus\semua -l itu untukmu.

5904
05:40:43,600 --> 05:40:47,620
Namun tanggung jawab ada pada Anda untuk\nprototipe dan file header.

5905
05:40:47,620 --> 05:40:51,411
Pertanyaan lain tentang\nrepresentasi atau teknik ini?

5906
05:40:51,911 --> 05:41:00,181
HADIRIN: tanda seru [Tak terdengar].

5907
05:41:00,181 --> 05:41:04,784
Bagaimana cara sebenarnya mendefinisikan\nspasi [Tak terdengar]??

5908
05:41:04,784 --> 05:41:06,181
DAVID MALAN: Pertanyaan yang bagus.

5909
05:41:06,181 --> 05:41:09,960
Jika Anda memiliki string dengan\n

5910
05:41:09,960 --> 05:41:11,791
apa yang sebenarnya dilakukan komputer?

5911
05:41:11,791 --> 05:41:14,221
Nah untuk ini. izinkan saya\nbuka asciichart.com.

5912
05:41:14,221 --> 05:41:19,140
Itu hanyalah situs web acak yang\n

5913
05:41:20,190 --> 05:41:22,780
Faktanya, ini adalah tangkapan layar kami\na beberapa hari yang lalu.

5914
05:41:22,780 --> 05:41:26,348
Dan jika Anda lihat di sini, itu sedikit\n

5915
05:41:26,348 --> 05:41:29,640
Jika komputer ingin menyimpan ruang, itu\n

5916
05:41:29,640 --> 05:41:34,690
32, atau secara teknis, pola 0s\n

5917
05:41:34,690 --> 05:41:37,501
Semua tombol bahasa Inggris AS yang\nAnda dapat mengetik di keyboard

5918
05:41:37,501 --> 05:41:40,651
dapat direpresentasikan dengan\nangka, dan menggunakan Unicode dapat

5919
05:41:40,651 --> 05:41:43,181
Anda bahkan mengekspresikan hal-hal seperti\nemoji dan bahasa lainnya.

5920
05:41:43,681 --> 05:41:47,390
AUDIENCE: Hanya string\ndiikuti oleh angka nol

5921
05:41:47,390 --> 05:41:50,776
atau katakanlah kita mempunyai serangkaian\nangka, masing-masingnya

5922
05:41:52,105 --> 05:41:53,230
DAVID MALAN: Pertanyaan bagus.

5923
05:41:53,230 --> 05:41:56,050
Hanya string yang disertai\noleh nol di akhir

5924
05:41:56,050 --> 05:41:59,021
karena setiap tipe data lain\nkita telah membicarakannya sejauh ini

5925
05:41:59,021 --> 05:42:01,390
memiliki panjang terbatas yang terdefinisi dengan baik.

5926
05:42:01,390 --> 05:42:04,451
1 byte untuk char, 4 byte\nuntuk int dan seterusnya.

5927
05:42:04,451 --> 05:42:08,501
Jika kita mengingat kembali minggu lalu, kita melakukannya\n

5928
05:42:08,501 --> 05:42:12,341
Integer meluap, karena 4 byte, sih,\n

5929
05:42:12,341 --> 05:42:14,530
Kita juga membahas\nketidaktepatan floating point.

5930
05:42:14,530 --> 05:42:17,740
Syukurlah di dunia ilmiah\n

5931
05:42:17,741 --> 05:42:21,191
ada perpustakaan yang dapat\nAnda gunakan untuk mendapatkan inspirasi

5932
05:42:21,190 --> 05:42:23,080
dari gagasan tentang\nstring ini, dan mungkin saja

5933
05:42:23,080 --> 05:42:26,900
gunakan 9 byte untuk nilai\n integer atau mungkin 20 byte

5934
05:42:26,901 --> 05:42:28,431
yang bisa Anda hitung sangat tinggi.

5935
05:42:28,431 --> 05:42:30,940
Namun mereka kemudian akan mulai\nmengelola memori itu untuk Anda

5936
05:42:30,940 --> 05:42:34,220
dan apa yang sebenarnya mereka lakukan\n

5937
05:42:34,221 --> 05:42:37,331
dan entah bagaimana mengingat berapa\npanjang urutan byte.

5938
05:42:37,330 --> 05:42:40,450
Begitulah cara kerja\nlibrary tingkat tinggi ini juga.

5939
05:42:40,451 --> 05:42:41,960
Baiklah, ini sudah banyak.

5940
05:42:41,960 --> 05:42:43,341
Mari kita istirahat sekali lagi di sini.

5941
05:42:43,341 --> 05:42:44,931
Kami akan istirahat tujuh menit di sini.

5942
05:42:44,931 --> 05:42:47,725
Dan saat kami kembali lagi, kami akan\nmenyempurnakan beberapa detail lainnya.

5943
05:42:50,651 --> 05:42:55,661
Jadi kita hanya melihat strlen sebagai contoh fungsi itu

5944
05:42:55,661 --> 05:42:57,158
hadir di perpustakaan string.

5945
05:42:57,158 --> 05:42:59,951
Mari kita mulai menggunakan ini lebih banyak\n

5946
05:42:59,951 --> 05:43:03,791
Jadi kami tidak hanya mengandalkan\n

5947
05:43:03,791 --> 05:43:05,921
Izinkan saya beralih ke VS Code.

5948
05:43:05,920 --> 05:43:10,300
Dan buat file bernama, katakanlah string.h.

5949
05:43:10,300 --> 05:43:12,376
untuk menerapkan pelajaran\nyang dipelajari ini, sebagai berikut.

5950
05:43:12,376 --> 05:43:19,030
Izinkan saya menyertakan cs50.h,\nstdio.h, dan hal baru ini

5951
05:43:19,030 --> 05:43:21,521
string.h juga, di atas.

5952
05:43:21,521 --> 05:43:23,958
Saya akan melakukan hal yang biasa\nint main(void) di sini.

5953
05:43:23,958 --> 05:43:26,501
Dan kemudian dalam program ini misalkan,\nuntuk kepentingan diskusi

5954
05:43:26,501 --> 05:43:29,800
yang saya tidak tahu tentang\n%s untuk printf atau, sial

5955
05:43:29,800 --> 05:43:33,560
mungkin pada awalnya\ntidak ada kode format %s.

5956
05:43:33,561 --> 05:43:36,681
Jadi tidak ada\ncara mudah untuk mencetak string.

5957
05:43:36,681 --> 05:43:40,091
Ya, setidaknya jika kita mengetahuinya\n

5958
05:43:40,091 --> 05:43:44,081
kita bisa menggunakan %c sebagai\nsolusi, solusi untuk itu

5959
05:43:45,681 --> 05:43:49,181
Jadi izinkan saya bertanya pada diri sendiri tentang a\nstring dengan menggunakan get string di sini

5960
05:43:49,181 --> 05:43:51,761
dan saya akan meminta beberapa masukan dari pengguna.

5961
05:43:51,760 --> 05:43:57,520
Dan kemudian, izinkan saya mencetak, katakanlah, keluaran\n

5962
05:43:58,721 --> 05:44:02,261
Sekarang, cara paling sederhana untuk melakukan ini, tentu saja\n

5963
05:44:02,260 --> 05:44:05,220
printf %s, dan colokkan\nthe s, dan selesai.

5964
05:44:05,221 --> 05:44:07,991
Tapi sekali lagi, demi\ndiskusi, saya lupa

5965
05:44:07,991 --> 05:44:12,081
atau seseorang tidak mengimplementasikan %s,\njadi bagaimana lagi kita bisa melakukan ini?

5966
05:44:12,080 --> 05:44:16,060
Ya, dalam kode semu, atau dalam bahasa Inggris\n

5967
05:44:16,061 --> 05:44:23,171
masalah ini, mencetak string\n

5968
05:44:23,170 --> 05:44:26,680
Bagaimana kita bisa menyelesaikan masalah ini?

5969
05:44:26,681 --> 05:44:28,407
Hanya dalam bahasa Inggris, tingkat tinggi?

5970
05:44:28,407 --> 05:44:29,990
Seperti apa tampilan kode semu Anda?

5971
05:44:30,491 --> 05:44:33,829
AUDIENCE: Anda dapat\nmencetak setiap huruf saja.

5972
05:44:33,829 --> 05:44:35,621
DAVID MALAN: Oke, jadi\ncetak saja setiap hurufnya.

5973
05:44:35,620 --> 05:44:37,751
Dan mungkin, lebih tepatnya,\nsemacam perulangan.

5974
05:44:37,751 --> 05:44:41,291
Seperti, mari kita ulangi\na semua karakter di s

5975
05:44:43,550 --> 05:44:48,310
Nah, untuk int i, mendapatkan 0 adalah salah satu\n

5976
05:44:49,841 --> 05:44:51,626
Oke, berapa lama saya ingin mengulanginya?

5977
05:44:51,626 --> 05:44:53,501
Yah, itu akan\ntergantung pada apa yang saya ketik

5978
05:44:53,501 --> 05:44:55,561
tapi itu sebabnya kami harus berjuang sekarang.

5979
05:44:55,561 --> 05:45:00,341
Jadi ulangi hingga panjang\ns, lalu tambahkan i dengan plus

5980
05:45:01,335 --> 05:45:04,931
Lalu mari kita print\nout %c tanpa baris baru

5981
05:45:04,931 --> 05:45:07,271
karena saya ingin semuanya\non baris yang sama

5982
05:45:07,271 --> 05:45:12,041
apapun karakternya\nis pada braket s i.

5983
05:45:12,041 --> 05:45:14,050
Lalu pada\nakhirnya, aku akan menyerahkan diriku

5984
05:45:14,050 --> 05:45:16,611
baris baru itu, hanya untuk memindahkan\nkursor ke bawah ke baris berikutnya

5985
05:45:16,611 --> 05:45:18,611
jadi tanda dolar\ntidak ada di tempat yang aneh.

5986
05:45:18,611 --> 05:45:21,491
Baiklah, jadi mari kita lihat apakah saya\ntidak mengacaukan kode apa pun

5987
05:45:21,491 --> 05:45:26,951
buat string, Enter, sejauh ini bagus,\n

5988
05:45:30,280 --> 05:45:33,940
Biarkan saya melakukannya sekali lagi dengan\nsampai jumpa, Enter, dan itu berhasil juga.

5989
05:45:33,940 --> 05:45:36,670
Perhatikan, saya dengan sangat sengaja\ndan segera menyerahkan diri

5990
05:45:36,670 --> 05:45:39,520
dua spasi di sini dan satu spasi\ndi sini hanya karena saya, secara harfiah

5991
05:45:39,521 --> 05:45:42,881
ingin semua ini tertata dengan baik,\n

5992
05:45:42,881 --> 05:45:46,091
Namun itu hanyalah\ndetail pemformatan yang disengaja.

5993
05:45:47,780 --> 05:45:53,501
Klaim ini pernah saya buat sebelumnya,\ntetapi tidak dirancang dengan baik.

5994
05:45:53,501 --> 05:45:57,431
Ini dirancang dengan baik karena saya menggunakan\n

5995
05:45:57,431 --> 05:45:59,921
seperti, saya belum menemukan kembali\na roda, tidak ada garis 15

5996
05:45:59,920 --> 05:46:02,530
atau di bawahnya, saya sendiri tidak menerapkan\npanjang string.

5997
05:46:02,530 --> 05:46:07,900
Jadi setidaknya saya mempraktikkan\napa yang telah saya khotbahkan.

5998
05:46:07,901 --> 05:46:12,621
Namun masih ada\nketidaksempurnaan, suboptimalitas.

5999
05:46:12,620 --> 05:46:15,170
Tapi yang ini sangat halus.

6000
05:46:15,170 --> 05:46:18,590
Dan Anda harus memikirkan\ncara kerja loop.

6001
05:46:18,591 --> 05:46:22,901
Apa yang saya lakukan yang\ntidak terlalu efisien?

6002
05:46:24,131 --> 05:46:27,439
HADIRIN: [Tak terdengar]\tidak berulang-ulang.

6003
05:46:27,438 --> 05:46:29,230
DAVID MALAN: Ya, ini\nsedikit halus.

6004
05:46:29,230 --> 05:46:31,721
Namun jika Anda mengingat kembali\ndefinisi dasar 4 loop

6005
05:46:31,721 --> 05:46:34,331
dan ingat saat saya menyorot\nsesuatu minggu lalu, apa yang terjadi?

6006
05:46:34,330 --> 05:46:37,090
Nah, hal pertama yang saya setel ke 0.

6007
05:46:37,091 --> 05:46:38,570
Lalu kita periksa kondisinya.

6008
05:46:38,570 --> 05:46:39,820
Bagaimana cara kita memeriksa kondisinya?

6009
05:46:39,820 --> 05:46:42,640
Kami memanggil strlen di s,\nkami mendapatkan jawaban kembali

6010
05:46:42,640 --> 05:46:49,070
seperti 3 jika itu tanda seru H-I\n

6011
05:46:49,070 --> 05:46:50,830
dan kemudian kami mencetak karakternya.

6012
05:46:50,830 --> 05:46:53,320
Kemudian kita menambah i dari 0 menjadi 1.

6013
05:46:54,728 --> 05:46:56,021
Bagaimana cara memeriksa kembali kondisinya?

6014
05:46:58,361 --> 05:47:01,151
Dapatkan kembali jawaban yang sama, 3.

6015
05:47:04,061 --> 05:47:08,951
Jadi kami mencetak karakter lain. saya\n

6016
05:47:11,170 --> 05:47:12,220
Nah, string seperti apa yang terbaik?

6017
05:47:16,120 --> 05:47:19,690
Jadi saya terus menanyakan\npertanyaan yang sama dengan cara yang bodoh

6018
05:47:19,690 --> 05:47:22,480
karena stringnya, mungkin,\ntidak pernah berubah panjangnya.

6019
05:47:22,480 --> 05:47:24,418
Dan memang, setiap kali\nsaya memeriksa kondisi itu

6020
05:47:24,419 --> 05:47:25,961
fungsi itu akan dipanggil.

6021
05:47:25,960 --> 05:47:28,640
Dan setiap saat, jawaban\nuntuk hai adalah 3.

6022
05:47:30,355 --> 05:47:35,111
Jadi ini adalah suboptimalitas marginal,\ntapi saya bisa melakukan yang lebih baik, bukan?

6023
05:47:35,111 --> 05:47:39,820
Jangan bertanya berkali-kali\n

6024
05:47:39,820 --> 05:47:45,221
Jadi bagaimana saya bisa mengingat jawaban\n

6025
05:47:45,221 --> 05:47:49,011
Bagaimana saya bisa mengingat\njawaban pertanyaan ini?

6026
05:47:50,291 --> 05:47:51,707
AUDIENCE: Simpan dalam variabel.

6027
05:47:51,706 --> 05:47:53,440
DAVID MALAN: Jadi simpan\nit dalam sebuah variabel, kan?

6028
05:47:53,440 --> 05:47:56,358
Itu adalah jawaban kami yang paling sering\n

6029
05:47:57,381 --> 05:48:02,140
Ya, saya bisa melakukan hal seperti ini,\n

6030
05:48:02,140 --> 05:48:05,460
Lalu saya bisa mengubah\npemanggilan fungsi ini.

6031
05:48:05,460 --> 05:48:07,420
Biarkan saya memperbaiki ejaan saya di sini.

6032
05:48:07,420 --> 05:48:11,620
Biarkan saya memperbaikinya agar dapat dibandingkan\n

6033
05:48:11,620 --> 05:48:14,501
Karena sekarang strlen hanya\ndipanggil satu kali pada baris 9.

6034
05:48:14,501 --> 05:48:17,001
Dan saya menggunakan kembali nilai\nvariabel itu, alias.

6035
05:48:17,001 --> 05:48:18,501
panjang, lagi, dan lagi, dan lagi.

6036
05:48:19,543 --> 05:48:24,021
Ternyata 4 loop memungkinkan Anda\n

6037
05:48:24,021 --> 05:48:28,280
jadi kita bisa melakukan ini sedikit\nlebih elegan, semuanya dalam satu baris.

6038
05:48:28,280 --> 05:48:31,030
Dan ini hanyalah beberapa\nperbaikan sintaksis.

6039
05:48:31,030 --> 05:48:36,190
Saya sebenarnya bisa melakukan sesuatu\nseperti ini, n sama dengan strlen dari s

6040
05:48:36,190 --> 05:48:39,010
lalu saya bisa bilang n\ndi sini atau saya bisa bilang panjangnya.

6041
05:48:39,010 --> 05:48:41,927
Namun, selagi saya menjelaskan secara ringkas\n

6042
05:48:41,927 --> 05:48:46,361
Jadi sekarang ini hanyalah perubahan kecil\ntapi sekarang saya sudah melakukannya

6043
05:48:46,361 --> 05:48:50,291
mendeklarasikan dua variabel\nindi dalam loop saya, i dan n.

6044
05:48:50,291 --> 05:48:53,561
i is set to 0. n extends\nto the string length of s.

6045
05:48:53,561 --> 05:48:57,641
Tapi sekarang, selanjutnya, semua kondisiku\n

6046
05:48:57,640 --> 05:49:00,431
saya kurang dari n, dan n tidak pernah berubah.

6047
05:49:00,431 --> 05:49:02,269
Baiklah, hanya ada sedikit\nperbaikan di sana.

6048
05:49:02,269 --> 05:49:04,061
Sekarang saya telah menggunakan\nfungsi baru ini, mari

6049
05:49:04,061 --> 05:49:06,186
gunakan beberapa fungsi lain\nyang mungkin menarik.

6050
05:49:06,186 --> 05:49:12,941
Izinkan saya menulis program singkat di sini\n

6051
05:49:12,940 --> 05:49:16,070
perubahan menjadi huruf besar beberapa\nstring yang diketik pengguna.

6052
05:49:16,070 --> 05:49:19,751
Jadi izinkan saya membuat kode file\nbernama huruf besar.c.

6053
05:49:19,751 --> 05:49:25,780
Sampai di sini aku akan menggunakan teman baruku,\n

6054
05:49:25,780 --> 05:49:31,330
Jadi I/O standar, dan string.h Jadi\nsama seperti sebelumnya int main(void).

6055
05:49:31,330 --> 05:49:33,880
Lalu di dalam main, apa\nyang akan saya lakukan kali ini

6056
05:49:33,881 --> 05:49:38,651
adalah mari kita meminta string kepada pengguna\n

6057
05:49:39,940 --> 05:49:44,390
Lalu izinkan saya mencetak\nsesuatu seperti setelahnya.

6058
05:49:44,390 --> 05:49:48,670
Supaya-- supaya saya bisa melihat apa\n

6059
05:49:48,670 --> 05:49:52,870
Dan setelah ini, izinkan saya\melakukan hal berikut, untuk int, i

6060
05:49:52,870 --> 05:49:56,290
sama dengan 0, oh, mari\npraktikkan pelajaran yang sama

6061
05:49:56,291 --> 05:50:02,050
jadi n sama dengan panjang string\n

6062
05:50:02,050 --> 05:50:05,861
Jadi sebenarnya, belum ada\nyang baru secara mendasar.

6063
05:50:05,861 --> 05:50:11,530
Bagaimana cara saya sekarang mengonversi karakter dari\n

6064
05:50:11,530 --> 05:50:14,260
Dengan kata lain, jika saya mengetik\nin hai, H-I dalam huruf kecil

6065
05:50:14,260 --> 05:50:19,751
Saya ingin program saya, sekarang, menjadi huruf besar\n

6066
05:50:19,751 --> 05:50:23,030
Nah, bagaimana saya bisa melakukan ini?

6067
05:50:23,030 --> 05:50:25,271
Anda mungkin ingat\nada ini--

6068
05:50:25,271 --> 05:50:28,161
Anda mungkin ingat\nada bagan ASCII ini.

6069
05:50:28,161 --> 05:50:31,116
Jadi mari kita lihat\nsecepatnya di asciichart.com.

6070
05:50:31,116 --> 05:50:35,771
Kita telah melihat ini minggu lalu\nperhatikan bahwa a-- kapital A adalah 65

6071
05:50:35,771 --> 05:50:39,701
modal B adalah 66, modal\nC adalah 67, dan ini dia

6072
05:50:39,701 --> 05:50:43,901
huruf kecil a, huruf kecil b,\nhuruf kecil c, dan hasilnya 97, 98, 99.

6073
05:50:43,901 --> 05:50:47,241
Dan jika saya benar-benar menghitung\n, jaraknya adalah 32.

6074
05:50:47,741 --> 05:50:49,901
Jadi jika saya ingin beralih dari\nupercase ke huruf kecil

6075
05:50:49,901 --> 05:50:55,049
Saya bisa melakukan 65 ditambah 32 akan memberi saya\n97 dan itu benar-benar berhasil

6076
05:50:55,048 --> 05:50:56,591
secara menyeluruh untuk segala hal lainnya.

6077
05:50:56,591 --> 05:51:00,280
66 ditambah 32 membuat saya menjadi 98 atau huruf kecil b.

6078
05:51:00,280 --> 05:51:04,900
Atau sebaliknya, jika Anda memiliki\nhuruf kecil a, dan nilainya 97

6079
05:51:04,901 --> 05:51:11,111
kurangi 32 dan boom, kamu punya modal\n

6080
05:51:11,111 --> 05:51:13,721
Namun sekarang kita tahu bahwa\nstring hanyalah array

6081
05:51:13,721 --> 05:51:17,591
dan kita mengetahui karakter-karakter itu,\nyang ada dalam array tersebut

6082
05:51:17,591 --> 05:51:20,710
hanyalah representasi\nangka biner

6083
05:51:20,710 --> 05:51:23,558
Saya pikir kita dapat memanipulasi\nbeberapa hal ini sebagai berikut.

6084
05:51:23,558 --> 05:51:25,390
Biarkan saya kembali ke\nprogram saya di sini, dan pertama

6085
05:51:25,390 --> 05:51:29,620
ajukan pertanyaan, apakah arus\n

6086
05:51:29,620 --> 05:51:33,190
adalah huruf kecil, mari\npaksa menjadi huruf besar.

6087
05:51:33,190 --> 05:51:34,510
Jadi bagaimana saya akan melakukan itu?

6088
05:51:34,510 --> 05:51:40,720
Jika karakter pada tanda kurung s i,\n

6089
05:51:40,721 --> 05:51:45,581
lebih besar atau sama dengan\nhuruf kecil a, dan tanda kurung s

6090
05:51:45,580 --> 05:51:50,920
i kurang dari atau sama dengan\nhuruf kecil z, semacam Boolean yang aneh

6091
05:51:50,920 --> 05:51:55,720
ekspresi tetapi sepenuhnya\nsah, karena dalam array ini

6092
05:51:55,721 --> 05:51:58,491
s adalah sekumpulan karakter\nyang diketik manusia

6093
05:51:58,491 --> 05:52:01,781
karena itulah yang dimaksud dengan string,\n

6094
05:52:01,780 --> 05:52:03,940
bersikaplah sedikit tidak masuk akal\nkarena pernahkah Anda melakukannya

6095
05:52:03,940 --> 05:52:05,591
membandingkan angka dengan huruf?

6096
05:52:05,591 --> 05:52:11,829
Tapi kita tahu dari minggu 0 huruf kecil a\n

6097
05:52:16,850 --> 05:52:20,650
Sehingga hal ini memungkinkan kami untuk menjawab\n

6098
05:52:21,670 --> 05:52:24,790
Baiklah, jadi izinkan saya\nmenjawab pertanyaan itu.

6099
05:52:24,791 --> 05:52:27,401
Jika ya, apa yang ingin saya cetak?

6100
05:52:27,401 --> 05:52:30,131
Saya tidak ingin mencetak\nsurat itu sendiri

6101
05:52:30,131 --> 05:52:33,550
Saya ingin mencetak\nsuratnya dikurangi 32 ya?

6102
05:52:33,550 --> 05:52:37,420
Karena kalau kebetulan a\nhuruf kecil a, 97, 97 dikurangi 32

6103
05:52:37,420 --> 05:52:39,790
memberi saya 65, yaitu\nuppercase A, dan saya tahu itu

6104
05:52:39,791 --> 05:52:43,121
hanya karena pernah menatap\nat grafik itu di masa lalu.

6105
05:52:43,120 --> 05:52:48,433
Lain lagi jika karakternya tidak\nantara A kecil dan A besar

6106
05:52:48,433 --> 05:52:50,140
Saya hanya akan\nmencetak karakternya

6107
05:52:50,140 --> 05:52:52,810
sendiri dengan mencetak s braket i.

6108
05:52:52,811 --> 05:52:55,841
Dan pada akhirnya, aku\n

6109
05:52:55,841 --> 05:52:57,741
untuk memindahkan kursor ke baris berikutnya.

6110
05:52:57,741 --> 05:52:59,191
Jadi sekali lagi, ini sedikit bertele-tele.

6111
05:52:59,190 --> 05:53:03,280
Namun perulangan ini, yang saya\npinjam dari kode kita sebelumnya

6112
05:53:03,280 --> 05:53:05,771
hanya mengulangi string, alias.

6113
05:53:05,771 --> 05:53:08,890
array, karakter demi karakter,\npanjangnya.

6114
05:53:08,890 --> 05:53:11,620
Baris 11 ini\nhanya menanyakan pertanyaan

6115
05:53:11,620 --> 05:53:15,130
jika karakter saat ini,\nkarakter ke-i dari s

6116
05:53:15,131 --> 05:53:18,161
lebih besar dari atau sama\ndengan sedikit a dan lebih kecil

6117
05:53:18,161 --> 05:53:23,501
dari atau sama dengan z kecil, yaitu\nantara 97 dan 132, lalu

6118
05:53:23,501 --> 05:53:29,201
kita akan melanjutkan dan\nmemaksanya menjadi huruf besar.

6119
05:53:29,201 --> 05:53:33,550
Baiklah, izinkan saya memperbesar\nkeluar sebentar.

6120
05:53:33,550 --> 05:53:38,530
Dan maaf, saya salah mengucapkan 122, yang\nmungkin Anda katakan.

6121
05:53:41,530 --> 05:53:44,540
Biarkan saya melanjutkan sekarang dan\nkompilasi dan jalankan program ini.

6122
05:53:44,541 --> 05:53:50,471
Jadi buatlah huruf besar, ./huruf besar, dan\n

6123
05:53:50,471 --> 05:53:52,781
Dan ada versi\nyang dikapitalisasi.

6124
05:53:52,780 --> 05:53:55,181
Biarkan saya melakukannya lagi, dengan\nnama saya sendiri dalam huruf kecil

6125
05:53:55,181 --> 05:53:57,361
dan sekarang dikapitalisasi juga.

6126
05:53:57,361 --> 05:53:59,120
Nah, apa yang bisa kita lakukan untuk memperbaikinya?

6127
05:54:00,221 --> 05:54:01,901
Mari kita berhenti menciptakan kembali roda.

6128
05:54:01,901 --> 05:54:04,101
Mari kita pergi ke halaman manual.

6129
05:54:04,100 --> 05:54:07,751
Jadi izinkan saya pergi ke sini dan mencari\nsesuatu seperti, saya tidak tahu

6130
05:54:09,881 --> 05:54:12,730
Saya melakukan pelengkapan otomatis\ndi sini, kotak pencarian kecil kami

6131
05:54:12,730 --> 05:54:14,980
mengatakan itu, oke, ada\nan fungsi yang lebih rendah

6132
05:54:14,980 --> 05:54:16,811
periksa apakah karakternya huruf kecil.

6133
05:54:17,901 --> 05:54:23,411
Baiklah saya periksa, lebih rendah, sekarang saya mengerti\n

6134
05:54:27,163 --> 05:54:28,870
itulah file header\nyang perlu saya sertakan.

6135
05:54:28,870 --> 05:54:32,830
Ini adalah prototipe untuk is-lower,\n

6136
05:54:35,591 --> 05:54:38,661
Saya rasa is-lower seharusnya\nmenghasilkan nilai benar atau salah.

6137
05:54:38,661 --> 05:54:42,940
Jadi mari gulir ke bawah ke\ndeskripsi dan kembalikan nilai.

6138
05:54:42,940 --> 05:54:45,070
Ia kembali, oh ini menarik.

6139
05:54:45,070 --> 05:54:49,631
Dan ini adalah konvensi di C. Ini\n

6140
05:54:49,631 --> 05:54:55,081
jika C adalah huruf kecil dan 0\njika C bukan huruf kecil.

6141
05:54:57,491 --> 05:55:02,591
Jadi seperti 1, negatif 1, sesuatu itu\n

6142
05:55:02,591 --> 05:55:05,661
dan 0 jika bukan huruf kecil.

6143
05:55:05,661 --> 05:55:07,420
Jadi bagaimana kita bisa menggunakan blok penyusun ini?

6144
05:55:07,420 --> 05:55:09,490
Biarkan saya kembali ke kode saya di sini.

6145
05:55:09,491 --> 05:55:13,871
Izinkan saya menambahkan file ini, sertakan ctype.h.

6146
05:55:13,870 --> 05:55:17,380
Dan di sini, izinkan saya menghilangkan\nekspresi samar ini, yang mana

6147
05:55:17,381 --> 05:55:23,320
agak menyakitkan untuk dipikirkan,\n

6148
05:55:26,230 --> 05:55:29,650
Itu seharusnya berhasil, tetapi mengapa?

6149
05:55:29,651 --> 05:55:34,781
Ya, lebih rendah, sekali lagi, mengembalikan bukan nol\n

6150
05:55:36,411 --> 05:55:37,675
Itu berarti bisa mengembalikan 1.

6151
05:55:37,675 --> 05:55:38,800
Itu bisa menghasilkan negatif 1.

6152
05:55:38,800 --> 05:55:40,631
Itu bisa menghasilkan 50 atau negatif 50.

6153
05:55:40,631 --> 05:55:42,911
Hal ini sebenarnya tidak\ndidefinisikan secara tepat, mengapa?

6154
05:55:43,960 --> 05:55:48,010
Ini adalah konvensi umum untuk\nmenggunakan 0 untuk mewakili false dan use

6155
05:55:48,010 --> 05:55:50,380
nilai lain apa pun untuk mewakili kebenaran.

6156
05:55:50,381 --> 05:55:54,401
Dan ternyata, itu\di dalam ekspresi Boolean

6157
05:55:54,401 --> 05:55:59,016
jika Anda memberi nilai seperti fungsi\n

6158
05:55:59,015 --> 05:56:00,640
itu akan sama dengan false.

6159
05:56:00,640 --> 05:56:03,236
Jawabannya seperti\ntidak, tidak lebih rendah.

6160
05:56:03,236 --> 05:56:06,251
Namun Anda juga dapat, dalam\ntanda kurung, mencantumkan namanya

6161
05:56:06,251 --> 05:56:10,181
fungsi dan argumennya,\n

6162
05:56:10,181 --> 05:56:15,491
Karena kita bisa melakukan sesuatu seperti\n

6163
05:56:16,508 --> 05:56:19,091
Karena itulah definisinya,\njika ia mengembalikan nilai bukan nol

6164
05:56:20,021 --> 05:56:23,471
Namun cara yang lebih ringkas untuk melakukannya\n

6165
05:56:23,471 --> 05:56:28,371
Jika lebih rendah, cetak\nkarakternya dikurangi 32.

6166
05:56:28,370 --> 05:56:30,850
Jadi ini adalah cara yang umum\nmenggunakan salah satu dari ini

6167
05:56:30,850 --> 05:56:34,286
is- berfungsi untuk memeriksa apakah\njawabannya benar atau salah.

6168
05:56:37,070 --> 05:56:38,931
DAVID MALAN: Oke, mungkin kita sudah selesai.

6169
05:56:43,780 --> 05:56:47,440
Akan salah jika memeriksa\n

6170
05:56:47,440 --> 05:56:49,810
Anda ingin memeriksa kebalikan dari 0.

6171
05:56:51,131 --> 05:56:56,081
Atau lebih ringkasnya, seperti yang saya lakukan pada\n

6172
05:56:56,080 --> 05:56:58,820
Biarkan saya melihat apa yang terjadi di sini.

6173
05:56:58,820 --> 05:57:02,951
Jadi ini bagus, tapi sebagian dari Anda\n

6174
05:57:03,940 --> 05:57:06,490
Beberapa saat yang lalu ketika kami sedang mencari\nhalaman manual

6175
05:57:06,491 --> 05:57:09,641
untuk hal-hal yang berhubungan dengan huruf kecil,\nmungkin bangunan lainnya

6176
05:57:13,420 --> 05:57:14,960
Berdasarkan apa yang ada di layar di sini?

6177
05:57:18,401 --> 05:57:21,359
Ada fungsi yang secara harfiah\n

6178
05:57:21,359 --> 05:57:24,293
jadi saya tidak perlu terlibat dalam\nnegatif 32, ditambah 32.

6179
05:57:24,293 --> 05:57:25,751
Saya tidak perlu berkonsultasi dengan bagan itu.

6180
05:57:25,751 --> 05:57:29,381
Seseorang telah memecahkan\nmasalah ini untuk saya di masa lalu.

6181
05:57:29,381 --> 05:57:33,941
Dan mari kita lihat apakah saya bisa\nbenar-benar kembali ke sana.

6182
05:57:34,780 --> 05:57:36,800
Biarkan saya melanjutkan sekarang, dan menggunakan ini.

6183
05:57:36,800 --> 05:57:39,490
Jadi daripada melakukan\ns braket saya minus 32

6184
05:57:39,491 --> 05:57:44,141
mari kita gunakan fungsi yang dimiliki orang lain\n

6185
05:57:44,681 --> 05:57:47,511
Dan sekarang ini akan menjadi\ndo solusi bagi saya.

6186
05:57:47,510 --> 05:57:54,790
Jadi jika saya menjalankan kembali make huruf besar, lalu\n

6187
05:57:54,791 --> 05:57:56,381
sekarang berfungsi seperti yang diharapkan.

6188
05:57:56,381 --> 05:58:00,131
Dan sejujurnya, jika saya membaca\ndodokumentasi untuk bagian atas

6189
05:58:00,131 --> 05:58:03,431
dengan kembali ke halaman manualnya,\atau halaman manual, apa yang akan Anda lihat

6190
05:58:03,431 --> 05:58:08,681
apakah tertulis huruf kecil,\n

6191
05:58:09,311 --> 05:58:13,174
Kalau bukan huruf kecil, berarti sudah\nupercase, itu tanda baca

6192
05:58:13,173 --> 05:58:14,966
itu hanya akan mengembalikan\nkarakter asli.

6193
05:58:14,966 --> 05:58:18,161
Artinya, berkat\nfungsi ini, saya sebenarnya bisa

6194
05:58:18,161 --> 05:58:21,911
perketat ini secara signifikan,\nhilangkan semua persyaratan saya

6195
05:58:21,911 --> 05:58:26,291
di sana, dan cukup cetak\nnilai pengembalian ke atas

6196
05:58:26,291 --> 05:58:29,320
dan serahkan pada siapa pun yang menulis\nfungsi itu untuk mencari tahu

6197
05:58:29,320 --> 05:58:33,730
jika ada sesuatu yang huruf besar atau kecil.

6198
05:58:33,730 --> 05:58:38,080
Baiklah, pertanyaan tentang\ntrik semacam ini?

6199
05:58:38,080 --> 05:58:41,350
Sekali lagi, semuanya direduksi menjadi\ndasar-dasar minggu ke-0, namun kami hanya melakukannya

6200
05:58:41,350 --> 05:58:43,010
membangun abstraksi ini di atas.

6201
05:58:43,510 --> 05:58:45,468
HADIRIN: Saya ingin tahu\napakah ada cara yang tepat

6202
05:58:45,469 --> 05:58:49,370
untuk mengimpor semua paket dalam\na subdomain tertentu

6203
05:58:49,370 --> 05:58:51,380
karena harus melakukan beberapa\n[Tak terdengar] pernyataan

6204
05:58:51,381 --> 05:58:52,673
seperti bintang [Tak terdengar]

6205
05:58:54,440 --> 05:58:57,380
Tidak ada cara mudah untuk mengatakan, berikan aku segalanya.

6206
05:58:57,381 --> 05:58:59,931
Hal ini, secara historis,\nalasan kinerja.

6207
05:58:59,931 --> 05:59:03,201
Mereka ingin Anda menjelaskan\na secara eksplisit apa yang ingin Anda sertakan.

6208
05:59:03,201 --> 05:59:05,991
Dalam bahasa lain seperti\nPython, Java, salah satunya

6209
05:59:05,991 --> 05:59:08,774
kita lihat nanti di semester ini,\nbisa dibilang, berikan saya segalanya.

6210
05:59:08,774 --> 05:59:11,691
Namun sebenarnya, itu cenderung yang terbaik\n

6211
05:59:11,690 --> 05:59:14,260
eksekusi atau kompilasi kode Anda.

6212
05:59:14,760 --> 05:59:17,105
AUDIENCE: Apakah to-upper\nakomodasi untuk karakter khusus?

6213
05:59:17,600 --> 05:59:20,240
Apakah bagian atas mengakomodasi karakter\nkhusus seperti tanda baca?

6214
05:59:20,741 --> 05:59:22,701
Jika saya membaca dokumentasi\nlebih teliti

6215
05:59:23,971 --> 05:59:27,201
Ini akan memberi saya\ntanda seru kembali

6216
05:59:28,861 --> 05:59:33,230
Jadi jika saya membuat huruf besar di sini,\ndan izinkan saya membuat ./upper, maaf--

6217
05:59:33,230 --> 05:59:37,881
./huruf besar, hai dengan tanda seru\n

6218
05:59:37,881 --> 05:59:40,070
meneruskannya tanpa perubahan Ya?

6219
05:59:40,070 --> 05:59:43,460
AUDIENCE: Apakah kita mengakses\nfungsi yang dapat melakukan semua itu

6220
05:59:43,460 --> 05:59:45,850
tapi hanya ke layar\ndan bukan ke [Tak terdengar]

6221
05:59:45,850 --> 05:59:47,810
DAVID MALAN: Pertanyaan yang sangat bagus juga.

6222
05:59:47,811 --> 05:59:52,371
Tidak, kami tidak memiliki akses ke suatu fungsi\n

6223
05:59:52,370 --> 05:59:56,001
dengan perpustakaan CS50 yang hanya akan\n

6224
05:59:56,001 --> 05:59:58,431
Di C, hal itu sebenarnya\lebih mudah diucapkan daripada dilakukan.

6225
05:59:59,811 --> 06:00:04,070
Jadi nantikan bahasa lainnya\n

6226
06:00:04,070 --> 06:00:06,771
Baiklah, jadi apa yang\nsisanya bagi kita?

6227
06:00:06,771 --> 06:00:08,780
Hanya ada-- mari kita\nmelakukan lingkaran penuh sekarang

6228
06:00:08,780 --> 06:00:11,751
ke titik awal kita hari ini\n

6229
06:00:12,350 --> 06:00:16,070
Ingatlah bahwa kita berbicara tentang rm\ntaking argumen baris perintah.

6230
06:00:16,070 --> 06:00:18,730
File yang ingin Anda hapus,\nkita bicarakan tentang dentang

6231
06:00:18,730 --> 06:00:20,480
mengambil argumen baris perintah, itu lagi

6232
06:00:20,480 --> 06:00:22,400
mengubah perilaku program.

6233
06:00:22,401 --> 06:00:25,941
Bagaimana mungkin Anda dan saya\nbisa mulai menulis program itu

6234
06:00:25,940 --> 06:00:28,100
benar-benar mengambil argumen baris perintah?

6235
06:00:28,100 --> 06:00:31,880
Di sinilah saya\nakhirnya bisa menjelaskan alasannya

6236
06:00:31,881 --> 06:00:35,001
kami telah mengetik int\nmain(void) selama seminggu terakhir

6237
06:00:35,001 --> 06:00:38,751
dan hanya meminta agar kamu percaya\n

6238
06:00:38,751 --> 06:00:45,081
Ya, secara default di C, setidaknya\n

6239
06:00:45,080 --> 06:00:48,270
hanya ada dua\ncara resmi untuk menulis fungsi utama.

6240
06:00:48,271 --> 06:00:50,721
Anda mungkin melihat format lain\nonline, tetapi umumnya memang demikian

6241
06:00:50,721 --> 06:00:53,131
tidak konsisten dengan\nspesifikasi saat ini.

6242
06:00:53,131 --> 06:00:56,421
Sekali lagi, ini adalah semacam\nboilerplate untuk hal yang paling sederhana

6243
06:00:56,420 --> 06:00:59,030
fungsi yang mungkin kita tulis\nminggu lalu, dan ingatlah bahwa kita sudah melakukannya

6244
06:00:59,030 --> 06:01:00,470
telah melakukan ini sepanjang waktu.

6245
06:01:00,471 --> 06:01:05,251
(Void) Apa artinya (void), bagi semua\n

6246
06:01:05,251 --> 06:01:08,151
dan Anda telah menulis sejauh ini,\nisbahwa tidak ada satupun program kami

6247
06:01:08,151 --> 06:01:11,301
yang telah kami tulis mengambil\nargumen baris perintah.

6248
06:01:11,300 --> 06:01:13,370
Itulah yang dimaksud dengan kekosongan di sana.

6249
06:01:13,370 --> 06:01:18,210
Ternyata yang utama adalah caramu\n

6250
06:01:18,210 --> 06:01:20,001
sebenarnya, ambil argumen\nline perintah, itu

6251
06:01:20,001 --> 06:01:24,021
adalah kata-kata setelah perintah\di jendela terminal Anda.

6252
06:01:24,021 --> 06:01:26,480
Jika Anda ingin sebenarnya tidak\nmenggunakan get int atau get string

6253
06:01:26,480 --> 06:01:30,230
Anda ingin manusia dapat\n

6254
06:01:31,100 --> 06:01:34,200
Dan jalankan saja-- print\nhalo, David di layar.

6255
06:01:34,201 --> 06:01:38,721
Anda dapat menggunakan argumen baris perintah,\nkata setelah nama program

6256
06:01:41,010 --> 06:01:44,720
Jadi kita akan mengubahnya dalam\n

6257
06:01:44,721 --> 06:01:48,191
tapi sesuatu yang sekarang sedikit\nlebih familiar secara sintaksis.

6258
06:01:48,190 --> 06:01:52,700
Jika Anda mengubahnya (batal) di main\n

6259
06:01:52,701 --> 06:01:57,741
int, argc, koma, string, argv,\no kurung buka, kurung tutup

6260
06:01:57,741 --> 06:02:00,891
Anda sekarang memberi diri Anda\nakses untuk menulis program

6261
06:02:00,890 --> 06:02:03,170
yang mengambil argumen baris perintah.

6262
06:02:03,170 --> 06:02:06,380
Argc, yang merupakan singkatan dari\nargument count is going

6263
06:02:06,381 --> 06:02:10,671
menjadi bilangan bulat yang menyimpan berapa banyak\n

6264
06:02:10,670 --> 06:02:13,310
C secara otomatis memberikannya kepada Anda.

6265
06:02:13,311 --> 06:02:16,971
String argv adalah singkatan dari\nargument vector, yaitu

6266
06:02:16,971 --> 06:02:21,361
akan menjadi array dari semua kata\n

6267
06:02:21,361 --> 06:02:23,390
Begitu pula dengan blok\npembangun array saat ini

6268
06:02:23,390 --> 06:02:26,240
kini kami memiliki kemampuan untuk membiarkan\nmanusia mengetik kata sebanyak-banyaknya

6269
06:02:26,241 --> 06:02:28,161
atau sesedikit\nyang diinginkan saat diminta.

6270
06:02:28,161 --> 06:02:31,161
C akan secara otomatis menempatkan\nmereka dalam array bernama argv

6271
06:02:31,161 --> 06:02:36,620
dan itu akan memberi tahu kita berapa banyak\n

6272
06:02:36,620 --> 06:02:40,320
Int, sebagai tipe kembalian di sini,\n

6273
06:02:40,320 --> 06:02:43,611
Mari kita gunakan definisi ini\nuntuk membuatnya, mungkin

6274
06:02:43,611 --> 06:02:45,230
hanya beberapa program sederhana.

6275
06:02:45,230 --> 06:02:47,330
Namun dalam kumpulan masalah 2\nakankah kita benar-benar menggunakannya

6276
06:02:47,330 --> 06:02:50,730
ini untuk mengontrol\nperilaku kode Anda sendiri.

6277
06:02:50,730 --> 06:02:57,381
Izinkan saya membuat kode file bernama\nargv.0 agar tetap diberi nama yang tepat.

6278
06:02:59,960 --> 06:03:01,501
Izinkan saya melanjutkan dan menyertakan--

6279
06:03:02,001 --> 06:03:05,210
Itu bukan nama\nprogram yang tepat, mari kita mulai dari awal.

6280
06:03:05,210 --> 06:03:09,710
Mari kita lanjutkan dan membuat kode argv.c.

6281
06:03:11,061 --> 06:03:17,151
sertakan cs50.h, sertakan\nstdio.h, int, main, bukan void

6282
06:03:17,151 --> 06:03:24,286
katakanlah int, argc, string,\n

6283
06:03:24,286 --> 06:03:26,661
Tidak ada angka di antaranya karena\nAnda tidak mengetahuinya sebelumnya

6284
06:03:26,661 --> 06:03:29,570
berapa banyak kata yang\nakan diketik manusia saat diminta.

6285
06:03:29,570 --> 06:03:31,021
Sekarang mari kita lanjutkan dan lakukan ini.

6286
06:03:31,021 --> 06:03:35,061
Mari kita menulis sebuah program yang sangat sederhana yang\n

6287
06:03:35,061 --> 06:03:36,921
siapa pun namanya yang diketik.

6288
06:03:36,920 --> 06:03:40,520
Tapi tidak menggunakan get string, mari\nin gunakan manusia saja

6289
06:03:40,521 --> 06:03:44,151
ketikkan nama mereka saat diminta, seperti\n

6290
06:03:44,151 --> 06:03:46,431
jadi hanya satu dan\nselesai ketika Anda menekan Enter.

6291
06:03:47,870 --> 06:03:52,640
Izinkan saya melakukan ini,\nprintf, kutip-tanda kutip, halo

6292
06:03:52,640 --> 06:03:55,760
koma, dan alih-alih world\ntoday, saya ingin mencetaknya

6293
06:03:55,760 --> 06:03:57,630
apa pun yang diketik manusia.

6294
06:03:57,631 --> 06:04:03,111
Jadi ayo lanjutkan dan lakukan\nini, argv, tanda kurung 0 untuk saat ini.

6295
06:04:03,111 --> 06:04:07,341
Namun menurut saya ini bukan\nyang saya inginkan karena, tentu saja

6296
06:04:07,341 --> 06:04:12,631
itu akan benar-benar mencetak\nout argv, bracket, 0, bracket.

6297
06:04:12,631 --> 06:04:16,771
Saya memerlukan pengganti, jadi izinkan saya\n

6298
06:04:16,771 --> 06:04:20,780
Jadi jika argv adalah sebuah array, tetapi\nit adalah sebuah array string

6299
06:04:20,780 --> 06:04:24,740
maka argv bracket 0 sendirinya adalah string tunggal.

6300
06:04:24,741 --> 06:04:27,711
Dan agar dapat dicolokkan\ninke placeholder %s itu.

6301
06:04:27,710 --> 06:04:30,001
Biarkan saya melanjutkan dan menyimpan program saya.

6302
06:04:30,001 --> 06:04:33,600
Dan kompilasi argv, sejauh ini, sangat bagus.

6303
06:04:33,600 --> 06:04:37,431
Izinkan saya mengetikkan nama saya\nsetelah nama programnya.

6304
06:04:38,241 --> 06:04:42,541
Saya benar-benar mengetik kata tambahan,\n

6305
06:04:42,541 --> 06:04:45,550
Oke, sepertinya ini sedikit\nbermasalah dalam beberapa hal.

6306
06:04:45,550 --> 06:04:48,760
Saya lupa /n saya, tapi\nitu bukan masalah besar.

6307
06:04:48,760 --> 06:04:53,220
Namun rupanya, di dalam\nargv sebenarnya ada segalanya

6308
06:04:53,221 --> 06:04:55,531
yang diketik manusia termasuk\nnama programnya.

6309
06:04:55,530 --> 06:05:00,510
Jadi logikanya, bagaimana cara mencetak halo,\n

6310
06:05:00,510 --> 06:05:01,980
nama sebenarnya dari program tersebut?

6311
06:05:03,721 --> 06:05:05,311
AUDIENCE: Ubah indeks menjadi 1.

6312
06:05:06,061 --> 06:05:10,201
Jadi kiranya indeks ke 1, jika itu\n

6313
06:05:11,201 --> 06:05:15,671
Jadi mari kita buat argv\nagain, ./argv, Enter.

6314
06:05:17,890 --> 06:05:19,951
Jadi ini adalah bentuk lain dari nul.

6315
06:05:19,951 --> 06:05:23,581
Tapi ini kesalahan pengguna, sekarang, di pihak saya.

6316
06:05:23,580 --> 06:05:25,330
Saya tidak melakukan persis apa yang saya katakan.

6317
06:05:25,830 --> 06:05:26,790
AUDIENCE: Anda lupa parameternya.

6318
06:05:26,791 --> 06:05:28,691
DAVID MALAN: Ya, saya\nlupa parameternya.

6319
06:05:29,960 --> 06:05:31,710
Saya mungkin harus mengatasinya\nbagaimanapun juga

6320
06:05:31,710 --> 06:05:33,552
sehingga orang tidak\nmelanggar program saya

6321
06:05:33,552 --> 06:05:35,260
dan mencetak\nhal-hal acak, seperti nul.

6322
06:05:35,260 --> 06:05:39,030
Namun jika saya mengatakan argv, David,\nsekarang Anda melihat halo, David.

6323
06:05:39,030 --> 06:05:42,330
Saya jadi sedikit penasaran,\nseperti apa yang ada di lokasi 2?

6324
06:05:42,330 --> 06:05:47,670
Bisa kita lihat, buat argv,\nbracket, ./argv, David, Enter.

6325
06:05:47,670 --> 06:05:49,170
Baiklah, jadi tidak ada apa-apa di sana.

6326
06:05:49,170 --> 06:05:52,462
Namun ternyata, dalam beberapa minggu,\n

6327
06:05:52,462 --> 06:05:54,570
dan lihat apakah kami tidak dapat membuat\nprogram sengaja crash

6328
06:05:54,570 --> 06:05:57,061
karena tidak ada\nyang menghentikanku untuk mengatakannya

6329
06:05:57,061 --> 06:06:00,730
oh apa yang ada di lokasi 2\njuta, misalnya?

6330
06:06:00,730 --> 06:06:02,611
Kita mungkin mulai merasa penasaran.

6331
06:06:02,611 --> 06:06:04,681
Namun untuk saat ini, kami akan melakukan hal yang benar.

6332
06:06:04,681 --> 06:06:08,620
Namun sekarang mari kita pastikan manusia telah\n

6333
06:06:08,620 --> 06:06:15,181
Jadi katakanlah begini, jika argc sama dengan\n

6334
06:06:15,181 --> 06:06:19,021
dan satu kata lagi setelah itu, lanjutkan\napercayakan itu pada argumen 1

6335
06:06:19,021 --> 06:06:21,241
seperti yang Anda usulkan, adalah nama orang tersebut.

6336
06:06:21,241 --> 06:06:26,071
Kalau tidak, ayo lanjutkan dan default\n

6337
06:06:26,070 --> 06:06:30,120
seperti, ya, jika kita tidak mendapatkan nama\n

6338
06:06:31,561 --> 06:06:34,306
Jadi sekarang kami memprogram secara defensif.

6339
06:06:34,306 --> 06:06:37,350
Kali ini manusia, meskipun mereka\n

6340
06:06:37,350 --> 06:06:40,225
atau mereka memberi kami terlalu banyak nama,\n

6341
06:06:40,225 --> 06:06:42,150
karena saya sekarang mempunyai beberapa\npenanganan kesalahan di sini.

6342
06:06:42,151 --> 06:06:46,291
Karena, sekali lagi, argc adalah argumen\n

6343
06:06:51,001 --> 06:06:52,800
Izinkan saya melakukan kesalahan yang sama seperti sebelumnya.

6344
06:06:53,311 --> 06:06:55,171
Saya tidak mengerti perilaku nol yang aneh ini.

6345
06:06:55,170 --> 06:06:56,610
Saya mendapatkan sesuatu yang terdefinisi dengan baik.

6346
06:06:57,870 --> 06:07:01,111
Saya dapat melakukan David Malan, namun\nsaat ini hal tersebut tidak didukung.

6347
06:07:01,111 --> 06:07:05,550
Saya perlu mengubah logika saya menjadi\n

6348
06:07:06,605 --> 06:07:08,030
Jadi apa gunanya ini?

6349
06:07:08,030 --> 06:07:09,780
Saat ini, ini\nhanya latihan sederhana

6350
06:07:09,780 --> 06:07:14,962
untuk benar-benar memberikan diriku cara untuk mengambil\n

6351
06:07:14,962 --> 06:07:16,920
Karena, pertimbangkan, ini\nlebih nyaman di dalamnya

6352
06:07:16,920 --> 06:07:18,930
dunia antarmuka baris perintah yang baru ini.

6353
06:07:18,931 --> 06:07:23,118
Jika Anda harus menggunakan get string\setiap kali Anda mengkompilasi kode Anda

6354
06:07:23,117 --> 06:07:24,450
itu akan agak menjengkelkan, bukan?

6355
06:07:24,451 --> 06:07:28,201
Anda mengetik make, maka Anda mungkin mendapatkan\n

6356
06:07:28,201 --> 06:07:31,951
Lalu Anda mengetik hello, atau cash, atau\n

6357
06:07:31,951 --> 06:07:33,591
itu hanya memperlambat prosesnya.

6358
06:07:33,591 --> 06:07:35,701
Namun di\ndunia antarmuka baris perintah ini

6359
06:07:35,701 --> 06:07:39,031
jika Anda mendukung argumen baris perintah,\n

6360
06:07:39,030 --> 06:07:42,431
Seperti, menggulir ke atas dan ke bawah di\n

6361
06:07:42,431 --> 06:07:46,690
Anda cukup mengetikkan perintah dengan lebih cepat\n

6362
06:07:46,690 --> 06:07:49,260
Dan Anda tidak perlu lagi\nmendorong pengguna

6363
06:07:49,260 --> 06:07:52,020
secara bertele-tele, untuk info lebih lanjut.

6364
06:07:52,021 --> 06:07:54,541
Jadi ada pertanyaan tentang\nargumen baris perintah?

6365
06:07:54,541 --> 06:07:58,261
Yang akhirnya mengungkapkan mengapa\nkami memiliki (batal) pada awalnya

6366
06:07:58,260 --> 06:08:00,870
tapi apa lagi yang bisa kita masukkan ke dalam main.

6367
06:08:00,870 --> 06:08:03,330
Begitulah cara Anda mengambil\nargumen baris perintah.

6368
06:08:04,760 --> 06:08:06,870
HADIRIN: Jika Anda menempatkan--

6369
06:08:06,870 --> 06:08:11,580
jika Anda menggunakan argv, dan Anda\n

6370
06:08:11,580 --> 06:08:14,183
apakah itu masih akan memberimu, misalnya, seutas tali?

6371
06:08:14,184 --> 06:08:15,766
Apakah itu masih dianggap string?

6372
06:08:15,766 --> 06:08:17,184
Atau apakah Anda akan mempertimbangkan [Tak terdengar]?

6373
06:08:18,021 --> 06:08:20,811
Jika Anda mengetikkan sesuatu di\nbaris perintah

6374
06:08:20,811 --> 06:08:24,921
seperti, bukan sebuah kata, tapi\nsesuatu seperti angka 42

6375
06:08:24,920 --> 06:08:27,710
itu sebenarnya\ndiperlakukan sebagai string.

6376
06:08:28,550 --> 06:08:30,480
Karena sekali lagi, konteks itu penting.

6377
06:08:30,480 --> 06:08:33,201
Jadi, jika program Anda\nsedang memanipulasi memori

6378
06:08:33,201 --> 06:08:36,771
seolah-olah karakter atau stringnya,\n

6379
06:08:36,771 --> 06:08:41,061
adalah, mereka akan ditafsirkan\nas teks ASCII, atau teks Unicode.

6380
06:08:41,061 --> 06:08:44,901
Oleh karena itu, jika kita melihat grafik di sini,\n

6381
06:08:44,901 --> 06:08:48,771
lalu bagaimana cara membedakan angka\n

6382
06:08:50,151 --> 06:08:58,641
Perhatikan 65 adalah a, 97 adalah a,\ntetapi juga 49 adalah 1, dan 50 adalah 2.

6383
06:08:58,640 --> 06:09:01,760
Jadi para desainer ASCII,\ndan kemudian Unicode

6384
06:09:01,760 --> 06:09:04,940
terealisasi baiklah tunggu dulu,\njika kami ingin mendukung program

6385
06:09:04,940 --> 06:09:07,700
yang memungkinkan Anda mengetik sesuatu\nyang terlihat seperti angka

6386
06:09:07,701 --> 06:09:10,611
meskipun secara teknis bukan int atau float

6387
06:09:10,611 --> 06:09:14,881
kita memerlukan cara dalam ASCII dan\nUnicode untuk merepresentasikan bilangan genap.

6388
06:09:16,131 --> 06:09:19,471
Dan agak konyol kalau kita punya\n

6389
06:09:19,471 --> 06:09:22,123
Namun sekali lagi, jika Anda berada di\ndunia huruf dan karakter

6390
06:09:22,123 --> 06:09:24,291
Anda harus membuat\na pemetaan untuk semuanya.

6391
06:09:24,291 --> 06:09:26,050
Dan perhatikan di sini, inilah titiknya.

6392
06:09:26,050 --> 06:09:30,650
Meskipun Anda mewakili 1,23\n

6393
06:09:30,651 --> 06:09:35,101
bahkan titiknya sekarang akan menjadi\n

6394
06:09:35,100 --> 06:09:37,190
Jadi sekali lagi, konteks di sini penting.

6395
06:09:37,190 --> 06:09:41,630
Baiklah, satu contoh terakhir\nuntuk menguraikan apa int ini

6396
06:09:41,631 --> 06:09:44,101
dan apa yang sudah\lakukannya di sini selama ini.

6397
06:09:44,100 --> 06:09:49,040
Jadi saya akan menambahkan satu\nsedikit logika ke file baru

6398
06:09:49,041 --> 06:09:52,011
bahwa saya akan menelepon exit.c.

6399
06:09:53,390 --> 06:09:57,140
Kami akan memperkenalkan sesuatu yang\n

6400
06:09:57,140 --> 06:09:59,240
Ternyata ini bukan\na fitur yang kami gunakan

6401
06:09:59,241 --> 06:10:01,501
tapi itu hanya berguna untuk diketahui.

6402
06:10:01,501 --> 06:10:04,611
Terutama saat mengotomatisasi\npengujian kode Anda sendiri.

6403
06:10:04,611 --> 06:10:08,376
Saat mencari tahu apakah\na program berhasil atau gagal.

6404
06:10:08,376 --> 06:10:13,131
Ternyata main punya satu\n

6405
06:10:13,131 --> 06:10:18,591
Kemampuan untuk memberi sinyal kepada pengguna\n

6406
06:10:18,591 --> 06:10:22,021
Dan itu melalui nilai kembalian\nmain.

6407
06:10:22,021 --> 06:10:26,320
Jadi saya akan memodifikasi\nprogram ini sebagai berikut, seperti ini.

6408
06:10:26,320 --> 06:10:29,181
Misalkan saya ingin menulis\na program serupa itu

6409
06:10:29,181 --> 06:10:32,161
mengharuskan pengguna\nmengetikkan sebuah kata saat diminta.

6410
06:10:32,161 --> 06:10:36,710
Sehingga argc harus 2\nuntuk tujuan desain apa pun.

6411
06:10:36,710 --> 06:10:43,251
Jika argc tidak sama dengan 2, saya ingin\n

6412
06:10:43,251 --> 06:10:46,850
Saya ingin mendesak agar pengguna\mengoperasikan program dengan benar.

6413
06:10:46,850 --> 06:10:53,060
Jadi saya mungkin memberi mereka pesan kesalahan\n

6414
06:10:53,061 --> 06:10:55,441
Namun sekarang saya ingin keluar\ndari program ini.

6415
06:10:56,570 --> 06:11:01,521
Cara yang benar, kutip-tanda kutip, untuk dilakukan\n

6416
06:11:01,521 --> 06:11:04,851
Sekarang agak aneh\nkarena belum ada yang menelepon main

6417
06:11:04,850 --> 06:11:07,251
benar, main baru saja\ndipanggil secara otomatis

6418
06:11:07,251 --> 06:11:09,561
tapi konvensinya\nanapa pun terjadi

6419
06:11:09,561 --> 06:11:14,361
salah dalam suatu program, Anda harus\nmengembalikan nilai bukan nol dari main.

6420
06:11:16,041 --> 06:11:19,730
Kita tidak perlu terlibat dalam masalah\n

6421
06:11:20,480 --> 06:11:26,030
Namun jika Anda mengembalikan 1, itu adalah petunjuk untuk\n

6422
06:11:26,030 --> 06:11:27,690
perangkat itu ada yang tidak beres.

6423
06:11:29,931 --> 06:11:35,721
Jika semuanya berfungsi dengan baik, ayo pergi\n

6424
06:11:35,721 --> 06:11:40,881
sebelumnya, tanda kutip-tanda kutip kurung argv 1.

6425
06:11:40,881 --> 06:11:43,341
Jadi ini hanya versi\nprogram tanpa versi lain.

6426
06:11:43,341 --> 06:11:45,651
Jadi pada dasarnya ini sama saja dengan melakukan sesuatu

6427
06:11:45,651 --> 06:11:47,841
ada yang lain di sini seperti yang saya lakukan sebelumnya.

6428
06:11:47,841 --> 06:11:51,001
Saya ingin memberi sinyal pada\nkomputer bahwa semuanya baik-baik saja.

6429
06:11:52,550 --> 06:11:55,911
Tapi sebenarnya, jika\nSaya sudah kembali ke sini

6430
06:11:55,911 --> 06:11:58,820
Secara teknis saya tidak membutuhkannya, jika\nSaya benar-benar ingin pilih-pilih

6431
06:11:58,820 --> 06:12:01,131
Secara teknis saya tidak memerlukan\nelse karena satu-satunya cara

6432
06:12:01,131 --> 06:12:05,747
Saya akan sampai ke jalur 11\nis jika saya belum kembali.

6433
06:12:07,440 --> 06:12:10,790
Satu-satunya hal baru di sini secara logis,\n

6434
06:12:10,791 --> 06:12:13,070
Saya mengembalikan nilai dari main.

6435
06:12:13,070 --> 06:12:14,990
Itu adalah sesuatu yang\nselalu bisa saya lakukan

6436
06:12:14,991 --> 06:12:19,551
karena main selalu didefinisikan oleh\n

6437
06:12:19,550 --> 06:12:24,140
Secara default, utama secara otomatis,\n

6438
06:12:24,140 --> 06:12:27,111
Jika Anda belum pernah menggunakan kata kunci\nreturn, mungkin Anda pernah menggunakannya

6439
06:12:27,111 --> 06:12:29,631
belum di main, itu hanya\secara otomatis mengembalikan 0

6440
06:12:29,631 --> 06:12:31,556
dan sistem berasumsi\nsemuanya berjalan baik.

6441
06:12:31,556 --> 06:12:33,651
Namun kini kami mulai\nmendapatkan lebih banyak lagi

6442
06:12:33,651 --> 06:12:35,781
canggih dengan\nkode kami, dan Anda tahu

6443
06:12:35,780 --> 06:12:39,740
programmer, terjadi sesuatu\n

6444
06:12:39,741 --> 06:12:44,871
Anda dapat keluar darinya dengan kembali\n

6445
06:12:44,870 --> 06:12:47,300
Dan ini kebetulan\nitu adalah int, bukan?

6446
06:12:49,370 --> 06:12:53,510
Sayangnya, dalam pemrograman, ada\n

6447
06:12:54,501 --> 06:12:57,471
Dan int memberi Anda 4\nmiliar kemungkinan kode

6448
06:12:57,471 --> 06:13:00,716
yang dapat Anda gunakan, alias status\nkeluar, untuk menandakan kesalahan.

6449
06:13:00,716 --> 06:13:04,190
Jadi, jika Anda pernah melihat pop up aneh di Mac\atau PC Anda

6450
06:13:04,190 --> 06:13:07,580
bahwa terkadang terjadi kesalahan,\n

6451
06:13:07,580 --> 06:13:09,680
Mungkin positif,\nmungkin negatif.

6452
06:13:09,681 --> 06:13:14,431
Mungkin tertulis kode kesalahan 123, atau\n

6453
06:13:14,431 --> 06:13:18,570
Apa yang biasanya Anda lihat adalah\n

6454
06:13:18,570 --> 06:13:21,870
nilai dari main dalam program\nyang dilakukan seseorang di Microsoft

6455
06:13:21,870 --> 06:13:25,380
atau Apple, atau di tempat lain\nmenulis, ada yang tidak beres

6456
06:13:25,381 --> 06:13:30,241
mereka tidak menunjukkannya kepada Anda,\n

6457
06:13:30,241 --> 06:13:33,361
Seandainya saja, agar saat Anda menelepon\n

6458
06:13:33,361 --> 06:13:36,451
Anda dapat memberi tahu mereka status\nkeluar apa yang Anda temui

6459
06:13:36,451 --> 06:13:39,331
kode kesalahan apa yang Anda temui.

6460
06:13:39,330 --> 06:13:43,650
Baiklah, ada pertanyaan\bukan status keluar

6461
06:13:43,651 --> 06:13:48,841
manakah yang merupakan elemen\npenyusun terakhir kita saat ini?

6462
06:13:50,300 --> 06:13:57,800
HADIRIN: [Tak terdengar] Anda tahu caranya\n

6463
06:13:57,800 --> 06:13:59,679
jika Anda ingin membuat [Tak terdengar]

6464
06:14:00,346 --> 06:14:03,526
Pertanyaannya adalah bisakah Anda\melakukan sesuatu lagi dan lagi

6465
06:14:03,526 --> 06:14:06,151
di baris perintah seperti yang Anda\nbisa lakukan dengan get string dan get int.

6466
06:14:06,151 --> 06:14:08,131
Yang mana, secara default,\npenarikan dilakukan secara otomatis

6467
06:14:08,131 --> 06:14:10,681
dirancang untuk terus mendorong\npengguna dalam lingkarannya sendiri

6468
06:14:10,681 --> 06:14:14,221
sampai mereka memberi Anda int, atau a\n

6469
06:14:15,001 --> 06:14:16,471
Anda akan mendapatkan\npesan kesalahan tetapi kemudian

6470
06:14:16,471 --> 06:14:18,263
Anda akan\nkembali ke perintah Anda.

6471
06:14:18,262 --> 06:14:21,647
Dan terserah Anda untuk mengetik\nit dengan benar di lain waktu.

6472
06:14:22,730 --> 06:14:27,695
AUDIENCE: [Tak terdengar]\secara otomatis untuk Anda.

6473
06:14:27,695 --> 06:14:29,570
DAVID MALAN: Jika Anda\ndo tidak mengembalikan nilai

6474
06:14:29,570 --> 06:14:32,990
secara eksplisit main akan\secara otomatis mengembalikan 0 untuk Anda

6475
06:14:32,991 --> 06:14:36,901
begitulah cara kerja C\njadi tidak sepenuhnya diperlukan.

6476
06:14:36,901 --> 06:14:39,771
Namun kini kami mulai\nmengembalikan nilai secara eksplisit

6477
06:14:39,771 --> 06:14:42,351
jika terjadi kesalahan,\ini merupakan praktik yang baik

6478
06:14:42,350 --> 06:14:45,740
untuk juga mulai mengembalikan nilai\n

6479
06:14:48,036 --> 06:14:52,070
Jadi sekarang mari kita keluar dari\nmasalah tersebut dan melakukan kontekstualisasi

6480
06:14:52,070 --> 06:14:55,460
ini untuk beberapa masalah aktual yang\n

6481
06:14:55,460 --> 06:14:57,390
melalui soal set 2 dan seterusnya.

6482
06:15:00,001 --> 06:15:04,251
Misalnya saja, ada\nmasalah yang mungkin perlu Anda pikirkan kembali

6483
06:15:04,251 --> 06:15:08,241
sampai saat kamu masih kecil\n

6484
06:15:08,241 --> 06:15:10,491
tingkat kelas di mana\nbuku ditulis.

6485
06:15:10,491 --> 06:15:14,001
Jika Anda seorang pelajar muda, Anda\nmungkin membaca di tingkat kelas satu

6486
06:15:14,001 --> 06:15:15,501
atau tingkat kelas tiga di AS.

6487
06:15:15,501 --> 06:15:17,293
Atau, jika Anda masih kuliah\nmungkin memang demikian

6488
06:15:17,293 --> 06:15:19,206
membaca teks tingkat universitas.

6489
06:15:19,205 --> 06:15:22,333
Namun apa maksudnya\nuntuk teks, seperti di buku

6490
06:15:22,333 --> 06:15:24,501
atau dalam esai, atau sesuatu\nseperti itu untuk berkorespondensi

6491
06:15:24,501 --> 06:15:25,850
ke tingkat kelas tertentu?

6492
06:15:25,850 --> 06:15:29,210
Ini kutipan--\njudul buku masa kecil.

6493
06:15:29,210 --> 06:15:31,850
Satu Ikan, Dua Ikan, Ikan Merah, Ikan Biru.

6494
06:15:31,850 --> 06:15:35,100
Untuk apa tingkat kelasnya\n

6495
06:15:35,100 --> 06:15:37,850
Mungkin, ketika Anda masih kecil atau jika\n

6496
06:15:37,850 --> 06:15:40,520
benda-benda ini, berapa tingkat\ntingkat benda ini?

6497
06:15:47,643 --> 06:15:49,911
DAVID MALAN: Sebelum kelas\n1 sebenarnya benar.

6498
06:15:49,911 --> 06:15:51,550
Jadi itu untuk anak kecil?

6499
06:15:53,440 --> 06:15:56,470
Ini adalah ungkapan yang cukup sederhana, bukan?

6500
06:15:57,760 --> 06:16:00,220
Maksudku, tidak ada\nkata kerja genap dalam kalimat ini

6501
06:16:00,221 --> 06:16:04,301
itu hanyalah kata benda dan kata sifat,\ndan kalimat yang sangat pendek.

6502
06:16:04,300 --> 06:16:06,460
Jadi itu mungkin\nheuristik yang bisa kita gunakan.

6503
06:16:06,460 --> 06:16:09,070
Saat menganalisis teks, ada baiknya jika\nkata-katanya agak pendek

6504
06:16:09,070 --> 06:16:11,501
kalimatnya agak\npendek, semuanya sangat sederhana

6505
06:16:11,501 --> 06:16:14,510
itu mungkin tingkat kelas yang sangat\nmuda, atau awal.

6506
06:16:14,510 --> 06:16:17,925
Jadi dengan satu formulasi, mungkin saja\n

6507
06:16:19,931 --> 06:16:22,282
Tuan dan Nyonya Dursley, dari\nnomor 4, Privet Drive

6508
06:16:22,282 --> 06:16:25,240
dengan bangga mengatakan bahwa mereka memang\n

6509
06:16:25,241 --> 06:16:27,221
Mereka adalah\norang terakhir yang Anda harapkan

6510
06:16:27,221 --> 06:16:29,381
untuk terlibat dalam segala hal\naneh atau misterius

6511
06:16:29,381 --> 06:16:32,111
karena mereka tidak tahan dengan omong kosong seperti itu.

6512
06:16:33,043 --> 06:16:34,751
Baiklah, buku ini\ntingkat kelas berapa?

6513
06:16:36,039 --> 06:16:37,331
DAVID MALAN: Oke, saya dengar yang ketiga.

6514
06:16:38,846 --> 06:16:40,241
DAVID MALAN: Ketujuh, kelima.

6515
06:16:41,411 --> 06:16:44,800
Tapi kelas 7, menurut\tidak ada ukuran tertentu.

6516
06:16:44,800 --> 06:16:49,062
Dan apakah kita bisa berdebat secara tepat\n atau tidak

6517
06:16:49,062 --> 06:16:51,520
dan mungkin Anda merasa lebih maju\ndari waktu yang ada, atau ketinggalan saat ini.

6518
06:16:51,521 --> 06:16:55,730
Tapi di sini, kami memiliki cuplikan teks.

6519
06:16:55,730 --> 06:17:00,820
Apa yang membuat teks ini dianggap lebih tua\n

6520
06:17:00,820 --> 06:17:03,951
tingkat kelas yang lebih tinggi, menurut Anda?

6521
06:17:06,675 --> 06:17:09,370
DAVID MALAN: Ya, lebih panjang,\njenis kata yang berbeda

6522
06:17:09,370 --> 06:17:11,773
sekarang ada koma dalam\nfrasa, dan seterusnya.

6523
06:17:11,774 --> 06:17:13,941
Jadi, ada semacam\nokecanggihan dalam hal ini.

6524
06:17:13,940 --> 06:17:16,540
Jadi ternyata untuk\nkumpulan masalah yang akan datang

6525
06:17:16,541 --> 06:17:19,631
salah satu hal yang akan Anda lakukan adalah\nmengambil, sebagai masukan, teks seperti ini

6526
06:17:20,771 --> 06:17:23,333
Mengingat, berapa\nbanyak kata dalam teks?

6527
06:17:23,332 --> 06:17:24,790
Berapa banyak kalimat dalam teks tersebut?

6528
06:17:24,791 --> 06:17:26,636
Berapa banyak huruf dalam teks tersebut?

6529
06:17:26,635 --> 06:17:30,430
Dan gunakan itu sesuai dengan\n

6530
06:17:30,431 --> 06:17:33,940
tepatnya, tingkat kelas suatu\n

6531
06:17:34,843 --> 06:17:37,050
Apa lagi yang akan kami\nlakukan dalam beberapa hari mendatang?

6532
06:17:37,050 --> 06:17:39,670
Saya telah menyinggung gagasan\nkriptografi ini di masa lalu.

6533
06:17:39,670 --> 06:17:42,610
Gagasan mengacak\ninformasi sedemikian rupa

6534
06:17:42,611 --> 06:17:45,683
agar Anda dapat menyembunyikan\nisi pesan

6535
06:17:45,683 --> 06:17:47,890
dari seseorang yang mungkin\kalau tidak bisa mencegatnya, bukan?

6536
06:17:47,890 --> 06:17:50,390
Bentuk paling awal dari hal ini mungkin\njuga terjadi ketika Anda masih muda

6537
06:17:50,390 --> 06:17:53,650
dan kamu berada di kelas, dan kamu lulus\n

6538
06:17:53,651 --> 06:17:54,911
dari dirimu sendiri ke orang lain.

6539
06:17:54,911 --> 06:17:57,221
Anda tentu tidak ingin\nmenulis catatan dalam bahasa Inggris

6540
06:17:57,221 --> 06:17:59,381
atau bahasa tertulis lain\nyang mungkin Anda inginkan

6541
06:17:59,381 --> 06:18:01,691
untuk mengacaknya, atau mengenkripsinya.

6542
06:18:01,690 --> 06:18:04,720
Mungkin Anda mengubah As\nmenjadi B, dan B menjadi C.

6543
06:18:04,721 --> 06:18:07,031
Sehingga jika guru membentak\nit dan mencegatnya

6544
06:18:07,030 --> 06:18:09,460
mereka sebenarnya tidak\nmemahami apa yang Anda miliki

6545
06:18:09,460 --> 06:18:11,420
ditulis karena dienkripsi.

6546
06:18:11,420 --> 06:18:13,870
Selama teman Anda,\npenerima catatan ini

6547
06:18:13,870 --> 06:18:16,150
tahu bagaimana Anda memanipulasinya.

6548
06:18:16,151 --> 06:18:19,901
Cara Anda menambahkan atau mengurangi\nhuruf satu sama lain

6549
06:18:19,901 --> 06:18:23,111
mereka dapat mendekripsinya, yang\nmembalikkan proses tersebut.

6550
06:18:23,111 --> 06:18:26,331
Jadi secara formal, dalam dunia\nkriptografi dan ilmu komputer

6551
06:18:26,330 --> 06:18:28,390
ini adalah masalah lain yang harus dipecahkan.

6552
06:18:28,390 --> 06:18:31,434
Namun masukan Anda, bila Anda memiliki\n

6553
06:18:31,434 --> 06:18:33,101
adalah apa yang umumnya dikenal sebagai teks biasa.

6554
06:18:33,100 --> 06:18:37,240
Ada beberapa algoritme yang\nkemudian akan dienkripsi, atau dienkripsi

6555
06:18:37,241 --> 06:18:40,361
informasi itu, ke dalam apa yang\ndisebut ciphertext, yang mana

6556
06:18:40,361 --> 06:18:42,911
adalah versi acak yang\nsecara teoritis dapat diperoleh dengan aman

6557
06:18:42,911 --> 06:18:45,370
disadap dan pesan Anda\nbelum rusak

6558
06:18:45,370 --> 06:18:48,880
kecuali intersep itu\benar-benar mengetahui algoritma apa

6559
06:18:48,881 --> 06:18:51,411
Anda gunakan di dalam proses ini.

6560
06:18:51,411 --> 06:18:53,980
Jadi itu secara umum\ndikenal sebagai sandi.

6561
06:18:53,980 --> 06:18:57,341
Namun, cipher biasanya mengambil\nbukan hanya satu input, melainkan dua.

6562
06:18:57,341 --> 06:19:01,945
Jika, misalnya, sandi Anda\nsederhana A menjadi B

6563
06:19:01,945 --> 06:19:05,681
B menjadi C, C menjadi D,\ndot dot dot, Z menjadi A

6564
06:19:05,681 --> 06:19:09,401
pada dasarnya Anda menambahkan satu ke\tidak semua huruf dan mengenkripsinya.

6565
06:19:09,401 --> 06:19:12,011
Itu adalah,\nyang kami sebut, kuncinya.

6566
06:19:12,010 --> 06:19:15,730
Anda dan penerima harus\n

6567
06:19:15,730 --> 06:19:19,541
sebelumnya, nomor berapa yang akan\nAnda gunakan hari itu untuk melakukan rotasi

6568
06:19:19,541 --> 06:19:21,221
atau ubah semua huruf ini dengan.

6569
06:19:21,221 --> 06:19:24,671
Karena ketika Anda menambahkan 1, mereka\nmenerima ciphertext Anda

6570
06:19:24,670 --> 06:19:27,350
harus mengurangi 1 untuk\ngembalikan jawabannya.

6571
06:19:27,350 --> 06:19:31,990
Misalnya, jika inputnya,\nteks biasa, adalah hi, seperti sebelumnya

6572
06:19:31,991 --> 06:19:37,271
dan kuncinya adalah 1, cipherteksnya menggunakan\n

6573
06:19:37,271 --> 06:19:41,980
atau dikenal sebagai sandi Caesar,\n

6574
06:19:41,980 --> 06:19:45,668
Jadi mirip, tapi paling tidak\nberantakan pada pandangan pertama.

6575
06:19:45,669 --> 06:19:47,711
Dan kecuali guru\nbenar-benar peduli untuk mencari tahu

6576
06:19:47,710 --> 06:19:50,681
algoritma apa yang mereka gunakan saat ini,\n

6577
06:19:50,681 --> 06:19:53,960
itu mungkin cukup\naman untuk tujuan Anda.

6578
06:19:53,960 --> 06:19:55,420
Bagaimana Anda membalikkan prosesnya?

6579
06:19:55,420 --> 06:19:58,450
Nah, teman Anda mendapatkan ini\ndmembalikkannya dengan negatif 1.

6580
06:19:58,451 --> 06:20:02,890
Jadi saya menjadi H, J menjadi saya,\ndan hal-hal seperti tanda baca

6581
06:20:02,890 --> 06:20:05,320
tetap tidak tersentuh\nsetidaknya dalam skema ini.

6582
06:20:05,320 --> 06:20:07,841
Jadi mari kita pertimbangkan satu\ncontoh terakhir di sini.

6583
06:20:07,841 --> 06:20:15,341
Jika masukan ke algoritma\nis Uijtxbtdt50, dan kuncinya

6584
06:20:17,350 --> 06:20:23,770
Sehingga sekarang B menjadi A, dan C\n

6585
06:20:23,771 --> 06:20:25,390
Jadi kita pergi ke arah lain.

6586
06:20:27,291 --> 06:20:30,261
Nah jika kita menyebarkan semua huruf\n

6587
06:20:30,260 --> 06:20:36,040
dan kita mulai mengurangi satu huruf,\n

6588
06:20:36,041 --> 06:20:41,480
T menjadi S, X menjadi W, A, tadi, D, T--

6589
06:22:01,705 --> 06:22:06,530
DAVID J. MALAN: Ini CS50, dan\nini sudah minggu ketiga.

6590
06:22:06,530 --> 06:22:10,056
Dan meskipun kita mendapatkan lebih banyak lagi\n

6591
06:22:10,056 --> 06:22:11,931
dan beberapa hal C\nyang telah kami lakukan

6592
06:22:11,931 --> 06:22:15,201
terlihat lebih samar,\n

6593
06:22:15,201 --> 06:22:19,008
seperti, semua yang telah kami lakukan\n

6594
06:22:19,008 --> 06:22:20,841
Jadi ingatlah hal itu,\nkhususnya dalam hal ini

6595
06:22:20,841 --> 06:22:23,591
sepertinya jumlahnya bertambah\n

6596
06:22:23,591 --> 06:22:26,210
Itu hanyalah proses mempelajari\na bahasa baru yang pada akhirnya

6597
06:22:26,210 --> 06:22:28,791
mari kita ungkapkan proses ini.

6598
06:22:28,791 --> 06:22:31,851
Dan tentu saja, minggu lalu kami benar-benar\n

6599
06:22:31,850 --> 06:22:33,600
input dan output terwakili.

6600
06:22:33,600 --> 06:22:37,940
Dan benda ini, sebuah foto\nitu, disebut apa?

6601
06:22:39,989 --> 06:22:41,031
DAVID J. MALAN: RAM, saya dengar--

6602
06:22:41,030 --> 06:22:44,030
Memori Akses Acak atau\numumnya dikenal sebagai memori.

6603
06:22:44,030 --> 06:22:46,640
Dan ingatlah bahwa kita tidak melihat\tidak satupun dari chip hitam kecil ini

6604
06:22:46,640 --> 06:22:48,861
yang berisi semua byte--

6605
06:22:48,861 --> 06:22:50,151
pada akhirnya.

6606
06:22:50,151 --> 06:22:52,761
Itu hanya semacam grid,\nsemacam grid artis

6607
06:22:52,760 --> 06:22:55,880
memungkinkan kita memikirkan semua\tidak satupun dari lokasi memori ini

6608
06:22:55,881 --> 06:22:58,401
hanya sekedar memiliki nomor atau\nan alamat.

6609
06:22:58,401 --> 06:23:01,131
Misalnya, ini mungkin byte\nangka 0 lalu 1 lalu 2

6610
06:23:01,131 --> 06:23:04,041
lalu, mungkin di sini\naga lagi, sekitar 2 miliar

6611
06:23:04,041 --> 06:23:06,441
jika Anda memiliki memori 2 gigabyte.

6612
06:23:06,440 --> 06:23:10,431
Dan saat kami melakukan itu, kami mulai\n

6613
06:23:10,431 --> 06:23:14,120
untuk membuat informasi kita sendiri,\n

6614
06:23:14,120 --> 06:23:16,740
hanya dasar-dasar seperti ints\ndan float dan sebagainya.

6615
06:23:16,741 --> 06:23:18,831
Tapi kami juga berbicara tentang string.

6616
06:23:18,830 --> 06:23:21,440
Dan apakah string yang Anda ketahui sekarang?

6617
06:23:21,440 --> 06:23:24,560
Bagaimana Anda mendeskripsikan string dalam istilah orang awam?

6618
06:23:26,841 --> 06:23:28,258
DAVID J. MALAN: Serangkaian karakter.

6619
06:23:28,258 --> 06:23:30,051
Dan sebuah array, sementara itu--\nayo kita ke sana.

6620
06:23:30,050 --> 06:23:34,940
Bagaimana orang lain mendefinisikan\n

6621
06:23:38,030 --> 06:23:41,431
AUDIENCE: Seperti\nan kumpulan hal yang diindeks.

6622
06:23:41,431 --> 06:23:43,421
DAVID J. MALAN: Kumpulan\nhal-hal yang diindeks-- lumayan.

6623
06:23:43,420 --> 06:23:46,570
Dan menurut saya merupakan karakteristik utama\n

6624
06:23:46,570 --> 06:23:48,251
sebenarnya berhubungan dengan memori.

6625
06:23:50,170 --> 06:23:53,560
Byte demi byte demi byte\nis apa yang dimaksud dengan array.

6626
06:23:53,561 --> 06:23:56,171
Dan kita akan melihat dalam waktu beberapa\nminggu bahwa memang ada

6627
06:23:56,170 --> 06:24:00,130
cara yang lebih menarik untuk menggunakan ini\n

6628
06:24:00,131 --> 06:24:03,601
hal-hal yang bersifat dua arah\n

6629
06:24:04,100 --> 06:24:07,330
Namun untuk saat ini, semua yang telah kita bicarakan\n

6630
06:24:07,330 --> 06:24:11,600
dari kiri ke kanan, atas ke bawah,\n

6631
06:24:11,600 --> 06:24:14,260
Jadi hari ini, kita akan mempertimbangkan array.

6632
06:24:14,260 --> 06:24:17,380
Namun kami tidak akan terlalu fokus\npada representasi

6633
06:24:17,381 --> 06:24:18,820
string atau tipe data lainnya.

6634
06:24:18,820 --> 06:24:21,278
Sekarang kami sebenarnya akan fokus pada\nbagian lain dari proses tersebut

6635
06:24:21,278 --> 06:24:24,310
dari masukan menjadi keluaran,\nyaitu yang berada di tengah--

6636
06:24:25,300 --> 06:24:29,560
Namun kita harus tetap ingat, meskipun\n

6637
06:24:29,561 --> 06:24:32,971
sejauh ini, tentu saja ada di papan\n

6638
06:24:32,971 --> 06:24:34,721
memiliki kemewahan\nhanya melihat-lihat

6639
06:24:34,721 --> 06:24:38,181
semuanya dari pandangan mata burung\n

6640
06:24:38,681 --> 06:24:40,513
Jika saya bertanya di mana\nnomor tertentu berada

6641
06:24:40,513 --> 06:24:43,510
seperti nol, kemungkinan besar mata Anda\nakan langsung mengarah ke tempatnya

6642
06:24:43,510 --> 06:24:46,510
dan boom, masalah terpecahkan\nin hanya dalam satu langkah.

6643
06:24:46,510 --> 06:24:51,620
Namun kendalanya adalah, dengan komputer\n

6644
06:24:51,620 --> 06:24:55,091
manusia, dapat [Tak terdengar] melihat\n

6645
06:24:55,091 --> 06:24:58,451
Lebih baik pikirkan\n Anda

6646
06:24:58,451 --> 06:25:01,361
atau lebih khusus lagi\narasi memori seperti ini

6647
06:25:01,361 --> 06:25:05,861
sebagai himpunan tertutup\n

6648
06:25:05,861 --> 06:25:08,620
Dan hanya dengan membuka\setiap pintu itu bisa

6649
06:25:08,620 --> 06:25:10,451
komputer sebenarnya\nmelihat apa yang ada di sana

6650
06:25:10,451 --> 06:25:12,971
yang berarti\nkomputer, tidak seperti Anda, tidak

6651
06:25:12,971 --> 06:25:16,841
lihat semuanya dari atas\n

6652
06:25:16,841 --> 06:25:19,760
Ini harus terlihat lebih\nsecara metodis di sini

6653
06:25:19,760 --> 06:25:23,950
mungkin lihat di sini, mungkin lihat di sini, dan\n

6654
06:25:23,951 --> 06:25:28,031
Untungnya, kami sudah memiliki beberapa\n

6655
06:25:28,030 --> 06:25:29,570
Ekspresi Boolean, dan sejenisnya--

6656
06:25:29,570 --> 06:25:31,480
di mana Anda dapat membayangkan\nmenulis beberapa kode

6657
06:25:31,480 --> 06:25:36,041
yang secara metodis dimulai dari kiri\n

6658
06:25:36,041 --> 06:25:39,851
sebenarnya lebih canggih\n

6659
06:25:39,850 --> 06:25:43,210
Dan ingatlah bahwa\nkebaktian yang kita adakan sejak minggu lalu

6660
06:25:43,210 --> 06:25:47,681
sekarang array ini\nzero diindeks.

6661
06:25:47,681 --> 06:25:52,511
Menjadi nol diindeks berarti\n

6662
06:25:52,510 --> 06:25:56,290
Jadi ini lokasi 0, 1, 2, 3, 4, 5, 6.

6663
06:25:56,291 --> 06:25:59,681
Dan perhatikan meskipun total ada tujuh pintu di sini

6664
06:25:59,681 --> 06:26:02,291
yang paling kanan,\ntentu saja, disebut 6

6665
06:26:02,291 --> 06:26:04,300
hanya karena kita\nmulai menghitung dari 0.

6666
06:26:04,300 --> 06:26:09,041
Jadi pada kasus umum, jika Anda\nmemiliki n pintu atau n byte memori

6667
06:26:09,041 --> 06:26:13,841
0 akan selalu berada di kiri, dan n\n

6668
06:26:13,841 --> 06:26:18,221
Itu semacam generalisasi dari\n

6669
06:26:18,221 --> 06:26:22,151
Baiklah, mari kita lihat kembali masalahnya\n

6670
06:26:22,151 --> 06:26:24,884
dengan di minggu ke-0, yaitu\ngagasan penelusuran ini.

6671
06:26:24,883 --> 06:26:26,800
Dan apa artinya\nmenelusuri sesuatu?

6672
06:26:26,800 --> 06:26:29,578
Ya, untuk mencari informasi-- dan\nini, tentu saja, ada di mana-mana.

6673
06:26:29,579 --> 06:26:32,621
Kapan pun Anda mengeluarkan ponsel, Anda\n

6674
06:26:32,620 --> 06:26:35,501
Kapan pun Anda membuka browser,\n

6675
06:26:35,501 --> 06:26:39,670
Jadi penelusuran adalah salah satu\n

6676
06:26:41,238 --> 06:26:44,320
Jadi mari kita pertimbangkan bagaimana Google,\n

6677
06:26:44,320 --> 06:26:48,021
sedang menerapkan sesuatu yang\ntampaknya familier seperti ini.

6678
06:26:48,021 --> 06:26:50,381
Jadi inilah pernyataan masalahnya.

6679
06:26:50,381 --> 06:26:52,811
Kita ingin beberapa masukan\nmenjadi keluaran.

6680
06:26:52,811 --> 06:26:54,161
Apa masukannya?

6681
06:26:54,161 --> 06:26:57,881
Mungkin itu adalah sekumpulan pintu yang tertutup\n

6682
06:26:57,881 --> 06:27:00,611
untuk mendapatkan kembali jawaban, benar atau salah.

6683
06:27:00,611 --> 06:27:03,146
Apakah sesuatu yang kita\ncari ada di sana atau tidak?

6684
06:27:03,146 --> 06:27:05,771
Anda dapat membayangkan mengambil satu\nlangkah lebih jauh dan mencoba menemukannya

6685
06:27:05,771 --> 06:27:07,881
dimana barang yang kamu cari.

6686
06:27:07,881 --> 06:27:10,300
Namun untuk saat ini, biarkan saja\tidak ada masalah yang terselesaikan.

6687
06:27:10,300 --> 06:27:14,920
Bisakah kita mengatakan pada diri kita sendiri, benar atau\nsalah, ada angka di belakang satu

6688
06:27:14,920 --> 06:27:17,751
pintu atau loker ini di memori?

6689
06:27:17,751 --> 06:27:22,120
Namun sebelum kita pergi ke sana dan memulai\n

6690
06:27:22,940 --> 06:27:27,040
Mari pertimbangkan bagaimana kita\nmeletakkan fondasinya, misalnya

6691
06:27:27,041 --> 06:27:30,469
membandingkan apakah satu algoritma\nlebih baik dari yang lain.

6692
06:27:30,469 --> 06:27:32,261
Kita berbicara tentang\nkebenaran, dan itu semacamnya

6693
06:27:32,260 --> 06:27:35,800
tentu saja kode apa pun yang Anda\n

6694
06:27:36,820 --> 06:27:39,701
Jika tidak, apa gunanya jika\n

6695
06:27:39,701 --> 06:27:41,620
Tapi kami juga berbicara tentang desain.

6696
06:27:41,620 --> 06:27:45,640
Dan menurut kata-kata Anda sendiri, apa yang harus kami\n

6697
06:27:45,640 --> 06:27:48,830
dirancang pada tahap ini dibandingkan tahap lainnya?

6698
06:27:48,830 --> 06:27:52,240
Bagaimana pendapat Anda tentang\ngagasan desain ini sekarang?

6699
06:27:53,411 --> 06:27:55,661
AUDIENCE: Lebih mudah untuk dipahami\atau lebih mudah untuk diterapkan.

6700
06:27:55,661 --> 06:27:57,350
DAVID J. MALAN: Oke, biar lebih mudah dimengerti.

6701
06:28:00,341 --> 06:28:03,173
DAVID J. MALAN: Efisiensi, dan apa yang harus dilakukan\n

6702
06:28:07,190 --> 06:28:09,751
Ini tidak menghabiskan terlalu banyak\nmemori, dan tidak mubazir.

6703
06:28:09,751 --> 06:28:11,480
Jadi, Anda dapat memikirkan\ndesain bersama-sama

6704
06:28:11,480 --> 06:28:13,438
sumbu ini-- semacam\nkualitas kodenya

6705
06:28:13,438 --> 06:28:15,630
tetapi juga kualitas kinerjanya.

6706
06:28:15,631 --> 06:28:20,179
Dan seiring dengan semakin besarnya program kami dan\n

6707
06:28:20,179 --> 06:28:22,221
those kinds of things are\nreally going to matter.

6708
06:28:22,221 --> 06:28:24,221
Dan di dunia nyata,\njika Anda mulai menulis kode

6709
06:28:24,221 --> 06:28:26,991
tidak hanya sendirian tetapi bersama\norang lain, mendapatkan desainnya

6710
06:28:26,991 --> 06:28:30,501
benar hanya akan membuatnya lebih mudah\n

6711
06:28:30,501 --> 06:28:33,030
menulis kode, dengan\nprobabilitas lebih tinggi.

6712
06:28:33,030 --> 06:28:36,650
Jadi mari kita pertimbangkan bagaimana kita bisa fokus\n

6713
06:28:36,651 --> 06:28:38,751
efisiensi suatu algoritma.

6714
06:28:38,751 --> 06:28:42,591
Dan cara kita membicarakan\n

6715
06:28:42,591 --> 06:28:45,710
atau seberapa lambatnya, dilihat dari\nwaktu berjalannya.

6716
06:28:45,710 --> 06:28:49,260
Artinya, saat mereka\n

6717
06:28:49,260 --> 06:28:52,370
Dan kami mungkin mengukurnya dalam\ndetik, milidetik, atau menit

6718
06:28:52,370 --> 06:28:54,710
or just some number of\nsteps in the general case

6719
06:28:54,710 --> 06:28:58,920
karena mungkin langkahnya lebih sedikit, untuk\n

6720
06:28:58,920 --> 06:29:00,770
Jadi bagaimana pendapat kita\ntentang waktu berjalan?

6721
06:29:00,771 --> 06:29:03,831
Ada satu\nnotasi umum yang harus kita definisikan hari ini.

6722
06:29:03,830 --> 06:29:07,970
Jadi ilmuwan komputer cenderung mendeskripsikan\n

6723
06:29:07,971 --> 06:29:12,201
atau sepotong kode, dalam hal ini, di\n

6724
06:29:12,201 --> 06:29:14,991
Secara harafiah ini adalah\nhuruf besar O, O besar.

6725
06:29:14,991 --> 06:29:18,471
Dan ini secara umum berarti\nwaktu berjalan dari beberapa algoritma

6726
06:29:18,471 --> 06:29:21,920
berada pada urutan ini dan itu,\n

6727
06:29:21,919 --> 06:29:24,529
hanya akan menjadi rumus matematika yang sangat\nsederhana.

6728
06:29:24,529 --> 06:29:26,810
Ini semacam cara melambaikan\ntangan Anda secara matematis

6729
06:29:26,811 --> 06:29:31,131
untuk menyampaikan gagasan tentang seberapa cepat\n

6730
06:29:31,131 --> 06:29:32,961
tanpa masuk ke\nhal-hal seperti itu

6731
06:29:32,960 --> 06:29:36,690
memerlukan waktu sekian milidetik atau\n

6732
06:29:36,690 --> 06:29:40,640
Jadi, Anda mungkin mengingatnya dari minggu\n

6733
06:29:41,721 --> 06:29:45,021
Saat ini, kami hanya menggunakan ini untuk\n

6734
06:29:45,021 --> 06:29:47,960
Ingatlah bahwa garis lurus\nmerah ini adalah algoritma pertama

6735
06:29:49,280 --> 06:29:54,230
Garis kuning yang masih ada\n

6736
06:29:54,230 --> 06:29:58,730
Baris itu mewakili\algoritme alternatif apa?

6737
06:29:59,730 --> 06:30:00,980
Apa algoritma kedua itu?

6738
06:30:01,791 --> 06:30:03,291
HADIRIN: Seperti, dua halaman sekaligus.

6739
06:30:03,291 --> 06:30:06,441
DAVID J. MALAN: Dua halaman sekaligus, yang mana\n

6740
06:30:06,440 --> 06:30:09,700
berpotensi menggandakan kembali halaman jika mungkin\n

6741
06:30:10,201 --> 06:30:12,733
Jadi ada potensi bug\ntapi bisa dibilang bisa dipecahkan.

6742
06:30:12,733 --> 06:30:15,440
Namun algoritma terakhir ini adalah\n

6743
06:30:15,440 --> 06:30:18,950
strategi yang menurutku tidak perlu\n

6744
06:30:18,951 --> 06:30:20,960
lalu menjadi dua dan\nkemudian menjadi dua, yang mana

6745
06:30:20,960 --> 06:30:25,251
sedramatis itu tidak perlu,\n

6746
06:30:25,251 --> 06:30:27,780
menyelesaikan\nmasalah-- sekitar 500 halaman

6747
06:30:27,780 --> 06:30:33,720
pertama kali, 250 lagi, lagi\n

6748
06:30:33,721 --> 06:30:36,944
Jadi kami mendeskripsikan\nwaktu berjalannya seperti gambar ini

6749
06:30:36,943 --> 06:30:39,861
di sana, meskipun saya tidak menggunakannya\n

6750
06:30:39,861 --> 06:30:42,591
Namun memang, waktu penyelesaian\nmungkin diukur secara adil

6751
06:30:42,591 --> 06:30:44,510
secara abstrak dalam beberapa satuan ukuran--

6752
06:30:44,510 --> 06:30:47,780
detik, milidetik, menit, halaman--

6753
06:30:49,471 --> 06:30:52,191
Jadi sekarang mari kita berikan beberapa angka mengenai hal ini.

6754
06:30:52,190 --> 06:30:55,610
Jika kita mempunyai n halaman di\nbuku telepon itu, n hanya mewakili

6755
06:30:55,611 --> 06:30:57,980
nomor generik,\nalgoritme pertama di sini

6756
06:30:57,980 --> 06:30:59,811
kita mungkin menggambarkan sebagai mengambil n langkah.

6757
06:30:59,811 --> 06:31:03,230
Algoritme kedua yang mungkin kami jelaskan\n

6758
06:31:03,230 --> 06:31:05,870
mungkin memberi atau menerima satu jika kita\nharus menggandakannya tetapi secara umum

6759
06:31:06,843 --> 06:31:09,050
Lalu hal ini, jika Anda\ningat logaritma Anda

6760
06:31:09,050 --> 06:31:11,008
adalah semacam formula yang pada dasarnya berbeda--

6761
06:31:11,008 --> 06:31:14,460
log basis 2 dari n atau disingkat\nlog n saja.

6762
06:31:14,460 --> 06:31:17,150
Jadi rumus ini pada dasarnya\nberbeda.

6763
06:31:17,151 --> 06:31:20,791
Namun yang perlu diperhatikan adalah\ndua algoritma pertama ini

6764
06:31:20,791 --> 06:31:24,411
meskipun, ya, algoritma kedua lebih cepat--

6765
06:31:24,411 --> 06:31:26,271
Maksudku, dua kali lebih cepat--

6766
06:31:26,271 --> 06:31:30,921
kapan Anda mulai memperkecil dan jika\n

6767
06:31:30,920 --> 06:31:36,920
dua yang pertama ini mulai terlihat\sangat mirip satu sama lain.

6768
06:31:36,920 --> 06:31:39,170
Dan jika kita terus memperkecil\nmemperkecil dan memperbesar

6769
06:31:39,170 --> 06:31:41,450
keluar saat n menjadi sangat besar--

6770
06:31:41,451 --> 06:31:43,581
artinya, sumbu x menjadi sangat panjang--

6771
06:31:43,580 --> 06:31:47,610
dua algoritma pertama ini pada dasarnya mulai\nmenjadi sama.

6772
06:31:47,611 --> 06:31:50,751
Jadi di sinilah ilmuwan\nkomputer menggunakan notasi O besar.

6773
06:31:50,751 --> 06:31:54,780
Daripada mengatakannya secara spesifik,\nalgoritme ini mengambil langkah apa pun.

6774
06:31:54,780 --> 06:31:57,980
Dan yang ini n dibagi 2, kata seorang\nilmuwan komputer

6775
06:31:57,980 --> 06:32:01,370
eh, masing-masing algoritme\nmengambil urutan n langkah

6776
06:32:01,370 --> 06:32:03,380
atau pada urutan n lebih 2.

6777
06:32:04,131 --> 06:32:07,851
Pada urutan n lebih 2\nis hampir sama

6778
06:32:07,850 --> 06:32:13,980
ketika n menjadi sangat besar menjadi\n

6779
06:32:13,980 --> 06:32:18,841
Jadi ya, dalam praktiknya, itu jelas\n

6780
06:32:18,841 --> 06:32:22,311
Namun dalam gambaran besarnya, ketika n\nmenjadi satu juta, satu miliar

6781
06:32:22,311 --> 06:32:24,980
jumlahnya sudah\nsangat besar pada saat itu

6782
06:32:24,980 --> 06:32:28,041
bahwa ini adalah sebagai,\nbentuk kurva ini menyiratkan

6783
06:32:28,041 --> 06:32:30,291
hampir setara secara fungsional.

6784
06:32:30,291 --> 06:32:33,441
Namun yang ini masih\nterlihat lebih baik dan lebih baik lagi

6785
06:32:33,440 --> 06:32:36,830
karena n menjadi besar karena\nnaiknya jauh lebih lambat.

6786
06:32:36,830 --> 06:32:39,020
Jadi di sini, seorang\nilmuwan komputer akan berkata

6787
06:32:39,021 --> 06:32:43,679
bahwa algoritme ketiga ada di\n

6788
06:32:43,679 --> 06:32:45,471
Dan mereka tidak perlu\nmemusingkan pangkalannya

6789
06:32:45,471 --> 06:32:49,341
karena ini matematika yang lebih kecil\n

6790
06:32:49,341 --> 06:32:52,251
faktor perkalian yang konstan.

6791
06:32:52,251 --> 06:32:54,201
Jadi singkatnya, apa saja\nhal yang dapat diambil di sini?

6792
06:32:54,201 --> 06:32:56,631
Ini hanyalah\nkosakata baru yang akan kita mulai

6793
06:32:56,631 --> 06:33:00,381
untuk digunakan ketika kita hanya ingin menjelaskan\n

6794
06:33:00,381 --> 06:33:02,961
Agar hal ini lebih nyata, jika\ada di antara Anda yang telah menerapkannya

6795
06:33:02,960 --> 06:33:08,650
perulangan for pada saat ini di salah satu\n

6796
06:33:08,651 --> 06:33:11,951
di mana mungkin tinggi\npiramida Anda atau mungkin n

6797
06:33:11,951 --> 06:33:15,911
ada hal lain yang ingin\nAnda lakukan sebanyak n kali, Anda menulis kode

6798
06:33:15,911 --> 06:33:20,800
atau Anda menerapkan algoritme\n

6799
06:33:21,561 --> 06:33:23,711
Jadi ini hanyalah sebuah cara\nuntuk memulai secara surut

6800
06:33:23,710 --> 06:33:27,850
mendeskripsikan dengan notasi\nmatematis apa yang kita miliki

6801
06:33:27,850 --> 06:33:30,140
telah melakukan latihan untuk sementara waktu sekarang.

6802
06:33:30,140 --> 06:33:35,861
Jadi, inilah daftar yang sering dilihat\n

6803
06:33:35,861 --> 06:33:39,370
Ini bukan daftar menyeluruh\nkarena Anda bisa saja ikut serta

6804
06:33:39,370 --> 06:33:42,070
dengan jumlah\nrumus matematika yang tak terbatas, tentu saja.

6805
06:33:42,070 --> 06:33:45,760
Namun hal umum yang akan kita bahas\n

6806
06:33:45,760 --> 06:33:48,430
mungkin dikurangi menjadi daftar ini di sini.

6807
06:33:48,431 --> 06:33:50,681
Dan jika Anda ingin mempelajari\nlebih banyak teori ilmu komputer

6808
06:33:50,681 --> 06:33:52,263
daftar ini akan bertambah panjang dan panjang.

6809
06:33:52,263 --> 06:33:56,290
Namun untuk saat ini, ini adalah\n

6810
06:33:56,291 --> 06:33:59,061
Baiklah, dua kosakata\nlainnya, jika Anda mau

6811
06:33:59,061 --> 06:34:00,521
sebelum kita mulai menggunakan benda ini--

6812
06:34:00,521 --> 06:34:03,791
jadi ini, omega besar,\nsimbol utama omega

6813
06:34:03,791 --> 06:34:09,531
sekarang digunakan untuk mendeskripsikan batas bawah\n

6814
06:34:09,530 --> 06:34:12,970
Jadi untuk lebih jelasnya, O besar\bukanlah urutan-- itu

6815
06:34:12,971 --> 06:34:16,271
adalah, batas atas-- tentang berapa\nbanyak langkah yang mungkin dilakukan suatu algoritma

6816
06:34:16,271 --> 06:34:19,061
ambil, dalam urutan banyak langkah.

6817
06:34:19,061 --> 06:34:21,941
Namun, jika Anda ingin berbicara\ndari sudut pandang lain, baiklah

6818
06:34:21,940 --> 06:34:24,070
berapa langkah yang diambil algoritma saya?

6819
06:34:24,070 --> 06:34:26,681
Mungkin dalam kasus\nterbaik, itu akan menyenangkan

6820
06:34:26,681 --> 06:34:29,471
jika kita mempunyai notasi untuk\nhanya menggambarkan apa yang lebih rendah

6821
06:34:29,471 --> 06:34:32,201
terikat karena beberapa\nalgoritma mungkin super cepat

6822
06:34:32,201 --> 06:34:34,251
dalam apa yang disebut kasus terbaik.

6823
06:34:34,251 --> 06:34:38,021
Jadi simbologinya hampir sama, tapi kita ganti huruf O besarnya

6824
06:34:39,140 --> 06:34:42,940
Jadi untuk lebih jelasnya, O besar menggambarkan\nan batas atas dan omega

6825
06:34:44,471 --> 06:34:46,901
Dan kita akan melihat contohnya\ntidak lama lagi.

6826
06:34:46,901 --> 06:34:52,781
Dan yang terakhir, yang terakhir di sini, besar\n

6827
06:34:52,780 --> 06:34:57,220
ketika Anda memiliki kasus di mana keduanya\n

6828
06:34:57,221 --> 06:35:00,251
waktu berjalan\nsama dengan batas bawah.

6829
06:35:00,251 --> 06:35:03,940
Anda kemudian dapat mendeskripsikannya dalam satu tarikan napas\n

6830
06:35:03,940 --> 06:35:08,021
alih-alih mengatakan itu dalam O\nd besar dan dalam omega dari sesuatu yang lain.

6831
06:35:08,021 --> 06:35:12,280
Baiklah, jadi di luar konteks, urutkan\n

6832
06:35:12,280 --> 06:35:15,824
tapi yang mereka maksud hanyalah batas\natas, batas bawah, atau kapan

6833
06:35:15,824 --> 06:35:17,241
mereka kebetulan menjadi satu dalam hal yang sama.

6834
06:35:17,241 --> 06:35:20,801
Dan sekarang kami akan memperkenalkannya seiring berjalannya waktu\n

6835
06:35:20,800 --> 06:35:23,350
menerapkannya pada masalah-masalah konkrit.

6836
06:35:23,350 --> 06:35:27,580
Namun pertama-tama, izinkan saya berhenti sejenak untuk\nmelihat apakah ada pertanyaan.

6837
06:35:43,920 --> 06:35:45,880
DAVID J. MALAN: Fungsi n\n yang lebih kecil bergerak lebih cepat.

6838
06:35:45,881 --> 06:35:50,621
Jadi ya, jika Anda memiliki sesuatu\nseperti n, itu hanya membutuhkan beberapa langkah.

6839
06:35:50,620 --> 06:35:53,626
Jika Anda memiliki rumus seperti n\n

6840
06:35:53,626 --> 06:35:56,260
yang membutuhkan lebih banyak langkah\dan karenanya menjadi lebih lambat.

6841
06:35:56,260 --> 06:35:58,170
Jadi semakin besar\nekspresi matematikanya

6842
06:35:58,170 --> 06:36:02,640
semakin lambat algoritma Anda karena\n

6843
06:36:05,161 --> 06:36:07,530
AUDIENCE: Jadi Anda ingin fungsi\nn Anda menjadi kecil?

6844
06:36:07,530 --> 06:36:10,771
DAVID J. MALAN: Anda menginginkan fungsi n Anda,\n

6845
06:36:10,771 --> 06:36:12,581
Dan faktanya, Cawan Suci\n, bisa dikatakan demikian

6846
06:36:12,580 --> 06:36:16,050
akan menjadi yang terakhir di sini\n

6847
06:36:16,050 --> 06:36:19,260
ketika suatu algoritma berada pada\nurutan satu langkah.

6848
06:36:19,260 --> 06:36:23,730
Artinya, secara harafiah dibutuhkan konstan\n

6849
06:36:23,730 --> 06:36:26,850
100 langkah, namun jumlah langkahnya tetap\nkonstan.

6850
06:36:26,850 --> 06:36:30,480
Itu yang terbaik karena\namun buku telepon menjadi lebih besar

6851
06:36:30,480 --> 06:36:34,710
meskipun kumpulan data yang Anda\ntelusuri semakin besar

6852
06:36:34,710 --> 06:36:37,861
jika sesuatu hanya memerlukan sejumlah langkah terbatas\nsecara terus-menerus

6853
06:36:37,861 --> 06:36:42,001
maka tidak masalah seberapa besar\nkumpulan data sebenarnya.

6854
06:36:42,001 --> 06:36:46,201
Pertanyaan juga tentang notasi ini--\n

6855
06:36:46,201 --> 06:36:47,671
Hal ini sebenarnya sangat membantu.

6856
06:36:47,670 --> 06:36:49,530
Saya melihat menunjuk ke arah sini?

6857
06:36:52,587 --> 06:36:54,920
DAVID J. MALAN: Apa masukan\nuntuk masing-masing fungsi ini?

6858
06:36:54,920 --> 06:36:58,070
Ini adalah ekspresi berapa\nbanyak langkah yang diambil suatu algoritma.

6859
06:36:58,070 --> 06:37:00,440
Jadi sebenarnya, biarkan saya\namelakukannya dan membuat ini

6860
06:37:00,440 --> 06:37:03,580
lebih konkrit dengan contoh\nyata di sini jika kita bisa.

6861
06:37:03,580 --> 06:37:06,710
Jadi di panggung ini, kami punya\ntujuh loker yang mewakili

6862
06:37:06,710 --> 06:37:08,661
jika Anda mau, array memori.

6863
06:37:08,661 --> 06:37:10,760
Dan susunan\nmemori ini mungkin sedang disimpan

6864
06:37:10,760 --> 06:37:14,510
tujuh bilangan bulat, tujuh bilangan bulat itu\n

6865
06:37:14,510 --> 06:37:17,450
Dan jika kita ingin mencari\nnilai-nilai ini, bagaimana caranya

6866
06:37:18,408 --> 06:37:20,617
Nah, untuk ini, kenapa kita tidak\nmembuatnya menarik?

6867
06:37:20,617 --> 06:37:22,170
Apakah seorang sukarelawan ingin ikut serta?

6868
06:37:22,170 --> 06:37:25,280
Harus menggunakan masker dan menggunakan\ninternet jika Anda merasa nyaman.

6869
06:37:25,280 --> 06:37:28,550
Keduanya-- oh, ada seseorang yang memasang\n

6870
06:37:34,741 --> 06:37:37,441
Dan sebentar lagi,\nsukarelawan pemberani

6871
06:37:37,440 --> 06:37:41,431
akan membantu saya menemukan\nnomor tertentu dalam kumpulan data

6872
06:37:41,431 --> 06:37:42,881
yang kita miliki di sini di layar.

6873
06:37:42,881 --> 06:37:46,591
Jadi ayo turun, dan aku akan mengambil sesuatu\n

6874
06:37:55,890 --> 06:37:57,473
DAVID J.MALAN: [? Nomira. ?] Senang bertemu.

6875
06:37:58,061 --> 06:38:02,011
Jadi di sini kita punya tujuh\nlocker atau serangkaian memori untuk Nomira.

6876
06:38:02,010 --> 06:38:03,900
Dan di balik setiap\npintu ini terdapat sebuah angka.

6877
06:38:03,901 --> 06:38:06,930
Dan tujuannya, sederhananya,\nis, mengingat rangkaian memori ini

6878
06:38:06,930 --> 06:38:12,041
sebagai masukan, untuk mengembalikan, benar atau salah, adalah\n

6879
06:38:12,041 --> 06:38:14,611
Jadi misalkan saya peduli dengan angka 0.

6880
06:38:14,611 --> 06:38:18,091
Algoritma apa yang paling sederhana dan paling benar yang bisa Anda lakukan

6881
06:38:18,091 --> 06:38:22,561
melamar untuk menemukan kami nomor 0?

6882
06:38:22,561 --> 06:38:25,969
Oke, coba buka yang pertama.

6883
06:38:25,969 --> 06:38:28,511
Baiklah, dan mungkin minggir\namun agar penonton dapat melihatnya.

6884
06:38:28,510 --> 06:38:30,520
Saya pikir Anda belum menemukan 0.

6885
06:38:31,841 --> 06:38:34,480
Mari beralih ke pilihan Anda berikutnya.

6886
06:38:36,359 --> 06:38:37,901
DAVID J. MALAN: Oh, silakan, pintu kedua.

6887
06:38:38,776 --> 06:38:41,918
Mari kita bergerak dari kiri ke\nkanan, mencari sesuai keinginan kita.

6888
06:38:48,561 --> 06:38:51,591
Baiklah, juga belum berfungsi dengan baik\n, tapi tidak apa-apa.

6889
06:38:51,591 --> 06:38:55,971
Jika Anda ingin melanjutkan ke\nberikutnya, kami masih mencari 0.

6890
06:38:57,291 --> 06:38:58,863
Baiklah, ini belum terlalu bagus.

6891
06:39:04,460 --> 06:39:10,230
Tidak, itu-- baiklah\n, bagus sekali.

6892
06:39:13,390 --> 06:39:16,690
Baiklah, jadi saya menyiapkan\nAnda untuk algoritma yang cukup lambat

6893
06:39:16,690 --> 06:39:18,911
tapi izinkan saya meminta Anda\nmenjelaskan apa itu

6894
06:39:18,911 --> 06:39:21,895
Anda melakukannya dengan mengikuti\nlangkah-langkah yang saya berikan kepada Anda.

6895
06:39:21,895 --> 06:39:24,021
AUDIENCE: Saya hanya membahas satu\nsatu untuk setiap karakter.

6896
06:39:24,021 --> 06:39:26,021
DAVID J. MALAN: Anda pergi satu\nsatu ke setiap karakter

6897
06:39:26,021 --> 06:39:27,741
jika Anda ingin berbicara ke sini.

6898
06:39:27,741 --> 06:39:29,501
Jadi, Anda memilih satu per\tidak per karakter.

6899
06:39:29,501 --> 06:39:32,980
Dan apakah menurut Anda algoritme\nkiri atau kanan itu benar?

6900
06:39:35,320 --> 06:39:37,361
HADIRIN: Atau, ya, dalam skenario.

6901
06:39:37,361 --> 06:39:38,861
DAVID J. MALAN: Oke, ya dalam skenario ini.

6902
06:39:39,881 --> 06:39:40,421
Apa yang ada dalam pikiranmu?

6903
06:39:40,420 --> 06:39:42,460
AUDIENCE: Karena ini bukan cara\npaling efisien untuk melakukannya.

6904
06:39:43,341 --> 06:39:45,971
Jadi kita melihat perbedaan\nantara kebenaran dan desain.

6905
06:39:45,971 --> 06:39:48,721
Maksudku, menurutku itu benar\n

6906
06:39:50,320 --> 06:39:52,850
Namun hal itu memerlukan beberapa langkah.

6907
06:39:52,850 --> 06:39:54,640
Jadi sebenarnya, ini akan menjadi sebuah algoritma.

6908
06:39:54,640 --> 06:39:56,710
Ia memiliki nama yang disebut pencarian linier.

6909
06:39:56,710 --> 06:39:59,201
Dan, [? Nomira, ?] seperti yang\ndilakukan, kamu berjalan-jalan saja

6910
06:39:59,201 --> 06:40:01,096
garis dari kiri ke kanan.

6911
06:40:01,721 --> 06:40:04,241
Jika Anda bergerak dari kanan\nke kiri, akankah algoritmanya

6912
06:40:04,241 --> 06:40:07,391
secara fundamental lebih baik?

6913
06:40:08,140 --> 06:40:09,245
DAVID J. MALAN: Oke, dan mengapa?

6914
06:40:09,245 --> 06:40:11,620
AUDIENCE: Karena angka nol ada\ndi skenario pertama.

6915
06:40:11,620 --> 06:40:15,220
Tapi kalau seperti itu, angka nolnya ada di\n

6916
06:40:15,221 --> 06:40:19,381
DAVID J. MALAN: Ya, jadi ini\n

6917
06:40:19,381 --> 06:40:20,631
menjadi sedikit kurang jelas.

6918
06:40:20,631 --> 06:40:23,068
Anda pasti akan\ngmendapatkan hasil yang lebih baik bagi diri Anda sendiri

6919
06:40:23,067 --> 06:40:25,150
jika Anda kebetulan\nmemulai dari kanan

6920
06:40:25,151 --> 06:40:27,141
atau jika saya telah mengarahkan Anda\nuntuk memulai dari sana.

6921
06:40:27,140 --> 06:40:30,268
Tapi masalahnya adalah jika saya memintanya untuk\n

6922
06:40:30,268 --> 06:40:31,600
yah, itu akan menjadi bumerang.

6923
06:40:31,600 --> 06:40:33,308
Dan kali ini\nakan memakan waktu lebih lama

6924
06:40:33,309 --> 06:40:35,811
untuk menemukan nomor itu karena\itu jauh ke sini.

6925
06:40:35,811 --> 06:40:40,331
Dan secara umum, berjalan\n

6926
06:40:40,330 --> 06:40:43,900
mungkin sudah benar\n

6927
06:40:43,901 --> 06:40:47,878
tentang urutan angka-- dan\n

6928
06:40:47,878 --> 06:40:49,960
Ada yang lebih kecil,\nada yang lebih besar.

6929
06:40:49,960 --> 06:40:51,668
Tampaknya\ntidak ada alasan atau alasan.

6930
06:40:51,669 --> 06:40:55,691
Penelusuran linier sama baiknya dengan Anda\n

6931
06:40:55,690 --> 06:40:57,414
apriori tentang angka-angka.

6932
06:40:57,414 --> 06:41:00,081
Jadi saya punya sedikit hadiah terima kasih\ndi sini, sedikit bola stres CS.

6933
06:41:00,080 --> 06:41:03,040
Tepuk tangan meriah untuk\nrelawan pertama.

6934
06:41:08,030 --> 06:41:12,050
Mari kita coba memformalkan apa yang baru saja saya\ngambarkan sebagai penelusuran linier

6935
06:41:12,050 --> 06:41:15,298
karena memang, tidak peduli\nend [? Nomira?] sudah mulai

6936
06:41:15,298 --> 06:41:17,091
Saya bisa saja\nmengubah masalahnya

6937
06:41:17,091 --> 06:41:19,431
untuk memastikan\ntampaknya berjalan lambat.

6938
06:41:20,451 --> 06:41:23,631
Jika ada angka nol di antara pintu-pintu itu,\n

6939
06:41:24,620 --> 06:41:30,230
Jadi sekarang mari kita coba menerjemahkan apa\n

6940
06:41:30,230 --> 06:41:32,570
kode semu mulai dari minggu nol.

6941
06:41:32,570 --> 06:41:35,091
Jadi dengan kode semu, kita\nhanya memerlukan bahasa Inggris yang singkat

6942
06:41:35,091 --> 06:41:38,131
suka, atau bahasa apa pun, sintaksis\nuntuk menjelaskan apa yang kami lakukan.

6943
06:41:38,131 --> 06:41:40,640
Jadi berikut ini mungkin salah satu rumusan\napa [? Nomira?] melakukannya.

6944
06:41:40,640 --> 06:41:45,050
Untuk setiap pintu, dari kiri ke kanan,\n

6945
06:41:46,640 --> 06:41:51,990
Jika tidak, di akhir program,\n

6946
06:41:53,161 --> 06:41:55,161
Dan di pintu ketujuh,\n[? Nomira?] Memang benar

6947
06:41:55,161 --> 06:41:58,791
dikembalikan benar dengan mengatakan,\nya, itu nol.

6948
06:41:58,791 --> 06:42:01,431
Namun mari kita pertimbangkan apakah\nkode semu ini sekarang sudah benar

6949
06:42:02,510 --> 06:42:06,720
Pertama-tama, biasanya, ketika kita sudah\n

6950
06:42:06,721 --> 06:42:10,461
Namun di sini, return\nfalse selaras dengan for.

6951
06:42:10,460 --> 06:42:14,060
Mengapa saya tidak membuat indentasi return\nfalse, atau dengan cara lain

6952
06:42:14,061 --> 06:42:21,141
kenapa saya tidak melakukannya jika nomornya tertinggal\n

6953
06:42:21,140 --> 06:42:24,216
Mengapa versi\nkode ini bermasalah?

6954
06:42:34,681 --> 06:42:37,050
DAVID J. MALAN: Oke, saya tidak yakin\ini karena redundansi.

6955
06:42:37,050 --> 06:42:39,361
Izinkan saya melanjutkan dan\nmembuatnya eksplisit.

6956
06:42:39,361 --> 06:42:42,870
Jika saya malah melakukan\nelse return false, saya

6957
06:42:42,870 --> 06:42:47,302
Saya rasa tidak ada terlalu banyak redundansi yang perlu saya khawatirkan.

6958
06:42:47,302 --> 06:42:48,510
Biarkan aku terpental ke tempat lain.

6959
06:42:49,170 --> 06:42:52,710
AUDIENCE: Um, mungkin\n[Tak terdengar] untuk keseluruhan daftar

6960
06:42:52,710 --> 06:42:54,091
setelah hanya memeriksa satu nomor.

6961
06:42:54,091 --> 06:42:56,280
DAVID J. MALAN: Ya, itu akan\nakan mengakibatkan kegagalan bagi--

6962
06:42:56,280 --> 06:42:58,155
padahal aku hanya\nmelihat-- [? Nomira?]

6963
06:42:58,155 --> 06:42:59,460
hanya melihat satu elemen.

6964
06:42:59,460 --> 06:43:02,503
Dan itu akan menjadi seolah-olah\n

6965
06:43:02,503 --> 06:43:05,971
dia membukanya dan berkata, tidak,\n

6966
06:43:05,971 --> 06:43:09,069
Itu akan memberi saya hasil\nyang salah karena tentu saja

6967
06:43:09,068 --> 06:43:11,611
pada tahap algoritme itu,\ndia bahkan tidak akan melihatnya

6968
06:43:11,611 --> 06:43:13,081
melalui pintu lainnya.

6969
06:43:13,080 --> 06:43:16,870
Jadi hanya lekukan asli\nini saja, jika Anda mau

6970
06:43:16,870 --> 06:43:19,560
tanpa [? lain, ?]\ni benar karena saja

6971
06:43:19,561 --> 06:43:23,311
jika saya memahami\nalgoritma ini atau kode semu dapat melakukannya

6972
06:43:23,311 --> 06:43:26,101
masuk akal untuk menyimpulkan\nat pada saat itu, begitu dia sampai

6973
06:43:26,100 --> 06:43:29,580
melewati semua pintu,\ntidak, sebenarnya ada--

6974
06:43:29,580 --> 06:43:32,911
nomor yang saya cari,\ninnya sebenarnya tidak ada.

6975
06:43:32,911 --> 06:43:37,151
Jadi, sekarang bagaimana kita mempertimbangkan\nwaktu berjalannya algoritme ini?

6976
06:43:37,151 --> 06:43:40,291
Kami memiliki beberapa\njenis kosakata yang berbeda sekarang.

6977
06:43:40,291 --> 06:43:43,441
Dan jika kita mempertimbangkan sekarang bagaimana\nkita dapat memikirkan hal ini

6978
06:43:43,440 --> 06:43:46,980
mari kita mulai menerjemahkannya dari\n

6979
06:43:46,980 --> 06:43:48,780
ke sesuatu yang tingkatnya sedikit lebih rendah.

6980
06:43:48,780 --> 06:43:52,181
Kami telah menulis kode menggunakan\nn dan loop dan sejenisnya.

6981
06:43:52,181 --> 06:43:56,701
Jadi mari kita ambil kode semu\ntingkat yang lebih tinggi ini dan sekarang semacamnya

6982
06:43:56,701 --> 06:43:59,251
mendapatkan jalan tengah\nantara bahasa Inggris dan C.

6983
06:43:59,251 --> 06:44:03,271
Izinkan saya mengusulkan agar kita memikirkan\n

6984
06:44:03,271 --> 06:44:05,041
sebagai sedikit lebih bertele-tele.

6985
06:44:05,041 --> 06:44:13,181
Untuk i dari 0 sampai n dikurangi 1, jika bilangan\n

6986
06:44:13,181 --> 06:44:15,881
Jika tidak, di akhir\nprogram, kembalikan false.

6987
06:44:15,881 --> 06:44:17,881
Sekarang saya sedang mencampur\nBahasa Inggris dan C di sini

6988
06:44:17,881 --> 06:44:20,311
tapi itu wajar jika\npembaca familiar dengan C

6989
06:44:21,901 --> 06:44:23,891
Dan perhatikan pola ini di sini.

6990
06:44:23,890 --> 06:44:29,010
Ini adalah cara untuk mengatakannya dengan pseudo\n

6991
06:44:29,010 --> 06:44:33,720
Mulailah dari 0 lalu\nhitung hingga n dikurangi 1.

6992
06:44:33,721 --> 06:44:37,771
Dan mengingat n dikurangi 1 tidak sampai satu\nakhir dari array.

6993
06:44:37,771 --> 06:44:40,530
N dikurangi 1 adalah akhir\narray karena sekali lagi, kita

6994
06:44:41,940 --> 06:44:45,240
Jadi ini adalah cara yang sangat umum\nuntuk mengekspresikan perulangan semacam ini

6995
06:44:45,241 --> 06:44:48,271
dari kiri hingga\nke kanan array.

6996
06:44:48,271 --> 06:44:51,570
Pintu yang saya perlakukan secara implisit\nsebagai nama array ini

6997
06:44:51,570 --> 06:44:54,361
seperti itu adalah variabel dari\nminggu terakhir yang saya definisikan sebagai keberadaan

6998
06:44:54,361 --> 06:44:56,140
array bilangan bulat dalam kasus ini.

6999
06:44:56,140 --> 06:45:01,050
Jadi braket pintu i maksudnya\nbila i 0, inilah lokasinya.

7000
06:45:02,580 --> 06:45:06,150
Ketika i berumur 7 atau, lebih umum n minus--

7001
06:45:06,151 --> 06:45:10,631
maaf, 6 atau, lebih umum, n\n

7002
06:45:10,631 --> 06:45:13,061
Jadi ide yang sama tetapi terjemahannya.

7003
06:45:13,061 --> 06:45:17,281
Jadi sekarang mari kita pertimbangkan apa\n

7004
06:45:17,280 --> 06:45:20,370
Jika kami memiliki menu yang berisi kemungkinan\njawaban atas pertanyaan ini

7005
06:45:20,370 --> 06:45:23,290
seberapa efisien atau tidak efisien\nis algoritma ini

7006
06:45:23,291 --> 06:45:26,011
mari kita lihat\nkonteks kode semu ini.

7007
06:45:26,010 --> 06:45:28,860
Kita bahkan tidak perlu repot\npergi jauh-jauh ke C.

7008
06:45:28,861 --> 06:45:32,081
Bagaimana cara kita menganalisis\nsetiap langkah ini?

7009
06:45:33,960 --> 06:45:39,900
Loop terluar ini untuk i dari\n

7010
06:45:39,901 --> 06:45:42,151
akan mengeksekusi berapa kali?

7011
06:45:42,151 --> 06:45:45,781
Berapa kali loop tersebut akan dieksekusi?

7012
06:45:45,780 --> 06:45:48,900
Izinkan saya memberi orang\nmomen ini untuk memikirkannya.

7013
06:45:48,901 --> 06:45:51,691
Berapa kali\nterulang di sini?

7014
06:45:54,721 --> 06:45:55,890
DAVID J. MALAN: n kali ya?

7015
06:45:55,890 --> 06:45:58,080
Karena dari 0 sampai n dikurangi 1.

7016
06:45:58,080 --> 06:46:00,690
Dan jika agak aneh\nberpikir dari 0 hingga n dikurangi 1

7017
06:46:00,690 --> 06:46:04,192
ini pada dasarnya sama\nsecara matematis dengan dari 1 sampai n.

7018
06:46:04,192 --> 06:46:06,150
Dan itu mungkin\nsedikit lebih jelas

7019
06:46:08,050 --> 06:46:12,541
Jadi saya mungkin akan membuat catatan untuk diri saya sendiri\n

7020
06:46:12,541 --> 06:46:14,131
Bagaimana dengan langkah-langkah batin ini?

7021
06:46:14,131 --> 06:46:17,521
Berapa langkah atau detik\ndo yang diperlukan untuk mengajukan pertanyaan?

7022
06:46:19,651 --> 06:46:23,101
jika nomor yang dicari\nada di balik pintu braket i

7023
06:46:23,100 --> 06:46:25,931
baik, sebagai [? Nomira ?] melakukannya,\nitu seperti satu langkah.

7024
06:46:25,931 --> 06:46:27,181
Jadi Anda membuka pintu dan boom.

7025
06:46:27,181 --> 06:46:30,460
Baiklah, mungkin hanya dua langkah,\n

7026
06:46:30,460 --> 06:46:32,681
Jadi ini adalah sejumlah\njumlah langkah yang konstan.

7027
06:46:32,681 --> 06:46:34,440
Sebut saja untuk kesederhanaan.

7028
06:46:34,440 --> 06:46:37,860
Berapa banyak langkah atau detik\ndo yang diperlukan untuk mengembalikan nilai true?

7029
06:46:37,861 --> 06:46:40,224
Saya tidak tahu persis\nmemori komputer

7030
06:46:40,223 --> 06:46:41,640
tapi itu terasa seperti satu langkah.

7031
06:46:43,300 --> 06:46:46,320
Jadi jika ini memerlukan satu\nlangkah, maka ini memerlukan satu langkah

7032
06:46:46,320 --> 06:46:49,320
tetapi hanya jika kondisinya\nbenar, maka akan terlihat

7033
06:46:49,320 --> 06:46:53,730
seperti Anda melakukan sejumlah\nkonstan sebanyak n kali.

7034
06:46:53,730 --> 06:46:56,890
Atau mungkin Anda\tidak melakukan langkah tambahan apa pun.

7035
06:46:56,890 --> 06:46:59,370
Singkatnya, satu-satunya hal\nyang paling penting di sini

7036
06:46:59,370 --> 06:47:02,580
dalam hal efisiensi atau\sembilanefisiensi algoritma

7037
06:47:02,580 --> 06:47:05,855
adalah apa yang kamu lakukan lagi dan lagi\n

7038
06:47:05,855 --> 06:47:07,230
hal yang akan bertambah.

7039
06:47:07,230 --> 06:47:10,440
Melakukan satu atau dua hal\na jumlah yang konstan?

7040
06:47:11,370 --> 06:47:16,411
Tapi jika diulang, itu akan bertambah\n

7041
06:47:16,411 --> 06:47:19,780
semakin besar n dan\n

7042
06:47:19,780 --> 06:47:22,681
itulah maksudnya jika Anda\nmendeskripsikannya secara kasar

7043
06:47:22,681 --> 06:47:27,480
berapa banyak langkah yang dilakukan\nalgoritma ini dalam notasi O besar

7044
06:47:27,480 --> 06:47:30,420
apa yang mungkin dikatakan instingmu?

7045
06:47:30,420 --> 06:47:35,710
Berapa langkah algoritma ini pada\n

7046
06:47:40,471 --> 06:47:42,581
Dan memang, hal itu\nakan terjadi di sini.

7047
06:47:42,811 --> 06:47:44,894
Karena pada dasarnya Anda,\namun pada akhirnya

7048
06:47:44,894 --> 06:47:48,352
melakukan n hal sebagai batas\natas waktu berjalan.

7049
06:47:48,352 --> 06:47:50,310
Faktanya, itulah\yang sebenarnya terjadi

7050
06:47:50,311 --> 06:47:52,861
dengan [? Nomira. ?] Dia harus\nmelihat semua n loker

7051
06:47:52,861 --> 06:47:55,811
sebelum akhirnya mendapatkan\njawaban yang benar.

7052
06:47:55,811 --> 06:47:58,831
Namun bagaimana jika dia\nberuntung dan nomor kita

7053
06:47:58,830 --> 06:48:01,740
yang dicari bukan\nat akhir dari array

7054
06:48:01,741 --> 06:48:04,441
tapi apakah itu di awal array?

7055
06:48:04,440 --> 06:48:06,010
Bagaimana kita bisa memikirkan hal itu?

7056
06:48:06,010 --> 06:48:09,480
Nah, buatlah nomenklatur untuk ini\n

7057
06:48:09,480 --> 06:48:12,091
Ingat, notasi omega\adalah batas bawah.

7058
06:48:12,091 --> 06:48:18,600
Jadi mengingat menu ini mungkin berjalan\n

7059
06:48:18,600 --> 06:48:23,257
apa notasi omeganya\n

7060
06:48:24,631 --> 06:48:26,611
DAVID J. MALAN: Omega 1, dan mengapa demikian?

7061
06:48:28,333 --> 06:48:30,751
DAVID J. MALAN: Benar, karena\nhanya kebetulan dia beruntung

7062
06:48:30,751 --> 06:48:33,661
dan nomor yang dia cari\nada di sana

7063
06:48:33,661 --> 06:48:35,850
dia memulai algoritmanya, itu saja.

7064
06:48:36,901 --> 06:48:39,570
Mungkin perlu dua langkah jika Anda harus\nmembuka kunci pintu dan membukanya

7065
06:48:39,570 --> 06:48:41,100
tapi itu jumlah langkah yang konstan.

7066
06:48:41,100 --> 06:48:43,170
Dan cara kami mendeskripsikan\njumlah langkah yang konstan

7067
06:48:43,170 --> 06:48:45,390
hanya dengan satu angka seperti 1.

7068
06:48:45,390 --> 06:48:49,350
Jadi notasi omega untuk penelusuran\nlinier mungkin adalah omega dari 1

7069
06:48:49,350 --> 06:48:53,010
karena dalam kasus terbaik, dia mungkin saja\n

7070
06:48:53,010 --> 06:48:56,220
Namun dalam kasus terburuk, kita perlu\n

7071
06:48:58,350 --> 06:49:01,050
Jadi sekali lagi ada cara\nberbicara secara simbolis

7072
06:49:01,050 --> 06:49:06,510
tentang kasus terbaik dan kasus terburuk\n

7073
06:49:06,510 --> 06:49:09,240
Notasi Theta, hanya\nas sedikit hal sepele sekarang

7074
06:49:09,241 --> 06:49:12,326
apakah ini berlaku berdasarkan\ndefinisi yang saya berikan sebelumnya?

7075
06:49:13,201 --> 06:49:15,991
DAVID J. MALAN: Oke, tidak, karena Anda\n

7076
06:49:15,991 --> 06:49:18,481
ketika kedua batas tersebut,\nupper dan lower, terjadi

7077
06:49:18,480 --> 06:49:21,100
sama untuk notasi steno\njika Anda mau.

7078
06:49:21,100 --> 06:49:25,890
Jadi di sini cukuplah membicarakan\nnotasi O besar dan omega saja.

7079
06:49:25,890 --> 06:49:28,240
Nah, bagaimana jika kita\nsedikit lebih pintar dalam hal ini?

7080
06:49:28,241 --> 06:49:31,711
Biarkan saya melanjutkan dan menyelesaikan\nsecara rahasia di sini

7081
06:49:32,741 --> 06:49:34,966
Tapi pertama-tama, bagaimana kalau\tidak ada sukarelawan lain?

7082
06:49:34,966 --> 06:49:37,591
Satu sukarelawan lainnya-- Anda harus\nmerasa nyaman dengan masker Anda

7083
06:49:37,591 --> 06:49:39,870
dan keberadaan Anda di internet.

7084
06:49:42,541 --> 06:49:44,241
Ya, kamu mau turun?

7085
06:49:45,241 --> 06:49:48,001
Dan jangan lihat apa yang saya\lakukan karena saya akan--

7086
06:49:52,701 --> 06:49:55,191
luangkan waktumu dan\njangan melihat ke arah sini

7087
06:49:55,190 --> 06:49:58,911
karena saya memerlukan waktu untuk\nmengatur ulang semua angkanya.

7088
06:49:58,911 --> 06:50:01,791
Dan sebenarnya, jika Anda bisa tetap\ndi sana sebelum datang

7089
06:50:01,791 --> 06:50:05,271
hanya beberapa detik yang canggung\nsementara saya selesai menyembunyikan nomornya

7090
06:50:08,251 --> 06:50:10,850
DAVID J. MALAN: Saya akan segera bersama Anda.

7091
06:50:10,850 --> 06:50:15,470
Sebenarnya, jika-- apakah Anda ingin\nmenghangatkan penonton sejenak

7092
06:50:16,644 --> 06:50:18,061
Jadi, Anda ingin memperkenalkan diri?

7093
06:50:27,861 --> 06:50:30,561
DAVID J. MALAN: Baiklah,\nSaya rasa saya sudah siap.

7094
06:50:30,561 --> 06:50:32,061
Terima kasih telah mengulur waktu di sana.

7095
06:50:33,330 --> 06:50:34,070
DAVID J. MALAN: Dan saya tidak mengetahui nama Anda.

7096
06:50:35,811 --> 06:50:36,801
HADIRIN: Sambutan hangat, seperti pesta.

7097
06:50:39,291 --> 06:50:41,121
Jadi Rave dengan baik hati mengajukan diri sekarang.

7098
06:50:41,120 --> 06:50:43,085
Dan kali ini saya akan memberi Anda\keuntungan tambahan.

7099
06:50:43,760 --> 06:50:47,540
DAVID J. MALAN: Tanpa sepengetahuan Anda, saya\n

7100
06:50:48,890 --> 06:50:50,480
Jadi urutannya tidak dalam\nacak yang sama seperti mereka

7101
06:50:50,480 --> 06:50:52,523
adalah untuk [? Nomira. ?]\nSekarang Anda mempunyai keuntungan

7102
06:50:52,523 --> 06:50:55,039
untuk mengetahui bahwa angkanya\ndiurutkan dari kecil ke besar.

7103
06:50:55,580 --> 06:50:59,540
DAVID J. MALAN: Mengingat hal itu, dan mungkin diberikan\n

7104
06:50:59,541 --> 06:51:03,501
dengan buku telepon, di mana Anda bisa\n

7105
06:51:06,169 --> 06:51:07,961
DAVID J. MALAN: Ayo cari\nnomor enam kali ini.

7106
06:51:07,960 --> 06:51:09,300
Mari kita buat semuanya menjadi menarik.

7107
06:51:11,661 --> 06:51:12,411
DAVID J. MALAN: Oke, jadi yang tengah.

7108
06:51:14,030 --> 06:51:14,780
DAVID J. MALAN: --itu akan ada di sini.

7109
06:51:16,820 --> 06:51:18,681
Dan sayangnya, Anda menemukan angka lima.

7110
06:51:22,742 --> 06:51:24,825
DAVID J. MALAN: Baiklah, dan\nsupaya tetap seragam

7111
06:51:24,826 --> 06:51:27,441
seperti yang saya lakukan, saya membuka\nseparuh kanan buku telepon.

7112
06:51:27,710 --> 06:51:29,240
DAVID J. MALAN: Mari kita tetap serupa.

7113
06:51:30,583 --> 06:51:32,542
DAVID J. MALAN: Baiklah,\ndan, eh, agak keterlaluan

7114
06:51:32,543 --> 06:51:34,431
meskipun aku tahu kamu\ningin mengunjunginya.

7115
06:51:34,431 --> 06:51:35,440
HADIRIN: Semuanya bagus, semuanya bagus.

7116
06:51:35,440 --> 06:51:37,161
DAVID J. MALAN: Dan sekarang kita\nakan menuju ke arah yang mana?

7117
06:51:37,161 --> 06:51:38,578
HADIRIN: Di sini di tengah.

7118
06:51:38,578 --> 06:51:40,681
DAVID J. MALAN: Benar, dan\nvoila, angka enam.

7119
06:51:40,681 --> 06:51:42,201
Baiklah, dilakukan dengan sangat baik.

7120
06:51:44,980 --> 06:51:46,681
Sedikit membuat stres bagi Anda juga.

7121
06:51:47,570 --> 06:51:50,151
Jadi di sini kita melihat secara alami\npintu loker

7122
06:51:50,151 --> 06:51:54,711
masih terbuka sebagai suatu artefak efisiensi yang lebih besar

7123
06:51:54,710 --> 06:51:57,920
tampaknya,\nalgoritma ini karena sekarang Rave

7124
06:51:57,920 --> 06:52:00,830
diberi asumsi bahwa\n

7125
06:52:00,830 --> 06:52:04,670
di sebelah kiri hingga besar di sebelah kanan,\n

7126
06:52:04,670 --> 06:52:07,970
dan taklukkan algoritma dari minggu ke-0\n

7127
06:52:09,561 --> 06:52:13,011
Dan cukup dengan memulai dari\ntengah dan menyadarinya

7128
06:52:13,010 --> 06:52:17,030
Oke, terlalu kecil, lalu buka\n

7129
06:52:17,030 --> 06:52:20,181
melangkah terlalu jauh, lalu dengan\npergi ke bagian kiri, yang mana

7130
06:52:20,181 --> 06:52:24,021
Rave dapat menemukannya hanya dalam\ntiga langkah, bukan tujuh

7131
06:52:24,021 --> 06:52:28,081
nomor enam dalam hal ini yang\nkami sebenarnya cari.

7132
06:52:28,080 --> 06:52:32,250
Jadi Anda dapat melihat bahwa ini\ntampaknya lebih efisien.

7133
06:52:32,251 --> 06:52:35,061
Mari kita pertimbangkan\na saat apakah itu benar.

7134
06:52:35,061 --> 06:52:40,611
Jika saya menggunakan nomor yang berbeda tetapi\n

7135
06:52:40,611 --> 06:52:43,739
apakah algoritme ini masih\nberfungsi?

7136
06:52:45,530 --> 06:52:48,280
Misalnya, mengapa cara ini masih\nberhasil, menurut Anda?

7137
06:52:51,061 --> 06:52:52,811
DAVID J. MALAN: Ya, asalkan jumlahnya

7138
06:52:52,811 --> 06:52:55,121
selalu dalam urutan yang sama\ndari kiri ke kanan

7139
06:52:55,120 --> 06:52:58,330
atau, sialnya, bisa saja sebaliknya\n

7140
06:52:58,330 --> 06:53:02,770
keputusan yang diambil Rave--\n

7141
06:53:02,771 --> 06:53:05,181
akan memandu kita menuju\nsolusi apa pun yang terjadi.

7142
06:53:05,181 --> 06:53:07,820
Dan tampaknya langkah yang diambil lebih sedikit.

7143
06:53:07,820 --> 06:53:10,580
Jadi sekarang kita pertimbangkan\nkode semu untuk algoritma ini

7144
06:53:10,580 --> 06:53:12,890
mari kita lihat bagaimana kami\nmendeskripsikan penelusuran biner.

7145
06:53:12,890 --> 06:53:15,760
Jadi penelusuran biner mungkin\nkami jelaskan dengan sesuatu seperti ini.

7146
06:53:15,760 --> 06:53:19,001
Jika angkanya berada di belakang tengah\n

7147
06:53:19,001 --> 06:53:21,070
maka kita bisa mengembalikan true.

7148
06:53:21,070 --> 06:53:24,651
Lain halnya jika nomornya\nkurang dari pintu tengah

7149
06:53:24,651 --> 06:53:27,161
jadi jika enam kurang dari berapa pun\nis di balik pintu tengah

7150
06:53:27,161 --> 06:53:29,501
maka Rave akan\nmencari bagian kiri.

7151
06:53:29,501 --> 06:53:32,050
Lain lagi jika jumlahnya\nglebih besar dari pintu tengah

7152
06:53:32,050 --> 06:53:34,060
Rave akan mencari bagian kanan.

7153
06:53:34,061 --> 06:53:38,201
Lain lagi, jika tidak ada pintu-- dan\n

7154
06:53:38,201 --> 06:53:40,070
ini di atas hanya untuk menjaga semuanya tetap bersih.

7155
06:53:40,070 --> 06:53:43,751
Jika tidak ada pintu, apa yang harus dilakukan Rave\n

7156
06:53:43,751 --> 06:53:47,230
jika saya tidak memberinya loker untuk bekerja?

7157
06:53:48,280 --> 06:53:50,380
Namun ini merupakan kasus\npenting untuk dipertimbangkan

7158
06:53:50,381 --> 06:53:54,341
karena jika dalam proses\npencarian dari loker demi loker

7159
06:53:54,341 --> 06:53:58,991
kami mungkin telah mengurangi\n

7160
06:53:58,991 --> 06:54:01,731
ke satu pintu ke nol\ndoor-- dan pada saat itu

7161
06:54:01,730 --> 06:54:03,591
kami mungkin tidak punya\ruang lagi untuk mencari.

7162
06:54:03,591 --> 06:54:06,401
Jadi tentu saja kita harus mempunyai\nskenario untuk mempertimbangkannya

7163
06:54:07,480 --> 06:54:11,271
Jadi bukan berarti mungkin saya tidak\n

7164
06:54:11,271 --> 06:54:13,271
Namun saat dia membelah dan\ndimecah dan membelah

7165
06:54:13,271 --> 06:54:17,081
jika dia kehabisan loker untuk menanyakan hal itu\n

7166
06:54:17,080 --> 06:54:20,020
jika saya kehabisan\nhalaman buku telepon hingga robek menjadi dua

7167
06:54:20,021 --> 06:54:23,570
Saya juga mungkin harus\nmengembalikan false seperti dalam kasus ini.

7168
06:54:23,570 --> 06:54:26,861
Jadi bagaimana sekarang kita dapat mendeskripsikan\nini lebih mirip C

7169
06:54:26,861 --> 06:54:30,070
hanya untuk memberi diri kita sebuah variabel\n

7170
06:54:30,070 --> 06:54:33,291
Baiklah, saya mungkin berbicara tentang\ndoors sebagai sebuah array.

7171
06:54:33,291 --> 06:54:36,851
Jadi jika saya ingin mengungkapkan bagian tengahnya\n

7172
06:54:38,830 --> 06:54:40,630
Saya berasumsi bahwa\nseseorang telah menghitungnya

7173
06:54:40,631 --> 06:54:43,811
untuk mencari tahu apa pintu tengahnya\n

7174
06:54:43,811 --> 06:54:46,301
Lalu pintu, jika\nnomor yang kita cari

7175
06:54:46,300 --> 06:54:49,830
kurang dari braket pintu\ntengah, lalu cari pintu

7176
06:54:49,830 --> 06:54:53,590
nol melalui pintu tengah dikurangi 1.

7177
06:54:53,591 --> 06:54:57,971
Jadi sekali lagi, ini adalah cara yang lebih bertele-tele\n

7178
06:54:57,971 --> 06:55:00,520
telusuri bagian kiri,\ntelusuri bagian kanan--

7179
06:55:00,520 --> 06:55:07,151
tapi sekarang mulailah menjelaskannya di\n

7180
06:55:07,151 --> 06:55:08,954
seperti yang kami lakukan dengan notasi array kami.

7181
06:55:08,954 --> 06:55:10,871
Skenario terakhir, tentu saja, adalah jika angkanya

7182
06:55:10,870 --> 06:55:13,120
lebih besar dari\ntengah braket pintu

7183
06:55:13,120 --> 06:55:16,420
maka Rave pasti ingin\nmencari pintu tengah ditambah 1--

7184
06:55:16,420 --> 06:55:21,610
jadi 1 lewat-- melalui pintu n dikurangi 1--

7185
06:55:22,690 --> 06:55:25,750
Jadi sekali lagi, hanya semacam\n

7186
06:55:27,349 --> 06:55:31,180
Jadi bagaimana kita menerjemahkan\nini ke dalam notasi O besar?

7187
06:55:31,181 --> 06:55:38,230
Nah, dalam kasus terburuk, berapa\n

7188
06:55:39,431 --> 06:55:43,390
Diberikan tujuh pintu atau diberikan\nlebih umum n pintu

7189
06:55:43,390 --> 06:55:47,980
berapa kali dia bisa ke kiri atau ke kiri\n

7190
06:55:50,471 --> 06:55:53,148
Apa cara untuk memikirkan hal itu?

7191
06:55:57,640 --> 06:56:00,515
Dan bahkan jika Anda tidak merasa utuh\n

7192
06:56:00,515 --> 06:56:03,611
tetap saja, cukup banyak dalam pemrograman dan\n

7193
06:56:03,611 --> 06:56:06,791
kapan pun kita membicarakan suatu algoritma\n

7194
06:56:06,791 --> 06:56:10,541
menjadi dua, menjadi dua, menjadi dua,\atau kelipatan lainnya

7195
06:56:10,541 --> 06:56:12,941
ini mungkin melibatkan\nlogaritma dalam beberapa hal.

7196
06:56:12,940 --> 06:56:15,760
Dan basis log n pada dasarnya\nmengacu pada nomor tersebut

7197
06:56:15,760 --> 06:56:21,520
berapa kali Anda dapat membagi n dengan 2 hingga\n

7198
06:56:21,521 --> 06:56:23,771
atau setara dengan tidak ada lagi pintu yang tersisa.

7199
06:56:24,730 --> 06:56:28,631
Jadi kita dapat mengatakan bahwa memang,\npencarian biner ada di O besar dari log n

7200
06:56:28,631 --> 06:56:32,800
karena pintu yang terakhir dibuka Rave\nadalah yang ini

7201
06:56:32,800 --> 06:56:34,720
kebetulan berjarak tiga pintu.

7202
06:56:34,721 --> 06:56:37,151
Dan sebenarnya, jika Anda menghitung\ndi sini, itu kira-kira

7203
06:56:37,151 --> 06:56:38,961
ternyata persis seperti itu.

7204
06:56:38,960 --> 06:56:43,001
Jika kita menambahkannya, itu tidak akan berhasil\n

7205
06:56:43,001 --> 06:56:46,300
kami dapat menelusurinya\nin hanya dalam tiga langkah total.

7206
06:56:46,300 --> 06:56:48,341
Namun, bagaimana dengan notasi omega?

7207
06:56:48,341 --> 06:56:51,581
Misalnya, dalam kasus terbaik, Rave\nmungkin beruntung.

7208
06:56:51,580 --> 06:56:53,530
Dia membuka pintu, dan itu dia.

7209
06:56:53,530 --> 06:56:59,330
Jadi bagaimana kita mendeskripsikan batas bawah\n

7210
06:57:03,580 --> 06:57:08,170
Jadi di sini juga, kita melihatnya dalam beberapa kasus\n

7211
06:57:08,170 --> 06:57:10,060
sepertinya, mereka cukup setara.

7212
06:57:10,061 --> 06:57:15,191
Dan inilah alasannya terkadang\n

7213
06:57:15,190 --> 06:57:17,650
kasus dalam kasus terburuk\nkarena sejujurnya, secara umum

7214
06:57:17,651 --> 06:57:19,961
siapa yang benar-benar peduli jika Anda\nberuntung sesekali

7215
06:57:19,960 --> 06:57:21,640
dan algoritma Anda super cepat?

7216
06:57:21,640 --> 06:57:24,611
Hal yang mungkin Anda pedulikan\adalah kasus terburuknya.

7217
06:57:25,751 --> 06:57:29,530
berapa lama aku akan duduk\n

7218
06:57:29,530 --> 06:57:35,167
atau bola pantai mencoba memberikan diriku\n

7219
06:57:35,168 --> 06:57:38,001
Kemungkinan besar, Anda akan\n

7220
06:57:38,001 --> 06:57:39,791
Memang benar, ke depan\nsecara umum akan terjadi

7221
06:57:39,791 --> 06:57:43,091
berbicara tentang waktu berjalan\n

7222
06:57:43,091 --> 06:57:45,140
sedikit kurang dalam hal omega.

7223
06:57:45,140 --> 06:57:47,501
Namun memahami\nrentangnya bisa menjadi hal yang penting

7224
06:57:47,501 --> 06:57:53,061
tergantung pada sifat data yang\n

7225
06:57:53,061 --> 06:57:55,871
Baiklah, izinkan saya berhenti sejenak dan\nlihat apakah ada pertanyaan.

7226
06:58:03,210 --> 06:58:05,791
AUDIENCE: Jadi cara ini\njelas lebih efisien

7227
06:58:05,791 --> 06:58:10,800
tapi itu memerlukan informasi\n

7228
06:58:10,800 --> 06:58:14,131
Bagaimana Anda memastikan bahwa Anda\ndapat mengumpulkan informasi

7229
06:58:14,131 --> 06:58:15,626
dalam urutan tertentu dalam skala besar?

7230
06:58:15,626 --> 06:58:17,501
DAVID J. MALAN: Ya, itu pertanyaan yang sangat bagus.

7231
06:58:17,501 --> 06:58:20,376
Dan kalau saya bisa menggeneralisasikannya, bagaimana caranya\n

7232
06:58:20,376 --> 06:58:22,920
dalam skala besar, algoritma mana yang lebih baik?

7233
06:58:22,920 --> 06:58:25,800
Saya telah membawa kita ke\njalan yang menyiratkan hal ini

7234
06:58:25,800 --> 06:58:27,900
algoritma\nalgoritma kedua Rave itu, pencarian biner

7235
06:58:27,901 --> 06:58:29,941
lebih baik karena jauh lebih cepat.

7236
06:58:29,940 --> 06:58:33,960
Ini adalah log n dalam kasus\nterburuk, bukan O besar dari n.

7237
06:58:33,960 --> 06:58:37,591
Namun Rave diberi keuntungan ketika\n

7238
06:58:38,582 --> 06:58:40,290
Dan hal semacam itu\nmenimbulkan pertanyaan

7239
06:58:40,291 --> 06:58:42,031
ya, mengingat sejumlah\ndata acak

7240
06:58:42,030 --> 06:58:45,070
baik kumpulan data kecil atau, tentu saja,\n

7241
06:58:45,070 --> 06:58:48,901
miliaran data,\nsebaiknya Anda mengurutkannya terlebih dahulu

7242
06:58:48,901 --> 06:58:51,511
dari yang terkecil hingga\nterbesar lalu cari?

7243
06:58:51,510 --> 06:58:56,280
Atau haruskah Anda menyelam ke kanan\nin dan menelusurinya secara linear?

7244
06:58:56,280 --> 06:58:57,998
Seperti, bagaimana pendapat Anda tentang hal itu?

7245
06:58:57,998 --> 06:58:59,791
Misalnya, jika Anda adalah Google, dan Anda pernah melakukannya

7246
06:58:59,791 --> 06:59:03,451
mendapat jutaan, miliaran halaman web,\n

7247
06:59:03,451 --> 06:59:06,210
karena ini akan selalu berhasil\meskipun mungkin lambat?

7248
06:59:06,210 --> 06:59:09,181
Atau haruskah mereka menginvestasikan waktu\nmenyortir semua data itu--

7249
06:59:10,991 --> 06:59:13,261
lalu mencarinya dengan lebih efisien?

7250
06:59:13,260 --> 06:59:15,798
Misalnya, bagaimana Anda memutuskan\ndi antara opsi-opsi tersebut?

7251
06:59:15,798 --> 06:59:18,091
AUDIENCE: Jika Anda sedang mengurutkan\ndata, maka Anda tidak akan melakukannya

7252
06:59:18,091 --> 06:59:20,934
harus memeriksa semua datanya?

7253
06:59:20,934 --> 06:59:23,101
DAVID J. MALAN: Ya, jika Anda harus\nmengurutkan data terlebih dahulu--

7254
06:59:23,100 --> 06:59:25,060
dan kami belum mengetahui secara formal\tahu bagaimana melakukan hal ini.

7255
06:59:25,061 --> 06:59:27,478
Namun yang jelas, sebagai manusia, kita mungkin bisa mengetahuinya.

7256
06:59:27,477 --> 06:59:29,640
Anda tetap harus melihat\nsemua datanya.

7257
06:59:29,640 --> 06:59:33,120
Jadi Anda membuang-buang\n Anda

7258
06:59:35,041 --> 06:59:37,259
Tapi mungkin itu lebih tergantung.

7259
06:59:37,258 --> 06:59:39,300
Sepertinya, itu benar sekali\nbenar, dan jika memang benar

7260
06:59:39,300 --> 06:59:42,420
mencari satu hal dalam hidup,\n

7261
06:59:42,420 --> 06:59:46,080
untuk mengurutkannya lalu mencarinya karena\n

7262
06:59:46,080 --> 06:59:48,240
Namun adakah skenario lain\nin yang mungkin tidak Anda lakukan

7263
06:59:48,241 --> 06:59:53,771
khawatir tentang hal itu yang mungkin terjadi\n

7264
06:59:54,271 --> 07:00:00,940
HADIRIN: [TIDAK TERDENGAR] Anda boleh pergi\n

7265
07:00:00,940 --> 07:00:02,170
untuk mengetahui apa yang terjadi.

7266
07:00:02,170 --> 07:00:03,212
DAVID J. MALAN: Ya, tepat sekali.

7267
07:00:03,212 --> 07:00:05,753
Jadi jika masalah Anda adalah\nmasalah seperti Google di mana

7268
07:00:05,753 --> 07:00:08,710
Anda memiliki lebih dari satu pengguna\n

7269
07:00:08,710 --> 07:00:11,140
halaman situs web, mungkin Anda\nharus menanggung biayanya di muka

7270
07:00:11,140 --> 07:00:14,980
dan urutkan semuanya karena\n

7271
07:00:14,980 --> 07:00:17,170
akan menjadi lebih cepat,\nlebih cepat, lebih cepat karena itu

7272
07:00:17,170 --> 07:00:20,800
pergi ke algoritma biner [INAUDIBLE]\n

7273
07:00:20,800 --> 07:00:23,681
itu akan menambah\nlangkah yang jauh lebih sedikit

7274
07:00:23,681 --> 07:00:25,971
daripada melakukan pencarian linier beberapa kali.

7275
07:00:25,971 --> 07:00:27,851
Jadi sekali lagi, jenis\ntergantung pada kasus penggunaannya

7276
07:00:27,850 --> 07:00:29,710
dan tergantung pada\nseberapa penting hal tersebut.

7277
07:00:29,710 --> 07:00:32,411
Dan ini terjadi bahkan\dalam konteks dunia nyata.

7278
07:00:32,411 --> 07:00:35,260
Saya selalu berpikir kembali untuk lulus\n

7279
07:00:35,260 --> 07:00:36,970
untuk menganalisis kumpulan data yang besar.

7280
07:00:36,971 --> 07:00:39,761
Dan sejujurnya, saat itu sebenarnya\lebih mudah bagi saya

7281
07:00:39,760 --> 07:00:42,670
untuk menulis sangat tidak efisien\ntapi semoga benar

7282
07:00:42,670 --> 07:00:43,897
kode karena kamu tahu apa?

7283
07:00:43,898 --> 07:00:47,230
Saya hanya bisa tidur selama delapan jam\n

7284
07:00:47,730 --> 07:00:50,695
Saya tidak perlu repot menulis\n

7285
07:00:50,695 --> 07:00:51,820
untuk menjalankannya dengan lebih efisien.

7286
07:00:52,320 --> 07:00:55,881
Karena saya adalah satu-satunya pengguna, dan saya\n

7287
07:00:55,881 --> 07:00:58,061
Jadi ini adalah pendekatan yang masuk akal

7288
07:00:58,061 --> 07:01:01,911
masuk akal sampai aku bangun jam delapan\n

7289
07:01:01,911 --> 07:01:05,320
Dan sekarang saya harus menghabiskan delapan\n lagi

7290
07:01:05,320 --> 07:01:07,271
Namun bahkan di sana, Anda\nmelihat contohnya

7291
07:01:07,271 --> 07:01:09,251
apa sumber dayamu yang paling berharga?

7292
07:01:11,080 --> 07:01:13,330
Apakah sudah waktunya untuk menulis kode?

7293
07:01:13,330 --> 07:01:15,458
Apakah ini jumlah memori\nyang digunakan komputer?

7294
07:01:15,458 --> 07:01:18,251
Ini semua adalah sumber daya yang akan kami mulai\n

7295
07:01:18,251 --> 07:01:20,440
tergantung pada apa tujuan Anda.

7296
07:01:20,440 --> 07:01:23,411
Kalau begitu, ada pertanyaan tentang\batas atas, batas bawah

7297
07:01:23,411 --> 07:01:26,620
atau masing-masing dari dua\npenelusuran ini, linier atau biner?

7298
07:01:27,351 --> 07:01:29,940
AUDIENCE: Jadi, saat Anda\nmenghitung waktu berjalan

7299
07:01:29,940 --> 07:01:34,677
apakah langkah penyortiran\ndihitung pada saat itu?

7300
07:01:34,677 --> 07:01:37,510
DAVID J. MALAN: Saat menganalisis lari\n

7301
07:01:37,510 --> 07:01:39,670
Jika Anda menginginkannya, jika Anda benar-benar melakukannya.

7302
07:01:39,670 --> 07:01:41,260
Saat ini, hal itu tidak berlaku.

7303
07:01:41,260 --> 07:01:45,460
Saya baru saja memberi Rave kemewahan\mengetahui bahwa datanya telah diurutkan.

7304
07:01:45,460 --> 07:01:48,880
Namun jika saya benar-benar ingin menagih\ndia untuk jumlah waktu tersebut

7305
07:01:48,881 --> 07:01:52,091
butuh waktu untuk menemukan angka enam itu,\nSeharusnya aku menambahkan waktunya

7306
07:01:52,091 --> 07:01:54,073
untuk menyortir ditambah waktu untuk mencari.

7307
07:01:54,073 --> 07:01:55,780
Dan faktanya, itulah jalan yang akan kita lalui.

7308
07:01:55,780 --> 07:01:57,530
Mengapa kita tidak melanjutkan dan\nmengatur kecepatan seperti sebelumnya?

7309
07:01:57,530 --> 07:01:58,948
Mari kita istirahat 10 menit di sini.

7310
07:01:58,948 --> 07:02:01,491
Dan ketika kami kembali, kami akan\nmenulis beberapa kode sebenarnya.

7311
07:02:01,491 --> 07:02:05,399
Jadi kita telah melihat beberapa penelusuran--\n

7312
07:02:05,399 --> 07:02:06,941
agar adil, kita melihat kembali di minggu nol.

7313
07:02:06,940 --> 07:02:10,150
Namun mari kita terjemahkan menjadi\n

7314
07:02:10,151 --> 07:02:13,331
menggunakan blok penyusun ini dari\nminggu lalu sedapat mungkin

7315
07:02:13,330 --> 07:02:17,180
tentukan array jika kita mau, seperti\n

7316
07:02:17,181 --> 07:02:18,911
Jadi izinkan saya beralih ke VS Code di sini.

7317
07:02:18,911 --> 07:02:22,271
Biarkan saya melanjutkan dan memulai\na program bernama angka.c.

7318
07:02:22,271 --> 07:02:25,300
Dan di nomor.c, izinkan saya melanjutkan di sini.

7319
07:02:25,300 --> 07:02:29,201
Dan bagaimana kalau kita sertakan\file header yang kita kenal?

7320
07:02:31,030 --> 07:02:35,690
Saya akan menyertakan standardio.h yang kami bisa\n

7321
07:02:35,690 --> 07:02:38,771
Dan sekarang saya akan melanjutkan\ndan menyerahkan diri saya ke dalam kekosongan utama.

7322
07:02:38,771 --> 07:02:40,460
Tidak ada argumen baris perintah hari ini.

7323
07:02:40,460 --> 07:02:41,593
Jadi saya akan membiarkannya kosong.

7324
07:02:41,593 --> 07:02:43,300
Dan saya akan terus\naju dan memberikan diri saya sendiri

7325
07:02:43,300 --> 07:02:45,771
array bagaimana dengan tujuh angka?

7326
07:02:45,771 --> 07:02:48,581
Jadi saya akan menyebutnya int nomor 7.

7327
07:02:48,580 --> 07:02:50,620
Dan kemudian saya bisa mengisi\narray ini dengan angka.

7328
07:02:50,620 --> 07:02:54,460
Misalnya, angka dalam kurung 0 bisa berupa\n

7329
07:02:54,460 --> 07:02:58,668
bisa jadi angka 6, dan angka\n

7330
07:02:58,669 --> 07:03:01,211
Dan ini adalah daftar yang sama yang\nkita lihat dengan [? Nomira?] sedikit

7331
07:03:01,210 --> 07:03:03,530
lalu dimana tadinya 4, lalu 6, lalu 8.

7332
07:03:04,280 --> 07:03:06,700
Sebenarnya ada\nsintaks lain yang bisa saya tunjukkan di sini.

7333
07:03:06,701 --> 07:03:09,581
Jika Anda mengetahui sebelumnya\nin program C yang Anda

7334
07:03:09,580 --> 07:03:14,750
menginginkan array nilai tertentu dan Anda\n

7335
07:03:14,751 --> 07:03:17,771
yang Anda inginkan, Anda sebenarnya bisa melakukan ini\n

7336
07:03:17,771 --> 07:03:20,921
Bisa dibilang, jangan khawatir\ntentang seberapa besar hal ini.

7337
07:03:20,920 --> 07:03:23,980
Ini akan tersirat melalui\ntanda kurung kurawal ini.

7338
07:03:23,980 --> 07:03:28,971
Di sini, saya dapat melakukan 4, 6, 8, 2,\n7, 5, 0, tutup kurung kurawal.

7339
07:03:28,971 --> 07:03:31,091
Jadi ini adalah penggunaan kurung kurawal yang agak baru.

7340
07:03:31,091 --> 07:03:35,140
Tapi ini mempunyai efek memberi\n

7341
07:03:35,140 --> 07:03:36,800
yang merupakan sejumlah bilangan bulat.

7342
07:03:37,390 --> 07:03:41,320
Kompiler dapat menyimpulkannya dari apa\n

7343
07:03:41,320 --> 07:03:44,501
Dan sepertinya berukuran\n1, 2, 3, 4, 5, 6, 7.

7344
07:03:44,501 --> 07:03:49,870
Dan ketujuh elemen tersebut akan menjadi\n

7345
07:03:50,690 --> 07:03:53,140
Jadi hanya sedikit optimasi\nkode yang bijaksana untuk diperketat

7346
07:03:53,140 --> 07:03:56,451
apa yang seharusnya terjadi\n

7347
07:03:56,451 --> 07:03:59,441
Sekarang mari kita lanjutkan dan terapkan\npenelusuran linier, demikian sebutan kami.

7348
07:03:59,440 --> 07:04:02,483
Dan Anda dapat melakukan ini dalam banyak\n

7349
07:04:02,483 --> 07:04:09,190
Untuk int saya mendapat 0, saya\nkurang dari 7 i plus plus.

7350
07:04:09,190 --> 07:04:12,161
Lalu di dalam lingkaran saya, saya\nakan mengajukan pertanyaan, ya

7351
07:04:12,161 --> 07:04:17,381
jika angka-angka di lokasi i\nesama dengan, seperti yang kita minta

7352
07:04:17,381 --> 07:04:21,041
[? Nomira, ?] angka 0, lalu aku\n

7353
07:04:21,041 --> 07:04:25,811
seperti printf ditemukan garis miring terbalik n.

7354
07:04:25,811 --> 07:04:27,641
Dan kemudian saya akan mengembalikan 0.

7355
07:04:27,640 --> 07:04:30,400
Hanya karena\ndiskusi pengembalian minggu lalu

7356
07:04:30,401 --> 07:04:34,511
nilai main ketika semuanya baik-baik saja,\n

7357
07:04:34,510 --> 07:04:37,420
hanya untuk menandakan bahwa memang benar,\nSaya menemukan apa yang saya cari.

7358
07:04:37,420 --> 07:04:44,920
Kalau tidak, di jalur mana saya ingin\n

7359
07:04:44,920 --> 07:04:46,960
dan mengembalikan sesuatu selain 0?

7360
07:04:46,960 --> 07:04:51,220
Benar, sepertinya aku tidak menginginkan yang lain\n

7361
07:04:51,221 --> 07:04:55,390
Jadi pada jalur mana yang Anda pilih, saya\n

7362
07:04:55,390 --> 07:04:58,850
tidak ditemukan dan saya akan mengembalikan kesalahan?

7363
07:05:04,370 --> 07:05:06,078
Jadi di akhir perulangan\nfor karena Anda

7364
07:05:06,079 --> 07:05:07,911
ingin memberikan\nprogram atau sukarelawan kami

7365
07:05:07,911 --> 07:05:11,341
sebelumnya kesempatan untuk melewati semuanya\n

7366
07:05:11,341 --> 07:05:14,061
Namun jika Anda menelusuri keseluruhan\nsemuanya, melalui keseluruhan perulangan

7367
07:05:14,061 --> 07:05:17,991
pada akhirnya, Anda mungkin hanya\n

7368
07:05:17,991 --> 07:05:20,421
dan kemudian mengembalikan\nsesuatu seperti positif 1

7369
07:05:20,420 --> 07:05:22,400
hanya untuk menandakan bahwa terjadi kesalahan.

7370
07:05:22,401 --> 07:05:24,531
Dan sekali lagi, ini adalah\ndetail kecil minggu lalu.

7371
07:05:24,530 --> 07:05:28,730
Setiap kali main berhasil,\n

7372
07:05:30,210 --> 07:05:33,380
Dan jika terjadi kesalahan, seperti Anda\n

7373
07:05:33,381 --> 07:05:37,311
Anda mungkin mengembalikan sesuatu selain\n

7374
07:05:37,311 --> 07:05:39,563
atau bahkan angka negatif jika Anda mau.

7375
07:05:39,562 --> 07:05:41,520
Baiklah, biarkan saya\nsimpan ini.

7376
07:05:49,401 --> 07:05:51,861
Baiklah, dan sudah ditemukan,\namun saya berharap demikian.

7377
07:05:51,861 --> 07:05:55,070
Dan sebagai sedikit pengecekan, ayo\n

7378
07:05:55,070 --> 07:05:59,151
tidak disana, seperti angka negatif 1.

7379
07:05:59,151 --> 07:06:02,001
Biarkan saya melanjutkan dan mengkompilasi ulang\nkode dengan nomor make.

7380
07:06:02,001 --> 07:06:04,251
Izinkan saya menjalankan ulang kode\ndengan angka titik miring

7381
07:06:04,251 --> 07:06:06,260
dan mudah-mudahan-- wah, oke, tidak ditemukan.

7382
07:06:06,260 --> 07:06:08,833
Jadi pembuktian dengan contoh tampaknya\nberfungsi dengan benar.

7383
07:06:08,833 --> 07:06:11,001
Namun mari kita buat segalanya\nsedikit lebih menarik sekarang.

7384
07:06:11,001 --> 07:06:14,061
Saat ini, saya hanya menggunakan\nan array bilangan bulat.

7385
07:06:14,061 --> 07:06:18,451
Biarkan saya melanjutkan dan memperkenalkan\nmungkin array string saja.

7386
07:06:18,451 --> 07:06:21,721
Dan mungkin kali ini, saya akan menyimpannya\n

7387
07:06:21,721 --> 07:06:23,461
tapi rangkaian nama yang sebenarnya.

7388
07:06:24,690 --> 07:06:26,490
Baiklah, izinkan saya kembali ke kode saya di sini.

7389
07:06:26,491 --> 07:06:30,831
Saya akan mengalihkan kita ke\nmungkin file bernama nama.c.

7390
07:06:30,830 --> 07:06:34,490
Dan di sini, saya akan melanjutkan\naju dan memasukkan cs50.h.

7391
07:06:37,911 --> 07:06:41,390
Dan saya akan melanjutkan dan\nuntuk saat ini menyertakan teman baru

7392
07:06:41,390 --> 07:06:44,838
dari minggu lalu, string.h, yang menghasilkan\n

7393
07:06:44,838 --> 07:06:47,631
Int utama batal karena saya tidak akan hadir\n

7394
07:06:48,841 --> 07:06:53,690
Dan sekarang jika saya menginginkan array string,\n

7395
07:06:56,480 --> 07:06:58,460
Dan kemudian saya bisa mulai\ndo melakukan seperti sebelumnya.

7396
07:06:58,460 --> 07:07:01,940
Nama braket 0 bisa saja seseorang\nseperti Bill, dan nama braket 1

7397
07:07:01,940 --> 07:07:05,100
bisa jadi seseorang seperti\nCharlie dan seterusnya.

7398
07:07:05,100 --> 07:07:08,712
Namun ada\niperbaikan baru yang bisa saya lakukan.

7399
07:07:08,712 --> 07:07:11,420
Biarkan saya membiarkan kompiler mencari\n

7400
07:07:11,420 --> 07:07:16,911
Dan dengan menggunakan kurung kurawal, saya akan mengerjakan Bill\n

7401
07:07:16,911 --> 07:07:24,050
George lalu Ginny lalu Percy dan\n

7402
07:07:24,050 --> 07:07:27,291
Baiklah, jadi sekarang saya punya\ntujuh nama ini sebagai string.

7403
07:07:32,091 --> 07:07:35,690
i kurang dari 7 seperti sebelumnya,\ni plus plus seperti sebelumnya.

7404
07:07:35,690 --> 07:07:39,260
Dan di dalam, loop biarkan ini\n

7405
07:07:39,260 --> 07:07:41,990
dan misalkan kita mencari\nRon secara sembarangan.

7406
07:07:41,991 --> 07:07:44,451
Dia ada di sana, jadi kita\nakhirnya akan menemukannya.

7407
07:07:44,451 --> 07:07:51,890
Izinkan saya melanjutkan dan mengatakan jika ada nama dalam kurung\n

7408
07:07:51,890 --> 07:07:55,701
dari kondisi if saya, saya akan\n

7409
07:07:55,701 --> 07:07:57,951
Dan saya akan mengembalikan 0\nhanya karena semuanya baik-baik saja.

7410
07:07:57,951 --> 07:08:00,751
Dan kali ini saya akan menerima\nasihat Anda dari awal

7411
07:08:00,751 --> 07:08:04,920
dan, di akhir perulangan, cetak\n

7412
07:08:04,920 --> 07:08:08,030
Saya belum mencetak temuan saya, dan\nsaya belum kembali.

7413
07:08:08,030 --> 07:08:12,200
Jadi saya lanjutkan saja dan\n

7414
07:08:12,201 --> 07:08:14,781
Baiklah, izinkan saya melanjutkan\nberharap seperti biasa.

7415
07:08:17,670 --> 07:08:20,661
Dan sepertinya\nkode saya di sini tidak sesuai.

7416
07:08:20,661 --> 07:08:22,730
Ini mungkin merupakan\nkesalahan baru yang mungkin tidak Anda alami

7417
07:08:22,730 --> 07:08:25,440
telah melihat belum di nama.c baris 11.

7418
07:08:25,440 --> 07:08:28,280
Jadi itulah baris ini\ndi sini, kondisi if saya.

7419
07:08:28,280 --> 07:08:32,330
Hasil perbandingan terhadap literal\nstring tidak ditentukan.

7420
07:08:32,330 --> 07:08:34,752
Gunakan fungsi string\nperbandingan eksplisit sebagai gantinya.

7421
07:08:34,753 --> 07:08:37,460
Maksudku, itu agak membosankan,\n

7422
07:08:37,460 --> 07:08:39,960
Anda mungkin tidak akan\tahu bagaimana memahaminya.

7423
07:08:39,960 --> 07:08:43,490
Namun hal ini menarik\perhatian kita pada sesuatu yang salah

7424
07:08:43,491 --> 07:08:48,201
dengan pemeriksaan kesetaraan\ndi sini, dengan sama dengan dan Ron.

7425
07:08:48,201 --> 07:08:50,601
Dan di sinilah lagi\nkami telah memberi tahu

7426
07:08:50,600 --> 07:08:53,060
semacam kebohongan putih selama\nbeberapa minggu terakhir.

7427
07:08:53,061 --> 07:08:57,261
String adalah suatu hal dalam C. String\na adalah suatu hal dalam pemrograman.

7428
07:08:57,260 --> 07:08:59,030
Tapi ingat dari\nminggu lalu, saya melakukan penyangkalan

7429
07:08:59,030 --> 07:09:01,010
tidak ada yang namanya tipe data string

7430
07:09:01,010 --> 07:09:05,030
secara teknis karena tidak\na primitif seperti int

7431
07:09:05,030 --> 07:09:08,570
dan float dan bool adalah\n

7432
07:09:08,570 --> 07:09:12,530
Anda tidak bisa hanya menggunakan persamaan\nequals untuk membandingkan dua string.

7433
07:09:12,530 --> 07:09:15,470
Anda sebenarnya harus menggunakan\na fungsi khusus itu

7434
07:09:15,471 --> 07:09:18,501
dalam file header ini kita membicarakannya\nsecara singkat minggu lalu.

7435
07:09:18,501 --> 07:09:21,140
Dalam file header itu ada\npanjang string atau strlen.

7436
07:09:21,140 --> 07:09:23,850
Namun ada\nfungsi lain juga.

7437
07:09:23,850 --> 07:09:27,440
Izinkan saya membuka\ndan halaman manualnya.

7438
07:09:32,120 --> 07:09:37,161
Di string.h Anda mungkin dapat menyimpulkan\n

7439
07:09:37,161 --> 07:09:40,973
tempat yang setara dengan yang setara untuk hari ini.

7440
07:09:43,041 --> 07:09:47,666
DAVID J. MALAN: Jadi strcmp, S-T-R-C-M-P,\n

7441
07:09:47,666 --> 07:09:49,791
Dan jika saya mengkliknya,\nkita akan melihat informasi lebih lanjut.

7442
07:09:49,791 --> 07:09:53,871
Dan memang kalau saya klik strcmp,\nkita lihat di bawah sinopsisnya

7443
07:09:53,870 --> 07:09:58,850
itu, oke, saya perlu menggunakan header CS50\n

7444
07:09:58,850 --> 07:10:02,210
Ini prototipenya,\nyang memberitahu saya

7445
07:10:02,210 --> 07:10:05,720
strcmp itu membutuhkan dua\nstring, S1 dan S2, itu

7446
07:10:05,721 --> 07:10:07,251
mungkin akan dibandingkan.

7447
07:10:07,251 --> 07:10:09,591
Dan ia mengembalikan bilangan bulat,\nyang menarik.

7448
07:10:10,791 --> 07:10:14,091
Deskripsi fungsi ini adalah\n

7449
07:10:15,230 --> 07:10:18,471
Jadi huruf besar atau kecil\npenting, sekedar FYI.

7450
07:10:18,471 --> 07:10:20,931
Lalu mari kita lihat\nnilai yang dikembalikan di sini.

7451
07:10:20,931 --> 07:10:25,221
Nilai kembalian fungsi ini\nmengembalikan int kurang dari 0

7452
07:10:25,221 --> 07:10:32,841
jika S1 muncul sebelum S2, 0 jika S1 adalah\n

7453
07:10:35,300 --> 07:10:39,140
Jadi alasan fungsi ini\n

7454
07:10:39,140 --> 07:10:41,751
bool, benar atau salah, apakah\nitu benar-benar akan terjadi

7455
07:10:41,751 --> 07:10:45,111
izinkan kami untuk menyortir hal-hal ini\n

7456
07:10:45,111 --> 07:10:49,341
jika dua string berada dalam urutan ini atau\n

7457
07:10:49,341 --> 07:10:51,440
Anda memerlukan tiga kemungkinan nilai pengembalian.

7458
07:10:51,440 --> 07:10:53,271
Dan bool, tentu saja,\hanya memberi Anda dua

7459
07:10:53,271 --> 07:10:56,841
tapi int memberi Anda sekitar 4 miliar\n

7460
07:10:56,841 --> 07:11:01,881
Jadi 0 atau bilangan positif atau negatif\n

7461
07:11:01,881 --> 07:11:06,320
Dan dokumentasi selanjutnya menjelaskan\n

7462
07:11:06,320 --> 07:11:09,620
Ingat modal A\nis 65, modal B adalah 66

7463
07:11:09,620 --> 07:11:12,021
dan itulah yang mendasarinya\nASCII atau Unicode

7464
07:11:12,021 --> 07:11:15,411
angka yang digunakan komputer untuk menghitung\n

7465
07:11:15,411 --> 07:11:17,541
atau setelahnya seperti di kamus.

7466
07:11:17,541 --> 07:11:20,311
Namun untuk tujuan kami saat ini,\nkami hanya peduli pada kesetaraan.

7467
07:11:20,311 --> 07:11:22,041
Jadi saya akan melanjutkan dan melakukan ini.

7468
07:11:22,041 --> 07:11:26,181
Jika saya ingin membandingkan nama\nbraket i dengan Ron

7469
07:11:26,181 --> 07:11:33,681
Saya menggunakan aduk bandingkan atau strcmp, nama\n

7470
07:11:33,681 --> 07:11:35,870
Jadi ini sedikit lebih\nmelibatkan daripada yang sebenarnya

7471
07:11:35,870 --> 07:11:40,190
menggunakan sama dengan sama, yang\ndobekerja untuk bilangan bulat, panjang

7472
07:11:41,361 --> 07:11:45,210
Tapi untuk string, ternyata kita\n

7473
07:11:45,710 --> 07:11:47,990
Nah, minggu lalu, ingat\napa sebenarnya string itu.

7474
07:11:47,991 --> 07:11:50,581
Ini adalah serangkaian karakter.

7475
07:11:50,580 --> 07:11:54,050
Jadi, Anda dapat menggunakan same\nequals untuk karakter tunggal

7476
07:11:54,050 --> 07:11:56,960
strcmp, seperti yang\nakan kita lihat, akan berjalan

7477
07:11:56,960 --> 07:11:58,798
untuk membandingkan beberapa karakter untuk kami.

7478
07:11:59,841 --> 07:12:03,931
Ada perulangan yang diperlukan, dan itu\n

7479
07:12:03,931 --> 07:12:06,651
Tapi itu tidak hanya berhasil\n

7480
07:12:06,651 --> 07:12:10,628
Itu benar-benar berarti membandingkan\n

7481
07:12:10,628 --> 07:12:12,710
Dan kita akan kembali ke\nminggu depan untuk mengetahui apa yang terjadi

7482
07:12:12,710 --> 07:12:14,280
benar-benar terjadi di balik terpal.

7483
07:12:14,280 --> 07:12:18,501
Jadi izinkan saya memperbaiki satu\nbug yang baru saya sadari telah saya buat.

7484
07:12:18,501 --> 07:12:23,811
Saya ingin memeriksa apakah nilai kembalian str perbandingan sama dengan 0

7485
07:12:23,811 --> 07:12:27,021
karena berdasarkan dokumentasi,\nartinya keduanya sama.

7486
07:12:27,021 --> 07:12:30,001
Baiklah, izinkan saya melanjutkan\nmembuat nama kali ini.

7487
07:12:31,070 --> 07:12:34,131
Nama garis miring, Enter, ditemukan.

7488
07:12:34,131 --> 07:12:39,651
Dan sebagai pemeriksaan kewarasan, ayo\n

7489
07:12:39,651 --> 07:12:43,371
Sekarang mencari Hermione\nsetelah mengkompilasi ulang kodenya

7490
07:12:44,931 --> 07:12:46,640
Dan faktanya, dia tidak ditemukan.

7491
07:12:46,640 --> 07:12:49,580
Jadi, inilah\niimplementasi penelusuran linier yang serupa

7492
07:12:49,580 --> 07:12:53,930
kali ini bukan untuk bilangan bulat\ntetapi untuk string

7493
07:12:53,931 --> 07:12:57,501
kehalusannya benar-benar kita butuhkan\n

7494
07:12:57,501 --> 07:13:02,001
untuk benar-benar melakukan kerja keras untuk kami\n

7495
07:13:02,001 --> 07:13:05,568
Baiklah, pertanyaan tentang salah satu dari ini\n

7496
07:13:05,568 --> 07:13:07,253
HADIRIN: Jadi, jika saya melakukannya [Tak terdengar]

7497
07:13:07,253 --> 07:13:08,460
DAVID J. MALAN: Ah, pertanyaan bagus.

7498
07:13:08,460 --> 07:13:12,620
Jika saya belum memperbaiki apa yang saya klaim\n

7499
07:13:12,620 --> 07:13:15,201
dan sebenarnya kita telah melihat contohnya\nminggu lalu.

7500
07:13:15,201 --> 07:13:21,831
Jika suatu fungsi mengembalikan bilangan bulat,\n

7501
07:13:21,830 --> 07:13:25,100
ketika Anda mendapatkan kembali 0,\nekspresinya, ekspresi Boolean

7502
07:13:29,300 --> 07:13:33,830
Jika suatu fungsi mengembalikan positif\n

7503
07:13:33,830 --> 07:13:37,130
itu akan\nditafsirkan sebagai benar

7504
07:13:37,131 --> 07:13:41,871
apakah positif atau negatif, apakah\n

7505
07:13:41,870 --> 07:13:45,931
Jadi jika saya melakukan ini,\nakan berkata sebaliknya.

7506
07:13:45,931 --> 07:13:51,291
Jadi jika saya mengatakan ini, jika str bandingkan\n

7507
07:13:51,291 --> 07:13:57,754
secara implisit seperti mengatakan ini tidak\n

7508
07:13:57,754 --> 07:14:00,171
namun Anda tidak ingin memeriksa\nkebenarannya karena, sekali lagi, kami memang benar

7509
07:14:01,710 --> 07:14:05,361
Jadi alasan saya melakukan 0\ndi sini dalam kasus ini adalah

7510
07:14:05,361 --> 07:14:08,971
yang secara eksplisit memeriksa pengembalian\n

7511
07:14:15,309 --> 07:14:17,351
DAVID J. MALAN: Ya, Anda mungkin\nbelum pernah melihatnya

7512
07:14:17,350 --> 07:14:20,940
tetapi Anda dapat mengungkapkan\nequivalentnya karena jika Anda

7513
07:14:20,940 --> 07:14:24,661
ingin memeriksa apakah ini\nsalah, sebenarnya Anda bisa

7514
07:14:24,661 --> 07:14:27,661
gunakan tanda seru,\ndisebut bang dalam pemrograman

7515
07:14:29,320 --> 07:14:32,524
Jadi salah menjadi benar,\nbenar menjadi salah.

7516
07:14:32,524 --> 07:14:34,441
Jadi ini akan menjadi\ncara lain untuk mengungkapkannya.

7517
07:14:34,440 --> 07:14:39,300
Namun, desain ini bisa dibilang lebih buruk,\n

7518
07:14:39,300 --> 07:14:43,021
mengatakan Anda harus memeriksa\nuntuk 0 atau nilai positif

7519
07:14:43,021 --> 07:14:46,111
atau nilai negatif, dan\ntrik kecil ini, meskipun benar

7520
07:14:46,111 --> 07:14:49,861
dan menurutku kamu bisa membuat alasan yang masuk akal\n

7521
07:14:49,861 --> 07:14:51,780
Dan saya akan berdebat\nuntuk cara pertama

7522
07:14:51,780 --> 07:14:53,968
memeriksa sama dengan sama dengan 0 sebagai gantinya.

7523
07:14:53,968 --> 07:14:55,800
Dan jika itu sedikit\ntidak kentara, jangan khawatir.

7524
07:14:55,800 --> 07:15:00,600
Kita akan kembali ke sedikit sintaksis\n

7525
07:15:00,600 --> 07:15:05,130
Pertanyaan lain tentang penelusuran\nlinier dalam dua bentuk ini.

7526
07:15:05,131 --> 07:15:06,811
Apakah ada tangan atau tangan lain?

7527
07:15:08,971 --> 07:15:10,261
Oke, teriak saja kalau aku ketinggalan.

7528
07:15:10,260 --> 07:15:12,372
Jadi, sekarang mari kita mengambil\nsatu langkah lebih jauh.

7529
07:15:12,372 --> 07:15:15,330
Misalkan kita ingin menulis a\n

7530
07:15:15,330 --> 07:15:19,470
sedikit lebih mirip buku telepon itu\n

7531
07:15:19,471 --> 07:15:21,390
hanya bilangan bulat tetapi nomor telepon sebenarnya.

7532
07:15:21,390 --> 07:15:23,701
Ya, kita bisa meningkatkan\nhal seperti ini.

7533
07:15:23,701 --> 07:15:27,210
Kita sekarang dapat memiliki dua array-- satu\n

7534
07:15:27,210 --> 07:15:29,730
Dan saya akan menggunakan\nstring untuk angkanya sekarang

7535
07:15:29,730 --> 07:15:32,370
nomor telepon, karena\ndi sebagian besar komunitas

7536
07:15:32,370 --> 07:15:36,091
nomor telepon mungkin memiliki tanda hubung,\n

7537
07:15:36,091 --> 07:15:39,390
itu lebih mirip string\n

7538
07:15:39,390 --> 07:15:42,940
Mungkin tidak ingin menggunakan int supaya\n

7539
07:15:42,940 --> 07:15:47,521
Jadi izinkan saya beralih kembali ke VS Code di sini,\n

7540
07:15:47,521 --> 07:15:49,394
dalam file bernama phonebook.c.

7541
07:15:49,394 --> 07:15:51,061
Dan sekarang izinkan saya melanjutkan dan melakukan hal yang sama.

7542
07:15:52,741 --> 07:15:58,681
Izinkan saya menyertakan standardio.h,\ndan izinkan saya menyertakan string.h.

7543
07:15:58,681 --> 07:16:01,741
Saya akan melakukannya lagi di kekosongan utama.

7544
07:16:01,741 --> 07:16:05,071
Dan kemudian di dalam program saya, saya\n

7545
07:16:06,870 --> 07:16:09,361
Nama string kali ini\nhanya kita berdua.

7546
07:16:12,751 --> 07:16:15,241
Dan kemudian saya akan memberikan diri saya sendiri--\noops, sudah salah ketik.

7547
07:16:15,241 --> 07:16:18,151
Jika saya ingin ini menjadi sebuah array, saya\n

7548
07:16:18,151 --> 07:16:19,741
Kompiler dapat menghitung untuk saya.

7549
07:16:19,741 --> 07:16:21,661
Tapi saya membutuhkan tanda kurung siku.

7550
07:16:21,661 --> 07:16:28,111
Lalu untuk angka, saya akan kembali ke\n

7551
07:16:28,111 --> 07:16:33,870
kurung kurawal bagaimana kalau\nCarter bisa di 1-617-495-1000.

7552
07:16:33,870 --> 07:16:35,640
Dan bagaimana dengan nomor saya sendiri di sini--

7553
07:16:35,640 --> 07:16:39,361
1-949-468-- oh pola muncul--

7554
07:16:42,960 --> 07:16:44,890
Yah, aku hanya mengatur segalanya.

7555
07:16:44,890 --> 07:16:47,820
Jadi nomor Carter\nampaknya berada di urutan pertama dalam larik ini

7556
07:16:47,820 --> 07:16:51,161
dan aku menyatakan bahwa dia akan menjadi\n

7557
07:16:51,161 --> 07:16:53,971
Saya, David, akan menjadi yang pertama--\nyang kedua dalam susunan nama

7558
07:16:53,971 --> 07:16:56,628
dan kedua dalam array angka.

7559
07:16:56,628 --> 07:16:59,460
Jika Anda ingin bersenang-senang\n

7560
07:16:59,460 --> 07:17:01,630
atau hubungi saya suatu saat di nomor itu.

7561
07:17:01,631 --> 07:17:05,311
Jadi sekarang mari kita gunakan\ndata ini dengan cara tertentu.

7562
07:17:05,311 --> 07:17:08,729
Mari kita lanjutkan dan menelusuri\n

7563
07:17:11,850 --> 07:17:16,450
Kali ini kita berdua-- jadi aku kurang\n

7564
07:17:16,451 --> 07:17:18,841
Dan sekarang saya akan mempraktikkan\napa yang saya khotbahkan sebelumnya

7565
07:17:18,841 --> 07:17:22,800
dan saya akan menggunakan str bandingkan\nuntuk menemukan nama saya dalam kasus ini.

7566
07:17:22,800 --> 07:17:29,460
Dan saya akan mengatakan jika strcmp nama\n

7567
07:17:29,460 --> 07:17:33,100
dan itu sama dengan 0,\nartinya keduanya sama

7568
07:17:33,100 --> 07:17:35,970
lalu sama seperti sebelumnya, saya akan\n

7569
07:17:35,971 --> 07:17:37,681
Namun kali ini, saya akan\nmembuat program ini lebih bermanfaat

7570
07:17:37,681 --> 07:17:39,460
dan bukan sekadar mengatakan ditemukan atau tidak ditemukan.

7571
07:17:39,460 --> 07:17:43,411
Sekarang saya menerapkan buku telepon, seperti\n

7572
07:17:43,411 --> 07:17:46,741
Jadi saya akan mengatakan sesuatu\nseperti, kutip tanda kutip, temukan persen

7573
07:17:46,741 --> 07:17:53,191
s garis miring terbalik n dan kemudian\nmasukkan braket angka i

7574
07:17:53,190 --> 07:17:56,730
agar sesuai dengan\ntanda kurung nama saat ini i.

7575
07:17:56,730 --> 07:17:58,585
Dan kemudian saya akan mengembalikan 0 seperti sebelumnya.

7576
07:17:58,585 --> 07:18:00,960
Dan kemudian di sini jika kita berhasil melewati loop tersebut

7577
07:18:00,960 --> 07:18:04,480
dan David tidak ada di sana karena suatu alasan,\n

7578
07:18:05,940 --> 07:18:10,950
Jadi biarkan saya melanjutkan dan mengompilasinya\n

7579
07:18:10,951 --> 07:18:13,601
dan sepertinya sudah menemukan nomornya.

7580
07:18:13,600 --> 07:18:17,490
Jadi kode yang akan saya\nklaim ini benar.

7581
07:18:17,491 --> 07:18:20,551
Agak bodoh karena aku sudah\n

7582
07:18:20,550 --> 07:18:22,050
aplikasi yang hanya mendukung dua orang.

7583
07:18:22,050 --> 07:18:23,863
Mereka hanya aku dan Carter.

7584
07:18:23,864 --> 07:18:26,281
Ini seperti mengunduh\naplikasi kontak di ponsel

7585
07:18:26,280 --> 07:18:28,198
dan Anda hanya dapat menelepon\ndua orang di dunia.

7586
07:18:28,198 --> 07:18:30,181
Tidak ada kemampuan untuk\menambahkan nama atau mengedit sesuatu.

7587
07:18:30,181 --> 07:18:33,221
Tentu saja, hal itu bisa terjadi nanti\n

7588
07:18:33,221 --> 07:18:35,054
Namun untuk saat ini\ndemi diskusi, saya sudah melakukannya

7589
07:18:35,054 --> 07:18:37,811
hanya membuat hardcode dua\nnama dan dua angka.

7590
07:18:37,811 --> 07:18:40,651
Namun untuk fungsinya, saya\nmengklaim ini benar.

7591
07:18:40,651 --> 07:18:43,951
Ia akan menemukan saya\nd mencetak nomor saya.

7592
07:18:45,841 --> 07:18:49,921
Mari kita mulai mempertimbangkan apakah\nkita tidak hanya menggunakan array

7593
07:18:49,920 --> 07:18:52,212
tapi apakah kita menggunakannya, ya?

7594
07:18:52,212 --> 07:18:55,170
Kami mulai menggunakannya minggu lalu,\n

7595
07:18:55,170 --> 07:18:59,040
Dan apa yang mungkin saya maksud dengan\menggunakan sumur array atau mendesain

7596
07:19:01,001 --> 07:19:06,300
Kritik atau kekhawatiran apa pun\nmengapa hal ini tidak terjadi

7597
07:19:06,300 --> 07:19:08,460
menjadi jalan terbaik bagi kami\nuntuk turun kapan

7598
07:19:08,460 --> 07:19:12,900
Saya ingin menerapkan sesuatu seperti\n

7599
07:19:12,901 --> 07:19:15,901
Tampaknya semuanya terlalu rentan\nhanya pada kesalahan.

7600
07:19:15,901 --> 07:19:19,981
Misalnya, jika saya mengacaukan file\n

7601
07:19:19,980 --> 07:19:24,550
sehingga sekarang lebih atau kurang dari\n

7602
07:19:24,550 --> 07:19:27,780
rasanya tidak ada yang kencang\n

7603
07:19:27,780 --> 07:19:31,501
data, dan itu hanya semacam\nispercaya pada sistem kehormatan

7604
07:19:31,501 --> 07:19:37,800
bahwa setiap kali saya menggunakan nama braket i\n

7605
07:19:38,521 --> 07:19:40,440
Jika Andalah yang menulis\nkodenya, mungkin Andalah yang menulisnya

7606
07:19:40,440 --> 07:19:42,001
tidak akan benar-benar mengacaukannya.

7607
07:19:42,001 --> 07:19:44,626
Namun jika Anda mulai berkolaborasi\ndengan orang lain atau program

7608
07:19:44,626 --> 07:19:48,061
semakin lama,\n

7609
07:19:48,061 --> 07:19:52,471
ingatlah bahwa kamu hanya\n

7610
07:19:52,471 --> 07:19:54,781
seperti ini pada akhirnya akan gagal.

7611
07:19:54,780 --> 07:19:57,900
Seseorang tidak akan menyadarinya,\n

7612
07:19:57,901 --> 07:20:00,901
Dan Anda akan mulai memasang\n

7613
07:20:00,901 --> 07:20:05,070
artinya akan jauh lebih baik jika\n

7614
07:20:05,070 --> 07:20:09,210
potongan data, nama dan nomor,\n

7615
07:20:09,210 --> 07:20:13,260
bahwa Anda tidak hanya mempercayai hal itu\n

7616
07:20:13,260 --> 07:20:16,990
dan angka, memiliki\nhubungan seperti ini dengan diri mereka sendiri.

7617
07:20:16,991 --> 07:20:19,561
Jadi mari kita pertimbangkan bagaimana\nkita dapat mengatasi masalah ini.

7618
07:20:19,561 --> 07:20:23,761
Sebuah fitur baru hari ini yang akan kami perkenalkan\n

7619
07:20:23,760 --> 07:20:27,640
Di C, kita mempunyai kemampuan untuk\nmenemukan tipe data kita sendiri

7620
07:20:27,640 --> 07:20:30,916
jika Anda mau-- tipe data\nyang dibuat oleh penulis dekade C

7621
07:20:30,916 --> 07:20:32,791
yang lalu hanya tidak membayangkan\atau tidak berpikir

7622
07:20:32,791 --> 07:20:36,241
diperlukan karena kami dapat menerapkan\n

7623
07:20:36,241 --> 07:20:38,641
sama seperti Anda dapat membuat\npotongan puzzle khusus

7624
07:20:38,640 --> 07:20:40,721
atau di C, Anda dapat membuat\nfungsi khusus.

7625
07:20:40,721 --> 07:20:45,121
Jadi di C, bisakah Anda membuat\ntipe data Anda sendiri

7626
07:20:45,120 --> 07:20:49,260
yang melampaui int\ndan float dan bahkan string bawaan?

7627
07:20:49,260 --> 07:20:54,900
Anda dapat membuat, misalnya, a\n

7628
07:20:54,901 --> 07:20:57,451
ketik konteks\pilihan atau tipe data orang

7629
07:20:57,451 --> 07:21:00,311
secara lebih umum yang mungkin\nmemiliki nama dan nomor.

7630
07:21:02,080 --> 07:21:07,830
Baiklah, izinkan saya ke sini dan melamar\n

7631
07:21:07,830 --> 07:21:11,280
bukankah lebih baik jika kita\ndapat memiliki tipe data person

7632
07:21:11,280 --> 07:21:13,830
lalu kita dapat\nan memanggil array orang?

7633
07:21:13,830 --> 07:21:17,130
Dan mungkin array itu adalah\non-array kita yang memiliki dua hal

7634
07:21:19,561 --> 07:21:22,501
Namun entah bagaimana, tipe data\nitu, orang-orang ini

7635
07:21:22,501 --> 07:21:25,519
akan memiliki nama dan\nnomor yang terkait dengannya.

7636
07:21:25,519 --> 07:21:27,061
Jadi kita tidak memerlukan dua array terpisah.

7637
07:21:27,061 --> 07:21:31,601
Kita memerlukan satu array orang,\na tipe data baru.

7638
07:21:33,251 --> 07:21:35,431
Ya, jika kita menginginkan semua\norang di dunia

7639
07:21:35,431 --> 07:21:37,681
atau dalam program ini\nmemiliki nama dan nomor

7640
07:21:37,681 --> 07:21:40,741
kami benar-benar mengeluarkan\npertama-tama kedua tipe data tersebut.

7641
07:21:40,741 --> 07:21:42,221
Beri aku string bernama nama.

7642
07:21:42,221 --> 07:21:45,211
Beri saya string bernama\nangka titik koma, setelah masing-masingnya.

7643
07:21:45,210 --> 07:21:48,390
Lalu kita bungkus itu,\ndua baris kode itu

7644
07:21:48,390 --> 07:21:51,091
dengan sintaksis ini, yang pada awalnya\nglance agak samar.

7645
07:21:51,091 --> 07:21:52,771
Tiba-tiba banyak kata-kata.

7646
07:21:52,771 --> 07:21:57,091
Namun typedef adalah kata kunci baru saat ini\nyang mendefinisikan tipe data baru.

7647
07:21:57,091 --> 07:22:00,870
Ini adalah kata kunci C yang\nmemungkinkan Anda membuat data Anda sendiri

7648
07:22:00,870 --> 07:22:02,460
mengetik untuk pertama kalinya.

7649
07:22:02,460 --> 07:22:07,201
Struktur adalah kata kunci terkait lainnya yang\n

7650
07:22:07,201 --> 07:22:11,671
tipe data sederhana, seperti int atau a\n

7651
07:22:13,300 --> 07:22:17,070
Ada beberapa dimensi di dalamnya, seperti\n

7652
07:22:17,070 --> 07:22:19,620
atau bahkan 50 benda di dalamnya.

7653
07:22:19,620 --> 07:22:23,670
Kata terakhir di sini adalah nama\n

7654
07:22:23,670 --> 07:22:26,340
dan anehnya itu terjadi\nsetelah kurung kurawal.

7655
07:22:26,341 --> 07:22:30,120
Namun beginilah cara Anda menciptakan\na tipe data yang disebut person.

7656
07:22:30,120 --> 07:22:33,030
Dan apa yang disiratkan oleh kode ini adalah untuk selanjutnya

7657
07:22:33,030 --> 07:22:38,341
dentang kompiler akan mengetahui bahwa a\n

7658
07:22:38,341 --> 07:22:41,131
string dan angka yang merupakan string.

7659
07:22:41,131 --> 07:22:44,131
Dan Anda tidak perlu khawatir\ntentang memiliki banyak array sekarang.

7660
07:22:44,131 --> 07:22:48,311
Anda bisa saja membuat sejumlah\norang bergerak maju.

7661
07:22:48,311 --> 07:22:50,279
Jadi bagaimana kita bisa menggunakan ini?

7662
07:22:50,278 --> 07:22:52,320
Baiklah, izinkan saya kembali ke\nkode saya dari mana sebelumnya

7663
07:22:52,320 --> 07:22:53,701
Saya sedang menerapkan buku telepon.

7664
07:22:53,701 --> 07:22:56,076
Dan mengapa kita tidak menyempurnakan\nkode buku telepon sedikit

7665
07:22:56,076 --> 07:22:58,591
dengan meminjam beberapa sintaks baru itu?

7666
07:22:58,591 --> 07:23:01,081
Biarkan saya pergi ke bagian atas\nprogram saya di atas program utama

7667
07:23:01,080 --> 07:23:04,020
dan tentukan tipe yang\na struktur atau data

7668
07:23:04,021 --> 07:23:08,861
struktur yang memiliki nama di dalamnya\n

7669
07:23:08,861 --> 07:23:12,511
Dan nama struktur baru ini\n

7670
07:23:12,510 --> 07:23:17,911
Di dalam kode saya sekarang, izinkan saya melanjutkan\n

7671
07:23:17,911 --> 07:23:21,870
Izinkan saya memberi diri saya sebuah array\nyang disebut orang berukuran 2.

7672
07:23:21,870 --> 07:23:25,358
Dan saya akan menggunakan\ncara sederhana untuk melakukan ini.

7673
07:23:25,358 --> 07:23:26,940
Saya tidak akan menggunakan kurung kurawal.

7674
07:23:26,940 --> 07:23:31,501
Saya akan menjelaskannya dengan lebih teliti\n

7675
07:23:31,501 --> 07:23:35,221
di lokasi 0, yang merupakan\norang pertama dalam array

7676
07:23:35,221 --> 07:23:37,051
karena Anda selalu mulai menghitung dari 0.

7677
07:23:37,050 --> 07:23:40,861
Saya akan memberikan orang itu\na nama kutipan, tanda kutip Carter.

7678
07:23:40,861 --> 07:23:44,341
Dan titik tersebut memang merupakan salah satu\nbagian sintaksis baru saat ini juga.

7679
07:23:44,341 --> 07:23:46,771
Titik berarti masuk ke dalam\nstruktur itu

7680
07:23:46,771 --> 07:23:50,550
dan akses variabel yang disebut\n

7681
07:23:50,550 --> 07:23:52,710
Demikian pula, jika saya ingin\nmemberi nomor telepon kepada Carter

7682
07:23:52,710 --> 07:23:57,390
Saya bisa masuk ke tanda kurung orang 0 titik\n

7683
07:23:57,390 --> 07:24:02,310
seperti sebelumnya ditambah 1-617-495-1000.

7684
07:24:02,311 --> 07:24:04,591
Lalu saya bisa melakukan\nhal yang sama untuk diri saya sendiri di sini--

7685
07:24:04,591 --> 07:24:08,506
braket orang-- kemana saya harus pergi?

7686
07:24:08,506 --> 07:24:10,468
Oke, satu karena sekali lagi, dua elemen.

7687
07:24:10,468 --> 07:24:11,800
Tapi kami mulai menghitung dari nol.

7688
07:24:11,800 --> 07:24:13,780
Nama braket sama dengan kutipan tanda kutip David.

7689
07:24:13,780 --> 07:24:18,700
Dan yang terakhir, orang memberi tanda kurung 1\n

7690
07:24:24,730 --> 07:24:27,611
Jadi sekarang jika saya gulir\nke bawah sini ke logika saya

7691
07:24:27,611 --> 07:24:30,491
Saya rasa bagian ini\ntidak perlu diubah terlalu banyak.

7692
07:24:30,491 --> 07:24:35,041
Saya masih, demi diskusi,\n

7693
07:24:35,041 --> 07:24:37,991
adalah 0 sampai tetapi tidak sampai 2.

7694
07:24:37,991 --> 07:24:41,031
Tapi menurut saya baris\nokode ini perlu diubah.

7695
07:24:41,030 --> 07:24:49,271
Bagaimana saya sekarang harus merujuk pada nama\ni-orang saat saya mengulanginya?

7696
07:24:49,271 --> 07:24:52,611
Apa yang harus saya bandingkan dengan kutipan\nunquote David kali ini?

7697
07:24:54,411 --> 07:24:57,438
HADIRIN: Nama orang diberi tanda kurung i titik.

7698
07:24:57,438 --> 07:24:59,230
DAVID J. MALAN: Ya, orang\ntanda kurung saya beri nama titik.

7699
07:24:59,530 --> 07:25:01,198
Karena people adalah nama arraynya.

7700
07:25:01,198 --> 07:25:04,841
Bracket i adalah orang ke-i yang kita\n

7701
07:25:04,841 --> 07:25:07,600
pertama nol, lalu satu, mungkin\nlebih tinggi jika ada lebih banyak orang.

7702
07:25:07,600 --> 07:25:10,931
Maka titik adalah sintaks baru kita untuk\nmasuk ke dalam struktur data

7703
07:25:10,931 --> 07:25:14,230
dan mengakses variabel di dalamnya\nyang dalam hal ini adalah nama.

7704
07:25:14,230 --> 07:25:16,640
Jadi saya bisa membandingkan\nDavid seperti sebelumnya.

7705
07:25:16,640 --> 07:25:21,251
Jadi ini sedikit lebih bertele-tele, tapi\n

7706
07:25:21,251 --> 07:25:26,831
karena sekarang orang-orang ini sudah kenyang\n

7707
07:25:26,830 --> 07:25:29,170
Tidak ada lagi sistem\nkehormatan di dalam lingkaran saya

7708
07:25:29,170 --> 07:25:31,462
bahwa ini akan berbaris\nkarena sebentar lagi

7709
07:25:31,462 --> 07:25:34,227
Saya akan memperbaiki\nsisa terakhir dari versi sebelumnya.

7710
07:25:34,227 --> 07:25:36,310
Dan jika saya dapat menghubungi Anda kembali\nAnda lagi, apa yang harus saya lakukan

7711
07:25:36,311 --> 07:25:39,191
ubah angka braket i menjadi saat ini?

7712
07:25:39,190 --> 07:25:45,120
HADIRIN: nomor titik [Tak terdengar].

7713
07:25:45,120 --> 07:25:46,751
DAVID J. MALAN: Tepatnya nomor titik.

7714
07:25:46,751 --> 07:25:49,300
Jadi hilanglah sistem\nkehormatan yang hanya diasumsikan

7715
07:25:49,300 --> 07:25:52,420
tanda kurung i di array ini berbaris\n

7716
07:25:54,791 --> 07:25:56,351
Itu adalah array yang disebut orang.

7717
07:25:56,350 --> 07:25:58,420
Hal-hal yang disimpannya adalah orang-orang.

7718
07:25:58,420 --> 07:26:00,161
Seseorang mempunyai nama dan nomor.

7719
07:26:00,161 --> 07:26:02,578
Dan meskipun itu agak\ndiberikan secara marginal

7720
07:26:02,578 --> 07:26:05,411
bahwa ini adalah program singkat dan\n

7721
07:26:05,411 --> 07:26:07,661
terlihat lebih rumit\namun pada pandangan pertama, memang begitu

7722
07:26:07,661 --> 07:26:10,901
sekarang meletakkan fondasi untuk\n

7723
07:26:10,901 --> 07:26:13,541
sekarang tidak dapat mengacaukan\nasosiasi nama

7724
07:26:13,541 --> 07:26:17,140
dengan angka karena setiap orang\n

7725
07:26:17,140 --> 07:26:21,070
dienkapsulasi di dalam\ntipe data yang sama.

7726
07:26:21,070 --> 07:26:22,631
Dan itulah istilah seni dalam CS.

7727
07:26:22,631 --> 07:26:26,081
Enkapsulasi berarti\nenkapsulasi-- yaitu, mengandung--

7728
07:26:26,080 --> 07:26:28,190
potongan informasi terkait.

7729
07:26:28,190 --> 07:26:34,030
Dan dengan demikian, kita memiliki orang itu\n

7730
07:26:34,811 --> 07:26:36,671
Dan ini menjadi\ndasar bagi semuanya

7731
07:26:36,670 --> 07:26:39,550
tentang hal-hal keren yang telah kita bicarakan\ndan Anda gunakan setiap hari.

7732
07:26:40,353 --> 07:26:43,271
Ingatlah bahwa sebuah gambar adalah sekumpulan\n

7733
07:26:43,271 --> 07:26:46,931
Setiap titik\nmemiliki nilai RGB yang terkait

7734
07:26:46,931 --> 07:26:48,791
dengan itu-- merah, hijau, dan biru.

7735
07:26:48,791 --> 07:26:52,121
Anda dapat membayangkan sekarang membuat\na struktur di C mungkin di mana

7736
07:26:52,120 --> 07:26:55,900
mungkin Anda memiliki tiga nilai,\ntiga variabel-- yang satu bernama merah

7737
07:26:55,901 --> 07:26:57,761
yang satu disebut hijau, yang satu disebut biru.

7738
07:26:57,760 --> 07:27:00,341
Lalu Anda dapat memberi nama\nsesuatu bukan orang melainkan piksel.

7739
07:27:00,341 --> 07:27:04,271
Dan sekarang Anda dapat menyimpannya di C tiga\n

7740
07:27:04,271 --> 07:27:08,338
sebagian hijau, sebagian biru-- dan secara kolektif\n

7741
07:27:08,338 --> 07:27:11,381
Dan Anda dapat membayangkan melakukan sesuatu\n

7742
07:27:11,381 --> 07:27:14,800
Musik, Anda mungkin punya tiga\n

7743
07:27:14,800 --> 07:27:17,021
durasinya, kekerasannya.

7744
07:27:17,021 --> 07:27:20,480
Dan Anda dapat membayangkan menghasilkan\n

7745
07:27:20,480 --> 07:27:21,730
Jadi ini levelnya agak rendah.

7746
07:27:21,730 --> 07:27:24,280
Kami hanya menggunakan aplikasi kontak yang\nfamiliar.

7747
07:27:24,280 --> 07:27:28,630
Namun kini kami memiliki cara dalam kode\nuntuk mengekspresikan sebagian besar jenis data apa pun

7748
07:27:28,631 --> 07:27:32,621
yang pada akhirnya mungkin ingin kami terapkan\atau diskusikan.

7749
07:27:32,620 --> 07:27:37,870
Jadi pertanyaan apa pun sekarang tentang struct\atau mendefinisikan tipe kita sendiri

7750
07:27:37,870 --> 07:27:42,470
tujuan penggunaan\n

7751
07:27:42,471 --> 07:27:45,640
sekarang dalam desain yang lebih baik\njuga untuk meletakkan fondasinya

7752
07:27:45,640 --> 07:27:50,240
untuk mengimplementasikan lebih keren lagi\n

7753
07:27:50,741 --> 07:27:52,074
HADIRIN: Apa itu [TIDAK TERDENGAR]

7754
07:27:52,074 --> 07:27:55,074
DAVID J. MALAN: Apa bedanya\n

7755
07:27:55,911 --> 07:27:58,751
Sedikit catatan tambahan, C\nis tidak berorientasi objek.

7756
07:27:58,751 --> 07:28:02,350
Bahasa seperti Java dan C dan\n

7757
07:28:02,350 --> 07:28:05,560
dari, memprogram diri sendiri, punya teman\n

7758
07:28:05,561 --> 07:28:09,791
bahasa dalam bahasa yang mereka miliki\n

7759
07:28:10,811 --> 07:28:14,381
Dan objek tidak hanya dapat menyimpan\ndata, tetapi juga variabel.

7760
07:28:14,381 --> 07:28:18,851
Objek juga dapat menyimpan fungsi, dan\n

7761
07:28:18,850 --> 07:28:20,740
Tapi itu tidak konvensional.

7762
07:28:20,741 --> 07:28:24,131
Di C, Anda memiliki struktur\ndata yang menyimpan data.

7763
07:28:24,131 --> 07:28:29,140
Dalam bahasa seperti Java dan C , Anda memiliki\n

7764
07:28:29,771 --> 07:28:32,151
Python juga merupakan bahasa\nberorientasi objek.

7765
07:28:32,151 --> 07:28:35,631
Jadi kita akan melihat masalah ini dalam beberapa minggu,\n

7766
07:28:36,131 --> 07:28:38,116
HADIRIN: Bisakah Anda\nmenggunakan [TIDAK TERDENGAR] ini??

7767
07:28:38,741 --> 07:28:41,381
Bisakah Anda menggunakan struct ini untuk\nmendefinisikan ulang bagaimana int didefinisikan?

7768
07:28:42,611 --> 07:28:46,061
Kita berbicara beberapa kali\nsekarang tentang integer overflow.

7769
07:28:46,061 --> 07:28:50,261
Dan yang terbaru, Anda mungkin pernah melihat\n

7770
07:28:50,260 --> 07:28:52,841
itu secara harfiah terkait\ndengan int overflow.

7771
07:28:52,841 --> 07:28:57,251
Itu adalah hasil dari int yang hanya\nmenyimpan 4 byte atau 32 bit

7772
07:28:57,251 --> 07:29:00,161
atau bahkan sepanjang 64 bit atau 8 byte.

7773
07:29:01,241 --> 07:29:03,881
Namun jika Anda ingin menerapkan\nbeberapa perangkat lunak keuangan

7774
07:29:03,881 --> 07:29:06,461
atau perangkat lunak ilmiah atau\nmatematika itu

7775
07:29:06,460 --> 07:29:10,330
memungkinkan Anda menghitung jauh lebih besar\ntdari int atau long pada umumnya

7776
07:29:10,330 --> 07:29:13,495
Anda dapat membayangkan John membuat\nstruktur Anda sendiri.

7777
07:29:13,495 --> 07:29:15,620
Faktanya, dalam beberapa\nbahasa terdapat strukturnya

7778
07:29:15,620 --> 07:29:19,730
disebut int besar, yang memungkinkan Anda\nmenyatakan angka yang lebih besar.

7779
07:29:20,330 --> 07:29:24,770
Yah, mungkin Anda menyimpan di dalam\na semut besar serangkaian nilai.

7780
07:29:24,771 --> 07:29:27,852
Dan entah bagaimana Anda membiarkan diri Anda\nmenyimpan lebih banyak bit

7781
07:29:27,852 --> 07:29:29,810
berdasarkan seberapa tinggi\nAnda ingin dapat menghitungnya.

7782
07:29:30,830 --> 07:29:34,200
Kami sekarang mempunyai kemampuan untuk melakukan\n

7783
07:29:34,201 --> 07:29:36,561
bahkan jika itu tidak dibangun untuk kita.

7784
07:29:43,122 --> 07:29:45,830
DAVID J. MALAN: Bisakah Anda menentukan nama\n

7785
07:29:46,430 --> 07:29:48,347
Ini mulai menjadi\nsintaksis sedikit berantakan

7786
07:29:48,347 --> 07:29:51,590
jadi aku melakukannya sedikit lebih\nbertele-tele baris demi baris.

7787
07:29:52,791 --> 07:29:57,271
AUDIENCE: Fungsi [Tak Terdengar]\nyang Anda gunakan untuk fungsi tersebut

7788
07:29:57,271 --> 07:29:59,701
di bagian bawah [Tak terdengar].

7789
07:29:59,701 --> 07:30:03,389
Bisakah Anda melakukan hal\nseperti itu [Tak terdengar]??

7790
07:30:03,389 --> 07:30:05,759
DAVID J. MALAN: Prototipe--\nAnda harus melakukan A dan C. Anda

7791
07:30:05,759 --> 07:30:09,389
harus menentukan apa pun yang Anda tuju\n

7792
07:30:09,389 --> 07:30:11,139
untuk digunakan sebelum Anda benar-benar menggunakannya.

7793
07:30:11,139 --> 07:30:15,190
Jadi memang sengaja saya menaruhnya\n

7794
07:30:15,190 --> 07:30:19,230
Jika tidak, kompiler tidak akan tahu\n

7795
07:30:19,230 --> 07:30:22,111
gunakan di sini pada baris 14.

7796
07:30:22,111 --> 07:30:25,840
Jadi itu harus didahulukan, atau harus\n

7797
07:30:25,840 --> 07:30:29,340
sehingga Anda memasukkannya di\nbagian paling atas kode Anda.

7798
07:30:37,643 --> 07:30:39,350
DAVID J. MALAN: Ya, pertanyaan bagus\ndan kami akan melakukannya

7799
07:30:39,350 --> 07:30:42,860
kembali ke sini nanti dalam istilah kapan\n

7800
07:30:42,861 --> 07:30:44,991
dan menyimpan sesuatu dalam database aktual.

7801
07:30:44,991 --> 07:30:48,681
Secara umum, meskipun kami\n

7802
07:30:48,681 --> 07:30:52,161
atau di AS, kami memiliki jaminan sosial\n

7803
07:30:52,161 --> 07:30:56,420
sering kali terdapat tanda baca lain di dalamnya,\n

7804
07:30:57,741 --> 07:31:01,701
Anda tidak dapat menyimpan sintaksis tersebut\n

7805
07:31:01,701 --> 07:31:03,241
Anda hanya dapat menyimpan nomor.

7806
07:31:03,241 --> 07:31:05,301
Jadi salah satu motivasi untuk\menggunakan string adalah adil

7807
07:31:05,300 --> 07:31:08,931
Saya bisa menyimpan apa pun yang diinginkan manusia\n

7808
07:31:10,050 --> 07:31:13,789
Alasan lain untuk\nmenyimpan sesuatu sebagai string

7809
07:31:13,789 --> 07:31:15,831
meskipun terlihat seperti\nangka, itu sesuai dengan konteksnya

7810
07:31:15,830 --> 07:31:17,448
kode pos di Amerika Serikat.

7811
07:31:17,449 --> 07:31:18,741
Sekali lagi, kita akan kembali ke sini.

7812
07:31:18,741 --> 07:31:21,051
Tapi singkat cerita--\nbertahun-tahun yang lalu, sebenarnya--

7813
07:31:21,050 --> 07:31:24,093
Saya menggunakan Microsoft\nOutlook untuk klien email saya.

7814
07:31:24,093 --> 07:31:25,550
Dan akhirnya saya beralih ke Gmail.

7815
07:31:25,550 --> 07:31:27,260
Dan ini seperti 10 tahun lebih yang lalu sekarang.

7816
07:31:27,260 --> 07:31:31,790
Dan Outlook pada saat itu memungkinkan Anda mengekspor\n

7817
07:31:33,140 --> 07:31:34,971
Lebih lanjut tentang itu di minggu-minggu mendatang juga.

7818
07:31:34,971 --> 07:31:36,763
Dan itu berarti saya\ndapat mengunduh teks

7819
07:31:36,762 --> 07:31:40,070
file dengan semua teman saya dan\n

7820
07:31:40,070 --> 07:31:44,172
Sayangnya, saya membuka CSV yang sama\n

7821
07:31:44,172 --> 07:31:46,130
hanya untuk mencari tahu\nmemeriksanya dan melihat apakah ada

7822
07:31:46,131 --> 07:31:47,761
di sana adalah apa yang diharapkan.

7823
07:31:47,760 --> 07:31:51,230
Dan aku pasti langsung memukulnya,\n

7824
07:31:51,230 --> 07:31:54,260
Dan Excel setidaknya memiliki kebiasaan ini\n

7825
07:31:54,260 --> 07:31:56,990
Jika segala sesuatu tampak seperti angka,\nit memperlakukannya sebagai angka.

7826
07:31:56,991 --> 07:31:58,401
Dan Apple Numbers juga melakukan hal ini.

7827
07:31:58,401 --> 07:32:00,441
Google Spreadsheets\ndomelakukan hal ini hingga saat ini.

7828
07:32:00,440 --> 07:32:07,400
Tapi singkat cerita, saya kemudian mengimpor\n

7829
07:32:07,401 --> 07:32:11,121
Dan sekarang, 10 tahun lebih kemudian, saya masih\n

7830
07:32:11,120 --> 07:32:17,001
anggota yang kode posnya berada di\nCambridge, Massachusetts 2138

7831
07:32:17,001 --> 07:32:20,661
yang tidak memiliki angka 0 karena\nkami di sini di Cambridge adalah 02138.

7832
07:32:20,661 --> 07:32:23,780
Dan itu karena saya\nmengobati atau membiarkan Excel

7833
07:32:23,780 --> 07:32:26,990
perlakukan apa yang tampak seperti angka\nas sebagai angka sebenarnya atau int

7834
07:32:26,991 --> 07:32:29,901
dan sekarang angka nol di depan menjadi a\n

7835
07:32:29,901 --> 07:32:33,261
tidak berarti apa-apa, namun dalam\nsistem email, memang demikian--

7836
07:32:34,431 --> 07:32:36,013
Baiklah, pertanyaan terakhir lainnya di sini.

7837
07:32:39,021 --> 07:32:42,861
DAVID J. MALAN: Ya, saya juga bisa\n

7838
07:32:42,861 --> 07:32:47,091
array untuk memecahkan masalah\hampir hanya memiliki satu array?

7839
07:32:47,091 --> 07:32:51,111
Ya, tapi satu hal, menurut saya\ini kurang mudah dibaca, khususnya

7840
07:32:51,111 --> 07:32:53,001
karena saya mendapatkan banyak nama dan nomor.

7841
07:32:53,001 --> 07:32:56,091
Dan kedua, itu juga semacam\nmengandalkan sistem kehormatan.

7842
07:32:56,091 --> 07:32:59,300
Terlalu mudah untuk menghilangkan beberapa\n

7843
07:33:00,300 --> 07:33:04,370
Jadi saya berpendapat itu juga tidak\nas sebaik memperkenalkan sebuah struct.

7844
07:33:05,541 --> 07:33:10,431
Array dua dimensi berarti\n

7845
07:33:10,431 --> 07:33:12,440
Baiklah, jadi sekarang\nkita mempunyai kemampuan ini

7846
07:33:12,440 --> 07:33:16,570
untuk menyimpan berbagai jenis data\nseperti kontak di buku telepon

7847
07:33:16,570 --> 07:33:18,320
mempunyai nama dan\nalamat, ayolah

7848
07:33:18,320 --> 07:33:21,140
mengambil langkah mundur dan\nmempertimbangkan bagaimana kita bisa melakukannya sekarang

7849
07:33:21,140 --> 07:33:26,210
selesaikan salah satu masalah awal dengan\n

7850
07:33:26,210 --> 07:33:30,291
diberikan sebelumnya dan mempertimbangkan,\n

7851
07:33:30,291 --> 07:33:33,261
mahal, memakan waktu\nkarena hal itu dapat menyebabkan tip

7852
07:33:33,260 --> 07:33:37,370
skala yang mendukung penyortiran,\nlalu mencari, atau mungkin hanya

7853
07:33:37,370 --> 07:33:39,320
tidak memilah dan hanya mencari.

7854
07:33:39,320 --> 07:33:42,830
Ini akan memberi kita gambaran\nbetapa mahalnya

7855
07:33:42,830 --> 07:33:44,705
menyortir sesuatu yang sebenarnya.

7856
07:33:44,705 --> 07:33:46,580
Nah, apa rumusan masalah ini?

7857
07:33:46,580 --> 07:33:48,140
Ini sama saja dengan minggu ke nol.

7858
07:33:49,311 --> 07:33:51,480
Kami ingin hasilnya diurutkan.

7859
07:33:51,480 --> 07:33:54,920
Jadi misalnya, jika kita\nmengambil masukan yang tidak disortir sebagai masukan

7860
07:33:54,920 --> 07:33:58,255
kami ingin keluaran yang diurutkan sebagai\nhasilnya. Lebih konkritnya

7861
07:33:58,256 --> 07:33:59,631
jika kita punya nomor seperti ini--

7862
07:33:59,631 --> 07:34:04,461
63852741, yang hanya\nangka yang tersusun acak--

7863
07:34:04,460 --> 07:34:08,870
kami ingin keluar kembali 12345678.

7864
07:34:08,870 --> 07:34:10,800
Jadi kami hanya ingin\nhal-hal itu disortir.

7865
07:34:10,800 --> 07:34:12,830
Jadi sekali lagi, di dalam\nkotak hitam inilah

7866
07:34:12,830 --> 07:34:17,820
akan menjadi satu atau lebih algoritma\n

7867
07:34:17,820 --> 07:34:20,041
Jadi bagaimana kita bisa melakukan hal ini?

7868
07:34:20,041 --> 07:34:23,541
Yah, hanya untuk sedikit memvariasikannya\n

7869
07:34:23,541 --> 07:34:25,941
untuk lebih banyak partisipasi penonton.

7870
07:34:25,940 --> 07:34:28,150
Namun kali ini, kami membutuhkan\ndelapan orang jika memungkinkan.

7871
07:34:28,151 --> 07:34:30,651
Anda semua harus merasa nyaman\ntampil di internet.

7872
07:34:30,651 --> 07:34:33,526
Oke, jadi ini sebenarnya cukup\n

7873
07:34:33,526 --> 07:34:37,113
Bagaimana kalau 1, 2, 3, 4, 5, 6, 7--

7874
07:34:37,113 --> 07:34:41,421
oh, oke, dan seseorang yang menjadi sukarelawan\ntemannya-- nomor delapan.

7875
07:34:43,236 --> 07:34:45,111
Dan jika Anda bisa, saya\nakan menyiapkan semuanya.

7876
07:34:45,111 --> 07:34:47,991
Jika Anda semua bisa bergabung dengan Valerie,\nrekan saya di sana

7877
07:34:47,991 --> 07:34:53,271
untuk memberi Anda alat untuk digunakan di sini,\nkami akan melanjutkan sebentar lagi

7878
07:34:53,271 --> 07:34:56,195
dan coba temukan beberapa nomor yang ada.

7879
07:34:59,541 --> 07:35:05,181
Sebentar lagi, setiap relawan kami\n

7880
07:35:05,181 --> 07:35:09,741
Dan bilangan bulat tersebut pada awalnya\nakan berada dalam urutan yang tidak diurutkan.

7881
07:35:09,741 --> 07:35:13,461
Dan saya mengklaim bahwa menggunakan algoritma,\npetunjuk langkah demi langkah

7882
07:35:13,460 --> 07:35:18,181
kami mungkin bisa mengurutkan orang-orang ini\n

7883
07:35:18,181 --> 07:35:22,791
Jadi mereka ada di lemari sekarang\n

7884
07:35:22,791 --> 07:35:27,306
dengan nomor Jersey di atasnya, yang akan\n

7885
07:35:31,010 --> 07:35:35,630
Beri kami waktu sejenak untuk menyelesaikan\menyiapkan pakaian.

7886
07:35:35,631 --> 07:35:40,401
Mereka diberikan\nkaus dan nomor telepon.

7887
07:35:40,401 --> 07:35:42,981
Dan izinkan saya bertanya kepada\naudiens sejenak.

7888
07:35:42,980 --> 07:35:47,120
Karena kami memiliki angka-angka ini di sini di\n

7889
07:35:47,120 --> 07:35:48,713
Mereka hanya dalam urutan acak.

7890
07:35:48,713 --> 07:35:49,881
Dan izinkan saya bertanya kepada penonton.

7891
07:35:49,881 --> 07:35:55,341
Bagaimana cara Anda menyortir\n

7892
07:35:55,341 --> 07:35:57,291
Bagaimana cara Anda menyortirnya?

7893
07:35:57,291 --> 07:35:58,498
Ya, apa pendapatmu?

7894
07:35:58,498 --> 07:36:04,687
HADIRIN: [Tak terdengar] nomornya\n

7895
07:36:05,271 --> 07:36:08,907
HADIRIN: Nomor berikut adalah\n

7896
07:36:09,491 --> 07:36:11,161
HADIRIN: Jika tidak, maka [TIDAK TERDENGAR].

7897
07:36:11,161 --> 07:36:13,712
DAVID J. MALAN: Oke, jadi\nuntuk rekap saja, Anda akan mulai

7898
07:36:13,712 --> 07:36:15,170
dengan salah satu nomor di akhir.

7899
07:36:15,170 --> 07:36:17,570
Anda akan melihat nomor di\nkanan atau kirinya

7900
07:36:17,570 --> 07:36:18,890
tergantung di ujung mana Anda memulai.

7901
07:36:18,890 --> 07:36:21,473
Dan jika rusak, Anda\nmulai menukarnya.

7902
07:36:22,710 --> 07:36:24,795
Ada banyak\nkesalahan yang harus diperbaiki di sini

7903
07:36:24,795 --> 07:36:26,420
karena keadaannya sangat tidak beres.

7904
07:36:26,420 --> 07:36:29,420
Namun mungkin, jika Anda mulai\nmenyelesaikan masalah kecil sekaligus

7905
07:36:29,420 --> 07:36:32,270
Anda dapat mencapai hasil akhir\n

7906
07:36:32,271 --> 07:36:35,181
Naluri lainnya, jika Anda\nbaru saja diberikan angka-angka ini, bagaimana caranya

7907
07:36:35,181 --> 07:36:38,438
Anda mungkin akan menyortirnya?

7908
07:36:44,501 --> 07:36:46,280
DAVID J. MALAN: Oke, saya suka itu.

7909
07:36:46,280 --> 07:36:50,200
Jadi ringkasnya, cari yang terkecil\n

7910
07:36:51,431 --> 07:36:54,703
Dan mungkin Anda bisa melakukannya\n

7911
07:36:54,703 --> 07:36:57,411
Dan hal itu tampaknya memberi Anda\n

7912
07:36:57,411 --> 07:37:00,070
Dan jika kalian semua berpakaian di sini--

7913
07:37:00,070 --> 07:37:03,161
apakah kamu ingin datang\non jika kamu sudah siap?

7914
07:37:03,161 --> 07:37:05,021
Kami punya beberapa [? terasa?] sukarelawan juga.

7915
07:37:07,390 --> 07:37:09,881
Jadi jika kalian semua ingin\nberbaris

7916
07:37:09,881 --> 07:37:12,131
menghadap penonton dengan\persis dalam urutan ini-- jadi

7917
07:37:12,131 --> 07:37:14,531
siapa pun yang nomor nol\nsharusnya ada di sini

7918
07:37:14,530 --> 07:37:18,070
dan siapa pun yang nomor lima\npastinya berada jauh di sana.

7919
07:37:18,070 --> 07:37:21,280
Jangan ragu untuk menjaga jarak sebanyak yang Anda bisa\n

7920
07:37:24,013 --> 07:37:25,181
Dan beri sedikit lebih banyak ruang.

7921
07:37:29,451 --> 07:37:31,094
DAVID J. MALAN : 4, semoga 1.

7922
07:37:31,094 --> 07:37:32,261
Ya, jauhkan mereka ke samping.

7923
07:37:38,050 --> 07:37:41,435
Baiklah, jadi di sini, kita punya\nan susunan delapan angka--

7924
07:37:41,436 --> 07:37:42,561
delapan bilangan bulat jika Anda mau.

7925
07:37:42,561 --> 07:37:45,131
Dan apakah Anda ingin masing-masing mengucapkan\na salam singkat kepada grup?

7926
07:38:05,080 --> 07:38:07,265
HADIRIN: Hai, saya\nCeleste, dan ayo Strauss.

7927
07:38:08,140 --> 07:38:11,291
Baiklah, selamat datang semuanya di panggung,\nandan mari kita visualisasikan saja

7928
07:38:11,291 --> 07:38:13,791
mungkin secara alami, bagaimana Anda\nbisa memecahkan masalah ini.

7929
07:38:13,791 --> 07:38:16,901
Jadi saat ini kami mempunyai angka\n0 sampai 7 yang cukup rusak.

7930
07:38:16,901 --> 07:38:20,869
Bisakah Anda melanjutkan\ndiri Anda sendiri dari 0 hingga 7?

7931
07:38:25,760 --> 07:38:28,560
DAVID J. MALAN: Oke, jadi apa yang baru saja mereka lakukan?

7932
07:38:29,061 --> 07:38:30,621
Pertama-tama, ya, bagus sekali.

7933
07:38:34,390 --> 07:38:37,398
Bagaimana Anda menjelaskan\napa yang baru saja mereka lakukan?

7934
07:38:38,230 --> 07:38:40,420
Bisakah Anda kembali ke\nurutan di layar--

7935
07:38:44,681 --> 07:38:47,800
Dan bisakah Anda melakukan\nhal yang baru saja Anda lakukan lagi?

7936
07:38:58,550 --> 07:39:01,841
Baiklah, memang benar, ada\n

7937
07:39:01,841 --> 07:39:05,510
kecuali nomor empat, sedang melakukan sesuatu\n

7938
07:39:05,510 --> 07:39:07,751
Dan itu bukanlah cara\na komputer biasanya bekerja.

7939
07:39:07,751 --> 07:39:11,260
Sama seperti komputer yang hanya dapat melihat\n

7940
07:39:11,260 --> 07:39:15,850
pada suatu waktu, komputer hanya dapat bergerak\n

7941
07:39:15,850 --> 07:39:18,077
loker, memeriksa apa\ndi sana, memindahkannya sesuai kebutuhan.

7942
07:39:18,078 --> 07:39:21,161
Jadi mari kita coba ini dengan lebih metodis\n

7943
07:39:21,161 --> 07:39:26,710
Kalau kalian semua bisa mengacak\ndiri kalian lagi menjadi 52741630

7944
07:39:26,710 --> 07:39:29,122
mari kita ambil\npendekatan kedua terlebih dahulu.

7945
07:39:29,122 --> 07:39:30,580
Saya akan melihat angka-angka ini.

7946
07:39:30,580 --> 07:39:33,230
Padahal saya sebagai manusia\nbisa melihat semua angka dengan jelas

7947
07:39:33,230 --> 07:39:35,291
dan saya hanya punya\intuisi tentang cara memperbaikinya

7948
07:39:35,291 --> 07:39:37,541
kita harus lebih metodis\nkarena pada akhirnya, kita sudah melakukannya

7949
07:39:37,541 --> 07:39:39,861
harus menerjemahkan ini ke\nkode semu dan kemudian kode.

7950
07:39:40,751 --> 07:39:43,561
Saya akan mencari, seperti yang Anda\nusulkan, angka terkecil.

7951
07:39:43,561 --> 07:39:45,311
Dan saya akan memulai\ndari kiri ke kanan.

7952
07:39:45,311 --> 07:39:48,461
Saya bisa melakukannya dari kanan ke kiri, tapi ke kiri\n

7953
07:39:48,460 --> 07:39:51,440
Baiklah, 5 saat ini adalah\nangka terkecil yang pernah saya lihat.

7954
07:39:51,440 --> 07:39:54,179
Jadi saya akan mengingat\nin sebuah variabel, jika Anda mau.

7955
07:39:54,179 --> 07:39:55,721
Sekarang saya akan mengambil satu langkah lagi--

7956
07:39:56,291 --> 07:39:59,621
Oke, 2 Saya akan membandingkan dengan\n

7957
07:39:59,620 --> 07:40:03,521
Saya akan melupakan 5 dan hanya\n

7958
07:40:04,181 --> 07:40:07,451
7, tidak-- Aku akan mengabaikannya\n

7959
07:40:08,170 --> 07:40:11,530
4, 1-- Oke, saya akan\nmemperbarui variabel yang ada

7960
07:40:11,530 --> 07:40:12,790
karena itu memang lebih kecil.

7961
07:40:12,791 --> 07:40:15,491
Tentu saja, kita sebagai manusia\tahu bahwa jumlahnya semakin kecil.

7962
07:40:16,541 --> 07:40:19,991
Saya harus memeriksa semua nilai untuk melihatnya\n

7963
07:40:19,991 --> 07:40:22,796
karena 6 bukan, 3 bukan, tapi 0 adalah.

7964
07:40:22,795 --> 07:40:23,920
Dan siapa namamu lagi?

7965
07:40:25,631 --> 07:40:32,320
Ke mana Celeste atau nomor 0 harus pergi\n

7966
07:40:32,320 --> 07:40:33,951
Baiklah, saya melihat banyak hal seperti ini.

7967
07:40:33,951 --> 07:40:37,181
Jadi di awal array,\njadi sebelum melakukan ini secara nyata

7968
07:40:37,181 --> 07:40:38,921
mari kita munculkan kamu di depan.

7969
07:40:38,920 --> 07:40:42,460
Dan bisakah kalian semua bergeser\ndan memberi ruang bagi Celeste?

7970
07:40:42,460 --> 07:40:46,390
Apakah ini ide bagus jika semuanya\nbergerak atau setara

7971
07:40:46,390 --> 07:40:48,911
pindahkan semua yang ada di array\nuntuk memberi ruang bagi Celeste

7972
07:40:52,030 --> 07:40:53,238
Rasanya seperti banyak pekerjaan.

7973
07:40:53,239 --> 07:40:56,561
Meskipun kejadiannya cukup indah\n

7974
07:40:56,561 --> 07:40:58,401
terjadi hanya untuk memindahkannya ke tempatnya.

7975
07:40:58,401 --> 07:41:00,941
Jadi apa yang mungkin sedikit\nslebih pintar--

7976
07:41:00,940 --> 07:41:03,320
sedikit lebih efisien, mungkin?

7977
07:41:07,414 --> 07:41:08,831
DAVID J. MALAN: Oke, ganti dua nilai.

7978
07:41:08,830 --> 07:41:12,450
Jadi jika Anda ingin kembali ke tempat\n

7979
07:41:12,451 --> 07:41:13,921
dia tidak berada di tempat yang tepat.

7980
07:41:13,920 --> 07:41:15,150
Dia harus pindah pada akhirnya.

7981
07:41:15,859 --> 07:41:18,661
Jika Celeste berada di sana,\nkenapa kita tidak menukar 5 dan 0 saja?

7982
07:41:18,661 --> 07:41:21,286
Jadi jika Anda ingin teruskan\nbertukar tempat satu sama lain.

7983
07:41:21,286 --> 07:41:22,591
Perhatikan apa yang baru saja terjadi.

7984
07:41:22,591 --> 07:41:25,780
Masalah yang saya coba\npecahkan menjadi lebih kecil.

7985
07:41:25,780 --> 07:41:28,380
Bukannya berukuran\n8, sekarang menjadi ukuran 7.

7986
07:41:28,381 --> 07:41:31,411
Sekarang dikabulkan, saya pindah 5 ke\nlokasi lain yang salah.

7987
07:41:31,411 --> 07:41:33,300
Namun jika angka-angka ini\ndimulai secara acak

7988
07:41:33,300 --> 07:41:37,150
tidak masalah ke mana 5 pergi\n

7989
07:41:38,401 --> 07:41:41,791
Dan sekarang jika saya kembali, lingkaran saya\nisseperti kembali berputar.

7990
07:41:41,791 --> 07:41:46,050
Saya bisa mengabaikan Celeste dan membuat ini\n

7991
07:41:46,050 --> 07:41:47,791
karena aku tahu dia ada di tempat yang tepat.

7992
07:41:53,431 --> 07:41:57,960
Sekarang saya tahu sebagai manusia, ini\nharus menjadi yang terkecil berikutnya.

7993
07:41:57,960 --> 07:42:02,460
Namun mengapa, secara intuitif,\nsaya harus melanjutkannya, menurut Anda?

7994
07:42:02,460 --> 07:42:05,310
Saya tidak bisa melakukan optimasi sebagai\nmanusia dan hanya mengatakan, nomor 1

7995
07:42:05,311 --> 07:42:07,121
mari membawa Anda ke tempat yang tepat.

7996
07:42:07,120 --> 07:42:08,970
Saya masih ingin memeriksa keseluruhan array.

7997
07:42:10,230 --> 07:42:12,837
HADIRIN: Mungkin ada 1 lagi.

7998
07:42:12,837 --> 07:42:14,670
DAVID J. MALAN: Mungkin ada\nlainnya 1, dan itu

7999
07:42:14,670 --> 07:42:16,390
bisa menjadi masalah lain sama sekali.

8000
07:42:17,631 --> 07:42:18,818
HADIRIN: Bisa jadi 0 lagi

8001
07:42:18,818 --> 07:42:20,611
DAVID J. MALAN: Mungkin\nada 0 lagi

8002
07:42:20,611 --> 07:42:22,921
tapi saya pernah memeriksa\ndaftarnya sekali, kan?

8003
07:42:22,920 --> 07:42:24,330
Dan saya agak tahu tidak ada.

8004
07:42:24,931 --> 07:42:27,661
AUDIENCE: Anda tidak tahu bahwa\tidak semua nilai terwakili.

8005
07:42:27,661 --> 07:42:31,747
Jadi mungkin ada Anda yang [Tak terdengar]\n

8006
07:42:32,580 --> 07:42:34,960
DAVID J. MALAN: Ya, saya tidak\ntentu tahu apa yang ada di sana.

8007
07:42:34,960 --> 07:42:39,300
Dan sejujurnya, saya hanya menetapkan sebelumnya\n

8008
07:42:39,300 --> 07:42:42,541
Saya bisa menggunakan dua dan mengingat\n

8009
07:42:42,541 --> 07:42:44,491
Saya bisa menggunakan tiga variabel, empat.

8010
07:42:44,491 --> 07:42:47,801
Tapi kemudian saya akan mulai menggunakan\n

8011
07:42:47,800 --> 07:42:51,240
Jadi kalau sudah saya tetapkan saya hanya punya\n

8012
07:42:51,241 --> 07:42:53,551
Saya tidak tahu apa-apa\nlebih lanjut tentang elemen ini

8013
07:42:53,550 --> 07:42:55,758
karena satu-satunya hal yang ku\ningat saat ini

8014
07:42:55,758 --> 07:42:57,850
adalah nomor 1 adalah\nelemen terkecil yang pernah saya lihat.

8015
07:43:01,070 --> 07:43:03,030
Oke, saya tahu nomor itu\n1, dan nama Anda--

8016
07:43:03,739 --> 07:43:06,211
DAVID J. MALAN: --Hannah adalah\nelemen terkecil berikutnya.

8017
07:43:06,210 --> 07:43:08,701
Saya bisa meminta semua orang pindah\nuntuk memberi ruang, tapi tidak.

8018
07:43:09,420 --> 07:43:11,340
Kamu tahu, meskipun kamu\nsangat dekat dengan tempat yang aku inginkan

8019
07:43:11,341 --> 07:43:13,530
Saya hanya akan membuatnya\nssederhana dan menukar kalian berdua.

8020
07:43:13,530 --> 07:43:15,931
Memang benar, saya telah membuat\nmasalahnya menjadi sedikit lebih buruk.

8021
07:43:15,931 --> 07:43:19,561
Namun rata-rata, saya juga bisa\nberuntung dan hanya mendapatkan nomor 2

8022
07:43:20,640 --> 07:43:22,570
Sekarang izinkan saya mempercepatnya.

8023
07:43:22,570 --> 07:43:26,911
Sekarang saya bisa mengabaikan Hannah dan Celeste,\n

8024
07:43:34,830 --> 07:43:37,920
Jadi mari kita tukar 2 dan 7.

8025
07:43:37,920 --> 07:43:40,590
Dan sekarang saya hanya akan melakukan\norchestrate secara lisan.

8026
07:43:40,591 --> 07:43:42,311
4, Anda harus melakukan sesuatu.

8027
07:43:46,111 --> 07:43:48,841
Oke, 3-- bisakah kamu menukarnya dengan 4?

8028
07:43:48,841 --> 07:43:52,036
Baiklah, sekarang kita punya 7, 6, 4, 5.

8029
07:43:52,036 --> 07:43:54,780
Oke, 4, bisakah kamu menukarnya dengan 7?

8030
07:44:02,521 --> 07:44:04,050
Dan sekarang mungkin tepuk tangan meriah.

8031
07:44:05,341 --> 07:44:09,611
Oke, tunggu sebentar.

8032
07:44:09,611 --> 07:44:11,491
Jadi kita akan melakukan pendekatan lain ini.

8033
07:44:11,491 --> 07:44:14,581
Ya Tuhan, itu terasa jauh\nslebih lambat dibandingkan pendekatan pertama

8034
07:44:14,580 --> 07:44:17,400
tapi itu salah satunya, karena aku\n

8035
07:44:17,401 --> 07:44:22,051
Tapi kedua, kami melakukan satu hal sekaligus\n

8036
07:44:22,050 --> 07:44:25,470
memiliki kemewahan untuk bergerak\nseperti delapan CPU berbeda--

8037
07:44:25,471 --> 07:44:28,051
otak, jika Anda mau-- semuanya\tidak beroperasi pada waktu yang sama.

8038
07:44:28,050 --> 07:44:29,501
Dan komputer seperti itu ada.

8039
07:44:29,501 --> 07:44:32,254
Jika Anda memiliki komputer dengan\nbanyak inti, boleh dikatakan demikian

8040
07:44:32,254 --> 07:44:34,171
itu seperti memiliki\nkomputer yang secara teknis

8041
07:44:34,170 --> 07:44:35,850
dapat melakukan banyak hal sekaligus.

8042
07:44:35,850 --> 07:44:38,830
Namun biasanya perangkat lunak, setidaknya\namun kami telah menulisnya sejauh ini

8043
07:44:38,830 --> 07:44:40,555
hanya dapat melakukan satu hal dalam satu waktu.

8044
07:44:40,556 --> 07:44:42,431
Jadi sebentar lagi, kami akan menambahkan\nsemua langkah ini.

8045
07:44:42,431 --> 07:44:44,223
Namun untuk saat ini, jangan lakukan\pendekatan lain.

8046
07:44:44,223 --> 07:44:46,501
Jika Anda semua dapat menyusun ulang\nAnda seperti itu--

8047
07:44:46,501 --> 07:44:51,300
52741630-- mari kita ambil\npendekatan lain

8048
07:44:51,300 --> 07:44:54,970
direkomendasikan dengan hanya memperbaiki kecil\n

8049
07:44:54,971 --> 07:44:57,091
Jadi kita kembali ke urutan semula.

8050
07:44:57,091 --> 07:44:59,172
5 dan 2 jelas rusak.

8051
07:44:59,881 --> 07:45:01,711
Mari kita selesaikan masalah ini sekarang.

8052
07:45:03,451 --> 07:45:04,890
Sekarang izinkan saya mengambil langkah selanjutnya.

8053
07:45:06,690 --> 07:45:09,360
Memang ada kesenjangan, tapi itu\nmungkin bukan masalah besar.

8054
07:45:12,780 --> 07:45:15,510
Oke, 7 dan 1, mari kita bertukar.

8055
07:45:15,510 --> 07:45:18,480
7 dan 6, mari kita bertukar.

8056
07:45:22,050 --> 07:45:23,850
Sekarang izinkan saya berhenti sejenak.

8057
07:45:26,830 --> 07:45:29,700
Tapi apakah saya sudah memperbaiki masalahnya?

8058
07:45:29,701 --> 07:45:32,460
Benar, saya tidak bisa melihat-- seperti\nsebelumnya, saya tidak bisa mengoptimalkan suka

8059
07:45:32,460 --> 07:45:34,570
sebelumnya karena 0 jelas tidak ada di sini.

8060
07:45:34,570 --> 07:45:38,521
Kecuali mereka masih jauh dari sana,\n

8061
07:45:40,661 --> 07:45:42,407
Tapi apakah saya sudah melakukan perbaikan?

8062
07:45:43,616 --> 07:45:45,841
Dalam hal apa hal ini ditingkatkan?

8063
07:45:45,841 --> 07:45:50,411
Hal konkret apa yang menurut Anda lebih baik\n?

8064
07:45:50,911 --> 07:45:52,471
AUDIENCE: Diurutkan angka tertinggi.

8065
07:45:52,471 --> 07:45:55,051
DAVID J. MALAN: Saya sudah mengurutkannya\n

8066
07:45:55,050 --> 07:45:59,760
Dan sebaliknya, jika Anda mau, Celeste\n

8067
07:45:59,760 --> 07:46:04,330
Kasus terburuknya, Celeste akan\n

8068
07:46:04,330 --> 07:46:06,900
Jadi saya mungkin perlu melakukan ini\nsebanyak n total kali

8069
07:46:06,901 --> 07:46:08,576
untuk memindahkannya sepenuhnya.

8070
07:46:08,576 --> 07:46:09,701
Tapi itu mungkin akan berhasil.

8071
07:46:23,741 --> 07:46:25,871
perhatikan bahwa nilai\ntinggi, seperti yang Anda catat

8072
07:46:25,870 --> 07:46:28,510
akan muncul, jika Anda\nmenghendakinya, hingga akhir daftar.

8073
07:46:36,140 --> 07:46:37,730
5, 6, 7, tentu saja bagus.

8074
07:46:37,730 --> 07:46:40,536
Jadi sekarang Anda bisa melihat\nmasalah terselesaikan dengan sendirinya.

8075
07:46:40,536 --> 07:46:42,161
Dan mari kita lakukan bagian ini sekarang dengan lebih cepat.

8076
07:46:48,521 --> 07:46:53,238
Baiklah, sekarang 1 dan 2,\n2, dan 3, dan 0, dan bagus.

8077
07:46:53,238 --> 07:46:54,820
Jadi kami memiliki beberapa optimasi di sana.

8078
07:46:54,820 --> 07:46:57,221
Kita tidak perlu melanjutkan\nkarena semua sudah beres.

8079
07:47:01,091 --> 07:47:04,690
1 dan 0-- dan tepuk tangan meriah\nsebagai penutup.

8080
07:47:09,251 --> 07:47:11,501
Kami memerlukan bonekanya kembali,\ntetapi Anda dapat menyimpan bajunya.

8081
07:47:11,501 --> 07:47:13,201
Terima kasih telah menjadi sukarelawan di sini.

8082
07:47:13,201 --> 07:47:16,171
Jangan ragu untuk keluar\njalan ke kiri atau ke kanan.

8083
07:47:16,170 --> 07:47:18,120
Dan mari kita lihat apakah,\ntterima kasih kepada para sukarelawan kami

8084
07:47:18,120 --> 07:47:24,361
di sini, sekarang kami tidak bisa memformalkannya sedikit\n

8085
07:47:24,361 --> 07:47:28,530
Saya menyatakan bahwa algoritme pertama\npara sukarelawan bertindak dengan baik

8086
07:47:28,530 --> 07:47:30,091
adalah apa yang disebut pengurutan seleksi.

8087
07:47:30,091 --> 07:47:35,341
Dan sesuai dengan namanya, kami memilih\n

8088
07:47:35,341 --> 07:47:37,890
dan sekali lagi, lakukan\ndari kiri ke kanan

8089
07:47:37,890 --> 07:47:42,460
menempatkan Celeste di tempat yang tepat,\n

8090
07:47:42,460 --> 07:47:45,420
Jadi pengurutan seleksi, demikian\nsebut secara resmi

8091
07:47:45,420 --> 07:47:48,360
dapat dijelaskan, misalnya,\ndengan kode semu ini di sini--

8092
07:47:52,710 --> 07:47:54,780
Beginilah cara kita berbicara tentang array.

8093
07:47:54,780 --> 07:47:59,280
Ujung kiri adalah 0, ujung kanan\n

8094
07:47:59,280 --> 07:48:01,080
dan kebetulan berjumlah delapan orang.

8095
07:48:03,061 --> 07:48:06,601
Jadi untuk i dari 0 hingga n\nminus 1, apa yang saya lakukan?

8096
07:48:06,600 --> 07:48:11,760
Saya menemukan angka terkecil di antara\n

8097
07:48:13,170 --> 07:48:15,390
Sekilas\nagak samar, tapi ini

8098
07:48:15,390 --> 07:48:18,870
hanyalah cara yang sangat mirip kode\nsemu untuk mengatakannya

8099
07:48:18,870 --> 07:48:22,320
temukan elemen terkecil\nama kedelapan sukarelawan

8100
07:48:22,320 --> 07:48:27,480
karena jika saya mulai dari 0 dan n minus\n

8101
07:48:27,480 --> 07:48:31,591
8, 8 orang, jadi 8 dikurangi\n1 sama dengan 7, ini dulu

8102
07:48:31,591 --> 07:48:34,681
mengatakan temukan angka terkecil\ndi antara angka-angka dalam kurung 0

8103
07:48:34,681 --> 07:48:37,710
dan angka braket 7, jika Anda mau.

8104
07:48:38,911 --> 07:48:42,091
Tukar angka terkecil\ndengan kurung angka i.

8105
07:48:42,091 --> 07:48:45,570
Jadi itulah cara kami mendapatkan Celeste dari\n

8106
07:48:45,570 --> 07:48:47,701
Kami baru saja menukar kedua nilai itu.

8107
07:48:47,701 --> 07:48:50,201
Lalu apa yang terjadi selanjutnya\dalam kode semu ini?

8108
07:48:50,201 --> 07:48:52,261
saya, tentu saja, beralih dari 0 ke 1.

8109
07:48:52,260 --> 07:48:54,420
Dan itulah cara teknis\nuntuk mengatakannya sekarang

8110
07:48:54,420 --> 07:48:58,170
temukan elemen terkecil di antara\n7 sukarelawan yang tersisa

8111
07:48:58,170 --> 07:49:01,930
mengabaikan Celeste kali ini karena dia\n

8112
07:49:01,931 --> 07:49:04,320
Jadi masalahnya berubah\ndari ukuran 8 ke ukuran 7.

8113
07:49:04,320 --> 07:49:07,861
Dan kalau kita ulangi, ukuran 6,\n5, 4, 3, 2, 1, sampai booming

8114
07:49:07,861 --> 07:49:10,181
semuanya selesai di bagian paling akhir.

8115
07:49:10,181 --> 07:49:13,561
Jadi ini hanyalah salah satu cara\nmengekspresikan apa dalam kode semu

8116
07:49:13,561 --> 07:49:17,401
kami melakukannya sedikit lebih organik\n

8117
07:49:17,401 --> 07:49:19,781
mengajukan diri di antara penonton.

8118
07:49:19,780 --> 07:49:24,661
Jadi jika kita mempertimbangkan\efisiensi algoritma ini

8119
07:49:24,661 --> 07:49:27,091
mungkin mengabstraksikannya\nsekarang sebagai sekumpulan pintu

8120
07:49:27,091 --> 07:49:31,320
dimana paling kiri lagi selalu\n

8121
07:49:31,320 --> 07:49:34,710
atau setara dengan detik terakhir\n

8122
07:49:34,710 --> 07:49:38,911
adalah n dikurangi 3 dimana n mungkin\nmenjadi 8 atau apa pun

8123
07:49:38,911 --> 07:49:43,980
bagaimana kita memikirkan atau mengukur\n

8124
07:49:46,591 --> 07:49:49,591
Maksud saya, masih banyak\nlangkah yang harus ditambahkan.

8125
07:49:49,591 --> 07:49:53,491
Mungkin lebih dari n, kan,\n

8126
07:49:54,390 --> 07:49:59,100
Rasanya seperti n tambah n\nminus 1 tambah n minus 2.

8127
07:50:01,440 --> 07:50:04,980
Kami memiliki seluruh\ntim di orkestra sekarang.

8128
07:50:04,980 --> 07:50:09,541
Izinkan saya mengusulkan agar kita memikirkannya sekarang\n

8129
07:50:09,541 --> 07:50:13,710
Jadi pertama kali, saya harus\nmelihat n sukarelawan yang berbeda.

8130
07:50:13,710 --> 07:50:17,490
n dalam hal ini adalah 8, tetapi secara umum,\n

8131
07:50:17,491 --> 07:50:19,591
untuk memutuskan siapa yang terkecil.

8132
07:50:19,591 --> 07:50:21,631
Dan benar saja, Celeste\nberada di urutan paling akhir.

8133
07:50:21,631 --> 07:50:23,463
Dia kebetulan berada jauh\nke kanan.

8134
07:50:23,463 --> 07:50:27,870
Namun saya baru mengetahuinya setelah saya melihat\namun ke-8 atau n sukarelawan.

8135
07:50:27,870 --> 07:50:30,240
Jadi itu membutuhkan n langkah pertama.

8136
07:50:30,241 --> 07:50:33,631
Namun setelah daftarnya ditukar\ninke tempat yang tepat, maka

8137
07:50:33,631 --> 07:50:37,651
masalah saya dengan ukuran n minus 1,\ndan saya punya n minus 1 orang lainnya

8138
07:50:40,230 --> 07:50:44,186
Lalu setelah itu n dikurangi 2 ditambah\n

8139
07:50:44,186 --> 07:50:45,631
titik sampai saya memiliki satu langkah terakhir.

8140
07:50:45,631 --> 07:50:48,820
Dan sudah jelas bahwa aku hanya\nmemiliki satu manusia tersisa untuk dipertimbangkan.

8141
07:50:48,820 --> 07:50:51,541
Jadi kita mungkin akan melambaikan tangan pada\nini dengan sedikit elipsis

8142
07:50:51,541 --> 07:50:54,761
dan ucapkan saja dot dot dot\nplus 1 untuk langkah terakhir.

8143
07:50:54,760 --> 07:50:56,251
Sekarang, apa sebenarnya yang dimaksud dengan hal ini?

8144
07:50:56,251 --> 07:50:57,841
Nah, di sinilah Anda\nmungkin berpikir kembali

8145
07:50:57,841 --> 07:50:59,760
buku teks matematika\atau fisika SMA Anda itu

8146
07:50:59,760 --> 07:51:03,001
memiliki lembar contekan kecil di bagian akhir\n

8147
07:51:03,001 --> 07:51:05,850
Hal itu terjadi\ntidak terjadi secara matematis

8148
07:51:05,850 --> 07:51:09,480
n kali n ditambah 1 semuanya dibagi 2.

8149
07:51:09,480 --> 07:51:13,050
Itu saja yang terulang kembali,\n

8150
07:51:13,050 --> 07:51:15,661
Jadi jika Anda yakin bahwa\nmatematika itu benar, ayo

8151
07:51:15,661 --> 07:51:19,890
sekarang kalikan ini\nsecara matematis.

8152
07:51:19,890 --> 07:51:26,280
Itu n kuadrat ditambah n dibagi 2 atau\n

8153
07:51:26,280 --> 07:51:29,251
Dan di sinilah kita memulai\n

8154
07:51:29,251 --> 07:51:34,440
Sejujurnya, saat n menjadi benar-benar\n

8155
07:51:34,440 --> 07:51:39,300
atau satu miliar laman web di penelusuran Google\n

8156
07:51:39,300 --> 07:51:41,760
akan menjadi\nyang paling penting secara matematis

8157
07:51:43,561 --> 07:51:46,201
Apakah n kuadrat dibagi\n2 faktor dominannya

8158
07:51:46,201 --> 07:51:48,620
atau apakah n dibagi 2\nfaktor dominan?

8159
07:51:50,355 --> 07:51:51,480
DAVID J. MALAN: Ya, n kuadrat.

8160
07:51:51,480 --> 07:51:53,650
Maksudku, tidak peduli apa n\nis-- dan semakin besar ukurannya

8161
07:51:53,651 --> 07:51:56,941
semakin besar menaikkannya menjadi\npangkat 2.

8162
07:51:57,690 --> 07:52:00,630
Mari kita lambaikan tangan saja\nkarena pada akhirnya

8163
07:52:00,631 --> 07:52:04,140
ketika n menjadi sangat besar, maka yang dominan\n

8164
07:52:04,890 --> 07:52:08,650
Bahkan terbagi 2, seperti yang saya klaim tadi\n

8165
07:52:08,651 --> 07:52:11,320
dua garis lurus jika Anda\nterus memperkecil tampilannya

8166
07:52:11,320 --> 07:52:16,120
tampak sama ketika n cukup besar,\n

8167
07:52:16,850 --> 07:52:21,490
Jadi bisa dikatakan seorang ilmuwan komputer\n

8168
07:52:21,491 --> 07:52:24,221
pada urutan n langkah kuadrat.

8169
07:52:24,221 --> 07:52:25,871
Itu merupakan penyederhanaan yang berlebihan.

8170
07:52:25,870 --> 07:52:28,960
Jika kita benar-benar menjumlahkannya, sebenarnya langkahnya sebanyak ini-- n

8171
07:52:28,960 --> 07:52:30,970
kuadrat dibagi 2 ditambah n atas 2.

8172
07:52:30,971 --> 07:52:34,781
Tapi sekali lagi, kalau kita mau saja bisa\n

8173
07:52:34,780 --> 07:52:38,170
kinerjanya, menurut saya itu akan\n

8174
07:52:38,170 --> 07:52:44,080
istilah pesanan untuk memahami apa\n

8175
07:52:44,080 --> 07:52:46,900
atau seperti apa tampilan grafisnya.

8176
07:52:46,901 --> 07:52:50,531
Baiklah, jadi dengan itu,\nkita dapat mendeskripsikan bubble sort

8177
07:52:52,151 --> 07:52:56,061
maaf, pilihannya seperti\nberada di O besar dari n kuadrat.

8178
07:52:56,061 --> 07:53:01,391
Namun bagaimana jika kita pertimbangkan sekarang\n

8179
07:53:01,390 --> 07:53:03,431
berbicara tentang batas bawah?

8180
07:53:03,431 --> 07:53:07,666
Dalam kasus terbaik, berapa\nlangkah yang dilakukan pengurutan seleksi?

8181
07:53:07,666 --> 07:53:09,041
Nah, di sini, kita memerlukan konteks.

8182
07:53:09,041 --> 07:53:11,681
Misalnya, apa yang dimaksud dengan\nkasus terbaik atau kasus terburuk

8183
07:53:13,451 --> 07:53:16,960
Seperti, apa yang bisa Anda bayangkan artinya\n

8184
07:53:16,960 --> 07:53:20,011
mencoba mengurutkan banyak angka?

8185
07:53:20,011 --> 07:53:21,460
Saya membawa seluruh kru ke sini lagi.

8186
07:53:21,760 --> 07:53:23,411
HADIRIN: Mereka pasti sudah disortir.

8187
07:53:23,411 --> 07:53:24,730
DAVID J. MALAN: Baiklah, sudah\nsudah diurutkan, kan?

8188
07:53:24,730 --> 07:53:28,390
Saya tidak bisa membayangkan skenario yang lebih baik\n

8189
07:53:28,390 --> 07:53:30,400
tapi itu sudah disortir untukku.

8190
07:53:30,401 --> 07:53:35,531
Namun apakah algoritme ini\nmemanfaatkan fakta tersebut dalam praktiknya?

8191
07:53:35,530 --> 07:53:38,470
Meskipun semua manusia\nberbaris dari 0 hingga 7

8192
07:53:38,471 --> 07:53:41,291
Saya cukup yakin saya akan\nmulai dengan cukup naif di sini.

8193
07:53:41,291 --> 07:53:43,031
Dan ya, Celeste kebetulan ada di sini.

8194
07:53:43,030 --> 07:53:47,736
Tapi aku hanya tahu dia perlu berada di sini\n

8195
07:53:47,736 --> 07:53:50,361
Lalu saya akan menyadari,\nyah, itu hanya membuang-buang waktu.

8196
07:53:51,640 --> 07:53:53,861
Tapi lalu apa yang akan saya lakukan?

8197
07:53:53,861 --> 07:53:57,221
Saya akan mengabaikan posisinya\n

8198
07:53:57,221 --> 07:54:00,621
Saya akan melakukan hal yang sama sekarang\n

8199
07:54:00,620 --> 07:54:03,681
Jadi setiap kali saya melewatinya,\nSaya tidak melakukan banyak pekerjaan berguna.

8200
07:54:03,681 --> 07:54:06,221
Namun saya melakukan\nperbandingan itu karena saya

8201
07:54:06,221 --> 07:54:09,861
tidak tahu sampai saya melakukan pekerjaan itu\n

8202
07:54:09,861 --> 07:54:14,800
Jadi ini sepertinya menyiratkan bahwa\n

8203
07:54:14,800 --> 07:54:18,100
skenario, bahkan, batas bawah pada\n

8204
07:54:20,201 --> 07:54:21,831
DAVID J. MALAN: Sedikit lebih keras?

8205
07:54:22,771 --> 07:54:24,611
DAVID J. MALAN: Ini masih\nkuadratkan

8206
07:54:24,611 --> 07:54:30,181
sebenarnya, karena kode yang saya berikan\n

8207
07:54:30,181 --> 07:54:34,620
dari skenario mana pun karena\nit terus berlanjut tanpa berpikir panjang

8208
07:54:36,131 --> 07:54:41,371
Jadi dalam hal ini, ya, saya akan mengklaimnya\n

8209
07:54:43,190 --> 07:54:44,940
Jadi itulah jenis\nangka yang harus dikalahkan.

8210
07:54:44,940 --> 07:54:48,120
Sepertinya batas atas\nd bawah pilihan

8211
07:54:50,491 --> 07:54:52,741
Oleh karena itu, kami juga dapat mendeskripsikan\npengurutan pilihan

8212
07:54:52,741 --> 07:54:54,078
sebagai dalam theta n kuadrat.

8213
07:54:54,078 --> 07:54:56,911
Itu algoritma pertama yang kami miliki\n

8214
07:54:56,911 --> 07:54:59,010
artinya agak lambat.

8215
07:54:59,010 --> 07:55:00,955
Maksud saya, mungkin\nalgoritma lain lebih lambat

8216
07:55:00,955 --> 07:55:02,580
tapi ini bukan titik awal yang terbaik.

8217
07:55:03,730 --> 07:55:07,291
Ya, ada alasan mengapa saya membimbing kita\n

8218
07:55:07,291 --> 07:55:09,791
Meskipun Anda mengusulkannya secara lisan\ndalam urutan yang berbeda

8219
07:55:09,791 --> 07:55:12,960
algoritma kedua yang kami lakukan ini\numumnya dikenal sebagai bubble sort.

8220
07:55:12,960 --> 07:55:15,570
Dan saya sengaja menggunakan\nkata itu beberapa waktu yang lalu

8221
07:55:15,570 --> 07:55:19,291
mengatakan bahwa nilai-nilai besar\nmudah berkembang ke arah kanan

8222
07:55:19,291 --> 07:55:22,351
untuk menangkap fakta bahwa,\nmemang, algoritme ini berhasil

8223
07:55:22,980 --> 07:55:25,230
Namun mari kita pertimbangkan apakah\ini lebih baik atau lebih buruk.

8224
07:55:25,230 --> 07:55:28,320
Jadi di sini, kita mempunyai kode\nsemu untuk pengurutan gelembung.

8225
07:55:28,320 --> 07:55:30,291
Anda juga dapat menulis ini\ndengan cara yang berbeda.

8226
07:55:30,291 --> 07:55:32,911
Tapi mari kita pertimbangkan\napa yang kita lakukan di atas panggung.

8227
07:55:32,911 --> 07:55:36,210
Kami mengulangi hal berikut\nn dikurangi 1 kali.

8228
07:55:36,210 --> 07:55:39,751
Setidaknya kami melakukan inisialisasi, meskipun\n

8229
07:55:39,751 --> 07:55:44,791
variabel seperti i dari 0\nhingga n dikurangi 2, n dikurangi 2.

8230
07:55:44,791 --> 07:55:46,171
Dan kemudian saya menanyakan pertanyaan ini.

8231
07:55:46,170 --> 07:55:52,830
Jika angka dalam kurung i dan angka\n

8232
07:55:54,611 --> 07:55:56,941
Jadi sekali lagi, saya melakukannya secara lebih\nintuitif dengan menunjuk

8233
07:55:56,940 --> 07:55:59,310
tapi ini akan menjadi sebuah cara,\ndengan sedikit kode semu

8234
07:55:59,311 --> 07:56:00,508
untuk menggambarkan apa yang sedang terjadi.

8235
07:56:00,508 --> 07:56:03,091
Namun perhatikan bahwa saya melakukan sesuatu\na sedikit berbeda di sini.

8236
07:56:03,091 --> 07:56:07,091
Saya mengulangi dari if\nequals 0 hingga n minus 2.

8237
07:56:07,591 --> 07:56:11,100
Nah, jika saya membandingkan dua\nbenda, tangan kiri dan tangan kanan

8238
07:56:11,100 --> 07:56:13,050
Saya masih ingin memulai dari 0.

8239
07:56:13,050 --> 07:56:15,810
Namun saya tidak ingin melanjutkan ke n minus 1

8240
07:56:15,811 --> 07:56:19,409
karena dengan begitu, saya akan melewati\nbatas array saya, yang mana

8241
07:56:19,951 --> 07:56:22,441
Saya ingin memastikan bahwa\ntangan kiri saya-- saya, jika Anda mau--

8242
07:56:22,440 --> 07:56:27,181
berhenti di n dikurangi 2 sehingga ketika\nsaya menambahkan 1 di kode semu saya

8243
07:56:27,181 --> 07:56:29,971
Saya melihat dua\elemen terakhir, bukan elemen terakhir

8244
07:56:31,260 --> 07:56:33,093
Itu sebenarnya kesalahan\npemrograman yang umum

8245
07:56:33,094 --> 07:56:34,980
yang pasti\nakan segera kami capai dengan pergi

8246
07:56:34,980 --> 07:56:37,240
melampaui batas array Anda.

8247
07:56:37,241 --> 07:56:43,891
Jadi kode semu ini memungkinkan saya untuk\n

8248
07:56:43,890 --> 07:56:46,091
dan menukarnya jika rusak.

8249
07:56:46,091 --> 07:56:50,550
Mengapa saya mengulangi semuanya\n dikurangi 1 kali?

8250
07:56:50,550 --> 07:56:55,861
Misalnya, mengapa tidak cukup\nhanya melakukan perulangan ini di sini?

8251
07:56:55,861 --> 07:56:59,341
Pikirkan apa yang terjadi dengan Celeste.

8252
07:56:59,341 --> 07:57:03,841
Mengapa saya mengulangi semuanya\nminus 1 kali?

8253
07:57:12,216 --> 07:57:14,591
DAVID J. MALAN: Memang benar, dan saya pikir\njika saya bisa merangkumnya secara akurat

8254
07:57:14,591 --> 07:57:16,001
pikirkan kembali Celeste lagi.

8255
07:57:16,001 --> 07:57:18,491
Dan saya minta maaf karena terus memanggil\non Anda sebagai nomor 0 kami.

8256
07:57:18,491 --> 07:57:22,031
Setiap kali melalui bubble\nsort, dia hanya bergerak satu langkah.

8257
07:57:22,030 --> 07:57:25,640
Jadi totalnya, jika ada n\nlokasi, pada akhirnya

8258
07:57:25,640 --> 07:57:30,291
dia perlu bergerak n dikurangi 1 langkah untuk mendapatkan\n

8259
07:57:30,291 --> 07:57:34,691
Jadi loop dalam ini, jika Anda\n

8260
07:57:34,690 --> 07:57:37,060
itu hanya memperbaiki beberapa masalah.

8261
07:57:37,061 --> 07:57:40,511
Namun hal ini tidak menyelesaikan semua masalah\n

8262
07:57:42,021 --> 07:57:45,771
Lalu bagaimana kita menghitung\nwaktu berjalan algoritma ini?

8263
07:57:45,771 --> 07:57:49,030
Salah satu cara untuk melihatnya adalah dengan\n

8264
07:57:49,030 --> 07:57:53,530
Loop luar berulang n\nminus 1 kali menurut definisi.

8265
07:57:54,850 --> 07:58:00,320
Perulangan bagian dalam, perulangan for,\njuga mengulangi n dikurangi 1 kali.

8266
07:58:00,820 --> 07:58:02,901
Karena bergerak dari 0 ke n dikurangi 2.

8267
07:58:02,901 --> 07:58:06,941
Dan jika hal itu sulit untuk dipikirkan,\n

8268
07:58:06,940 --> 07:58:09,681
jika Anda hanya menambahkan 1 pada\nkedua ujung rumus.

8269
07:58:09,681 --> 07:58:14,271
Jadi itu berarti Anda melakukan n\nminus 1 hal n minus 1 kali.

8270
07:58:14,271 --> 07:58:16,901
Jadi saya benar-benar mengalikan berapa\nkali loop luar

8271
07:58:16,901 --> 07:58:20,320
dijalankan berapa kali\n

8272
07:58:20,320 --> 07:58:23,681
semacam metode FOIL n dikurangi 1 kuadrat.

8273
07:58:23,681 --> 07:58:25,661
Dan saya bisa melipatgandakan\nsemuanya.

8274
07:58:25,661 --> 07:58:28,690
Baiklah, mari kita pertimbangkan hal ini\na sedikit lebih metodis di sini.

8275
07:58:28,690 --> 07:58:32,742
Jika saya mempunyai n minus 1 di\luar, n dikurangi 1 di dalam--

8276
07:58:32,742 --> 07:58:33,950
mari kita lanjutkan dan FOIL ini.

8277
07:58:33,951 --> 07:58:37,541
Jadi n kuadrat dikurangi n\nminus n ditambah 1, gabungkan

8278
07:58:37,541 --> 07:58:40,931
suku-suku sejenis-- n kuadrat dikurangi 2n ditambah 1.

8279
07:58:40,931 --> 07:58:45,831
Dan sekarang istilah mana yang jelas\n

8280
07:58:46,811 --> 07:58:48,081
DAVID J. MALAN: --n kuadrat.

8281
07:58:48,080 --> 07:58:50,620
Jadi ya, meskipun\nminus 2n adalah hal yang baik

8282
07:58:50,620 --> 07:58:53,021
karena mengurangi\nbeberapa waktu yang diperlukan

8283
07:58:53,021 --> 07:58:56,050
ditambah 1 bukanlah hal yang besar,\n

8284
07:58:56,050 --> 07:58:58,480
n menjadi sangat besar, seperti\nin jutaan atau miliaran

8285
07:58:58,480 --> 07:59:02,870
tentu saja, gelembung itu mengurutkan 2\nis pada urutan n kuadrat.

8286
07:59:02,870 --> 07:59:05,470
Ini tidak sama persis\nas dengan jenis pilihan.

8287
07:59:05,471 --> 07:59:07,390
Namun seiring bertambahnya usia,\njujur saja, kami hampir tidak mampu

8288
07:59:07,390 --> 07:59:09,890
kemungkinan besar akan dapat melihat\nperbedaannya.

8289
07:59:09,890 --> 07:59:13,550
Jadi bisa juga dikatakan\nberada pada urutan n kuadrat.

8290
07:59:13,550 --> 07:59:18,890
Dan jika kita pertimbangkan sekarang yang lebih rendah\n

8291
07:59:18,890 --> 07:59:23,080
di sinilah segala hal menjadi\nberpotensi menarik.

8292
07:59:23,080 --> 07:59:28,810
Yang mungkin Anda klaim adalah sedang berjalan\n

8293
07:59:28,811 --> 07:59:32,591
Dan kasus terbaik, menurut saya, adalah ketika\n

8294
07:59:32,591 --> 07:59:35,081
Apakah kode semu kita akan\nmempertimbangkan hal tersebut?

8295
07:59:43,403 --> 07:59:45,070
DAVID J. MALAN: Yes, and that's the key word.

8296
07:59:45,070 --> 07:59:49,510
Singkatnya, dalam pengurutan gelembung, saya punya\n

8297
07:59:49,510 --> 07:59:52,120
jangan melihat semua n elemen,\nitulah yang secara teori saya lihat

8298
07:59:52,120 --> 07:59:53,620
hanya menebak-nebak apakah sudah beres atau belum.

8299
07:59:53,620 --> 07:59:55,841
Seperti, saya jelas\secara intuitif harus melihatnya

8300
07:59:55,841 --> 07:59:58,751
di setiap elemen untuk memutuskan ya\atau tidak, urutannya benar.

8301
07:59:58,751 --> 08:00:01,541
Dan kode semu asli saya\nnamun cukup naif.

8302
08:00:01,541 --> 08:00:07,001
It's just going to blindly go back and\n

8303
08:00:08,170 --> 08:00:10,120
But what if I add a\nbit of an optimization

8304
08:00:10,120 --> 08:00:12,370
yang mungkin Anda lihat sekilas\non slide beberapa saat yang lalu

8305
08:00:12,370 --> 08:00:15,970
dimana jika saya membandingkan dua orang dan saya\n

8306
08:00:15,971 --> 08:00:18,911
jangan menukarnya, dan saya akan menelusuri\nseluruh daftarnya untuk membandingkannya

8307
08:00:18,911 --> 08:00:22,480
setiap pasangan\norang yang berdekatan, dan saya tidak melakukan pertukaran

8308
08:00:22,480 --> 08:00:25,181
itu bukan hanya\nnaif tapi juga bodoh

8309
08:00:25,181 --> 08:00:28,721
untuk melakukan proses yang sama lagi\n

8310
08:00:28,721 --> 08:00:31,511
Saya tidak akan mengambil\nkeputusan lain.

8311
08:00:31,510 --> 08:00:34,100
Aku tidak akan melakukan apa pun\na lagi, tidak melakukan apa pun lagi.

8312
08:00:34,100 --> 08:00:37,510
Jadi pada saat itu, itu akan menjadi hal yang bodoh,\n

8313
08:00:38,570 --> 08:00:42,431
Jadi jika saya memodifikasi kode semu kita dengan\n

8314
08:00:44,411 --> 08:00:50,561
Di dalam kode semu yang sama, apa\n

8315
08:00:50,561 --> 08:00:54,371
Seperti berhenti, sebelum waktunya sebelum\nperulangan selesai berjalan.

8316
08:00:54,370 --> 08:00:57,740
Salah satu loop telah selesai\nsesuai lekukan di sini.

8317
08:00:57,741 --> 08:01:00,551
Tetapi jika saya melakukan perulangan dari\nkiri ke kanan dan I

8318
08:01:00,550 --> 08:01:03,041
belum melakukan pertukaran, yang\nAnda anggap hanya sekedar keberadaan

8319
08:01:03,041 --> 08:01:06,611
satu variabel lain yang ditambah plus\n

8320
08:01:07,181 --> 08:01:09,100
jika saya tidak melakukan pertukaran\ndari kiri ke kanan

8321
08:01:09,100 --> 08:01:11,600
Saya juga tidak akan melakukan pertukaran apa pun\nlain kali.

8322
08:01:11,600 --> 08:01:14,390
Jadi mari kita berhenti pada saat itu.

8323
08:01:14,390 --> 08:01:16,990
Dan itu bisa dikatakan dalam\nkasus terbaik, jika Anda mau

8324
08:01:16,991 --> 08:01:20,771
ketika daftar sudah diurutkan,\n

8325
08:01:20,771 --> 08:01:25,820
mungkin memang menjadi omega dari n\njika Anda menambahkan pengoptimalan itu

8326
08:01:25,820 --> 08:01:28,420
sehingga menyebabkan arus pendek\semua itu tidak efisien

8327
08:01:28,420 --> 08:01:34,190
perulangan untuk melakukannya hanya\nsering diperlukan.

8328
08:01:34,190 --> 08:01:36,640
Izinkan saya berhenti sejenak untuk melihat apakah\nada pertanyaan di sini.

8329
08:01:37,552 --> 08:01:46,399
AUDIENCE: [Tak terdengar] untuk mengoptimalkan\n

8330
08:01:46,399 --> 08:01:47,441
DAVID J. MALAN: Pertanyaan bagus.

8331
08:01:47,440 --> 08:01:53,050
Jika waktu pemilihan sortir sedang berjalan\n

8332
08:01:53,050 --> 08:01:58,841
dari n kuadrat tetapi pengurutan pilihan ada di\n

8333
08:01:58,841 --> 08:02:01,661
dalam omega dari n, mana yang terdengar lebih baik--

8334
08:02:01,661 --> 08:02:04,870
Menurut saya, jika boleh, haruskah kita\nselalu menggunakan pengurutan gelembung?

8335
08:02:04,870 --> 08:02:09,040
Ya, jika kami berpikir bahwa kami\ndapat memperoleh manfaat seiring berjalannya waktu

8336
08:02:09,041 --> 08:02:13,611
dari banyak kasus\nskenario bagus atau skenario kasus terbaik.

8337
08:02:13,611 --> 08:02:15,701
Namun, tujuan yang ada\nhanya tinggal sedikit lagi

8338
08:02:15,701 --> 08:02:17,841
akan melakukan\nlebih baik daripada keduanya.

8339
08:02:17,841 --> 08:02:19,690
Jadi tahan pertanyaan itu\nsebentar lagi.

8340
08:02:20,190 --> 08:02:25,717
HADIRIN: [Tak terdengar] n dikurangi 1?

8341
08:02:27,440 --> 08:02:31,251
Jadi saya bilang omega dari n, tapi apakah secara teknis omega dari n dikurangi 1?

8342
08:02:31,251 --> 08:02:34,471
Mungkin, tapi sekali lagi, kami\nmembuang istilah tingkat rendah.

8343
08:02:34,471 --> 08:02:38,031
Dan itu merupakan keuntungan karena kami\n

8344
08:02:38,030 --> 08:02:41,540
Sama seperti yang saya plot dengan\ngrafik hijau, kuning, dan merah

8345
08:02:41,541 --> 08:02:44,341
Saya hanya ingin memahami\nbentuk algoritma ini

8346
08:02:44,341 --> 08:02:47,690
sehingga ketika n menjadi sangat\nbesar, pilihan mana yang harus dipilih

8347
08:02:47,690 --> 08:02:49,545
akan menjadi hal yang paling penting?

8348
08:02:49,545 --> 08:02:51,920
Pada akhirnya, hal tersebut\namun sangat masuk akal

8349
08:02:51,920 --> 08:02:53,820
untuk menggunakan pengurutan pilihan\atau pengurutan gelembung jika Anda

8350
08:02:53,820 --> 08:02:56,570
tidak punya banyak data karena\n

8351
08:02:56,570 --> 08:02:58,881
Ya Tuhan, komputer kita\nsaat ini 1 gigahertz

8352
08:02:58,881 --> 08:03:02,800
2 gigahertz, 1 miliar data per\n

8353
08:03:02,800 --> 08:03:05,300
Namun jika kita memiliki kumpulan data yang besar,\namun kita akan melakukannya nanti

8354
08:03:05,300 --> 08:03:07,830
dan seperti yang mungkin Anda lakukan di dunia nyata,\n

8355
08:03:07,830 --> 08:03:09,890
maka Anda ingin\nlebih bijaksana.

8356
08:03:09,890 --> 08:03:11,600
Dan ke sanalah tujuan kita hari ini.

8357
08:03:11,600 --> 08:03:14,450
Baiklah, jadi mari kita lihat\nini divisualisasikan sedikit.

8358
08:03:14,451 --> 08:03:16,370
Sebentar lagi, saya akan\nmengganti layar di sini

8359
08:03:16,370 --> 08:03:21,710
untuk membuka\nalat visualisasi kecil yang akan diberikan kepada kita

8360
08:03:21,710 --> 08:03:25,280
gambaran tentang bagaimana hal-hal ini sebenarnya\n

8361
08:03:25,280 --> 08:03:27,181
daripada yang mampu\ndilakukan manusia kita di sini, di atas panggung.

8362
08:03:27,181 --> 08:03:31,940
Jadi inilah visualisasi lain dari a\n

8363
08:03:31,940 --> 08:03:35,030
Bilah pendek berarti angka kecil,\nsemua bilah berarti angka besar.

8364
08:03:35,030 --> 08:03:37,280
Jadi daripada menampilkan\number pada batang tubuh mereka di sini

8365
08:03:37,280 --> 08:03:42,050
kami hanya memiliki batang yang kecil atau tinggi\n

8366
08:03:42,050 --> 08:03:44,990
Izinkan saya melanjutkan, dan saya\nmengonfigurasinya terlebih dahulu

8367
08:03:44,991 --> 08:03:46,411
untuk beroperasi agak cepat.

8368
08:03:46,411 --> 08:03:49,911
Mari lanjutkan dan lakukan seleksi\nurutkan dengan mengklik tombol ini.

8369
08:03:49,911 --> 08:03:52,580
Dan Anda akan melihat beberapa batang merah muda melintas.

8370
08:03:52,580 --> 08:03:56,000
Dan itu seperti saya berjalan\nkiri dan kanan, kiri dan kanan

8371
08:03:56,001 --> 08:03:58,501
untuk memilih angka terkecil berikutnya.

8372
08:03:58,501 --> 08:04:01,940
Jadi, apa yang akan Anda lihat terjadi\n

8373
08:04:01,940 --> 08:04:04,880
adalah Celeste, jika Anda mau, dan\nsemua angka kecil lainnya

8374
08:04:04,881 --> 08:04:08,390
muncul di sebelah kiri sementara\n

8375
08:04:10,170 --> 08:04:13,537
Jadi sekali lagi, kita tidak perlu lagi\nmenyentuh angka yang lebih kecil di sini.

8376
08:04:13,538 --> 08:04:16,370
Jadi itu sebabnya masalahnya bertambah\n

8377
08:04:17,151 --> 08:04:20,781
Namun Anda dapat memperhatikannya sekarang\nsecara visual, lihat berapa kali

8378
08:04:22,280 --> 08:04:25,070
Inilah sebabnya mengapa benda\nyang n kuadrat cenderung

8379
08:04:25,070 --> 08:04:29,190
tidak disukai jika dapat dihindari karena\n

8380
08:04:29,690 --> 08:04:31,970
Saat saya berjalan melewatinya, saya\nterusan menunjuk pada manusia yang sama

8381
08:04:34,021 --> 08:04:37,111
Jadi mari kita lihat apakah pengurutan gelembung terlihat\tidak terasa sedikit berbeda.

8382
08:04:37,111 --> 08:04:40,548
Biarkan saya mengacak ulang hal tersebut, dan biarkan\n

8383
08:04:40,548 --> 08:04:43,341
Dan seperti yang mungkin Anda simpulkan, ada\n

8384
08:04:43,341 --> 08:04:44,633
tidak semuanya akan kita lihat.

8385
08:04:46,100 --> 08:04:48,931
Warna merah jambunya sama, tapi hasilnya berbeda.

8386
08:04:48,931 --> 08:04:52,221
Ini adalah dua batang berwarna merah muda yang ditampilkan\naga berulang kali untuk dibandingkan

8387
08:04:53,911 --> 08:04:57,411
Dan Anda akan melihat yang terbesar\n

8388
08:04:57,411 --> 08:05:02,480
ke kanan, tapi angka\nyang lebih kecil, seperti angka 0 kita

8389
08:05:02,480 --> 08:05:04,648
hanya perlahan-lahan mulai berjalan.

8390
08:05:06,561 --> 08:05:09,261
Dan perlu waktu\nuntuk sampai ke kiri.

8391
08:05:09,260 --> 08:05:12,920
Dan di sini juga, perhatikan berapa\nkali bilah yang sama

8392
08:05:12,920 --> 08:05:16,950
menjadi merah muda, berapa kali\n

8393
08:05:17,960 --> 08:05:21,501
Karena ini hanya memecahkan satu\nmasalah pada satu waktu pada setiap lintasan.

8394
08:05:21,501 --> 08:05:25,078
Dan setiap kali kita melakukan itu, kita melangkah\n

8395
08:05:25,078 --> 08:05:28,161
Dan sekarang memang benar, saya bisa mempercepatnya\n

8396
08:05:28,161 --> 08:05:32,480
tapi ya Tuhan, ini hanya, apa, seperti\n

8397
08:05:33,501 --> 08:05:36,681
Seperti inilah tampilan dan rasanya n kuadrat\n.

8398
08:05:36,681 --> 08:05:38,931
Dan sekarang saya hanya mencoba\nmenemukan kata-kata untuk diucapkan

8399
08:05:38,931 --> 08:05:40,640
sampai kita mencapai garis finish di sini.

8400
08:05:40,640 --> 08:05:43,611
Misalnya, ini akan mengganggu jika\nini adalah kecepatan penyortiran

8401
08:05:43,611 --> 08:05:47,494
dan inilah sebabnya aku diam-diam\n

8402
08:05:47,493 --> 08:05:49,911
karena ini akan memerlukan\njumlah langkah yang menjengkelkan

8403
08:05:49,911 --> 08:05:51,570
untuk mendapatkan itu untuknya.

8404
08:05:51,570 --> 08:05:54,530
Jadi kedua algoritma tersebut n kuadrat.

8405
08:05:54,530 --> 08:05:56,626
Bisakah kita melakukan hal yang lebih baik?

8406
08:05:56,626 --> 08:05:59,751
Nah, untuk menyimpan algoritma terbaik untuk\n

8407
08:06:00,251 --> 08:06:04,771
Dan ketika kami kembali, kami akan\ndo lebih baik daripada n kuadrat.

8408
08:06:06,841 --> 08:06:11,541
Jadi tantangan yang dihadapi adalah\ndo lebih baik daripada pengurutan seleksi

8409
08:06:11,541 --> 08:06:14,631
dan lebih baik daripada bubble sort\ndan idealnya tidak hanya sedikit

8410
08:06:14,631 --> 08:06:16,820
lebih baik tetapi pada dasarnya lebih baik.

8411
08:06:16,820 --> 08:06:20,330
Sama seperti di minggu ke-0, minggu ketiga\n itu

8412
08:06:20,330 --> 08:06:23,220
pada dasarnya\nlebih cepat daripada dua lainnya.

8413
08:06:23,221 --> 08:06:26,311
Jadi bisakah kita melakukan lebih baik daripada sesuatu\yang bukan urutan n kuadrat?

8414
08:06:26,311 --> 08:06:28,671
Baiklah, saya yakin kita bisa jika\nkita mulai melakukan pendekatan

8415
08:06:28,670 --> 08:06:30,440
masalahnya sedikit berbeda.

8416
08:06:30,440 --> 08:06:32,562
Hal-hal yang telah kami lakukan\nsejauh ini, sudah diketahui secara umum

8417
08:06:32,562 --> 08:06:34,520
sebagai perbandingan--\ndan tangkapan semacam itu

8418
08:06:34,521 --> 08:06:38,361
kenyataan bahwa kami melakukan hal besar\n

8419
08:06:38,361 --> 08:06:41,721
Dan Anda melihatnya secara vertikal\n

8420
08:06:41,721 --> 08:06:43,216
sedang dibandingkan lagi dan lagi.

8421
08:06:43,216 --> 08:06:45,591
Namun ada teknik\npemrograman ini, dan memang demikian adanya

8422
08:06:45,591 --> 08:06:48,501
teknik matematika\ndikenal sebagai rekursi

8423
08:06:48,501 --> 08:06:50,311
yang sebenarnya pernah kita lihat sebelumnya.

8424
08:06:50,311 --> 08:06:53,361
Dan ini adalah landasan\nblok atau model mental

8425
08:06:53,361 --> 08:06:56,661
kita dapat mengatasi masalah tersebut\nuntuk memecahkan masalah penyortiran

8426
08:06:56,661 --> 08:06:58,100
semacam secara mendasar berbeda.

8427
08:06:58,100 --> 08:07:00,980
Namun pertama-tama, mari kita lihat\dalam konteks yang lebih familiar.

8428
08:07:00,980 --> 08:07:07,550
Beberapa waktu yang lalu, saya mengusulkan\n semu ini

8429
08:07:07,550 --> 08:07:10,490
Dan perhatikan apa\nyang menarik dari kode ini

8430
08:07:10,491 --> 08:07:14,331
meskipun aku tidak menyebutkannya di\n

8431
08:07:14,330 --> 08:07:17,090
Seperti, saya mengklaim ini adalah\nan algoritma pencarian

8432
08:07:17,091 --> 08:07:21,111
namun sepertinya agak tidak adil\nsaya menggunakan pencarian kata kerja

8433
08:07:21,111 --> 08:07:23,320
di dalam algoritma untuk pencarian.

8434
08:07:23,320 --> 08:07:26,080
Ini seperti bahasa Inggris yang mendefinisikan sebuah kata dengan menggunakan kata tersebut.

8435
08:07:26,080 --> 08:07:28,210
Biasanya, Anda tidak boleh\nlolos begitu saja.

8436
08:07:28,210 --> 08:07:30,791
Namun ada\nyang menarik dari teknik ini

8437
08:07:30,791 --> 08:07:35,471
di sini karena meskipun\nsemua ini adalah algoritma pencarian

8438
08:07:35,471 --> 08:07:40,871
dan saya menggunakan algoritma saya sendiri untuk\n

8439
08:07:40,870 --> 08:07:42,880
fitur utama di sini\ntidak normal

8440
08:07:42,881 --> 08:07:46,031
terjadi dalam bahasa Inggris ketika Anda\nmendefinisikan sebuah kata dalam istilah sebuah kata

8441
08:07:46,030 --> 08:07:49,661
apakah itu saat saya mencari di sebelah kiri\n

8442
08:07:51,170 --> 08:07:52,450
Saya menggunakan algoritma yang sama.

8443
08:07:52,451 --> 08:07:55,421
Namun masalahnya, menurut\ndefinisinya, besarnya hanya separuhnya.

8444
08:07:55,420 --> 08:07:58,540
Jadi, hal ini tidak akan menjadi argumen yang berulang-ulang.

8445
08:07:58,541 --> 08:08:02,111
Pendekatan ini, dengan menggunakan\npenelusuran dalam pencarian

8446
08:08:02,111 --> 08:08:05,651
akan mengurangi masalahnya\n

8447
08:08:05,651 --> 08:08:08,541
satu pintu atau tidak ada pintu yang tersisa.

8448
08:08:08,541 --> 08:08:11,081
Jadi rekursi adalah\nteknik pemrograman

8449
08:08:11,080 --> 08:08:14,290
dimana suatu fungsi memanggil dirinya sendiri.

8450
08:08:14,291 --> 08:08:18,581
Dan kita belum melihatnya di C, dan\n

8451
08:08:18,580 --> 08:08:22,482
Namun di C, Anda dapat membuat\na pemanggilan fungsi itu sendiri.

8452
08:08:22,483 --> 08:08:24,190
Dan bentuk yang\nambilnya seperti secara harafiah

8453
08:08:24,190 --> 08:08:28,540
menggunakan nama fungsi di dalam\n

8454
08:08:28,541 --> 08:08:32,671
Kami sebenarnya telah melihat peluang\nuntuk hal ini sebelumnya juga.

8455
08:08:33,670 --> 08:08:35,920
Ini kode semu yang sama\nuntuk mencari seseorang

8456
08:08:35,920 --> 08:08:37,540
dalam buku telepon fisik yang sebenarnya.

8457
08:08:37,541 --> 08:08:40,061
Dan perhatikan garis kuning di sini.

8458
08:08:40,061 --> 08:08:44,171
Kami mendeskripsikan hal-hal tersebut di minggu ke-0\nas yang menimbulkan sebuah putaran, sebuah siklus.

8459
08:08:44,170 --> 08:08:48,670
Dan ini adalah pendekatan yang sangat prosedural,\n

8460
08:08:48,670 --> 08:08:50,830
sangat mekanis,\njika Anda mau, jelaskan

8461
08:08:50,830 --> 08:08:54,730
saya harus kembali ke baris ketiga untuk\ndo melakukan perulangan semacam ini.

8462
08:08:54,730 --> 08:08:59,111
Tapi sungguh, apa yang dilakukannya di\n

8463
08:08:59,111 --> 08:09:04,480
buku itu hanya menyuruhku mencari\n

8464
08:09:04,480 --> 08:09:08,260
Aku melakukannya secara lebih mekanis\nagatif dengan berkata pada diriku sendiri

8465
08:09:08,260 --> 08:09:09,850
nomor baris mana yang harus kembali.

8466
08:09:09,850 --> 08:09:12,760
Namun itu sama saja dengan sekadar memberi tahu\n

8467
08:09:12,760 --> 08:09:15,310
telusuri bagian kanan,\nkuncinya adalah bagian kiri

8468
08:09:15,311 --> 08:09:18,081
miliki dan bagian kanannya\nlebih kecil dari soal aslinya.

8469
08:09:18,080 --> 08:09:21,990
Akan menjadi bug jika saya hanya mengatakan cari\n

8470
08:09:21,991 --> 08:09:23,741
karena tentu saja, Anda\ntidak akan pernah sampai ke mana pun.

8471
08:09:23,741 --> 08:09:25,901
Namun jika Anda menelusuri\nseparuhnya, separuhnya, separuhnya

8472
08:09:25,901 --> 08:09:27,831
masalah menjadi semakin kecil.

8473
08:09:27,830 --> 08:09:34,540
Jadi, mari kita rumuskan ulang ponsel minggu ke-0\n

8474
08:09:34,541 --> 08:09:39,501
tetapi bersifat rekursif dalam\nalgoritme penelusuran ini

8475
08:09:39,501 --> 08:09:42,940
Pencarian biner AKA, sebelumnya\ndisebut membagi dan menaklukkan, saya

8476
08:09:42,940 --> 08:09:46,300
akan benar-benar menggunakan juga\npencarian kata kunci di sini.

8477
08:09:46,300 --> 08:09:48,310
Perhatikan salah satu manfaat\nmelakukan hal ini adalah

8478
08:09:48,311 --> 08:09:51,159
semacam memperketat kodenya,\nmembuatnya sedikit lebih ringkas

8479
08:09:51,158 --> 08:09:53,201
meskipun itu semacam\nkeuntungan tambahan di sini.

8480
08:09:53,201 --> 08:09:56,710
Tapi ini juga merupakan cara yang elegan\nuntuk menggambarkannya

8481
08:09:56,710 --> 08:10:01,570
masalah dengan hanya menggunakan\na fungsi itu sendiri

8482
08:10:01,570 --> 08:10:05,690
untuk memecahkan teka-teki yang lebih kecil yang ada.

8483
08:10:05,690 --> 08:10:08,740
Jadi sekarang mari kita pertimbangkan\nmasalah umum, masalah yang lebih kecil

8484
08:10:08,741 --> 08:10:11,493
versi yang lebih baik dari versi yang pernah Anda coba\n-- piramida semacam ini

8485
08:10:11,492 --> 08:10:12,700
setengah piramida ini dari Mario.

8486
08:10:12,701 --> 08:10:15,431
Dan mari kita buang bagian\nyang tidak terlalu menarik

8487
08:10:15,431 --> 08:10:19,780
dan pertimbangkan saja bagaimana kita bisa melakukannya, naik\n

8488
08:10:19,780 --> 08:10:21,880
piramida rata kiri ini, jika Anda mau.

8489
08:10:21,881 --> 08:10:28,991
Izinkan saya ke sini, dan izinkan saya membuat\n

8490
08:10:28,991 --> 08:10:32,441
Dan dalam file ini, saya akan\nmelanjutkan dan menyertakan cs50.h.

8491
08:10:32,440 --> 08:10:36,251
Dan saya akan memasukkan stdio.h.

8492
08:10:36,251 --> 08:10:41,800
Dan tujuannya adalah untuk mengimplementasikan di\n

8493
08:10:41,800 --> 08:10:43,640
ini dan tepatnya piramida ini.

8494
08:10:43,640 --> 08:10:46,473
Jadi tidak ada string get atau apa pun itu--\n

8495
08:10:46,473 --> 08:10:49,760
dan cetak tepat\npiramida setinggi 4 ini di sini.

8496
08:10:50,931 --> 08:10:55,306
Baiklah, izinkan saya melanjutkan, dan yang utama,\n

8497
08:10:55,306 --> 08:10:56,931
baiklah, kita akan melanjutkan dan menggeneralisasikannya.

8498
08:10:56,931 --> 08:10:58,763
Mari kita lanjutkan dan menanyakan\nketinggian pengguna.

8499
08:10:58,763 --> 08:11:00,611
Kami menggunakan getint seperti sebelumnya.

8500
08:11:00,611 --> 08:11:02,861
Dan saya akan menyimpannya dalam\nvariabel bernama tinggi.

8501
08:11:02,861 --> 08:11:05,111
Lalu izinkan saya melanjutkan\ndan memanggil fungsinya

8502
08:11:05,111 --> 08:11:06,771
menggambar passing pada ketinggian itu.

8503
08:11:06,771 --> 08:11:09,401
Jadi untuk saat ini, izinkan saya\nasumsikan bahwa ada seseorang di suatu tempat

8504
08:11:09,401 --> 08:11:10,991
telah mengimplementasikan fungsi undian.

8505
08:11:10,991 --> 08:11:14,171
Dan inilah\nkeseluruhan program saya.

8506
08:11:14,170 --> 08:11:17,330
Baiklah, sayangnya, C tidak\ntidak dilengkapi dengan fungsi draw.

8507
08:11:17,330 --> 08:11:19,180
Jadi izinkan saya melanjutkan dan menciptakannya.

8508
08:11:19,181 --> 08:11:20,661
Itu tidak perlu mengembalikan nilai.

8509
08:11:20,661 --> 08:11:23,210
Itu hanya perlu mencetak\nsesuatu-- yang disebut efek samping.

8510
08:11:23,210 --> 08:11:27,820
Jadi saya akan mendefinisikan suatu fungsi\n

8511
08:11:27,820 --> 08:11:30,640
Saya akan menyebutnya n untuk nomor, tapi\nSaya bisa menyebutnya apa pun yang saya inginkan.

8512
08:11:32,210 --> 08:11:37,600
Saya akan melanjutkan dan mencetak\n

8513
08:11:38,350 --> 08:11:42,070
Fitur yang menonjol di sini adalah ini\n

8514
08:11:43,181 --> 08:11:46,600
Dan sekarang tingginya empat,\nbaris pertama mempunyai satu batu bata.

8515
08:11:49,631 --> 08:11:52,461
Itu pola bagus yang mungkin bisa saya wakili dalam kode.

8516
08:11:53,570 --> 08:11:55,751
Nah, bagaimana kalau 4 int yang saya dapat--

8517
08:11:55,751 --> 08:11:57,311
biarkan aku melakukannya dengan cara lama--

8518
08:11:58,091 --> 08:12:02,890
Dan kemudian i kurang dari atau sama dengan n.

8519
08:12:04,541 --> 08:12:08,171
jadi aku beralih dari 1 ke 4 hanya\nuntuk menjaga diriku tetap waras di sini.

8520
08:12:08,170 --> 08:12:11,050
Lalu di dalam\nloop ini, apa yang ingin saya lakukan?

8521
08:12:11,050 --> 08:12:12,920
Baiklah, izinkan saya membuatnya\nkonvensional.

8522
08:12:12,920 --> 08:12:16,330
Izinkan saya mengubahnya menjadi\nmenjadi 0 yang lebih konvensional

8523
08:12:16,330 --> 08:12:20,530
ke n meskipun mungkin tidak\n

8524
08:12:21,911 --> 08:12:24,326
Di baris 1, saya ingin dua\nbata, titik titik titik.

8525
08:12:26,890 --> 08:12:28,600
Tapi saya bersikap lebih konvensional.

8526
08:12:28,600 --> 08:12:32,800
Jadi pada setiap baris, berapa\nbata yang ingin saya cetak?

8527
08:12:32,800 --> 08:12:34,240
Yah, sepertinya aku ingin melakukan ini.

8528
08:12:34,241 --> 08:12:40,061
Untuk int j, misalnya, umum untuk\n

8529
08:12:40,061 --> 08:12:47,291
mari kita mulai j dari 0 dan lakukan ini\nselama kurang dari i ditambah 1

8530
08:12:50,861 --> 08:12:55,030
Sekali lagi, ketika saya sama dengan 0, itu\n

8531
08:12:55,030 --> 08:12:57,010
Jika i sama dengan 1, itulah baris kedua.

8532
08:12:57,791 --> 08:13:00,611
Dan dot dot dot, ketika i\nis 3, saya ingin empat batu bata.

8533
08:13:00,611 --> 08:13:03,820
Jadi sekali lagi, saya harus menambahkan 1 ke i\nuntuk mendapatkan jumlah total batu bata

8534
08:13:03,820 --> 08:13:05,480
yang ingin saya cetak ke layar.

8535
08:13:05,480 --> 08:13:10,181
Jadi di dalam loop for bersarang ini,\n

8536
08:13:13,330 --> 08:13:17,472
Saya akan menyimpan\nbaris baru untuk about di sini.

8537
08:13:17,473 --> 08:13:19,181
Baiklah, hal terakhir\nyang akan saya lakukan

8538
08:13:19,181 --> 08:13:22,911
adalah menyalin dan menempelkan prototipe\nat di bagian atas file.

8539
08:13:23,980 --> 08:13:27,088
Dan sekali lagi, ini\nsekarang adalah minggu pertama, minggu kedua.

8540
08:13:27,088 --> 08:13:29,381
Belum tentu\nterlintas dalam pikiran Anda secepat itu

8541
08:13:29,381 --> 08:13:32,741
mungkin untuk menambang setelah semua latihan ini,\n

8542
08:13:32,741 --> 08:13:35,591
dari apa yang Anda sendiri lakukan\nsudah siap untuk Mario-- mencetaknya

8543
08:13:35,591 --> 08:13:38,690
sebuah piramida yang semoga suatu saat\nakan terlihat seperti ini.

8544
08:13:38,690 --> 08:13:40,730
Jadi izinkan saya kembali ke kode saya.

8545
08:13:40,730 --> 08:13:44,920
Biarkan saya menjalankan iterasi make, dan\nbiarkan saya melakukan iterasi titik miring.

8546
08:13:46,901 --> 08:13:50,201
Tampaknya benar, dan mari kita asumsikan\n

8547
08:13:56,131 --> 08:13:59,820
Jadi ini memang contoh\noiterasi-- melakukan sesuatu

8548
08:14:02,521 --> 08:14:05,521
Seperti, saya benar-benar punya fungsi\n

8549
08:14:05,521 --> 08:14:09,931
Namun saya dapat memikirkan untuk menerapkan\n

8550
08:14:11,070 --> 08:14:13,080
Dan itu tidak sepenuhnya\nperlu untuk masalah ini

8551
08:14:13,080 --> 08:14:15,720
karena sejujurnya masalah ini\tidak terlalu rumit

8552
08:14:15,721 --> 08:14:17,747
untuk menyelesaikannya setelah Anda\nberlatih.

8553
08:14:17,747 --> 08:14:20,580
Tentu saja untuk pertama kalinya,\n

8554
08:14:20,580 --> 08:14:23,610
Tapi sekarang Anda sudah menjadi\nasosiasi, oke, baris pertama

8555
08:14:23,611 --> 08:14:26,370
dengan satu bata, baris kedua dengan dua\n

8556
08:14:27,701 --> 08:14:30,131
Namun bagaimana lagi\nkita bisa memikirkan masalah ini?

8557
08:14:30,131 --> 08:14:33,300
Struktur fisik ini,\nbatu bata ini, dalam arti tertentu

8558
08:14:33,300 --> 08:14:39,341
adalah struktur rekursif, sebuah struktur\n

8559
08:14:40,721 --> 08:14:45,961
Baiklah, jika saya menanyakan pertanyaan itu kepada Anda,\n

8560
08:14:45,960 --> 08:14:49,080
sepertinya Anda akan menunjuk,\ntentu saja, ke gambar ini.

8561
08:14:49,080 --> 08:14:55,530
Namun Anda juga bisa\ndengan cerdik berkata kepada saya, ya

8562
08:14:55,530 --> 08:15:00,600
sebenarnya ini adalah piramida dengan tinggi\n3 ditambah 1 baris tambahan.

8563
08:15:00,600 --> 08:15:02,597
Dan inilah argumen\siklusnya, bukan?

8564
08:15:02,598 --> 08:15:05,431
Biasanya agak menjengkelkan untuk dilakukan\n

8565
08:15:05,431 --> 08:15:07,561
karena Anda mendefinisikan sesuatu\ndari segi dirinya sendiri.

8566
08:15:07,561 --> 08:15:08,769
Berapa tinggi piramida 4?

8567
08:15:08,769 --> 08:15:12,541
Ya, itu piramida dengan\ntinggi 3 ditambah 1 baris lagi.

8568
08:15:12,541 --> 08:15:15,300
Namun kita dapat memanfaatkan\nlogika ini dalam kode.

8569
08:15:15,300 --> 08:15:16,951
Nah, apa itu piramida yang tingginya 3?

8570
08:15:16,951 --> 08:15:19,230
Ya, itu adalah piramida dengan\ntinggi 2 ditambah 1 baris lagi.

8571
08:15:19,230 --> 08:15:21,300
Baiklah, apa itu piramida yang tingginya 2?

8572
08:15:21,300 --> 08:15:23,730
Ya, itu adalah piramida dengan\ntinggi 1 ditambah 1 baris lagi.

8573
08:15:23,730 --> 08:15:26,730
Dan mudah-mudahan, proses ini\n

8574
08:15:26,730 --> 08:15:29,350
piramida menjadi\nsemakin kecil.

8575
08:15:29,350 --> 08:15:32,970
Jadi, Anda tidak akan mendapatkan ini\n

8576
08:15:32,971 --> 08:15:36,911
berkali-kali tak terhingga karena kapan\n

8577
08:15:36,911 --> 08:15:38,491
ujung piramida, baiklah.

8578
08:15:38,491 --> 08:15:39,961
Berapa tinggi piramida 1?

8579
08:15:39,960 --> 08:15:42,990
Ya, itu adalah piramida yang tidak\ntingginya ditambah satu baris lagi.

8580
08:15:42,991 --> 08:15:45,631
Dan pada saat itu, segalanya\nmenjadi negatif--

8581
08:15:46,411 --> 08:15:48,396
Kalau tidak, segala sesuatunya akan menjadi negatif.

8582
08:15:48,396 --> 08:15:49,771
Jadi Anda bisa berhenti saja.

8583
08:15:49,771 --> 08:15:52,291
Kasus dasarnya adalah ketika\ntidak ada lagi piramida.

8584
08:15:52,291 --> 08:15:56,441
Jadi ada cara untuk menarik garis di\n

8585
08:15:56,440 --> 08:16:00,540
Namun gagasan untuk mendefinisikan fisik\n

8586
08:16:00,541 --> 08:16:06,541
atau kode itu sendiri sebenarnya memungkinkan\n

8587
08:16:06,541 --> 08:16:08,521
Biarkan saya kembali ke kode saya di sini.

8588
08:16:08,521 --> 08:16:14,161
Biarkan saya melanjutkan dan membuatnya\n

8589
08:16:14,161 --> 08:16:20,460
yang memanfaatkan gagasan ini\n

8590
08:16:22,440 --> 08:16:26,100
Izinkan saya melanjutkan dan memasukkan\nstandardio.h, ke dalam kekosongan utama.

8591
08:16:26,100 --> 08:16:30,360
Lalu di dalam main, saya pergi\n

8592
08:16:30,361 --> 08:16:34,831
height sama dengan get int,\menanyakan tinggi badan pengguna.

8593
08:16:34,830 --> 08:16:38,230
Lalu saya akan melanjutkan\ndan melakukan pengundian dengan passing ketinggian.

8594
08:16:38,230 --> 08:16:39,881
Jadi itu akan tetap sama.

8595
08:16:39,881 --> 08:16:45,941
Saya bahkan akan membuat prototipe saya\n

8596
08:16:45,940 --> 08:16:48,181
Dan sekarang saya akan\nmenerapkan kekosongan di sini

8597
08:16:48,181 --> 08:16:49,951
dengan prototipe yang sama, tentunya.

8598
08:16:49,951 --> 08:16:52,831
Namun kodenya sekarang\nakan sedikit berbeda.

8599
08:16:54,431 --> 08:16:59,971
Pertama-tama, jika Anda meminta\nsaya menggambar piramida dengan tinggi n

8600
08:16:59,971 --> 08:17:02,941
Saya akan menjadi orang yang bijaksana\nass di sini dan berkata, baiklah

8601
08:17:02,940 --> 08:17:05,370
menggambar piramida n dikurangi 1--

8602
08:17:06,122 --> 08:17:08,580
Baiklah, tapi masih ada sedikit pekerjaan yang harus diselesaikan.

8603
08:17:08,580 --> 08:17:13,020
Apa yang terjadi setelah saya mencetak atau\nmenggambar piramida dengan tinggi n dikurangi 1

8604
08:17:13,021 --> 08:17:17,701
menurut definisi\nstruktural kita beberapa saat yang lalu?

8605
08:17:17,701 --> 08:17:22,831
Yang tersisa setelah menggambar piramida\n

8606
08:17:25,201 --> 08:17:26,761
Kita membutuhkan satu baris hash lagi.

8607
08:17:26,760 --> 08:17:28,110
Oke, jadi aku bisa melakukannya, kan?

8608
08:17:28,111 --> 08:17:29,574
Saya baik-baik saja dengan loop tunggal.

8609
08:17:29,574 --> 08:17:30,991
Tidak perlu bersarang di sini.

8610
08:17:30,991 --> 08:17:35,371
Saya hanya akan melakukan ini-- karena\nint saya mendapatkan 0, saya kurang dari n

8611
08:17:35,370 --> 08:17:37,545
yang merupakan ketinggian yang\ndimasukkan, i plus plus.

8612
08:17:37,545 --> 08:17:39,420
Dan kemudian di dalam\nloop ini, saya sangat sederhana

8613
08:17:39,420 --> 08:17:41,100
akan mencetak satu hash.

8614
08:17:41,100 --> 08:17:45,010
Lalu di sini, saya akan\n

8615
08:17:45,960 --> 08:17:48,080
Saya mungkin merasa tidak nyaman\ndengan loop bersarang.

8616
08:17:49,080 --> 08:17:52,020
Apa yang dilakukan loop ini\ndi sini pada baris 17 hingga 20?

8617
08:17:52,021 --> 08:17:57,901
Ini benar-benar mencetak n hash oleh\n

8618
08:17:59,491 --> 08:18:02,291
Jadi itu semacam sintaks gaya minggu pertama.

8619
08:18:02,291 --> 08:18:05,101
Tapi ini agak trippy\nsekarang karena entah bagaimana saya pernah melakukannya

8620
08:18:05,100 --> 08:18:09,841
meringkas implementasi\n

8621
08:18:11,611 --> 08:18:15,611
Tapi ini bermasalah karena dalam kasus ini

8622
08:18:15,611 --> 08:18:22,261
fungsi laci saya, perhatikan, selalu\n

8623
08:18:23,251 --> 08:18:28,561
Namun idealnya, kapan saya ingin\nproses siklus ini berhenti?

8624
08:18:28,561 --> 08:18:32,371
Kapan saya tidak ingin melakukan call draw lagi?

8625
08:18:35,657 --> 08:18:37,740
Ketika saya sampai di puncak\npiramida, ketika n adalah 1

8626
08:18:37,741 --> 08:18:40,081
atau sialnya, ketika piramida\nsudah hilang dan n sama dengan 0.

8627
08:18:40,080 --> 08:18:42,420
Saya bisa memilih garis mana pun\ndi pasir, asalkan itu

8628
08:18:42,420 --> 08:18:44,050
semacam di akhir proses.

8629
08:18:44,050 --> 08:18:45,841
Maka saya tidak ingin menyebut undian lagi.

8630
08:18:45,841 --> 08:18:48,210
Jadi mungkin yang harus saya lakukan adalah ini.

8631
08:18:48,210 --> 08:18:54,810
Jika n sama dengan 0,\ntidak ada yang bisa digambar.

8632
08:18:54,811 --> 08:18:58,701
Jadi saya akan pergi\naju dan kembali seperti ini.

8633
08:18:58,701 --> 08:19:01,281
Jika tidak, saya akan\nmelanjutkan dan menggambar

8634
08:19:01,280 --> 08:19:04,598
n dikurangi 1 baris dan kemudian satu baris lagi.

8635
08:19:04,598 --> 08:19:06,140
Dan saya bisa mengungkapkannya secara berbeda.

8636
08:19:06,140 --> 08:19:08,900
Saya bisa melakukan sesuatu seperti ini,\nyang setara.

8637
08:19:08,901 --> 08:19:13,851
Saya bisa mengatakan sesuatu seperti jika n\nis lebih besar dari atau sama dengan 0

8638
08:19:13,850 --> 08:19:15,823
lalu lanjutkan dan gambar barisnya.

8639
08:19:15,823 --> 08:19:17,030
Tapi aku suka yang seperti ini dulu.

8640
08:19:17,030 --> 08:19:18,948
Untuk saat ini, saya akan\nmenggunakan cara yang asli

8641
08:19:18,948 --> 08:19:22,100
hanya untuk mengajukan pertanyaan sederhana dan\n

8642
08:19:23,330 --> 08:19:26,100
Dan, agar\nsangat aman, untuk berjaga-jaga

8643
08:19:26,100 --> 08:19:28,400
pengguna mengetik\nangka negatif, izinkan saya juga

8644
08:19:28,401 --> 08:19:31,341
cukup periksa apakah n bilangan negatif,\n

8645
08:19:32,570 --> 08:19:35,850
Saya tidak mengembalikan nilai karena\naga lagi, fungsinya tidak berlaku.

8646
08:19:35,850 --> 08:19:38,040
Itu tidak memerlukan atau memiliki nilai kembalian.

8647
08:19:38,041 --> 08:19:40,221
Jadi mengatakan pengembalian saja sudah cukup.

8648
08:19:40,221 --> 08:19:45,021
Tetapi jika n sama dengan 1 atau 2\atau 3 atau lebih tinggi

8649
08:19:45,021 --> 08:19:50,480
masuk akal untuk menggambar piramida\n

8650
08:19:50,480 --> 08:19:55,041
dari 4, 3, lalu lanjutkan\ndcetak satu baris lagi.

8651
08:19:55,041 --> 08:20:00,811
Jadi ini adalah contoh kode sekarang\n

8652
08:20:02,510 --> 08:20:07,280
Namun apa yang disebut kasus dasar\menjamin, kondisi ini memastikan

8653
08:20:07,280 --> 08:20:09,050
bahwa kita tidak akan melakukan ini selamanya.

8654
08:20:09,050 --> 08:20:11,661
Jika tidak, kami akan\melakukan hal ini berkali-kali

8655
08:20:11,661 --> 08:20:14,690
dan sesuatu yang buruk\nmungkin akan terjadi.

8656
08:20:14,690 --> 08:20:18,591
Baiklah, izinkan saya melanjutkan dan\n

8657
08:20:18,591 --> 08:20:22,611
Oke, tidak ada kesalahan sintaksis-- titik miring\nrekursi, Enter, tinggi 4

8658
08:20:24,951 --> 08:20:28,761
Jika hanya karena beberapa dari Anda telah menjalankan\n

8659
08:20:28,760 --> 08:20:32,780
biarkan aku menyingkirkan kasus dasar\n

8660
08:20:34,341 --> 08:20:36,510
Oh, dan sebenarnya, sekarang\nbenar-benar sudah paham.

8661
08:20:36,510 --> 08:20:39,411
Jadi kompilernya cukup pintar\ncukup untuk menyadarinya

8662
08:20:39,411 --> 08:20:42,830
bahwa semua jalur melalui\nfungsi ini akan memanggil dirinya sendiri.

8663
08:20:42,830 --> 08:20:45,661
AKA, Ini akan berulang selamanya.

8664
08:20:45,661 --> 08:20:47,451
Jadi izinkan saya melakukan hal pertama.

8665
08:20:47,451 --> 08:20:49,911
Misalkan saya hanya memeriksa n sama dengan 0.

8666
08:20:49,911 --> 08:20:53,751
Izinkan saya mengkompilasi ulang\nkode ini dengan rekursi make.

8667
08:20:53,751 --> 08:20:56,390
Dan sekarang izinkan saya bersikap\ntidak kooperatif.

8668
08:20:56,390 --> 08:21:00,560
Saat saya menjalankan program ini, masih\nberfungsi untuk 4, masih berfungsi untuk 0.

8669
08:21:00,561 --> 08:21:03,471
Bagaimana jika saya suka negatif 100?

8670
08:21:03,471 --> 08:21:07,281
Apakah ada di antara Anda yang mengalami\nsegmentasi kesalahan atau core dump?

8671
08:21:08,600 --> 08:21:13,341
Sepertinya, ini berarti aku punya\n

8672
08:21:13,341 --> 08:21:17,271
Dan singkatnya, saya sebenarnya memanggil\nfungsi ini ribuan kali

8673
08:21:17,271 --> 08:21:19,911
secara tidak sengaja, sepertinya\nsekarang, sampai programnya saja

8674
08:21:19,911 --> 08:21:22,774
memberi jaminan pada saya karena saya akhirnya\nmenyentuh memori di komputer

8675
08:21:23,690 --> 08:21:25,501
Itu akan lebih masuk akal minggu depan.

8676
08:21:25,501 --> 08:21:27,001
Namun untuk saat ini, itu hanyalah sebuah bug.

8677
08:21:27,001 --> 08:21:28,791
Dan saya dapat menghindari\nbug itu dalam konteks ini

8678
08:21:28,791 --> 08:21:33,261
mungkin bukan konteks pset Anda sendiri,\n

8679
08:21:33,260 --> 08:21:35,700
mengizinkan angka negatif sama sekali.

8680
08:21:35,701 --> 08:21:38,061
Jadi dengan\nblok bangunan ini terpasang, apa yang harus dilakukan

8681
08:21:38,061 --> 08:21:41,781
bisakah sekarang kita mengurutkan\nangka-angka yang sama itu?

8682
08:21:41,780 --> 08:21:44,751
Ternyata ada\n

8683
08:21:44,751 --> 08:21:46,341
Dan masih banyak lagi yang lainnya.

8684
08:21:46,341 --> 08:21:51,283
Tapi pengurutan gabungan adalah hal yang bagus untuk didiskusikan\n

8685
08:21:51,283 --> 08:21:53,451
akan lebih baik daripada\npengurutan pilihan dan gelembung

8686
08:21:53,451 --> 08:21:55,851
sortir yang lebih baik dari n kuadrat.

8687
08:21:55,850 --> 08:21:58,598
Namun masalahnya adalah hal ini\nsedikit lebih sulit untuk dipikirkan.

8688
08:21:58,598 --> 08:22:01,640
Sebenarnya, saya akan memerankannya sendiri dengan\n

8689
08:22:01,640 --> 08:22:05,721
daripada manusia karena rekursi\n

8690
08:22:05,721 --> 08:22:08,061
untuk memahaminya,\nbiasanya sedikit latihan.

8691
08:22:08,061 --> 08:22:10,269
Namun saya akan melihat apakah kita tidak bisa\nmelakukannya secara metodis

8692
08:22:10,269 --> 08:22:12,620
cukup sehingga hal ini terungkap.

8693
08:22:12,620 --> 08:22:16,820
Jadi inilah kode semu yang saya usulkan\n

8694
08:22:16,820 --> 08:22:20,001
Dalam semangat rekursi,\nalgoritme pengurutan ini

8695
08:22:20,001 --> 08:22:25,381
secara harfiah memanggil dirinya sendiri dengan menggunakan\n

8696
08:22:25,381 --> 08:22:26,961
Jadi bagaimana cara kerja pengurutan gabungan?

8697
08:22:26,960 --> 08:22:30,380
Kalimat tersebut dengan nada menjengkelkan mengatakan, ya, jika\n

8698
08:22:30,381 --> 08:22:33,081
urutkan bagian kiri, lalu\nurutkan bagian kanan

8699
08:22:33,080 --> 08:22:34,790
lalu gabungkan keduanya.

8700
08:22:34,791 --> 08:22:36,043
Sekarang menjengkelkan dalam artian apa?

8701
08:22:36,043 --> 08:22:38,751
Baiklah, jika saya hanya meminta Anda untuk mengurutkan\n

8702
08:22:38,751 --> 08:22:40,431
baiklah, urutkan itu\nlalu urutkan

8703
08:22:40,431 --> 08:22:43,098
hal itu, apa gunanya\nmenanyakanmu sejak awal?

8704
08:22:43,098 --> 08:22:45,441
Namun kuncinya adalah\setiap baris ini adalah

8705
08:22:45,440 --> 08:22:48,240
memilah bagian yang lebih kecil dari masalah.

8706
08:22:48,241 --> 08:22:50,811
Jadi pada akhirnya, kami akan dapat\nbisa menguraikannya

8707
08:22:50,811 --> 08:22:54,771
menjadi sesuatu yang tidak berjalan\n

8708
08:22:56,480 --> 08:22:59,300
Ada skenario dimana kita\nhanya memeriksa, tunggu sebentar

8709
08:22:59,300 --> 08:23:01,881
jika hanya ada satu\nnomor yang perlu diurutkan, itu saja.

8710
08:23:01,881 --> 08:23:03,831
Berhentilah karena Anda sudah selesai.

8711
08:23:03,830 --> 08:23:06,950
Jadi harus ada kasus\ndasar ini dalam penggunaan rekursi

8712
08:23:06,951 --> 08:23:11,451
untuk memastikan bahwa Anda tidak\nmenelpon diri sendiri selamanya.

8713
08:23:11,451 --> 08:23:13,741
Anda harus berhenti pada suatu saat.

8714
08:23:13,741 --> 08:23:16,921
Jadi mari kita fokus pada\nlangkah ketiga ini.

8715
08:23:16,920 --> 08:23:21,688
Apa yang dimaksud dengan menggabungkan dua\ndaftar, dua bagian dari sebuah daftar

8716
08:23:21,688 --> 08:23:23,480
hanya karena ini\nampaknya akan terjadi

8717
08:23:23,480 --> 08:23:25,650
bahan utama-- jadi\ndi sini, misalnya

8718
08:23:25,651 --> 08:23:28,251
adalah dua bagian dari daftar ukuran 8.

8719
08:23:28,251 --> 08:23:31,370
Kami punya nomor 2-- dan saya akan menelepon\n

8720
08:23:36,561 --> 08:23:41,070
Perhatikan bahwa separuh kiri di\n

8721
08:23:41,070 --> 08:23:45,361
dan bagian kanan, 0136,\nis juga diurutkan.

8722
08:23:45,361 --> 08:23:48,230
Jadi itu bagus karena\itu berarti secara teori, saya sudah melakukannya

8723
08:23:48,230 --> 08:23:49,640
sudah mengurutkan bagian kiri.

8724
08:23:49,640 --> 08:23:51,980
Saya sudah mengurutkan bagian kanannya\sudah sebelum kita mulai.

8725
08:23:51,980 --> 08:23:54,050
Saya hanya perlu menggabungkan kedua bagian ini.

8726
08:23:54,050 --> 08:23:56,161
Apa yang dimaksud dengan mengurutkan dua bagian?

8727
08:23:56,161 --> 08:23:57,911
Baiklah, demi\ndiskusi, saya hanya

8728
08:23:57,911 --> 08:24:03,701
akan menyerahkan sebagian besar angka\n

8729
08:24:04,721 --> 08:24:07,751
Ada dua bagian di sini, kiri dan kanan.

8730
08:24:07,751 --> 08:24:09,820
Saat ini, saya\tidak akan mempertimbangkannya

8731
08:24:09,820 --> 08:24:13,893
elemen paling kiri dari setiap setengah--\n

8732
08:24:13,893 --> 08:24:15,100
dan yang di sebelah kiri di sini.

8733
08:24:15,100 --> 08:24:18,161
Bagaimana cara menggabungkan kedua daftar ini?

8734
08:24:18,161 --> 08:24:22,901
Nah, jika saya melihat 2 dan melihat 0,\n

8735
08:24:23,863 --> 08:24:25,570
Jadi saya akan ambil\nyang 0, dan saya berangkat

8736
08:24:25,570 --> 08:24:28,510
untuk meletakkannya di tempatnya sendiri\bukan rak baru ini.

8737
08:24:28,510 --> 08:24:34,661
Dan sekarang saya akan mempertimbangkan,\sebagai bagian dari iterasi saya

8738
08:24:34,661 --> 08:24:37,631
awal daftar ini dan\nawal baru daftar ini.

8739
08:24:37,631 --> 08:24:39,491
Jadi sekarang saya membandingkan 2 dan 1.

8740
08:24:40,570 --> 08:24:42,760
Saya akan melanjutkan dan mengambil yang 1.

8741
08:24:42,760 --> 08:24:45,490
Sekarang saya akan membandingkan\nawal daftar kiri

8742
08:24:45,491 --> 08:24:47,801
dan awal baru\ndaftar kanan, 2 dan 3.

8743
08:24:49,379 --> 08:24:51,671
Sekarang saya akan membandingkan\nawal daftar kiri

8744
08:24:51,670 --> 08:24:53,650
dan awal\ndaftar kanan, 4 dan 3.

8745
08:24:55,870 --> 08:24:58,611
Sekarang saya akan membandingkan 4\na dengan awal dan akhir

8746
08:24:58,611 --> 08:25:00,191
ternyata, dari daftar kedua--

8747
08:25:01,348 --> 08:25:03,640
Sekarang saya akan membandingkan\nawal daftar kiri

8748
08:25:03,640 --> 08:25:05,183
dan awal daftar kanan--

8749
08:25:06,791 --> 08:25:09,371
Saya menyadari ini tidak akan berakhir dengan baik karena saya pergi

8750
08:25:09,370 --> 08:25:10,780
terlalu jauh jarak antar angka.

8751
08:25:10,780 --> 08:25:12,698
Tapi itu tidak ada hubungannya\ndo dengan algoritme.

8752
08:25:12,698 --> 08:25:14,201
7 adalah awal dari daftar kiri.

8753
08:25:14,201 --> 08:25:15,820
6 adalah awal dari daftar kanan.

8754
08:25:17,320 --> 08:25:20,771
Dan berisiko\nmenghancurkan semua ini

8755
08:25:20,771 --> 08:25:27,671
jika sekarang saya memberi ruang untuk\elemen ini, semoga kita punya

8756
08:25:27,670 --> 08:25:34,760
mengurutkan semuanya dengan menggabungkan\n

8757
08:25:40,809 --> 08:25:43,101
Saya sedikit khawatir itu\nmenjadi sarkastik sekarang

8758
08:25:43,100 --> 08:25:48,230
tapi sekarang kami telah menggabungkan dua setengah daftar.

8759
08:25:48,230 --> 08:25:51,791
Kami belum melakukan yang terbaik\n

8760
08:25:52,791 --> 08:25:55,521
Namun saya menyatakan bahwa\itulah betapa mekanisnya Anda

8761
08:25:57,320 --> 08:25:59,420
Anda terus melihat\nawal setiap daftar

8762
08:25:59,420 --> 08:26:02,001
dan Anda tinggal menyatukannya berdasarkan

8763
08:26:02,001 --> 08:26:05,431
yang mana yang menjadi milik\npertama berdasarkan ukurannya.

8764
08:26:05,431 --> 08:26:07,820
Jadi jika Anda setuju\nitu adalah cara yang masuk akal

8765
08:26:07,820 --> 08:26:12,381
untuk menggabungkan dua daftar,\nmari kita lanjutkan dan fokus pada bagian terakhir

8766
08:26:12,381 --> 08:26:15,621
tentang apa artinya\sebenarnya mengurutkan bagian kiri

8767
08:26:15,620 --> 08:26:17,797
dan urutkan separuh kanan\na sejumlah angka.

8768
08:26:17,797 --> 08:26:19,880
Dan untuk ini, saya akan\nmelakukannya dan memesannya

8769
08:26:19,881 --> 08:26:21,681
dalam urutan yang tampaknya acak ini.

8770
08:26:21,681 --> 08:26:24,561
Dan saya hanya punya sedikit cheat\n

8771
08:26:24,561 --> 08:26:26,691
Dan saya akan mulai dari\nyang paling atas kali ini.

8772
08:26:26,690 --> 08:26:29,751
Dan mudah-mudahan, ini\ntidak akan jatuh kapan pun.

8773
08:26:29,751 --> 08:26:35,661
Tapi saya hanya sengaja memasang\n

8774
08:26:41,361 --> 08:26:43,701
Mudah-mudahan ini tidak terjatuh.

8775
08:26:43,701 --> 08:26:48,351
Sekarang ada array berukuran\n8 dengan delapan bilangan bulat.

8776
08:26:49,651 --> 08:26:52,693
Saya bisa menggunakan pengurutan pilihan dan hanya\n

8777
08:26:52,692 --> 08:26:55,460
Saya bisa menggunakan pengurutan gelembung dan\nmembandingkan pasangan, pasangan, pasangan.

8778
08:26:55,460 --> 08:26:58,190
Tapi itu akan berada pada\nurutan O besar dari n kuadrat.

8779
08:26:58,190 --> 08:27:00,360
Harapan saya adalah menjadi\nlebih baik secara mendasar di sini.

8780
08:27:00,361 --> 08:27:02,120
Jadi mari kita lihat apakah kita bisa berbuat lebih baik.

8781
08:27:02,120 --> 08:27:04,161
Baiklah, jadi izinkan saya\nlihat kode saya sekarang.

8782
08:27:05,850 --> 08:27:07,670
Bagaimana cara menerapkan pengurutan gabungan?

8783
08:27:07,670 --> 08:27:09,663
Nah, jika hanya\tidak ada nomor, saya berhenti.

8784
08:27:10,580 --> 08:27:12,630
Ada delapan angka,\njadi itu tidak berlaku.

8785
08:27:12,631 --> 08:27:14,963
Saya akan lanjutkan dan\nmengurutkan bagian kiri angka.

8786
08:27:14,963 --> 08:27:16,820
Baiklah, ini bagian kirinya--

8787
08:27:18,830 --> 08:27:21,590
Apakah saya mengurutkan array berukuran 4?

8788
08:27:21,591 --> 08:27:24,530
Nah, di sinilah\nrekursi dimulai.

8789
08:27:24,530 --> 08:27:26,510
Bagaimana cara mengurutkan daftar ukuran 4?

8790
08:27:26,510 --> 08:27:28,670
Ya, ada kode\nsemu di papan.

8791
08:27:28,670 --> 08:27:31,850
Saya mengurutkan separuh kiri\ndaftar ukuran 4.

8792
08:27:37,041 --> 08:27:38,841
Baiklah, sekarang saya punya daftar ukuran 2.

8793
08:27:50,841 --> 08:27:52,370
Jika hanya satu nomor, saya sudah selesai.

8794
08:27:53,594 --> 08:27:55,011
Baiklah, apa langkah selanjutnya?

8795
08:27:55,010 --> 08:27:56,540
Anda sekarang harus memundurkan waktu.

8796
08:27:56,541 --> 08:28:00,871
Saya baru saja mengurutkan bagian kiri\nbagian kiri dari bagian kiri.

8797
08:28:07,100 --> 08:28:11,420
Jadi sekarang pada bagian cerita ini,\n

8798
08:28:11,420 --> 08:28:14,210
yang 5 diurutkan, dan yang 2 diurutkan.

8799
08:28:14,210 --> 08:28:18,771
Tapi apa langkah ketiga dan terakhir\n

8800
08:28:20,010 --> 08:28:21,960
Jadi ini yang kiri,\nini daftar yang kanan.

8801
08:28:21,960 --> 08:28:23,210
Bagaimana cara menggabungkannya?

8802
08:28:23,210 --> 08:28:25,890
Saya membandingkan daftarnya,\dan saya menaruh keduanya di sana.

8803
08:28:25,890 --> 08:28:27,951
Saya hanya punya [? 5 ?]\nkiri, dan saya melakukannya.

8804
08:28:27,951 --> 08:28:30,351
Jadi sekarang kita melihat beberapa kemajuan yang terlihat.

8805
08:28:32,580 --> 08:28:37,220
Kami mulai mengurutkan bagian kiri\n

8806
08:28:39,260 --> 08:28:42,450
Kita baru saja mengurutkan\nseparuh kiri dari separuh kiri.

8807
08:28:42,451 --> 08:28:45,501
Jadi, apa yang terjadi setelah menyortir\nbagian yang tersisa?

8808
08:28:46,052 --> 08:28:48,260
Baiklah, ini adalah hal yang tidak masuk akal.

8809
08:28:55,951 --> 08:28:59,241
Jadi itu yang 4, dan itu yang 7.

8810
08:29:00,471 --> 08:29:05,431
Secara total, saya sekarang telah mengurutkan\nseparuh kiri dari benda aslinya.

8811
08:29:07,453 --> 08:29:08,661
Tunggu sebentar, tunggu sebentar.

8812
08:29:10,911 --> 08:29:13,580
Saya telah mengurutkan\nseparuh kiri dari separuh kiri

8813
08:29:13,580 --> 08:29:16,710
dan saya telah mengurutkan\nseparuh kanan dari separuh kiri.

8814
08:29:16,710 --> 08:29:19,070
Apa yang terakhir harus saya lakukan sekarang?

8815
08:29:19,070 --> 08:29:21,001
Gabungkan kedua daftar itu menjadi satu.

8816
08:29:21,001 --> 08:29:22,922
Jadi sekali lagi, saya meletakkan\njari saya di awal

8817
08:29:22,922 --> 08:29:24,630
dari daftar ini,\nawal daftar ini.

8818
08:29:24,631 --> 08:29:26,721
Dan jika Anda mau, saya akan melakukan hal yang sama\nsaat saya menggabungkannya terakhir kali

8819
08:29:26,721 --> 08:29:28,191
untuk memperjelas apa yang saya bandingkan.

8820
08:29:28,190 --> 08:29:30,800
2 dan 4-- angka 2 jelas didahulukan.

8821
08:29:36,030 --> 08:29:40,280
Angka 5 muncul berikutnya dan\nterakhir, tentu saja, angka 7.

8822
08:29:40,280 --> 08:29:44,370
Perhatikan bahwa 2457 sekarang sudah diurutkan.

8823
08:29:44,370 --> 08:29:47,163
Jadi bagian kiri yang asli sudah diurutkan.

8824
08:29:47,163 --> 08:29:49,370
Dan saya akan melakukan sisanya sedikit\nlebih cepat karena, ya Tuhan

8825
08:29:49,370 --> 08:29:50,745
ini terasa seperti memakan waktu lama.

8826
08:29:50,745 --> 08:29:52,790
Tapi saya yakin kita sedang melakukan sesuatu di sini.

8827
08:29:54,681 --> 08:29:56,931
Saya baru saja mengurutkan\nseparuh kiri dari dokumen asli.

8828
08:29:56,931 --> 08:29:58,640
Urutkan bagian kanan dari dokumen asli.

8829
08:29:59,661 --> 08:30:02,241
Saya mengurutkan bagian kiri dari bagian kanan.

8830
08:30:03,411 --> 08:30:05,721
Saya mengurutkan bagian kiri dari bagian kiri.

8831
08:30:06,681 --> 08:30:08,721
Saya mengurutkan bagian kanan dari bagian kiri.

8832
08:30:09,620 --> 08:30:11,751
Sekarang saya menggabungkan keduanya.

8833
08:30:11,751 --> 08:30:14,550
Angka 1 didahulukan, angka 6 didahulukan.

8834
08:30:14,550 --> 08:30:18,740
Sekarang saya mengurutkan\nseparuh kanan dari separuh kanan.

8835
08:30:25,591 --> 08:30:27,440
Jadi itulah langkah ketiga dari fase itu.

8836
08:30:27,440 --> 08:30:32,120
Sekarang di mana kita berada di toko-- oh\n

8837
08:30:32,120 --> 08:30:36,591
Kami telah mengurutkan bagian kiri\nseparuh kanan

8838
08:30:36,591 --> 08:30:38,541
dan separuh kanan dari separuh kanan.

8839
08:30:40,623 --> 08:30:42,791
Jadi saya akan membandingkan,\ndan saya akan memindahkannya

8840
08:30:42,791 --> 08:30:44,951
turun hanya untuk memperjelas\napa yang saya bandingkan

8841
08:30:44,951 --> 08:30:46,661
awal dari kedua sublist.

8842
08:30:57,370 --> 08:30:59,290
Dan yang terakhir adalah angka 6.

8843
08:30:59,291 --> 08:31:01,241
Baiklah, di manakah kita dalam cerita ini?

8844
08:31:01,241 --> 08:31:03,581
Kini kami telah mengurutkan\nseparuh kiri dokumen asli

8845
08:31:03,580 --> 08:31:05,140
dan separuh kanan dari aslinya.

8846
08:31:07,390 --> 08:31:09,431
Baiklah, jadi saya akan\nmenyatakan hal yang sama.

8847
08:31:09,431 --> 08:31:12,050
Dan ini sebenarnya\nyang kami lakukan sebelumnya

8848
08:31:12,050 --> 08:31:16,120
karena saya sengaja mendemokannya\n

8849
08:31:37,061 --> 08:31:41,121
Dan yang terakhir-- ini adalah saat\nkita kehabisan memori--

8850
08:31:41,120 --> 08:31:45,370
angka 7 di sana sebenarnya ada di tempatnya.

8851
08:31:47,751 --> 08:31:50,227
Oke, memang benar, ini\nsedikit sulit dijelaskan

8852
08:31:50,227 --> 08:31:52,310
dan sejujurnya, ini menjadi\nsedikit trippy karenanya

8853
08:31:52,311 --> 08:31:55,341
sangat mudah untuk melupakan\ndi mana Anda berada dalam cerita

8854
08:31:55,341 --> 08:31:58,041
karena kami terus\nmendalami algoritme

8855
08:31:58,041 --> 08:31:59,611
dan kemudian mundur kembali.

8856
08:31:59,611 --> 08:32:02,331
Namun dalam kode, kami dapat\nmengekspresikannya dengan cukup tepat

8857
08:32:02,330 --> 08:32:05,360
dan, ternyata, cukup\nefisien karena apa

8858
08:32:05,361 --> 08:32:09,021
Saya melakukannya, meskipun\nlebih lama ketika saya melakukannya secara lisan

8859
08:32:09,021 --> 08:32:12,620
Saya menyentuh elemen ini\nsedikit sekali, bukan?

8860
08:32:12,620 --> 08:32:15,890
Aku tidak akan bolak-balik, kembali\n

8861
08:32:16,850 --> 08:32:21,600
Saya sengaja hanya menggabungkan\n

8862
08:32:21,600 --> 08:32:24,560
Jadi setiap kali kami bergabung, meskipun\nsaya melakukannya dengan cepat

8863
08:32:24,561 --> 08:32:28,730
jariku hanya menyentuh\nmasing-masing elemen satu kali.

8864
08:32:28,730 --> 08:32:34,512
Dan berapa kali kita membaginya,\n

8865
08:32:34,512 --> 08:32:36,470
Ya, kita mulai dengan\nsemua elemen di sini

8866
08:32:36,471 --> 08:32:37,679
dan jumlahnya ada delapan.

8867
08:32:37,679 --> 08:32:41,221
Lalu kami memindahkannya\nposisi 1, 2, 3.

8868
08:32:41,221 --> 08:32:47,781
Jadi puncak dari visualisasi ini,\n

8869
08:32:47,780 --> 08:32:50,640
Jika saya memulai dengan 8, ternyata\njika Anda menghitungnya

8870
08:32:50,640 --> 08:32:54,740
ini tinggi log n\nkarena 2 banding 3 adalah 8.

8871
08:32:54,741 --> 08:32:57,111
Namun untuk saat ini, percaya saja\nbahwa ini adalah tinggi log n.

8872
08:32:58,640 --> 08:33:02,631
Ya, lebarnya n karena\nada n elemen kapan saja

8873
08:33:03,830 --> 08:33:08,097
Jadi secara teknis, saya seperti\n

8874
08:33:08,098 --> 08:33:09,681
adalah pertama kalinya aku membutuhkan rak.

8875
08:33:09,681 --> 08:33:13,370
Dengan contoh manusia, kami baru saja mendapatkan\n

8876
08:33:13,881 --> 08:33:16,561
Di sini, saya menggunakan\nlebih banyak memori.

8877
08:33:16,561 --> 08:33:19,131
Faktanya, saya menggunakan memori sekitar\nempat kali lebih banyak

8878
08:33:19,131 --> 08:33:21,291
padahal itu hanya\ndemi visualisasi.

8879
08:33:21,291 --> 08:33:25,401
Menggabungkan pengurutan sebenarnya mengharuskan Anda\n

8880
08:33:25,401 --> 08:33:28,406
untuk memindahkan elemen saat\nAnda menggabungkannya.

8881
08:33:28,405 --> 08:33:31,280
Namun jika saya benar-benar menginginkannya dan jika saya\n

8882
08:33:31,280 --> 08:33:33,950
sejujurnya, aku bisa saja kembali\n

8883
08:33:33,951 --> 08:33:35,611
Itu sudah cukup.

8884
08:33:35,611 --> 08:33:40,550
Jadi pengurutan gabungan menggunakan lebih banyak memori\nuntuk proses penggabungan ini

8885
08:33:40,550 --> 08:33:43,460
namun keuntungan\menggunakan lebih banyak memori adalah

8886
08:33:43,460 --> 08:33:49,041
itu total waktu berjalan, jika Anda bisa\n

8887
08:33:49,041 --> 08:33:51,921
Ternyata notasi O besar untuk\nmerge sort

8888
08:33:51,920 --> 08:33:54,890
sebenarnya akan menjadi n kali log n.

8889
08:33:54,890 --> 08:33:57,411
Dan bahkan jika Anda masih sedikit\ntidak paham dengan logaritma Anda

8890
08:33:57,411 --> 08:34:02,751
kita melihatnya di minggu ke-0 dan lagi\n

8891
08:34:05,241 --> 08:34:07,611
Itu lebih cepat daripada penelusuran\nlinier, yaitu n.

8892
08:34:07,611 --> 08:34:13,191
Jadi n kali log n tentu saja adalah\n

8893
08:34:13,190 --> 08:34:16,190
Jadi ini agak lebih rendah\n

8894
08:34:16,190 --> 08:34:19,710
yang menandakan bahwa itu sedang berjalan\n

8895
08:34:19,710 --> 08:34:22,701
Faktanya, jika kita mempertimbangkan\nwaktu berjalan kasus terbaik

8896
08:34:22,701 --> 08:34:27,006
ternyata kurang bagus\nas bubble sort dengan omega n

8897
08:34:27,006 --> 08:34:29,631
di mana Anda bisa membatalkannya\njika Anda menyadarinya, tunggu sebentar

8898
08:34:30,681 --> 08:34:35,210
Pengurutan gabungan, Anda sebenarnya harus melakukan itu\n

8899
08:34:35,210 --> 08:34:40,530
Jadi sebenarnya ada di omega dan\n

8900
08:34:40,530 --> 08:34:42,591
Jadi sekali lagi, ada trade-off\ndi sana karena jika Anda

8901
08:34:42,591 --> 08:34:44,901
kebetulan mempunyai kumpulan data\nyang sangat sering diurutkan

8902
08:34:44,901 --> 08:34:47,026
sejujurnya, Anda mungkin ingin\nmenggunakan bubble sort.

8903
08:34:47,026 --> 08:34:49,851
Namun dalam kasus umum,\ndatanya tidak disortir

8904
08:34:49,850 --> 08:34:53,181
n log n terdengar\nlebih baik daripada n kuadrat.

8905
08:34:53,181 --> 08:34:55,190
Nah, seperti apa\sebenarnya tampilan atau rasanya?

8906
08:34:55,190 --> 08:34:58,591
Beri saya waktu sejenak untuk mengubah\nover ke visualisasi kita di sini.

8907
08:34:58,591 --> 08:35:02,570
Dan kita akan melihat dengan contoh ini\nseperti apa pengurutan gabungan itu

8908
08:35:02,570 --> 08:35:04,530
digambarkan dengan batang vertikal ini.

8909
08:35:04,530 --> 08:35:07,220
Algoritmenya sama, tapi\nnomor saya ada di rak

8910
08:35:07,221 --> 08:35:12,331
di sini adalah array acak\nangka-angka yang sedang diurutkan.

8911
08:35:12,330 --> 08:35:14,480
Dan Anda dapat melihatnya\ndodilakukan setengah-setengah.

8912
08:35:14,480 --> 08:35:18,080
Dan Anda melihat sisa-sisa\ndari bilah sebelumnya.

8913
08:35:21,861 --> 08:35:26,390
Izinkan saya memperkecil tampilannya agar Anda\benar-benar dapat melihat ketinggiannya di sini.

8914
08:35:26,390 --> 08:35:29,091
Biarkan saya mengacak\nini lagi dan menjalankan pengurutan gabungan.

8915
08:35:29,670 --> 08:35:34,460
Sekarang Anda dapat melihat array kedua dan\n

8916
08:35:34,460 --> 08:35:38,490
Meskipun yang ini kelihatannya jauh\n

8917
08:35:38,491 --> 08:35:40,531
tampaknya bergerak lebih cepat.

8918
08:35:40,530 --> 08:35:44,030
Dan tampaknya akan menggabungkan dua bagian\nbersama, dan boom, selesai.

8919
08:35:44,030 --> 08:35:48,350
Jadi mari kita lihat, sebagai kesimpulan,\n

8920
08:35:48,350 --> 08:35:51,440
dan pertimbangkan bahwa ke depan\nas kita menulis lebih banyak kode

8921
08:35:51,440 --> 08:35:54,710
tujuannya, sekali lagi, bukan sekadar menjadi\n

8922
08:35:54,710 --> 08:35:58,181
Dan salah satu ukuran desain\nadalah efisiensi.

8923
08:35:58,181 --> 08:36:02,480
Jadi di sini kita punya, pada akhirnya,\nvisualisasi tiga algoritma--

8924
08:36:02,480 --> 08:36:05,361
pengurutan pilihan, pengurutan gelembung\n, dan pengurutan gabungan--

8925
08:36:06,811 --> 08:36:09,980
Dan mari kita lihat algoritma apa ini\n

8926
08:36:09,980 --> 08:36:12,216
Oh, kalau kita bisa meredupkan\nlampunya untuk efek dramatis--

8927
08:36:16,521 --> 08:36:20,331
pilihan di atas, gelembung di\nbawah, gabung di tengah.

8928
08:39:13,991 --> 08:39:18,011
DAVID J. MALAN: Ini CS50,\n

8929
08:39:18,011 --> 08:39:19,991
dan ingat bahwa\nminggu lalu, minggu ketiga, kita

8930
08:39:19,991 --> 08:39:22,931
mulai menjelajahi lebih dalam\na memori komputer.

8931
08:39:22,932 --> 08:39:25,992
Kita berbicara tentang array, yang\nhanya berupa potongan memori

8932
08:39:25,991 --> 08:39:28,811
bolak-balik ke belakang itu sungguh\n

8933
08:39:28,812 --> 08:39:32,082
ke bawah, dan ini sebenarnya a\n

8934
08:39:32,081 --> 08:39:34,121
baru mengenal pemrograman,\ndtentu saja baru mengenal C.

8935
08:39:34,121 --> 08:39:39,131
Anda telah melihat pendekatan ini hanya menggunakan\n

8936
08:39:40,522 --> 08:39:45,731
Misalnya, ini foto yang diambil\n

8937
08:39:45,731 --> 08:39:49,151
dan ini adalah kesempatan untuk\nmenjelajahi apa yang sebenarnya terjadi

8938
08:39:49,151 --> 08:39:52,271
jika kita mulai memperbesar dan memperbesar dan\n

8939
08:39:52,272 --> 08:39:56,022
acara TV apa pun seperti CSI, atau\napa pun, atau film apa pun

8940
08:39:56,022 --> 08:40:01,961
mengeksplorasi informasi forensik mungkin\n

8941
08:40:01,961 --> 08:40:05,354
pada gambar seperti ini untuk melihat\nkilauan apa yang ada di mata seseorang

8942
08:40:05,354 --> 08:40:08,022
karena itu menunjukkan nomor\nplat nomor seseorang itu

8943
08:40:08,917 --> 08:40:10,792
Sesuatu yang sedikit\tidak di atas sana

8944
08:40:10,792 --> 08:40:14,022
namun ada peluang di sini untuk\n

8945
08:40:14,022 --> 08:40:17,022
Sebagai contoh, mari kita perbesar\nmata boneka ini dan mari

8946
08:40:17,022 --> 08:40:19,332
perbesar sedikit lagi untuk\nmelihat apa yang mungkin tercermin.

8947
08:40:19,331 --> 08:40:21,941
Mari kita perbesar sedikit\nlebih lagi, dan selesai.

8948
08:40:21,941 --> 08:40:24,412
Informasi yang ada hanya terbatas\njumlahnya

8949
08:40:24,412 --> 08:40:26,531
jika Anda memiliki gambar\nyang direpresentasikan dengan cara ini.

8950
08:40:26,531 --> 08:40:29,682
Kami menggunakan piksel-- titik-titik ini di\n

8951
08:40:29,682 --> 08:40:32,141
karena jika Anda hanya menggunakan\na jumlah memori yang terbatas

8952
08:40:32,141 --> 08:40:35,472
maka pada akhirnya, Anda hanya bisa\n

8953
08:40:35,472 --> 08:40:39,282
Setidaknya saya tidak begitu paham dalam hal ini\n

8954
08:40:39,281 --> 08:40:42,011
atau sesuatu seperti itu yang Anda\n

8955
08:40:42,011 --> 08:40:45,041
Jadi hari ini kita akan mengeksplorasi\nrepresentasi semacam ini

8956
08:40:45,042 --> 08:40:47,862
tentang bagaimana Anda dapat menggunakan memori\nin dengan cara yang baru dan menarik

8957
08:40:47,862 --> 08:40:51,222
untuk mewakili sekarang, hal-hal yang sangat\nfamiliar, tetapi juga

8958
08:40:51,222 --> 08:40:54,432
mulai menjelajahi apa saja\n

8959
08:40:54,432 --> 08:40:58,211
Namun perlu diingat bahwa hal ini tidak terjadi\n

8960
08:40:58,211 --> 08:41:00,522
piksel sebanyak\nseperti gambar lainnya ini

8961
08:41:00,522 --> 08:41:04,492
Anda dapat membayangkan melakukan sesuatu\n

8962
08:41:04,491 --> 08:41:07,181
Dan jika Anda menganggap gambar\nhanya memiliki baris dan kolom

8963
08:41:07,182 --> 08:41:09,492
baris-baris ini dikenal\nas garis pindaian-- sesuatu

8964
08:41:09,491 --> 08:41:13,061
kita akan menjelajahinya minggu depan--\n

8965
08:41:13,062 --> 08:41:17,472
dengan hanya menggunakan dua\nnilai yang berbeda, mungkin nol dan satu.

8966
08:41:17,472 --> 08:41:21,502
Atau kuning dan ungu, atau sebaliknya,\n

8967
08:41:21,502 --> 08:41:25,691
Sekarang dalam praktiknya, ingat kita sudah berbicara\n

8968
08:41:25,691 --> 08:41:32,774
tapi mungkin nilai R, G, dan B--\n

8969
08:41:32,775 --> 08:41:33,942
tapi kita akan kembali ke sana.

8970
08:41:33,941 --> 08:41:35,649
Itu hanya akan menjadi\ngambaran yang lebih terlibat.

8971
08:41:35,650 --> 08:41:41,472
Namun untuk bersenang-senang, jika hari ini Anda ingin mengatasinya\n

8972
08:41:41,472 --> 08:41:44,891
jika Anda membuka URL ini di sini,\nkami telah menyiapkan peluang

8973
08:41:47,562 --> 08:41:51,162
Jika Anda membuka URL ini di sini, itu akan\n

8974
08:41:51,162 --> 08:41:53,502
Jika Anda membawa laptop\nsaat ini, itu saja

8975
08:41:53,502 --> 08:41:56,902
terlihat seperti ini, yang mana\n

8976
08:41:56,901 --> 08:42:01,241
Jadi jika Anda ingin melanjutkan dan menggunakan\n

8977
08:42:01,241 --> 08:42:04,691
fitur untuk mewarnai\nkotak individual tersebut jika Anda mau

8978
08:42:04,691 --> 08:42:08,111
lihat apakah kamu tidak bisa membuat sesuatu yang kecil\n

8979
08:42:08,112 --> 08:42:12,202
dan kami akan memamerkan beberapa yang terbaik atau\n

8980
08:42:12,202 --> 08:42:15,425
Jadi mari kita beralih ke sesuatu\n

8981
08:42:15,424 --> 08:42:17,592
Dan mungkin tidak semua dari Anda\menggunakan Photoshop

8982
08:42:17,592 --> 08:42:20,842
tapi Anda mungkin sudah familiar\n

8983
08:42:20,842 --> 08:42:23,062
dan membuat gambar\atau foto atau sejenisnya.

8984
08:42:23,062 --> 08:42:25,992
Dan berikut adalah tangkapan layar\npemilih warna p

8985
08:42:25,991 --> 08:42:27,978
yang melaluinya Anda dapat\nmengubah warna Anda

8986
08:42:27,978 --> 08:42:30,311
akan menggambar dengan\nkuas cat, atau warna apa pun yang Anda pilih

8987
08:42:30,312 --> 08:42:32,292
akan mengisi dengan ember cat.

8988
08:42:32,292 --> 08:42:34,391
Ini mewakili\njenis alat grafis apa pun.

8989
08:42:34,391 --> 08:42:36,801
Dan ada banyak\ninformasi di sini

8990
08:42:36,801 --> 08:42:39,281
tapi mungkin ada beberapa\nistilah yang familiar sekarang--

8991
08:42:39,281 --> 08:42:43,151
R, G, dan B. Faktanya, saat ini\nini adalah cara Photoshop

8992
08:42:43,151 --> 08:42:45,851
mengatakan Anda akan mengisi\nin latar belakang atau latar depan Anda

8993
08:42:45,851 --> 08:42:48,041
dengan warna hitam,\ndan tampaknya begitu

8994
08:42:48,042 --> 08:42:51,492
diwakili dengan nilai R, a G, dan\na B nol, nol, nol.

8995
08:42:51,491 --> 08:42:57,341
Atau alternatifnya, gunakan\nsimbol hash lalu 000000.

8996
08:42:57,342 --> 08:42:59,801
Dan jika ada di antara Anda yang\nsudah pernah membuat halaman web sebelumnya

8997
08:42:59,801 --> 08:43:01,691
dan Anda tahu sedikit\nsedikit tentang HTML dan CSS

8998
08:43:01,691 --> 08:43:04,031
Anda mungkin familiar\ndengan sintaksis semacam ini--

8999
08:43:04,031 --> 08:43:07,891
simbol hash lalu enam, atau\n

9000
08:43:07,891 --> 08:43:10,391
Dan jika kita melihat beberapa\nwarna berbeda di sini, misalnya

9001
08:43:10,391 --> 08:43:12,491
di sini mungkin\nrepresentasi warna putih.

9002
08:43:12,491 --> 08:43:18,671
Sekarang nilai R, G, dan B\n

9003
08:43:18,671 --> 08:43:23,471
Atau alternatifnya, sepertinya\n

9004
08:43:23,472 --> 08:43:26,950
dapat mewakili\nwarna putih yang sama dengan FFFFFF.

9005
08:43:26,950 --> 08:43:28,242
Dan mari kita lakukan beberapa hal lainnya.

9006
08:43:28,241 --> 08:43:32,981
Ini warnanya merah, dan ternyata\n

9007
08:43:37,909 --> 08:43:39,702
Jadi mungkin ada\npola yang muncul di sini.

9008
08:43:39,702 --> 08:43:43,782
Ini hijau, nol, 255, nol, alias.

9009
08:43:43,781 --> 08:43:48,022
00FF00, atau terakhir, di sini\nbiru, bukan merah

9010
08:43:48,022 --> 08:43:51,731
tidak ada warna hijau tapi ternyata banyak\nbiru, 255 lagi, a.k.a.

9011
08:43:53,831 --> 08:43:57,221
Beberapa dari Anda, sekali lagi, mungkin\npernah melihat notasi ini sebelumnya

9012
08:43:57,222 --> 08:44:00,432
angka nol ini dan F ini dan semuanya\n

9013
08:44:00,432 --> 08:44:02,205
tapi ini adalah bentuk notasi lain.

9014
08:44:02,205 --> 08:44:04,122
Faktanya, kita akan menjelajahi\nhari ini-- sungguh

9015
08:44:04,121 --> 08:44:06,851
hanyalah prasyarat untuk\nmembicarakan beberapa konsep lain.

9016
08:44:06,851 --> 08:44:10,002
Namun idenya, pada akhirnya,\tidak ada bedanya.

9017
08:44:10,002 --> 08:44:13,182
Apa yang akan kita lihat adalah\na sistem dasar yang berbeda--

9018
08:44:13,182 --> 08:44:15,312
bukan hanya biner, bukan hanya\ndesimal, tapi sesuatu

9019
08:44:15,312 --> 08:44:17,231
kita akan memanggil heksadesimal.

9020
08:44:17,231 --> 08:44:21,191
Namun pertama-tama, ingatlah bahwa dengan RGB\nsebelumnya kita melakukan hal berikut.

9021
08:44:21,191 --> 08:44:23,592
Nilai RGB apa pun-- merah,\nhijau, biru-- gabungkan saja

9022
08:44:23,592 --> 08:44:26,121
sejumlah warna merah atau hijau atau biru.

9023
08:44:26,121 --> 08:44:30,702
Jadi di sini kita punya 72, 73, 33, yang di\n

9024
08:44:33,761 --> 08:44:36,252
Hanya hai dengan tanda seru\n, namun sesuai dengan konteksnya

9025
08:44:36,252 --> 08:44:40,481
dari program mirip Photoshop, ini\nmungkin mewakili

9026
08:44:40,481 --> 08:44:42,919
secara kolektif, warna\nkuning ini, misalnya

9027
08:44:42,919 --> 08:44:45,502
ketika kamu mengombinasikan merah sebanyak itu\nbanyak hijau dan biru sebanyak itu.

9028
08:44:46,812 --> 08:44:49,062
Jika Anda punya banyak\nmerah, tidak ada hijau, tidak ada biru

9029
08:44:49,062 --> 08:44:50,652
bersama-sama itu akan memberi kita warna merah.

9030
08:44:50,651 --> 08:44:53,441
Jika Anda tidak punya warna merah,\nbanyak warna hijau, tidak ada warna biru

9031
08:44:53,441 --> 08:44:55,211
itu akan memberi\nus, tentu saja, warna hijau.

9032
08:44:55,211 --> 08:44:58,529
Jika Anda tidak punya warna merah, hijau,\na banyak warna biru, tentu saja

9033
08:44:59,572 --> 08:45:03,761
Jadi ada pola yang muncul di sini\n

9034
08:45:05,952 --> 08:45:12,641
Dan itu mungkin disamakan dengan 255,\n

9035
08:45:12,641 --> 08:45:15,912
Sedangkan jika kita gabungkan yang terakhir\n

9036
08:45:16,991 --> 08:45:20,719
itu sebenarnya akan memberi kita\na satu piksel putih seperti ini.

9037
08:45:21,761 --> 08:45:25,479
Inilah biner-- di dunia biner\n

9038
08:45:25,479 --> 08:45:26,772
Bisa jadi hal lain--

9039
08:45:26,772 --> 08:45:31,902
A atau B, X atau Y, tetapi dunia\ndistandarkan berdasarkan angka-angka ini

9040
08:45:32,741 --> 08:45:35,951
Dalam sistem desimal dunia kita, of\n

9041
08:45:35,952 --> 08:45:39,461
Namun mulai hari ini, kami akan\n

9042
08:45:39,461 --> 08:45:43,346
dalam konteks gambar dan juga\n

9043
08:45:43,347 --> 08:45:45,195
dan ada beberapa kemudahan di dalamnya.

9044
08:45:45,194 --> 08:45:47,112
Dimana sekarang, Anda\ntidak dapat menghitungnya

9045
08:45:47,112 --> 08:45:49,961
ke F dalam notasi yang disebut heksadesimal.

9046
08:45:49,961 --> 08:45:55,031
Dari nol sampai sembilan, lalu lanjutkan\n

9047
08:45:55,031 --> 08:45:58,002
idenya adalah masing-masing,\walaupun aneh

9048
08:45:58,002 --> 08:46:02,141
huruf alfabet bahasa Inggris,\n

9049
08:46:02,141 --> 08:46:07,601
Ini bukan satu nol untuk 10, atau 1 1\n

9050
08:46:07,601 --> 08:46:10,961
angka-angka ini, boleh dikatakan,\nmasih hanya simbol tunggal

9051
08:46:10,961 --> 08:46:14,572
dan itu adalah karakteristik dari\n

9052
08:46:14,572 --> 08:46:20,112
Jadi bagaimana kita berpindah dari 00 dan FF ke\n

9053
08:46:20,112 --> 08:46:22,121
Nah, sistem heksadesimal ini alias.

9054
08:46:22,121 --> 08:46:25,546
Basis 16, hanya menghitung\ndari minggu ke-0 dan sungguh

9055
08:46:25,546 --> 08:46:27,171
sekolah dasar, sedikit berbeda.

9056
08:46:27,171 --> 08:46:30,341
Misalnya, jika Anda mempunyai\nangka yang terdiri dari dua digit

9057
08:46:30,342 --> 08:46:34,281
atau digit heksadesimal pada hari ini,\n

9058
08:46:34,281 --> 08:46:37,871
Daripada pangkat dua atau pangkat\n

9059
08:46:37,871 --> 08:46:40,631
masing-masing, pangkatnya 16.

9060
08:46:40,632 --> 08:46:43,362
Jadi jika kita hanya menghitung\n, itulah kolom satuannya

9061
08:46:43,362 --> 08:46:46,092
ini kolom 16-an, dan seterusnya.

9062
08:46:46,092 --> 08:46:49,101
Segalanya menjadi cukup besar\ndengan cepat dalam sistem ini.

9063
08:46:49,101 --> 08:46:52,106
Namun sekarang mari kita pertimbangkan bagaimana caranya\n

9064
08:46:52,106 --> 08:46:54,731
If you've got two hexadecimal\ndigits for which these hashes are

9065
08:46:54,731 --> 08:46:57,792
hanya placeholder, nol, nol\nis akan menjadi matematis

9066
08:46:57,792 --> 08:47:00,292
sama dengan angka desimal yang Anda\ndan saya tahu, tentu saja, sebagai nol.

9067
08:47:02,081 --> 08:47:06,401
16 kali nol ditambah satu kali nol adalah\n

9068
08:47:06,401 --> 08:47:07,881
Dan kita bisa menghitungnya dari sini.

9069
08:47:07,882 --> 08:47:10,391
Ini, dalam heksadesimal,\nakan menjadi bagaimana sebuah komputer

9070
08:47:10,391 --> 08:47:12,191
mewakili angka yang kita kenal sebagai satu.

9071
08:47:12,191 --> 08:47:14,182
Dalam kasus ini, hasilnya akan menjadi nol.

9072
08:47:14,182 --> 08:47:19,542
Ini akan menjadi dua, tiga, empat,\nlima, enam, tujuh, delapan, sembilan--

9073
08:47:19,542 --> 08:47:21,502
dalam desimal, kita akan menuju ke 10.

9074
08:47:21,502 --> 08:47:24,572
Namun dalam heksadesimal, untuk lebih jelasnya, apa yang terjadi selanjutnya?

9075
08:47:24,572 --> 08:47:33,382
Jadi, rupanya A, jadi 0A, 0B, yang mana\n

9076
08:47:33,382 --> 08:47:36,472
Jadi menggunakan heksadesimal\nadalah cara yang menarik

9077
08:47:36,472 --> 08:47:40,312
menggunakan simbol tunggal\nsekarang, nol sampai F

9078
08:47:40,312 --> 08:47:43,262
untuk menghitung dari nol sampai 15.

9079
08:47:43,261 --> 08:47:46,011
Dan kita akan melihat alasannya 15 in a\n

9080
08:47:46,011 --> 08:47:50,181
ada yang mau menduga bagaimana\nin heksadesimal, alias hex

9081
08:47:50,182 --> 08:47:53,092
apakah kita sekarang menghitung satu posisi lebih tinggi?

9082
08:47:53,092 --> 08:47:56,792
Apa yang terjadi setelah 0F dalam heksadesimal?

9083
08:47:56,792 --> 08:47:59,062
Jadi, satu nol-- hal yang\nsama--

9084
08:47:59,062 --> 08:48:01,227
setelah Anda berada pada angka\ndigit tertinggi, F--

9085
08:48:01,226 --> 08:48:03,351
atau dalam dunia desimal kita\njumlahnya akan menjadi sembilan--

9086
08:48:03,351 --> 08:48:06,471
Anda menambahkan satu lagi, sembilan putaran\nke nol, atau dalam kasus ini

9087
08:48:08,182 --> 08:48:11,152
Anda membawanya dan voila--\nsekarang kami mewakilinya

9088
08:48:11,151 --> 08:48:12,871
nomor yang Anda dan saya kenal sebagai 16.

9089
08:48:12,871 --> 08:48:14,811
Dan kami bisa terus berjalan\nselamanya, secara harfiah.

9090
08:48:14,812 --> 08:48:18,547
Ini bisa berupa 17, 18,\n19, 20, dan desimal--

9091
08:48:18,546 --> 08:48:20,421
tapi mari kita lambaikan\ntangan kita dan menghitungnya

9092
08:48:20,421 --> 08:48:23,181
setinggi yang kita bisa-- titik,\ndot, titik-- yang tertinggi

9093
08:48:23,182 --> 08:48:26,542
kita dapat menghitung dalam heksadesimal\ndengan dua digit, secara logis

9094
08:48:26,542 --> 08:48:28,342
akan menjadi apa, dalam heksadesimal?

9095
08:48:31,312 --> 08:48:34,892
Jadi ya, itu angka terbesar\n

9096
08:48:34,891 --> 08:48:38,524
Jadi seberapa tinggi Anda dapat menghitung dalam heksadesimal\n

9097
08:48:38,524 --> 08:48:39,981
Ya, matematikanya sama seperti biasanya.

9098
08:48:41,932 --> 08:48:48,301
15, jadi hasilnya 16 kali 15 ditambah\tidak ada kali F, atau satu kali 15--

9099
08:48:48,301 --> 08:48:52,702
hasilnya adalah 240 ditambah 15 dalam desimal,\n

9100
08:48:54,781 --> 08:48:57,871
Jadi sistem heksadesimal ini-- Anda boleh\n

9101
08:48:57,871 --> 08:49:00,621
dan jika belum, kami akan melanjutkan\n

9102
08:49:00,621 --> 08:49:03,351
atau kita lihat saja di\nkonteks Photoshop-- saja

9103
08:49:03,351 --> 08:49:09,502
memiliki notasi singkat penghitungan\n

9104
08:49:09,502 --> 08:49:13,132
Sekarang marjinal, tapi itu seperti\n

9105
08:49:13,132 --> 08:49:16,852
yang Anda butuhkan untuk menghitung tinggi\n

9106
08:49:18,682 --> 08:49:22,492
Dalam heksadesimal Anda dapat menghitung\nas tinggi hanya dengan menggunakan dua

9107
08:49:22,491 --> 08:49:25,849
dan perbedaan itu akan terjadi\n

9108
08:49:25,849 --> 08:49:28,641
Izinkan saya menetapkannya untuk saat ini, Anda\n

9109
08:49:28,641 --> 08:49:31,792
dalam hal berapa banyak simbol\n

9110
08:49:31,792 --> 08:49:35,242
angka yang lebih besar dan lebih besar dari itu.

9111
08:49:35,241 --> 08:49:38,661
Baiklah, izinkan saya berhenti sejenak di sini untuk\n

9112
08:49:38,662 --> 08:49:42,081
pada apa yang kami sebut heksadesimal, yang\n

9113
08:49:42,081 --> 08:49:48,769
serta A sampai F.\nAda pertanyaan atau kebingungan?

9114
08:49:48,769 --> 08:49:51,351
Dan jika rasanya kita\nterlalu banyak memikirkan aritmatika

9115
08:49:51,351 --> 08:49:54,691
kita tidak akan melihat yang lain\n

9116
08:49:54,691 --> 08:49:58,822
Biasanya ini adalah tiga hal yang paling disukai dalam\ndunia programmer.

9117
08:50:01,600 --> 08:50:03,893
AUDIENCE: Apakah simbol\ns heksadesimal memerlukan lebih banyak penyimpanan

9118
08:50:06,612 --> 08:50:07,862
DAVID J. MALAN: Pertanyaan bagus.

9119
08:50:07,862 --> 08:50:11,972
Apakah heksadesimal memerlukan penyimpanan lebih besar\n

9120
08:50:11,972 --> 08:50:16,202
Secara teoritis tidak, karena ini\n

9121
08:50:16,202 --> 08:50:19,082
dan kita akan melihat contoh\nkonkritnya sebentar lagi.

9122
08:50:19,081 --> 08:50:22,471
Namun di dalam komputer, pada akhirnya\n

9123
08:50:22,472 --> 08:50:25,588
Dan menggunakan heksadesimal tidak\nmenggunakan bit lebih banyak atau lebih sedikit

9124
08:50:25,588 --> 08:50:27,421
anggap ini sebagai cara\nAnda menuliskannya

9125
08:50:27,421 --> 08:50:30,331
di selembar kertas, berapa\nangka yang akan Anda tulis

9126
08:50:30,331 --> 08:50:33,301
atau di layar komputer, berapa\n

9127
08:50:33,301 --> 08:50:36,572
tapi itu tidak mengubah cara\n

9128
08:50:36,572 --> 08:50:39,691
karena semua yang mereka wakili di\n

9129
08:50:40,981 --> 08:50:45,211
Jika ini-- beberapa saat yang lalu\nFF yang saya klaim adalah 255--

9130
08:50:45,211 --> 08:50:47,252
mari kita mundur ke minggu\nzero dan jika kita mau

9131
08:50:47,252 --> 08:50:51,752
untuk menghitung sampai 255 dalam biner, itu\n

9132
08:50:52,772 --> 08:50:54,604
Dan hanya ada sedikit\ndari angka-angka ini

9133
08:50:54,604 --> 08:50:58,441
berguna untuk dihafal, seperti 255 sebagai\n

9134
08:50:58,441 --> 08:51:02,342
jika Anda memulai dari nol, karena dua banding\n

9135
08:51:04,831 --> 08:51:09,031
Jadi dalam biner, ingat kembali jika Anda punya\n

9136
08:51:09,031 --> 08:51:11,351
dan saya tidak akan menghitung\nbertele-tele di sini

9137
08:51:11,351 --> 08:51:13,726
tetapi jika saya melakukan ini plus\nini ditambah ini, titik, titik

9138
08:51:13,726 --> 08:51:16,752
titik-- itu juga akan memberi saya 255.

9139
08:51:16,752 --> 08:51:19,801
Jadi inilah yang menarik\ntentang heksadesimal.

9140
08:51:19,801 --> 08:51:24,211
Ternyata ada keuntungan\nmenyimpan nilai dalam heksadesimal

9141
08:51:24,211 --> 08:51:27,932
adalah kita akan\nmelihat representasi F pertama

9142
08:51:27,932 --> 08:51:31,262
separuh bagian kiri dari semua bit ini,\ndan F kedua dalam kasus ini

9143
08:51:31,261 --> 08:51:33,791
mewakili\nempat bit paling kanan ini.

9144
08:51:33,792 --> 08:51:36,422
Jadi ternyata heksadesimal\nissangat berguna ketika Anda

9145
08:51:36,421 --> 08:51:39,391
ingin memperlakukan data dalam satuan empat.

9146
08:51:39,391 --> 08:51:42,542
Jumlahnya tidak cukup delapan, tapi satuan\nempat, dan itu lumayan.

9147
08:51:42,542 --> 08:51:45,632
Itulah sebabnya-- jika Anda menggunakan dua\ndigit seperti yang saya miliki sejauh ini

9148
08:51:45,632 --> 08:51:48,422
00 atau FF atau apa pun di antaranya--

9149
08:51:48,421 --> 08:51:53,281
itu sebenarnya cara yang nyaman\n

9150
08:51:53,281 --> 08:51:57,451
Satu digit hex untuk empat digit pertama\n

9151
08:51:57,452 --> 08:52:00,152
Dan sekali lagi, tidak ada yang baru\nintelektual di sini

9152
08:52:00,151 --> 08:52:03,931
itu hanya cara yang berbeda\n

9153
08:52:05,011 --> 08:52:06,851
Jadi dalam konteks apa kita melihat hal ini?

9154
08:52:06,851 --> 08:52:08,191
Ya, kita berbicara tentang\nmemori minggu lalu, dan memang benar

9155
08:52:08,191 --> 08:52:09,774
akan membicarakannya lebih banyak minggu ini.

9156
08:52:09,775 --> 08:52:12,301
Jika ini adalah\nRAM komputer saya-- memori akses acak--

9157
08:52:12,301 --> 08:52:16,471
Anda dapat kembali menganggap setiap byte sebagai\n

9158
08:52:18,031 --> 08:52:22,351
Jumlahnya mungkin nol, mungkin\n2 miliar, dan seterusnya

9159
08:52:22,351 --> 08:52:25,141
Saya telah mendeskripsikannya sebagai\nini saja, menggunakan angka desimal.

9160
08:52:25,141 --> 08:52:29,491
Ini byte nol, satu, dua, tiga,\n

9161
08:52:29,491 --> 08:52:30,941
akan berada di sini, dan seterusnya.

9162
08:52:30,941 --> 08:52:35,432
Namun ternyata di dunia ingatan,\n

9163
08:52:35,432 --> 08:52:40,051
cenderung menghitung memori\nbyte menggunakan heksadesimal.

9164
08:52:40,051 --> 08:52:42,241
Sebagian hanya berdasarkan konvensi,\ntetapi juga sebagian

9165
08:52:42,241 --> 08:52:44,941
karena ini sedikit lebih\nsringkas dan lagi, setiap digit

9166
08:52:44,941 --> 08:52:48,002
mewakili empat bit, biasanya.

9167
08:52:48,002 --> 08:52:49,757
Jadi apa yang terjadi setelah F di sini?

9168
08:52:49,757 --> 08:52:51,632
Nah, jika saya berpikir tentang\nmemori komputer

9169
08:52:51,632 --> 08:52:56,672
Saya biasanya melakukan\nsetelah F, yaitu 15, 16.

9170
08:52:56,671 --> 08:53:01,291
Namun sebaliknya, satu nol, satu\tidak ada, satu dua, satu tiga-- ini

9171
08:53:01,292 --> 08:53:05,912
bukan 10, 11, 12, 13, karena saya klaim\n

9172
08:53:05,912 --> 08:53:07,981
Sesuai dengan\nslide sebelumnya, kita sudah memulai

9173
08:53:07,981 --> 08:53:10,801
masuk ke A sampai\nF, jadi Anda segera

9174
08:53:10,801 --> 08:53:13,471
lihat di sini kemungkinan masalah.

9175
08:53:13,472 --> 08:53:16,442
Mengapa hal ini sekarang mengkhawatirkan,\njika tiba-tiba Anda mengkhawatirkannya

9176
08:53:16,441 --> 08:53:22,151
melihat angka\nyang tampak familier seperti 10, 11, 12, 13?

9177
08:53:22,151 --> 08:53:24,288
Kami tidak benar-benar tersandung\namasalah ini

9178
08:53:24,289 --> 08:53:25,871
ketika sebelumnya semuanya nol dan satu.

9179
08:53:26,974 --> 08:53:28,516
HADIRIN: Cobalah mengerjakan matematika [Tak terdengar].

9180
08:53:30,645 --> 08:53:33,312
DAVID J. MALAN: Ya, jadi jika Anda\nmenulis beberapa kode dalam C, itu saja

9181
08:53:33,312 --> 08:53:35,170
mengerjakan matematika, Anda\nmungkin secara tidak sengaja--

9182
08:53:35,169 --> 08:53:37,961
atau komputer mungkin tidak sengaja\n

9183
08:53:37,961 --> 08:53:40,522
jika mereka terlihat sama dalam beberapa konteks.

9184
08:53:40,522 --> 08:53:42,612
Nomor apa pun di papan\nyang tidak memiliki huruf

9185
08:53:42,612 --> 08:53:46,402
pada saat ini bersifat heksadesimal\atau desimal yang ambigu

9186
08:53:46,401 --> 08:53:48,111
lalu bagaimana kita bisa mengatasinya?

9187
08:53:48,112 --> 08:53:51,072
Ternyata yang\nkomputer biasanya lakukan adalah ini.

9188
08:53:51,072 --> 08:53:55,842
Sesuai ketentuan, kapan saja Anda\nmelihat 0x dan kemudian angka

9189
08:53:55,842 --> 08:53:58,272
itu adalah kebiasaan manusia untuk mengatakan--

9190
08:53:58,272 --> 08:54:01,731
memberi isyarat kepada pembaca bahwa ini\n

9191
08:54:01,731 --> 08:54:05,801
Jadi kalau 0x10, itu\bukan angka 10

9192
08:54:05,801 --> 08:54:10,971
itu adalah heksadesimal nomor satu\n

9193
08:54:13,991 --> 08:54:16,511
Dan sekali lagi, ini bukanlah hal-hal yang perlu dihafal

9194
08:54:16,511 --> 08:54:19,921
ini sebenarnya hanya sistem untuk\n

9195
08:54:19,921 --> 08:54:22,421
Jadi mulai sekarang, kita akan\nmulai melihat heksadesimal

9196
08:54:23,831 --> 08:54:26,861
Saat Anda menulis kode, Anda bahkan mungkin\n

9197
08:54:26,862 --> 08:54:29,362
namun sekali lagi, ini hanyalah cara\nyang berbeda dalam merepresentasikan angka

9198
08:54:29,362 --> 08:54:32,621
dan manusia mempunyai\nkonvensi yang berbeda untuk konteks yang berbeda.

9199
08:54:32,621 --> 08:54:36,131
Baiklah, jadi, apa saja\n

9200
08:54:36,132 --> 08:54:41,682
Namun di sini, kita akan mulai\menggunakannya dalam beberapa kode aktual.

9201
08:54:45,441 --> 08:54:49,182
Jadi, mari kita lanjutkan dan pertimbangkan\nmungkin contoh yang umum.

9202
08:54:49,182 --> 08:54:52,932
Sesuatu yang melibatkan kode,\n

9203
08:54:52,932 --> 08:54:54,750
ke nilai seperti 50, dalam hal ini.

9204
08:54:54,750 --> 08:54:57,042
Lalu mari kita mulai memikirkan\napa yang terjadi

9205
08:54:57,042 --> 08:54:58,752
di dalam memori komputer.

9206
08:54:58,752 --> 08:55:01,551
Sebentar lagi saya akan memuat\nup VS Code di komputer saya

9207
08:55:01,551 --> 08:55:04,871
dan saya akan melanjutkan dan mencambuk\n

9208
08:55:04,871 --> 08:55:08,592
nilai seperti angka\n50 ke variabel bernama n

9209
08:55:08,592 --> 08:55:14,397
tapi hari ini, ingatlah bahwa\nvariabel itu n dan nilainya 50

9210
08:55:14,397 --> 08:55:16,764
akan disimpan di suatu tempat\nin memori komputer saya

9211
08:55:16,764 --> 08:55:19,932
dan ternyata hari ini kami akan memperkenalkan\n

9212
08:55:19,932 --> 08:55:22,371
melihat di mana barang-barang disimpan.

9213
08:55:22,371 --> 08:55:24,072
Jadi izinkan saya mengklik VS Code di sini.

9214
08:55:24,072 --> 08:55:27,042
Saya akan membuat\nprogram bernama address.c saja

9215
08:55:27,042 --> 08:55:29,532
untuk menjelajahi\nalamat komputer hari ini, dan saya

9216
08:55:29,531 --> 08:55:34,061
akan melakukan include stdio.h,\nint main(void), seperti biasa.

9217
08:55:34,062 --> 08:55:35,802
Tidak ada argumen baris perintah untuk saat ini.

9218
08:55:35,801 --> 08:55:38,403
Saya akan mendeklarasikan bahwa\nvariabel n sama dengan 50

9219
08:55:38,403 --> 08:55:40,611
lalu saya akan\nlangsung mencetaknya.

9220
08:55:40,612 --> 08:55:46,092
Jadi tidak ada yang menarik tapi saya akan\n

9221
08:55:47,682 --> 08:55:50,672
Tidak ada apa pun di sini yang\nmenarik untuk dikompilasi atau dijalankan

9222
08:55:50,671 --> 08:55:53,171
tapi aku akan melakukannya hanya untuk memastikan\naku tidak melakukan kesalahan apa pun.

9223
08:55:53,171 --> 08:55:58,662
Sepertinya seperti yang diharapkan, itu sederhana\n

9224
08:55:58,662 --> 08:56:02,141
Tapi mari kita pertimbangkan, apa ini\n

9225
08:56:02,141 --> 08:56:04,882
ketika itu benar-benar dijalankan di mesin Anda.

9226
08:56:04,882 --> 08:56:06,762
Jadi di sini kita memiliki jaringan memori itu.

9227
08:56:06,761 --> 08:56:10,811
Variabel n itu adalah int,\nand jika dipikir-pikir lagi

9228
08:56:10,812 --> 08:56:14,412
berapa byte yang biasanya\ndo kita gunakan untuk int?

9229
08:56:15,491 --> 08:56:18,050
Empat, jadi empat byte, atau 32 bit.

9230
08:56:18,050 --> 08:56:21,851
Jadi jika masing-masing kotak mewakili\n

9231
08:56:21,851 --> 08:56:25,173
di memori saya, atau RAM,\menggunakan empat kotak ini.

9232
08:56:25,173 --> 08:56:27,881
Mungkin berakhir di sini saja\n

9233
08:56:27,882 --> 08:56:29,092
digunakan di tempat lain, misalnya.

9234
08:56:29,092 --> 08:56:30,842
Meskipun aku tidak begitu\tahu, dan sejujurnya, aku

9235
08:56:30,842 --> 08:56:33,634
tidak terlalu peduli di mana ujungnya\n

9236
08:56:33,633 --> 08:56:37,300
Jadi variabel-- nilainya 50 adalah\n

9237
08:56:37,300 --> 08:56:40,941
Meskipun saya telah menulisnya sebagai\ndesimal, sama seperti di kode saya--

9238
08:56:40,941 --> 08:56:45,544
izinkan saya mengingatkan lagi bahwa ini adalah 32\n

9239
08:56:45,544 --> 08:56:48,711
itu akan sangat membosankan jika\n

9240
08:56:48,711 --> 08:56:51,711
jadi saya akan menggunakan\nsistem desimal manusia yang lebih nyaman.

9241
08:56:51,711 --> 08:56:54,502
Jadi itulah yang terjadi\nindi dalam memori komputer.

9242
08:56:54,502 --> 08:56:58,932
Jadi bagaimana jika saya sebenarnya ingin\n

9243
08:56:58,932 --> 08:57:01,452
atau mungkin sekedar mengetahui lokasinya?

9244
08:57:01,452 --> 08:57:05,262
Nah, variabel ini n\nin memang punya nama, n--

9245
08:57:05,261 --> 08:57:09,123
itu semacam label untuk itu--\n

9246
08:57:09,123 --> 08:57:11,831
secara teknis di alamat tertentu,\n

9247
08:57:11,831 --> 08:57:14,861
0x123, dan itu 123\nkarena sebenarnya tidak

9248
08:57:14,862 --> 08:57:17,781
peduli apa itu, aku hanya ingin\n

9249
08:57:17,781 --> 08:57:24,311
Jadi di sini di luar layar mungkin\n

9250
08:57:24,312 --> 08:57:28,222
Itu dalam notasi heksadesimal\nhanya berdasarkan konvensi.

9251
08:57:28,222 --> 08:57:32,052
Jadi bagaimana saya bisa melihat di mana\nvariabel saya berakhir

9252
08:57:32,051 --> 08:57:33,702
dalam memori jika saya penasaran untuk melakukannya?

9253
08:57:33,702 --> 08:57:37,182
Baiklah, izinkan saya kembali ke\nkode saya di sini dan izinkan saya melakukannya

9254
08:57:37,182 --> 08:57:39,441
ubah ini sedikit saja.

9255
08:57:39,441 --> 08:57:44,741
Izinkan saya memperkenalkan,\nmisalnya, simbol lainnya

9256
08:57:44,741 --> 08:57:48,941
di sini dan topik lain\nalbersama, yaitu pointer.

9257
08:57:48,941 --> 08:57:54,471
Jadi pointer adalah variabel yang\n

9258
08:57:54,472 --> 08:57:57,731
lokasi suatu nilai\atau lebih spesifik

9259
08:57:57,731 --> 08:58:01,042
byte spesifik tempat\nnilai tersebut disimpan.

9260
08:58:01,042 --> 08:58:04,301
Jadi sekali lagi, jika Anda memikirkan ingatan Anda\n

9261
08:58:04,301 --> 08:58:07,061
nol di kiri atas, 2 miliar\atau apa pun di kanan bawah

9262
08:58:07,062 --> 08:58:08,562
tergantung pada berapa banyak RAM yang Anda miliki--

9263
08:58:08,562 --> 08:58:10,842
masing-masing benda tersebut memiliki\na lokasi, atau alamat.

9264
08:58:10,842 --> 08:58:14,932
Pointer hanyalah sebuah variabel\nmenyimpan satu alamat tersebut.

9265
08:58:14,932 --> 08:58:20,112
Jadi ternyata di dunia\n

9266
08:58:20,112 --> 08:58:24,472
kita dapat menggunakannya jika kita ingin melihat apa\n

9267
08:58:24,472 --> 08:58:27,402
dan kedua operator tersebut,\nas saat ini, adalah ini.

9268
08:58:27,401 --> 08:58:31,191
Anda dapat menggunakan ampersand\nooperator di C dalam beberapa cara.

9269
08:58:31,191 --> 08:58:34,121
Kita sudah melihatnya secara singkat\nuntuk melakukan ampersand ampersand--

9270
08:58:34,121 --> 08:58:37,631
itu semacam dan dua\nekspresi Boolean bersama-sama

9271
08:58:37,632 --> 08:58:39,172
dalam konteks kondisional.

9272
08:58:40,182 --> 08:58:43,992
Satu ampersand adalah\nalamat operator.

9273
08:58:43,991 --> 08:58:48,011
Jadi secara harfiah, dalam kode Anda, jika Anda sudah\n

9274
08:58:48,011 --> 08:58:53,261
dan Anda menulis dann, C akan menghasilkan\n

9275
08:58:53,261 --> 08:58:55,731
variabel n dalam memori komputer.

9276
08:58:55,731 --> 08:59:01,362
Dan itu akan memberi Anda nomor,\n

9277
08:59:01,362 --> 08:59:05,141
Jika Anda ingin menyimpan\nalamat itu dalam sebuah variabel

9278
08:59:05,141 --> 08:59:11,202
padahal ya, itu angka seperti\n

9279
08:59:11,202 --> 08:59:17,082
yang ingin Anda simpan bukan int\n

9280
08:59:17,081 --> 08:59:20,711
Dan sintaks untuk melakukan itu--\nagak tidak jelas-- adalah

9281
08:59:20,711 --> 08:59:24,432
untuk menggunakan tanda bintang di sini,\na operator bintang, dan Anda

9282
08:59:24,432 --> 08:59:26,231
katakan ini saat membuat variabel.

9283
08:59:26,231 --> 08:59:30,731
Jika Anda ingin p menjadi penunjuk, itu\n

9284
08:59:32,412 --> 08:59:36,551
Dan bintang hanya memberitahu komputer,\n

9285
08:59:36,551 --> 08:59:40,002
ini adalah alamat\nsesuatu yang ya, adalah int

9286
08:59:40,002 --> 08:59:41,761
tapi kami hanya ingin lebih tepat.

9287
08:59:41,761 --> 08:59:44,662
Jadi di sisi kanan Anda\ndapatkan alamat operator.

9288
08:59:44,662 --> 08:59:47,641
Seperti biasa dengan tanda sama dengan,\nAnda menyalin dari kanan ke kiri.

9289
08:59:47,641 --> 08:59:51,592
Karena andn menurut definisinya adalah alamat\n

9290
08:59:51,592 --> 08:59:57,141
dalam sebuah pointer, dan cara mendeklarasikan a\n

9291
08:59:57,141 --> 09:00:01,191
alamat siapa yang Anda simpan, lalu\n

9292
09:00:01,191 --> 09:00:04,701
memang sebuah pointer dan bukan\nhanya int lama biasa.

9293
09:00:04,702 --> 09:00:06,172
Jadi mari kita lihat ini dalam praktiknya.

9294
09:00:06,171 --> 09:00:09,231
Biarkan saya kembali ke\nkode sumber saya sendiri di sini dan biarkan

9295
09:00:09,231 --> 09:00:11,241
saya hanya membuat beberapa penyesuaian.

9296
09:00:11,241 --> 09:00:13,581
Aku akan pergi sendirian di sini, tapi aku akan pergi

9297
09:00:13,581 --> 09:00:18,121
untuk melanjutkan dan pada awalnya lakukan saja ini.

9298
09:00:18,121 --> 09:00:22,702
Izinkan saya mengatakan int star\np sama dengan ampersand n

9299
09:00:22,702 --> 09:00:27,322
lalu di sini, saya akan\n

9300
09:00:28,761 --> 09:00:33,531
Dan meskipun ya, itu hanya\n

9301
09:00:33,531 --> 09:00:37,671
untuk bilangan bulat, sebenarnya ada\n khusus

9302
09:00:37,671 --> 09:00:40,881
pointer atau alamat, dan itu %p.

9303
09:00:40,882 --> 09:00:44,182
Jadi sekarang mari kita lanjutkan dan\nkompilasi ulang ini, buat alamat--

9304
09:00:44,182 --> 09:00:49,231
sejauh ini bagus-- ./address,\nEnter, dan sedikit aneh

9305
09:00:49,231 --> 09:00:53,871
tapi mungkin bisa dimengerti sekarang,\n

9306
09:00:53,871 --> 09:00:57,741
di mana variabel n terjadi pada\n

9307
09:00:59,241 --> 09:01:01,791
Komputer ini memiliki lebih banyak\nmemori secara teknis

9308
09:01:01,792 --> 09:01:07,852
itu disimpan di 0x7FFCB4578E5C.

9309
09:01:07,851 --> 09:01:10,011
Sekarang, hal itu tidak ada arti\nkhusus bagi saya.

9310
09:01:10,011 --> 09:01:12,241
Ini bisa saja berakhir\ndi tempat lain

9311
09:01:12,241 --> 09:01:15,741
tapi di sinilah tempatnya, di\n

9312
09:01:15,741 --> 09:01:18,261
server tempat saya terhubung\menggunakan VS Code di sini--

9313
09:01:18,261 --> 09:01:20,859
itu terjadi di\ntempat di mana n berakhir.

9314
09:01:20,859 --> 09:01:23,691
Dan sebenarnya, saya bahkan tidak\n

9315
09:01:23,691 --> 09:01:26,541
Saya bisa menyingkirkan p\ndan saya hanya bisa mengatakannya

9316
09:01:26,542 --> 09:01:30,262
cetak bukan hanya n, tetapi alamatnya\n

9317
09:01:30,261 --> 09:01:32,721
Anda tidak perlu\nmenyimpannya untuk sementara dalam sebuah variabel.

9318
09:01:32,722 --> 09:01:35,702
Biarkan saya melakukan make\nadress lagi, ./address

9319
09:01:35,702 --> 09:01:38,282
dan sekarang saya melihat alamat ini di sini.

9320
09:01:38,281 --> 09:01:41,826
Dan perhatikan apakah saya terus menjalankan\n

9321
09:01:41,827 --> 09:01:44,452
Mungkin ada hal lain\ yang terjadi di dalam komputer.

9322
09:01:44,452 --> 09:01:47,862
Mungkin sebenarnya mengacaknya begitu\n

9323
09:01:47,862 --> 09:01:50,362
Itu sebenarnya bisa menjadi\nfitur keamanan di balik layar

9324
09:01:50,362 --> 09:01:55,882
tapi ini terjadi pada saat itu\n

9325
09:01:55,882 --> 09:01:58,852
seperti gambar kita beberapa saat yang lalu.

9326
09:01:58,851 --> 09:02:02,002
Baiklah, izinkan saya berhenti sejenak\ndi sini untuk melihat apakah ada sekarang

9327
09:02:02,002 --> 09:02:03,531
ada pertanyaan tentang apa yang baru saja kami lakukan.

9328
09:02:05,531 --> 09:02:07,752
AUDIENCE: Apakah ada\ncara untuk mengontrol di mana

9329
09:02:07,752 --> 09:02:10,912
Anda menyimpan sesuatu di memori?

9330
09:02:10,912 --> 09:02:14,106
Apakah penting jika\nit berfungsi, atau hanya saja

9331
09:02:14,106 --> 09:02:16,632
peduli kamu bisa masuk\ndan menemukan di mana sesuatu itu berada?

9332
09:02:16,632 --> 09:02:18,174
DAVID J. MALAN: Pertanyaan yang sangat bagus.

9333
09:02:18,173 --> 09:02:20,741
Apakah ada cara untuk mengontrol\ndi mana sesuatu ada di memori?

9334
09:02:20,741 --> 09:02:23,698
Jawaban singkatnya adalah ya, dan ini\n

9335
09:02:23,699 --> 09:02:26,531
dan kita akan melakukannya hari ini\n

9336
09:02:26,531 --> 09:02:31,601
karena dengan kekuatan untuk pergi ke atau\n

9337
09:02:31,601 --> 09:02:33,701
Saya bisa seenaknya\nsaat ini menulis kode

9338
09:02:33,702 --> 09:02:37,972
yang menyimpan nilai sebesar byte 2 miliar,\n

9339
09:02:37,972 --> 09:02:42,132
Namun itu juga berarti kemungkinan besar,\nSaya bisa mulai mencari secara menakutkan

9340
09:02:42,132 --> 09:02:46,192
di seluruh memori komputer,\n

9341
09:02:46,191 --> 09:02:48,731
Mungkin program lain, mungkin\nbagian program lainnya

9342
09:02:48,731 --> 09:02:50,981
dan tentu saja, ini merupakan\npotensi ancaman keamanan

9343
09:02:50,981 --> 09:02:53,345
jika tiba-tiba Anda tidak dapat\nmelihat ke mana saja

9344
09:02:53,345 --> 09:02:54,762
Anda inginkan dalam memori komputer.

9345
09:02:54,761 --> 09:02:59,381
Sekarang, saya menjualnya sedikit secara berlebihan\n

9346
09:02:59,382 --> 09:03:01,932
ada beberapa pertahanan\nin yang ditempatkan di kompiler

9347
09:03:01,932 --> 09:03:05,301
dan di sistem operasi kami\n

9348
09:03:05,301 --> 09:03:07,752
Namun hal ini masih menjadi\nsumber masalah yang sering terjadi

9349
09:03:07,752 --> 09:03:10,152
dan hari ini kita akan\nberbicara singkat tentang berbagai hal

9350
09:03:10,151 --> 09:03:13,011
disebut stack overflow,\nyang bukan hanya sebuah situs web

9351
09:03:13,011 --> 09:03:15,191
itu adalah masalah yang dapat Anda temui.

9352
09:03:15,191 --> 09:03:17,711
Heap overflow, dan lebih\numumnya buffer overflow--

9353
09:03:17,711 --> 09:03:21,162
ada banyak hal yang bisa\n

9354
09:03:21,162 --> 09:03:24,761
dan apakah ada di antara Anda yang pernah mengalami\na kesalahan segmentasi?

9355
09:03:24,761 --> 09:03:26,681
Saya rasa kita sudah melihat beberapa\ntangan yang melakukan hal tersebut.

9356
09:03:26,682 --> 09:03:29,262
Anda menyentuh memori\nyang seharusnya tidak Anda miliki

9357
09:03:29,261 --> 09:03:33,971
dan kemungkinan besar Anda melakukannya baru-baru ini\n

9358
09:03:33,972 --> 09:03:37,362
Ke kiri, atau negatif di\n

9359
09:03:38,202 --> 09:03:42,412
Dan hari ini kami akan menjelaskan mengapa\nAnda dapat melakukan hal tersebut.

9360
09:03:42,412 --> 09:03:44,891
Pertanyaan lain tentang\nprimitif ini sejauh ini?

9361
09:03:46,984 --> 09:03:50,109
HADIRIN: bintang penunjuk [TIDAK TERDENGAR] p,\n

9362
09:03:51,391 --> 09:03:52,641
DAVID J. MALAN: Pertanyaan bagus.

9363
09:03:53,932 --> 09:03:56,422
Izinkan saya memundurkan waktu ke\nversi sebelumnya dari kode ini

9364
09:03:56,421 --> 09:03:58,701
di mana saya sebenarnya memiliki\na variabel bernama p.

9365
09:03:58,702 --> 09:04:02,512
Sama seperti deklarasi\nvariabel di masa lalu

9366
09:04:02,511 --> 09:04:07,981
setelah Anda mendeklarasikan variabel ke\n

9367
09:04:07,981 --> 09:04:11,121
bintang, alias penunjuk,\nsetelah itu jangan lakukan itu

9368
09:04:11,121 --> 09:04:14,031
tetap gunakan kata\nint atau sekarang, bintang.

9369
09:04:14,031 --> 09:04:15,831
Setelah Anda mendeklarasikannya, itu saja.

9370
09:04:15,831 --> 09:04:17,281
Anda hanya menyebutnya dengan nama.

9371
09:04:17,281 --> 09:04:21,471
Jadi, apa yang saya lakukan di sini sangat\ndisengaja

9372
09:04:21,472 --> 09:04:24,022
mengatakan bahwa tipe di sini adalah int star--

9373
09:04:24,022 --> 09:04:26,031
itu adalah penunjuk ke int--

9374
09:04:26,031 --> 09:04:28,971
tapi di sini saya hanya menyebutkan nama\nvariabelnya, seperti biasa.

9375
09:04:28,972 --> 09:04:31,672
Saya tidak mengulangi int, dan\nSaya juga tidak mengulangi bintang.

9376
09:04:31,671 --> 09:04:34,551
Namun dengan risiko membuat\tidak ada orang yang terpengaruh sedikit pun

9377
09:04:34,551 --> 09:04:40,801
sayangnya ada kegunaan lain untuk\n

9378
09:04:40,801 --> 09:04:44,542
Jika Anda ingin mencetak bukan\nalamat sesuatu

9379
09:04:44,542 --> 09:04:49,622
tapi apa yang ada di\nalamat tertentu, Anda sebenarnya bisa melakukan ini.

9380
09:04:49,621 --> 09:04:54,981
Jika saya ingin mencetak bilangan bulat\n

9381
09:04:54,981 --> 09:04:59,421
Saya sebenarnya bisa menggunakan bintang di sini, yang mana\n

9382
09:04:59,421 --> 09:05:02,521
dikatakan tetapi memiliki\nfungsi yang berbeda di sini-- tujuan yang berbeda.

9383
09:05:02,522 --> 09:05:04,922
Jadi izinkan saya melanjutkan\nini dengan dua cara berbeda.

9384
09:05:04,921 --> 09:05:06,726
Saya akan membiarkan\nbaris kode ini apa adanya

9385
09:05:06,726 --> 09:05:08,601
tapi saya akan menambahkan\nanbaris kode lain sekarang

9386
09:05:08,601 --> 09:05:12,561
yang mencetak apa yang tampaknya\nakan menjadi bilangan bulat, sebentar lagi.

9387
09:05:12,562 --> 09:05:16,485
Jadi %i garis miring terbalik n, dan saya bisa\n

9388
09:05:16,485 --> 09:05:18,652
Jadi sebenarnya tidak ada\nhal istimewa yang terjadi sekarang, aku

9389
09:05:18,651 --> 09:05:20,661
hanya menambahkan semacam\npencetakan n yang tidak ada artinya.

9390
09:05:20,662 --> 09:05:23,402
Jadi buatlah alamat, ./address--

9391
09:05:23,401 --> 09:05:26,961
ada alamat\nn saat ini dan ada nilai n.

9392
09:05:26,961 --> 09:05:29,932
Tapi apa yang\nkeren tentang C di sini juga

9393
09:05:29,932 --> 09:05:34,222
adalah jika Anda mengetahui bahwa suatu nilai\nat alamat tertentu seperti p

9394
09:05:34,222 --> 09:05:37,952
ada satu kegunaan lain untuk\noperator bintang ini, yaitu tanda bintang.

9395
09:05:37,952 --> 09:05:41,582
Anda dapat menggunakannya sebagai\nyang disebut operator dereferensi

9396
09:05:41,581 --> 09:05:44,431
yang berarti pergi ke alamat itu.

9397
09:05:44,432 --> 09:05:50,062
Dan inilah yang sebenarnya kita miliki\adalah contoh pointer p

9398
09:05:50,062 --> 09:05:54,992
yang merupakan alamat seperti\n0x123 atau 0x7FF dan seterusnya.

9399
09:05:54,991 --> 09:05:58,551
Namun jika Anda mengatakan bintang p sekarang, Anda\ntidak mendeklarasikan ulang variabel tersebut

9400
09:05:58,551 --> 09:05:59,991
karena saya tidak menyebutkan int--

9401
09:05:59,991 --> 09:06:02,751
Anda akan pergi ke alamat itu di p.

9402
09:06:02,752 --> 09:06:04,432
Jadi izinkan saya mengkompilasi ulang ini sekarang.

9403
09:06:04,432 --> 09:06:10,552
Buat alamat, ./address,\ndan untuk memperjelas--

9404
09:06:12,082 --> 09:06:15,592
Saya pertama-tama akan melihat\npointer itu sendiri, 0x sesuatu.

9405
09:06:15,591 --> 09:06:18,456
Apa baris keluaran kedua\nyang mungkin harus saya lihat sekarang?

9406
09:06:22,951 --> 09:06:27,271
Jadi saya dengar 50, dan itu benar\n

9407
09:06:27,271 --> 09:06:33,511
dari n dan mencetaknya di baris tujuh, tapi\n

9408
09:06:33,512 --> 09:06:36,692
itu memang hanya akan\nmenunjukkan nomor n--

9409
09:06:39,482 --> 09:06:42,389
Baiklah, ada pertanyaan sekarang\n

9410
09:06:42,389 --> 09:06:44,222
Saya rasa ini membingungkan--\nfaktanya kita

9411
09:06:44,222 --> 09:06:46,412
gunakan bintang untuk\nperkalian, faktanya

9412
09:06:46,411 --> 09:06:48,721
bahwa kita menggunakan bintang\nuntuk mendeklarasikan sebuah pointer

9413
09:06:48,722 --> 09:06:51,961
tapi kemudian kita menggunakan bintang dengan cara\nketiga untuk melakukan dereferensi penunjuk

9414
09:06:53,012 --> 09:06:56,612
Jujur saja, ini terlalu membingungkan,\n

9415
09:07:07,862 --> 09:07:09,112
DAVID J. MALAN: Pertanyaan bagus.

9416
09:07:09,112 --> 09:07:12,682
Apakah Anda-- saat Anda menggunakan\noperator ampersand

9417
09:07:12,682 --> 09:07:14,631
untuk mendapatkan alamat\nsesuatu, tanggung jawabnya

9418
09:07:14,631 --> 09:07:18,771
ada pada Anda saat ini untuk mengetahuinya\n

9419
09:07:22,042 --> 09:07:25,402
Saya menulis kode ini jadi saya\tahu di baris enam bahwa saya memang demikian

9420
09:07:25,402 --> 09:07:28,491
mencoba mendapatkan alamat\nyang merupakan bilangan bulat.

9421
09:07:28,491 --> 09:07:30,631
HADIRIN: Bagaimana dengan baris delapan?

9422
09:07:30,631 --> 09:07:34,351
DAVID J. MALAN: Dalam antrean\nyang tidak Anda miliki

9423
09:07:34,351 --> 09:07:36,182
perlu khawatir tentang itu-- pertanyaan bagus.

9424
09:07:36,182 --> 09:07:40,211
Perhatikan di baris delapan, saya tidak memberi tahu\n

9425
09:07:40,211 --> 09:07:44,911
alamat apa yang akan saya tuju\n

9426
09:07:44,911 --> 09:07:47,941
Saya memberi tahu kompiler\nbahwa p, sekarang dan selamanya

9427
09:07:47,942 --> 09:07:50,402
akan menjadi alamat int.

9428
09:07:50,402 --> 09:07:55,322
Itu sudah cukup informasi sebelumnya, jadi\n

9429
09:07:55,322 --> 09:07:59,311
masih mengetahui di baris delapan\nbahwa p adalah penunjuk ke int

9430
09:07:59,311 --> 09:08:02,731
dan dengan cara itu ia akan mencetak\nempat byte pada alamat itu

9431
09:08:02,732 --> 09:08:06,649
bukan hanya sebagian saja, dan tidak\nlebih dari empat byte tersebut.

9432
09:08:09,161 --> 09:08:10,661
HADIRIN: Apakah pointer memiliki pointer?

9433
09:08:10,661 --> 09:08:11,961
DAVID J. MALAN: Apakah\npointer mempunyai pointer?

9434
09:08:12,461 --> 09:08:16,091
Kami tidak akan melakukan ini hari ini dengan\nmemiliki pointer ke pointer

9435
09:08:16,091 --> 09:08:19,781
tapi ya, Anda bisa menggunakan bintang\nbintang, dan semuanya akan menjadi--

9436
09:08:21,671 --> 09:08:23,862
Kami tidak akan melakukan hal itu hari ini dan\nkami tidak akan sering melakukannya.

9437
09:08:23,862 --> 09:08:26,412
Faktanya, Python, bahasa lain,\nhanya membutuhkan waktu beberapa minggu

9438
09:08:31,692 --> 09:08:33,552
Itu-- lebih banyak tanggapan verbal\nseperti itu

9439
09:08:33,552 --> 09:08:36,232
sangat membantu saat kita melanjutkan\nhal-hal yang lebih rumit.

9440
09:08:38,269 --> 09:08:40,145
HADIRIN: Apa gunanya\n[TIDAK TERDENGAR]??

9441
09:08:43,432 --> 09:08:46,521
DAVID J. MALAN: Apa gunanya\nmencetak alamatnya?

9442
09:08:46,521 --> 09:08:49,811
AUDIENCE: Seperti, menggunakan\nadress ke [Tak terdengar]..

9443
09:08:50,741 --> 09:08:51,881
Apa gunanya melakukan ini?

9444
09:08:51,881 --> 09:08:54,131
Jika Anda tidak keberatan, izinkan saya--\nmari kita ke sana sebentar lagi.

9445
09:08:54,131 --> 09:08:56,831
Ini bukan kasus penggunaan umum,\nhanya mencetak alamat--

9446
09:08:58,182 --> 09:09:00,762
Saat ini kami hanya peduli\nuntuk kepentingan diskusi.

9447
09:09:00,762 --> 09:09:02,814
Kami akan segera mulai\menggunakan alamat ini.

9448
09:09:02,813 --> 09:09:05,021
Jadi bertahanlah\nsedikit saja untuk hal itu juga

9449
09:09:05,021 --> 09:09:08,981
tapi itu akan menyelesaikan beberapa\nmasalah bagi kita tidak lama lagi.

9450
09:09:08,982 --> 09:09:12,672
Jadi sekarang mari kita gambarkan apa\n

9451
09:09:15,052 --> 09:09:19,332
Jadi jika saya kembali ke sini, biarkan\nsaya menggambar ulang memori komputer saya

9452
09:09:19,332 --> 09:09:22,781
sekarang izinkan saya memasukkan ke dalam memori n,\n

9453
09:09:23,832 --> 09:09:25,992
Di mana p di memori komputer saya?

9454
09:09:25,991 --> 09:09:29,051
Secara khusus, saya tidak tahu dan\n

9455
09:09:29,052 --> 09:09:31,102
jalankan programnya untuk\ndemi diskusi

9456
09:09:31,101 --> 09:09:36,072
mari kita usulkan saja jika 50 berakhir\n

9457
09:09:36,072 --> 09:09:38,832
p berakhir di sini, di alamat--

9458
09:09:38,832 --> 09:09:42,022
ups-- di mana saja\nalamat ini di sini.

9459
09:09:42,021 --> 09:09:44,471
Namun perhatikan beberapa keingintahuan sekarang.

9460
09:09:44,472 --> 09:09:47,982
Jika p adalah sebuah penunjuk, itu\nalamat sesuatu.

9461
09:09:47,982 --> 09:09:53,322
Jadi nilai dalam p seharusnya berupa alamat,\n

9462
09:09:53,322 --> 09:09:57,432
0x123, dan secara teknis tidak ada\n

9463
09:09:57,432 --> 09:09:59,832
bahkan tidak ada 123\ndi sana-- ada

9464
09:09:59,832 --> 09:10:03,372
pola bit yang\nmewakili alamat 0x123.

9465
09:10:03,372 --> 09:10:07,042
Tapi sekali lagi, itu nol lemah--\n

9466
09:10:07,042 --> 09:10:13,122
Jadi jika ini p, dan ini saya klaim\n

9467
09:10:13,122 --> 09:10:15,592
Adakah yang bisa menebak di sini?

9468
09:10:15,591 --> 09:10:20,421
Karena ternyata n\nis adalah int atau char atau bool

9469
09:10:20,421 --> 09:10:23,061
yang berbeda\ntipe-- sialnya, bahkan panjang--

9470
09:10:23,061 --> 09:10:27,231
ternyata p selalu berjalan\n

9471
09:10:36,868 --> 09:10:40,812
AUDIENCE: Mungkin\nmengalokasikan delapan byte

9472
09:10:40,811 --> 09:10:44,319
tetapi tidak mengetahui tipe\ndatanya [Tak terdengar]..

9473
09:10:45,362 --> 09:10:47,552
Mungkin itu mengalokasikan delapan byte\n

9474
09:10:47,552 --> 09:10:50,072
Ternyata tidak apa-apa karena\nan alamat adalah sebuah alamat.

9475
09:10:50,072 --> 09:10:53,641
Terserah programmer untuk\n

9476
09:10:55,741 --> 09:11:00,803
HADIRIN: Mungkin empat yang pertama untuk\n

9477
09:11:00,803 --> 09:11:06,393
adalah beberapa null yang [Tak Terdengar]\ndi mana penunjuk berakhir.

9478
09:11:06,394 --> 09:11:07,601
DAVID J. MALAN: Oke, mungkin.

9479
09:11:07,601 --> 09:11:10,572
Bisa jadi petunjuknya ada\n

9480
09:11:10,572 --> 09:11:13,451
atau sesuatu yang aneh seperti itu,\n

9481
09:11:13,451 --> 09:11:15,112
Ternyata bukan itu masalahnya.

9482
09:11:15,112 --> 09:11:18,641
Ternyata petunjuknya\nsaat ini biasanya memang demikian, namun tidak

9483
09:11:18,641 --> 09:11:21,281
selalu delapan byte, alias

9484
09:11:21,281 --> 09:11:24,461
64 bit, karena Anda dan\nSaya-- Mac kami, PC kami

9485
09:11:24,461 --> 09:11:28,271
heck-- bahkan ponsel kita punya banyak\n

9486
09:11:28,271 --> 09:11:30,161
Dahulu, sebuah\npointer mungkin hanya memilikinya

9487
09:11:30,161 --> 09:11:34,061
sudah 32 bit, atau bahkan hanya\ndelapan bit pada masa lalu.

9488
09:11:34,061 --> 09:11:36,911
Ini dianggap 32 bit, karena\n

9489
09:11:36,911 --> 09:11:40,451
Seberapa tinggi Anda dapat menghitung,\nkira-kira, jika Anda memiliki 32 bit?

9490
09:11:40,451 --> 09:11:43,261
Berapa nomor yang terus kita ucapkan?

9491
09:11:43,262 --> 09:11:48,422
32 bit kira-kira 2 banding\n32, jadi 4 miliar

9492
09:11:48,421 --> 09:11:52,631
dan saya terus mengatakan itu 2 miliar jika Anda\n

9493
09:11:52,631 --> 09:11:55,891
ada alasan mengapa saya terus mengatakan\n2 miliar byte, dua gigabyte

9494
09:11:55,891 --> 09:11:58,951
karena untuk waktu yang sangat lama\n

9495
09:12:00,482 --> 09:12:02,852
Karena petunjuk yang\ndigunakan komputer

9496
09:12:02,851 --> 09:12:04,891
hanya, misalnya, 32 bit.

9497
09:12:04,891 --> 09:12:07,951
Dan dengan 32 bit, tergantung apakah\n

9498
09:12:07,951 --> 09:12:10,981
Anda dapat menghitung sebanyak 2 miliar,\nkira-kira, atau mungkin 4 miliar

9499
09:12:10,982 --> 09:12:13,322
tapi tahukah Anda--\nMac Anda, PC Anda, ponsel Anda

9500
09:12:13,322 --> 09:12:17,802
tidak mungkin memiliki lima gigabyte\n

9501
09:12:17,802 --> 09:12:20,552
Anda tentu saja tidak mungkin memilikinya\n

9502
09:12:20,552 --> 09:12:22,532
yang mungkin memiliki memori 8 gigabyte--

9503
09:12:24,572 --> 09:12:28,862
Karena dengan 4 byte, atau 32\nbit, Anda secara fisik

9504
09:12:28,862 --> 09:12:32,972
tidak bisa menghitung setinggi itu, artinya jika saya\n

9505
09:12:32,972 --> 09:12:36,662
akan kehabisan angka untuk dijelaskan\n

9506
09:12:37,991 --> 09:12:41,131
Jadi pointer saat ini berukuran\n64 bit, atau delapan byte.

9507
09:12:41,881 --> 09:12:43,798
Saya bahkan tidak bisa menyebutkan\nseberapa besar angka tersebut

9508
09:12:43,798 --> 09:12:46,411
tapi jumlahnya cukup untuk\nbeberapa tahun ke depan, dan seterusnya

9509
09:12:46,411 --> 09:12:48,241
kami telah menggambarnya\nseperti itu di papan di sini.

9510
09:12:48,241 --> 09:12:49,862
Sekarang mari kita abstrak saja.

9511
09:12:49,862 --> 09:12:51,569
Mari kita singkirkan semua\nbyte lain itu

9512
09:12:51,569 --> 09:12:54,271
sedang menyimpan sesuatu atau\ntidak ada yang lain, dan sekarang mari kita lakukan

9513
09:12:54,271 --> 09:12:57,601
mulailah mengabstraksikan\nkompleksitas ini karena kenyataannya memang demikian

9514
09:12:59,491 --> 09:13:01,801
untuk apa ini berguna, atau\napa gunanya kita-- sebenarnya apa yang kita lakukan

9515
09:13:04,322 --> 09:13:06,421
Kami melakukan ini agar\nAnda melihat tidak ada keajaiban.

9516
09:13:06,421 --> 09:13:09,311
Kami hanya memindahkan berbagai hal\nd mengaduk-aduk memori.

9517
09:13:09,311 --> 09:13:12,151
Namun apa yang biasanya\ dilakukan seseorang ketika berbicara tentang petunjuk

9518
09:13:12,152 --> 09:13:14,762
sebenarnya berarti\nhanya menunjuk pada sesuatu.

9519
09:13:14,762 --> 09:13:17,312
Saya benar-benar tidak peduli\ndi alamat mana

9520
09:13:17,311 --> 09:13:20,491
jadi cukup kalau umum, kapan\n

9521
09:13:20,491 --> 09:13:22,381
berdiskusi\ndengan programmer lain

9522
09:13:22,381 --> 09:13:26,701
Anda cukup menggambar panah dari\n

9523
09:13:26,701 --> 09:13:31,830
karena baik Anda maupun saya mungkin tidak peduli\n

9524
09:13:31,830 --> 09:13:35,173
Ini petunjuknya-- secara harfiah\n

9525
09:13:35,173 --> 09:13:37,381
Jadi ternyata\npointer ini, alamat ini

9526
09:13:37,381 --> 09:13:41,191
tidak jauh berbeda dengan apa\nyang telah kita lakukan selama ratusan tahun

9527
09:13:41,192 --> 09:13:43,742
dalam bentuk sistem pos.

9528
09:13:43,741 --> 09:13:45,481
Misalnya, ini adalah kantor pos--

9529
09:13:45,482 --> 09:13:48,092
di sini, tidak-- ini ada\nkotak surat, dan misalkan

9530
09:13:48,091 --> 09:13:50,791
bahwa ini adalah kotak surat berlabel p.

9531
09:13:50,792 --> 09:13:53,552
Itu adalah sebuah penunjuk, dan misalkan\nada kotak surat lain

9532
09:13:53,552 --> 09:13:57,402
jauh di sana, yaitu\n

9533
09:13:57,402 --> 09:13:59,192
Apa yang sebenarnya kita bicarakan?

9534
09:13:59,192 --> 09:14:03,242
Nah, Anda menyimpannya di komputer\n

9535
09:14:03,241 --> 09:14:07,201
atau kata "hai" di dalam\n Anda

9536
09:14:07,201 --> 09:14:11,281
Namun saat ini kami juga dapat menggunakan\nlokasi memori yang sama

9537
09:14:11,281 --> 09:14:12,911
untuk menyimpan alamat sesuatu.

9538
09:14:12,911 --> 09:14:16,711
Misalnya, jika saya\membuka ini di sini dan saya

9539
09:14:16,711 --> 09:14:20,432
lihat OK, nilai di dalamnya\n

9540
09:14:21,722 --> 09:14:26,222
0x123-- itu seperti\npointer, sebuah remah roti yang memimpin

9541
09:14:26,222 --> 09:14:28,022
dari satu lokasi di memori ke lokasi lain.

9542
09:14:28,021 --> 09:14:30,521
Dan faktanya, apakah seseorang yang\nduduknya kira-kira di sana--

9543
09:14:30,521 --> 09:14:33,121
apakah kamu keberatan mengirimkan surat ke sana?

9544
09:14:33,122 --> 09:14:35,942
Adakah sukarelawan di bagian ini?

9545
09:14:35,942 --> 09:14:38,292
Anda hanya perlu membuka\nkotak surat sebelum saya melakukannya.

9546
09:14:40,832 --> 09:14:46,287
Siapa pun yang memberi isyarat paling\nliar, turunlah.

9547
09:14:58,561 --> 09:15:01,441
Oke, ayo ke tepi\n

9548
09:15:01,442 --> 09:15:05,162
jika ini p, itu\nampaknya n, tetapi untuk memperjelas

9549
09:15:05,161 --> 09:15:07,981
apa yang kita bicarakan saat\nkita menyimpan 0x berapa pun nilainya--

9550
09:15:07,982 --> 09:15:11,132
seperti 0x123, itu\pada dasarnya setara dengan milik saya

9551
09:15:11,131 --> 09:15:13,862
mungkin mengeluarkan sesuatu\nseperti ini dan adil

9552
09:15:13,862 --> 09:15:16,412
secara abstrak menunjuk\nke kotak surat Anda di sana

9553
09:15:16,411 --> 09:15:20,671
atau jika Anda mau,\nmenunjuk ke kotak surat--

9554
09:15:28,021 --> 09:15:30,182
Ini mirip dengan saya\nmenunjuk ke kotak surat Anda

9555
09:15:30,182 --> 09:15:32,224
dan jika Anda ingin\nasilahkan buka kotak surat Anda

9556
09:15:32,224 --> 09:15:38,562
dan mengungkapkan kepada orang banyak apa yang\ndi dalam kotak surat Anda yang berlabel n.

9557
09:15:43,961 --> 09:15:46,582
Kami memiliki sedikit tekanan\nCS50 untuk masalah Anda.

9558
09:15:47,913 --> 09:15:50,621
Jadi itu hanya untuk menampilkan visual\n

9559
09:15:50,622 --> 09:15:53,532
karena bisa menjadi sangat abstrak,\n

9560
09:15:53,531 --> 09:15:56,752
berbicara tentang alamat dan memori dan\n

9561
09:15:56,752 --> 09:15:59,669
Namun jika Anda berpikir untuk berjalan saja\n

9562
09:15:59,669 --> 09:16:02,622
kompleks yang mempunyai banyak\nkotak surat, kotak surat itu

9563
09:16:02,622 --> 09:16:05,592
pada dasarnya adalah sejumlah besar memori dan masing-masing

9564
09:16:05,591 --> 09:16:07,451
dari kotak surat tersebut memiliki alamat--

9565
09:16:07,451 --> 09:16:10,182
ini apartemen satu, dua,\ntiga-- apartemen 2 miliar.

9566
09:16:10,182 --> 09:16:13,451
Dan di dalam\nkotak surat itu bisa ada apa saja

9567
09:16:13,451 --> 09:16:15,621
yang dapat direpresentasikan sebagai informasi.

9568
09:16:15,622 --> 09:16:18,702
Bisa berupa angka\nseperti n, atau 50, atau jika Anda

9569
09:16:18,701 --> 09:16:21,101
lebih suka itu bisa menjadi\nangka yang mewakili

9570
09:16:21,101 --> 09:16:22,991
alamat kotak surat lain.

9571
09:16:22,991 --> 09:16:26,171
Dan ini serupa, sungguh, jika\nAnda pernah memiliki apartemen atau Anda sendiri

9572
09:16:26,171 --> 09:16:28,991
dan orang tuamu telah pindah,\nmemiliki alamat penerusan.

9573
09:16:28,991 --> 09:16:31,362
Ini seperti memiliki\nKantor Pos di AS

9574
09:16:31,362 --> 09:16:34,842
letakkan selembar kertas\di kotak surat lama Anda yang bertuliskan

9575
09:16:34,841 --> 09:16:37,271
meneruskannya\nke kotak surat lainnya.

9576
09:16:37,271 --> 09:16:39,641
Hanya itu yang dilakukan pointer.

9577
09:16:39,641 --> 09:16:41,351
Pada akhirnya,\itu hanyalah angka

9578
09:16:41,351 --> 09:16:43,691
tapi itu nomor yang\digunakan dengan cara berbeda

9579
09:16:43,692 --> 09:16:45,822
dan itulah sintaks\nyang telah kami perkenalkan

9580
09:16:45,822 --> 09:16:49,631
bukan hanya int tapi int bintang,\nyang memberi tahu komputer caranya

9581
09:16:49,631 --> 09:16:54,101
untuk memperlakukan nomor tersebut dengan\ncara yang sedikit berbeda.

9582
09:16:54,101 --> 09:16:57,201
Apakah ada pertanyaan mengenai hal ini?

9583
09:16:59,322 --> 09:17:01,739
AUDIENCE: Jika Anda memiliki variabel,\nseperti int c, [Tak terdengar]..

9584
09:17:06,072 --> 09:17:08,052
DAVID J. MALAN: Jika saya melakukan int c dan--

9585
09:17:12,372 --> 09:17:14,502
Sama dengan n, jadi izinkan saya\nmengetiknya.

9586
09:17:14,502 --> 09:17:16,631
Jika saya memberi diri saya\nbaris kode lain, beri tahu saya

9587
09:17:16,631 --> 09:17:22,612
untuk terakhir kalinya apa yang harus diketik.\nint sama dengan n, seperti ini?

9588
09:17:22,612 --> 09:17:27,311
Jadi ini oke, dan saya tidak bisa menggambarnya\n

9589
09:17:27,311 --> 09:17:31,542
tapi ini seperti membuat yang lain\n

9590
09:17:31,542 --> 09:17:35,592
di sini, yang menyimpan\nan salinan identik dari 50

9591
09:17:35,591 --> 09:17:38,741
karena operator penugasan\n

9592
09:17:39,561 --> 09:17:43,031
Jadi itu hanya akan menambah satu\nlebih banyak persegi panjang berukuran empat

9593
09:17:45,752 --> 09:17:47,732
Jika saya menjawab\npertanyaan Anda sebagaimana dimaksud.

9594
09:17:47,732 --> 09:17:52,592
Oke, jadi itu adalah penggunaan gaya minggu pertama\n

9595
09:17:52,591 --> 09:17:55,411
Namun, saya dapat mulai menyalin\npetunjuk, tetapi sekali lagi, kami akan melakukannya

9596
09:17:55,411 --> 09:17:57,241
kembali ke beberapa kompleksitas itu.

9597
09:17:58,781 --> 09:18:00,281
HADIRIN: Itu adalah pertanyaan yang bagus.

9598
09:18:02,201 --> 09:18:05,444
apakah penunjuk yang sama juga menunjuk\nke replika baru?

9599
09:18:05,444 --> 09:18:06,862
DAVID J. MALAN: Ah, pertanyaan bagus.

9600
09:18:07,766 --> 09:18:12,461
Dan untuk mengulanginya pada kamera, jika saya\n

9601
09:18:12,461 --> 09:18:16,631
int c sama dengan n, dan saya klaim tanpa\n

9602
09:18:16,631 --> 09:18:20,551
sehingga ini memberi saya persegi panjang lain,\n

9603
09:18:22,042 --> 09:18:24,402
Dan inilah yang penting\ndan benar-benar menjadi ciri khasnya

9604
09:18:24,402 --> 09:18:28,362
dari C. Tidak ada yang terjadi\otomatis untuk Anda.

9605
09:18:28,362 --> 09:18:31,942
p tidak akan diperbarui\kecuali Anda memperbarui p dengan cara tertentu

9606
09:18:31,942 --> 09:18:34,482
jadi buatlah variabel\nketiga yang disebut c-- even

9607
09:18:34,482 --> 09:18:36,882
jika Anda menyalin\nnilainya dari kanan ke kiri

9608
09:18:36,881 --> 09:18:40,061
itu tidak berpengaruh pada\apa pun hal lain dalam program ini.

9609
09:18:41,391 --> 09:18:47,561
Jadi apa yang telah kita lihat mungkin\n

9610
09:18:47,561 --> 09:18:51,581
Ingatlah bahwa kita sudah cukup lama berbincang\n

9611
09:18:51,582 --> 09:18:57,461
untuk merangkum dalam istilah awam, apa itu\n

9612
09:18:57,461 --> 09:18:59,551
Jadi katakanlah-- baiklah, izinkan saya\nmelakukan bantuan khusus di sini.

9613
09:19:02,286 --> 09:19:03,661
AUDIENCE: Serangkaian karakter.

9614
09:19:06,332 --> 09:19:09,122
Serangkaian karakter, dan kami--

9615
09:19:09,122 --> 09:19:12,242
Saya mengklaim-- atau mengungkapkannya minggu lalu\nbahwa string tersebut secara teknis tidak ada

9616
09:19:12,241 --> 09:19:15,511
sebuah fitur bawaan C. Ini\nbukan tipe data resmi

9617
09:19:15,512 --> 09:19:17,762
tetapi setiap programmer\nin hampir semua bahasa

9618
09:19:17,762 --> 09:19:21,002
mengacu pada urutan\nkarakter-- kata, huruf

9619
09:19:22,811 --> 09:19:26,131
Jadi bahasa daerahnya ada tetapi\ntipe datanya biasanya tidak

9620
09:19:26,131 --> 09:19:29,471
ada di C. Jadi apa\nyang akan kami lakukan, jika Anda mau

9621
09:19:29,472 --> 09:19:32,311
untuk efek dramatis, hari ini\nlepaskan beberapa roda latihan.

9622
09:19:32,311 --> 09:19:36,811
Pustaka CS50 diimplementasikan di\n

9623
09:19:36,811 --> 09:19:38,941
kami mengklaim memiliki\nbanyak hal di dalamnya.

9624
09:19:38,942 --> 09:19:42,122
Prototipe untuk GetString,\nprototipe untuk GetInt

9625
09:19:42,122 --> 09:19:44,641
dan semua fungsi\nlainnya, tapi ternyata

9626
09:19:44,641 --> 09:19:48,841
itu juga yang mendefinisikan\nkata "string" sedemikian rupa

9627
09:19:48,841 --> 09:19:51,341
sehingga Anda semua dapat menggunakannya\nbeberapa minggu terakhir.

9628
09:19:51,341 --> 09:19:54,002
Jadi mari kita lihat\contoh string yang digunakan.

9629
09:19:54,002 --> 09:19:56,042
Di sini, misalnya,\ada sedikit kode

9630
09:19:56,042 --> 09:20:00,781
yang menggunakan kata "string",\nmembuat variabel bernama s

9631
09:20:00,781 --> 09:20:03,443
dan kemudian menyimpan kutipan\nunquote, hai, tanda seru.

9632
09:20:03,444 --> 09:20:06,152
Mari kita lihat tampilannya\n

9633
09:20:06,152 --> 09:20:08,902
Aku tidak peduli dengan yang lainnya\n

9634
09:20:08,902 --> 09:20:11,912
dan ini per minggu terakhir\ncara "hai" disimpan.

9635
09:20:11,911 --> 09:20:14,671
h-i tanda seru dan kemudian\tidak lebih, karena sudah menjadi seseorang

9636
09:20:14,671 --> 09:20:18,511
diamati, nilai penjaga itu--\nkarakter nol itu yang

9637
09:20:18,512 --> 09:20:21,919
hanya berarti delapan bit nol untuk\nmembatasi akhir string itu

9638
09:20:21,919 --> 09:20:24,002
kalau-kalau ada\nsesuatu di sebelah kanannya

9639
09:20:24,002 --> 09:20:27,162
komputer sekarang dapat membedakan\tidak ada string dari string lainnya.

9640
09:20:27,161 --> 09:20:30,364
Jadi minggu lalu kami memperkenalkan\nsintaks baru ini.

9641
09:20:30,364 --> 09:20:32,281
Nah, jika string\nhanyalah array karakter

9642
09:20:32,281 --> 09:20:35,192
Anda kemudian dapat dengan cerdik menggunakan\nnotasi tanda kurung siku itu

9643
09:20:35,192 --> 09:20:39,992
dan pergi ke lokasi nol atau satu\atau dua, yang seperti alamat

9644
09:20:39,991 --> 09:20:41,792
tapi mereka relatif terhadap string.

9645
09:20:41,792 --> 09:20:46,741
Ini bisa pada 0x123 atau 0x456,\ntetapi dengan notasi braket ini

9646
09:20:46,741 --> 09:20:49,741
nol selalu merupakan awal\no dari string, yang satu adalah yang berikutnya

9647
09:20:49,741 --> 09:20:51,161
dua adalah yang berikutnya, dan seterusnya.

9648
09:20:51,161 --> 09:20:55,921
Jadi itulah sintaksis array kita\nuntuk mengindeks ke dalam array.

9649
09:20:55,921 --> 09:20:58,832
Namun secara teknis, kita bisa membahasnya lebih dalam lagi hari ini--

9650
09:20:58,832 --> 09:21:05,101
secara teknis, jika hai\n

9651
09:21:05,101 --> 09:21:11,072
masuk akal kalau saya ada di\n

9652
09:21:14,072 --> 09:21:18,692
Sekarang, saya tidak peduli dengan 123 itu sendiri,\n

9653
09:21:19,951 --> 09:21:23,461
Bahkan dalam hex, jika Anda hanya menambahkan\none ketika Anda memulai pada 0x123

9654
09:21:23,461 --> 09:21:25,817
angka berikutnya adalah empat,\nlima, enam di akhir.

9655
09:21:25,817 --> 09:21:27,692
Saya tidak perlu khawatir\ntentang nilai A, B, dan C

9656
09:21:27,692 --> 09:21:30,702
karena saya tidak menghitung\nsetinggi itu dalam contoh ini.

9657
09:21:30,701 --> 09:21:34,891
Jadi jika itu masalahnya, dan\nkomputer saya sebenarnya

9658
09:21:34,891 --> 09:21:42,631
meletakkan kata hai di memori\n

9659
09:21:42,631 --> 09:21:45,362
Apa sebenarnya s if,\nat pada akhirnya

9660
09:21:45,362 --> 09:21:51,391
H-I tanda seru null sedang menyimpan--\n

9661
09:21:52,366 --> 09:21:54,241
Sekarang saya sudah melepas\nroda latihan itu

9662
09:21:54,241 --> 09:21:57,841
dan menunjukkan di mana sebenarnya H-I\ntanda seru null berada

9663
09:21:59,582 --> 09:22:03,572
Ya, seperti biasa,\sebenarnya adalah sebuah variabel.

9664
09:22:03,572 --> 09:22:05,612
Bahkan dalam kode yang saya\nusulkan beberapa saat yang lalu

9665
09:22:05,612 --> 09:22:08,912
s tampaknya merupakan tipe data\nyang ya, tidak disertakan dengan C

9666
09:22:08,911 --> 09:22:11,461
tapi perpustakaan CS50 menjadikannya ada.

9667
09:22:11,461 --> 09:22:16,832
s adalah variabel bertipe string,\njadi di manakah s pada gambar ini?

9668
09:22:16,832 --> 09:22:20,792
Ternyata\ns mungkin ada di atas sini.

9669
09:22:20,792 --> 09:22:24,332
Sekali lagi, saya hanya menggambarnya di mana saja\nuntuk kepentingan diskusi

9670
09:22:24,332 --> 09:22:28,502
tetapi s adalah variabel\nper baris kode itu.

9671
09:22:28,502 --> 09:22:32,338
Yang disimpan,\nampaknya, menurut saya, adalah 0x123.

9672
09:22:32,338 --> 09:22:35,671
Sebenarnya aku tidak terlalu peduli dengan hal ini\n

9673
09:22:35,671 --> 09:22:40,951
s tampaknya, sampai sekarang, hari ini,\n

9674
09:22:42,122 --> 09:22:44,672
Secara khusus, karakter pertama di s.

9675
09:22:44,671 --> 09:22:46,771
Dan ini adalah\nkepingan teka-teki terakhir.

9676
09:22:46,771 --> 09:22:50,341
Minggu lalu kami memiliki cara cerdas ini\n

9677
09:22:50,341 --> 09:22:55,261
Ternyata stringnya adalah\n

9678
09:22:55,262 --> 09:22:59,222
sebagai variabel yang merupakan\npointer, di dalamnya

9679
09:22:59,222 --> 09:23:02,262
adalah alamat karakter\npertama dalam string.

9680
09:23:02,262 --> 09:23:05,312
Jadi if menunjuk pada\nkarakter pertama dan Anda

9681
09:23:05,311 --> 09:23:07,862
dapat mempercayai bahwa garis miring terbalik nol\nis di akhir string

9682
09:23:07,862 --> 09:23:13,451
hanya itu yang perlu Anda pahami\n

9683
09:23:14,891 --> 09:23:16,502
Baiklah, mari kita menjadi lebih konkrit.

9684
09:23:16,502 --> 09:23:20,162
Dalam hal gambar ini, jika saya sudah\n

9685
09:23:20,161 --> 09:23:25,322
ternyata selama ini sejak\n

9686
09:23:25,322 --> 09:23:32,232
semi-diam-diam menjadi\nalias untuk char star.

9687
09:23:34,752 --> 09:23:36,201
Jadi mengapa ini masuk akal?

9688
09:23:36,201 --> 09:23:39,441
Memang agak aneh,\ntetapi jika pada contoh kita sebelumnya

9689
09:23:39,442 --> 09:23:43,031
kami dapat menyimpan alamat\n

9690
09:23:45,192 --> 09:23:48,042
baiklah, jika sampai sekarang string\nhanya alamatnya

9691
09:23:48,042 --> 09:23:53,472
dari karakter pertama dalam sebuah string, lalu\n

9692
09:23:53,472 --> 09:23:57,222
karena itu berarti s adalah\nalamat suatu karakter, yang paling

9693
09:23:57,222 --> 09:23:58,822
karakter pertama dalam string.

9694
09:23:58,822 --> 09:24:02,802
Sekarang, stringnya mungkin memiliki tiga huruf\n

9695
09:24:02,802 --> 09:24:04,932
jika paragrafnya panjang,\ntapi tidak apa-apa

9696
09:24:04,932 --> 09:24:06,849
karena Anda dapat percaya\nhal itu akan terjadi

9697
09:24:06,849 --> 09:24:08,542
karakter nol itu di bagian paling akhir.

9698
09:24:08,542 --> 09:24:12,281
Jadi ini adalah cara umum\ncara merepresentasikan string

9699
09:24:12,281 --> 09:24:15,402
menggunakan mekanisme baru ini di C.

9700
09:24:15,402 --> 09:24:18,582
Jadi, izinkan saya melanjutkan\ndi sini dan mungkin memperkenalkannya

9701
09:24:18,582 --> 09:24:20,421
beberapa manipulasi ini.

9702
09:24:20,421 --> 09:24:24,191
Biarkan saya kembali ke kode saya di sini, dan\n

9703
09:24:24,192 --> 09:24:27,742
dan mari kita sekarang\ndo, misalnya, ini.

9704
09:24:27,741 --> 09:24:32,743
Izinkan saya menambahkan pustaka CS50,\njadi kami akan menyertakan CS50.H untuk saat ini.

9705
09:24:32,743 --> 09:24:34,451
Saya akan melanjutkan\ndan ke dalam main

9706
09:24:34,451 --> 09:24:37,331
beri diriku sebuah string s\nsama dengan tanda seru hai.

9707
09:24:37,332 --> 09:24:38,982
Saya tidak mengetikkan garis miring terbalik nol.

9708
09:24:38,982 --> 09:24:43,589
C melakukan itu untuk saya secara otomatis oleh\n

9709
09:24:43,588 --> 09:24:45,171
Sekarang izinkan saya melanjutkan dan mencetaknya.

9710
09:24:45,171 --> 09:24:48,341
Jadi ini lagi-lagi gaya minggu pertama\n

9711
09:24:49,972 --> 09:24:55,122
Jadi izinkan saya membuat alamat, Masukkan,\n

9712
09:24:56,752 --> 09:25:00,701
Namun mari kita mulai mengupas\nbeberapa lapisan tersebut di sini.

9713
09:25:00,701 --> 09:25:04,721
Pertama-tama, izinkan saya menyingkirkan\nperpustakaan CS50 sejenak

9714
09:25:04,722 --> 09:25:09,012
dan izinkan saya mengubah string menjadi char star.

9715
09:25:09,012 --> 09:25:11,262
Dan ini sedikit aneh\ntapi ya, konvensinya

9716
09:25:11,262 --> 09:25:15,260
artinya char, spasi, lalu\n

9717
09:25:16,302 --> 09:25:19,052
Sebenarnya, Anda mungkin\n

9718
09:25:19,052 --> 09:25:22,032
lakukan seperti ini atau seperti\nini, tetapi dengan cara kanonik

9719
09:25:22,031 --> 09:25:23,811
biasanya melakukannya seperti itu.

9720
09:25:23,811 --> 09:25:26,671
Jadi sekarang tidak ada lagi perpustakaan CS50, tidak\n

9721
09:25:26,671 --> 09:25:29,182
Saya hanya memperlakukan string\napa adanya.

9722
09:25:29,182 --> 09:25:32,381
Biarkan saya melanjutkan\nmembuat alamat, Masukkan--

9723
09:25:32,381 --> 09:25:34,542
sejauh ini bagus-- ./address--

9724
09:25:36,012 --> 09:25:40,211
Jadi %s adalah sesuatu yang disertakan dengan printf\n

9725
09:25:40,211 --> 09:25:44,262
terminologi tetapi sebenarnya\n

9726
09:25:44,262 --> 09:25:48,582
Itu selalu menjadi bintang char,\njadi yang dimaksud sekarang adalah saya

9727
09:25:48,582 --> 09:25:52,122
dapat mulai bersenang-senang\ndengan ide-ide dasar ini

9728
09:25:52,122 --> 09:25:55,252
meskipun ini tidak disengaja\n

9729
09:25:55,252 --> 09:25:59,262
Tapi kalau ini-- biarkan aku kembali\n

9730
09:25:59,262 --> 09:26:01,752
Mari kita kembalikan roda latihan\nsebentar saja

9731
09:26:01,752 --> 09:26:04,582
sehingga saya dapat melakukan satu\nmanipulasi dalam satu waktu.

9732
09:26:04,582 --> 09:26:07,492
Ini string saya, seperti sebelumnya.

9733
09:26:07,491 --> 09:26:10,542
Baiklah, izinkan saya melanjutkan dan\nmendeklarasikan karakter bernama c

9734
09:26:10,542 --> 09:26:15,582
dan izinkan saya menyimpan karakter pertama\n

9735
09:26:15,582 --> 09:26:18,252
s tanda kurung nol, dan\nitu akan memberi saya h.

9736
09:26:18,252 --> 09:26:21,311
Dan untuk iseng, izinkan\nsaya melanjutkan dan melakukan char star--

9737
09:26:21,311 --> 09:26:28,421
ups-- biarkan saya lanjutkan dan lakukan\nchar bintang p sama dengan ampersand c

9738
09:26:28,421 --> 09:26:30,851
dan lihat apa yang sebenarnya dicetaknya untuk saya.

9739
09:26:30,851 --> 09:26:34,222
Biarkan saya melanjutkan dan\nmencetak p apa yang ada di sini.

9740
09:26:34,222 --> 09:26:35,452
Jadi kami hanya bermain-main.

9741
09:26:35,451 --> 09:26:39,041
Jadi buatlah alamat-- sejauh ini\nbagus-- ./alamat.

9742
09:26:39,042 --> 09:26:41,381
Baiklah, jadi apa yang baru saja kulakukan?

9743
09:26:41,381 --> 09:26:46,511
Saya baru saja membuat karakter c dan\nmenyimpan di dalamnya huruf H, yang mana

9744
09:26:46,512 --> 09:26:50,891
sama dengan s braket I, maka\n

9745
09:26:50,891 --> 09:26:53,752
dan itu rupanya 0x7FF terserah.

9746
09:26:55,002 --> 09:26:57,201
Namun secara teknis saya\ntidak perlu melakukan itu.

9747
09:26:57,201 --> 09:26:59,002
Izinkan saya melanjutkan dan melakukan dua hal sekarang.

9748
09:26:59,002 --> 09:27:07,362
Daripada hanya mencetak p, biarkan aku pergi\n

9749
09:27:07,362 --> 09:27:09,822
Biarkan saya melanjutkan\nmembuat alamat, Masukkan--

9750
09:27:09,822 --> 09:27:12,972
sejauh ini bagus-- ./address dan--

9751
09:27:12,972 --> 09:27:15,732
sial, apa salahku.

9752
09:27:15,732 --> 09:27:17,562
Oh sial, aku tidak ingin melakukan itu.

9753
09:27:17,561 --> 09:27:21,141
Oh, aku benar-benar mengacaukan ini.

9754
09:27:23,921 --> 09:27:27,191
Seharusnya itu mengesankan\ntetapi yang terjadi justru sebaliknya.

9755
09:27:30,682 --> 09:27:34,542
Jadi jika saya bermaksud melakukan ini,\nmengapa baris sembilan dan 10

9756
09:27:36,822 --> 09:27:40,002
Sebenarnya tidak bermaksud pergi ke sini,\ntapi izinkan saya mencoba menyimpannya.

9757
09:27:40,002 --> 09:27:47,351
Mengapa kami melihat alamat yang berbeda,\n

9758
09:27:55,482 --> 09:27:57,932
AUDIENCE: [Tak terdengar]\nis karakter c tersebut

9759
09:27:57,932 --> 09:28:02,832
lokasinya sendiri\nodari [Tak terdengar]

9760
09:28:02,832 --> 09:28:04,874
dan itu hanya menghilangkan\nnilainya [TIDAK TERDENGAR]..

9761
09:28:05,874 --> 09:28:08,045
Jadi jika saya benar-benar ingin\nberusaha keluar dari masalah ini

9762
09:28:08,044 --> 09:28:10,711
ini adalah jawaban yang bagus untuk\npertanyaan sebelumnya tentang

9763
09:28:10,711 --> 09:28:15,451
bagaimana jika saya memasukkan variabel lain,\n

9764
09:28:15,451 --> 09:28:18,151
dan dalam hal ini bukan\nint, melainkan karakter sebenarnya.

9765
09:28:18,152 --> 09:28:23,641
Di sini, saya telah membuat c menjadi salinan\n

9766
09:28:24,741 --> 09:28:26,491
Jadi jika saya menggambar\nit di layar itu

9767
09:28:26,491 --> 09:28:30,631
akan memberi saya\npersegi panjang yang berbeda di mana salinan h

9768
09:28:32,042 --> 09:28:33,991
Jadi saya tidak bermaksud\melakukan ini, tapi siapa Anda

9769
09:28:33,991 --> 09:28:35,978
melihat adalah ya, alamat s--

9770
09:28:35,978 --> 09:28:38,311
dan rupanya itu berada pada\nalamat yang cukup rendah secara default

9771
09:28:38,311 --> 09:28:40,322
di sini-- maka Anda\nmelihat alamat c.

9772
09:28:40,322 --> 09:28:43,201
Namun meskipun masing-masing\nadalah h, saya klaim

9773
09:28:43,201 --> 09:28:45,163
yang satu berada di alamat yang berbeda di memori.

9774
09:28:45,163 --> 09:28:46,621
Dan ini selalu terjadi.

9775
09:28:46,622 --> 09:28:49,352
Kapan pun Anda membuat satu variabel\n

9776
09:28:49,351 --> 09:28:51,269
atau di sini, atau di sini, atau\ndi tempat lain dalam memori.

9777
09:28:51,269 --> 09:28:54,271
Sekarang untuk pertama kalinya kita semua\n

9778
09:28:54,271 --> 09:28:57,731
memori komputer untuk\nmelihat apa yang sebenarnya ada di sana.

9779
09:28:57,732 --> 09:29:01,382
Jadi izinkan saya sedikit membackup\nini

9780
09:29:01,381 --> 09:29:04,752
dan melakukan apa yang ingin saya lakukan di sini,\n

9781
09:29:04,752 --> 09:29:08,912
Jadi jika string s sama dengan quote\nunquote, hai, ayo lanjutkan

9782
09:29:08,911 --> 09:29:18,411
dan memberi diri saya sebuah petunjuk, yang disebut\n

9783
09:29:18,411 --> 09:29:22,251
Baiklah, sekarang izinkan saya melanjutkan dan\n

9784
09:29:24,394 --> 09:29:26,311
Jadi kami hanya akan\melakukan satu per satu.

9785
09:29:26,311 --> 09:29:29,121
Jadi buatlah alamat, Enter, ./address.

9786
09:29:29,122 --> 09:29:34,222
Di sanalah, saat ini, adalah\n

9787
09:29:34,222 --> 09:29:36,141
Apa yang ingin saya lakukan sekarang adalah ini.

9788
09:29:36,141 --> 09:29:39,082
Jika saya ingin mencetak\ndua hal kali ini

9789
09:29:39,082 --> 09:29:44,752
izinkan saya mencetak bukan hanya apa itu p,\n

9790
09:29:44,752 --> 09:29:48,771
Karena jika saya mengklaim bahwa semua orang dari\n

9791
09:29:48,771 --> 09:29:51,741
s braket nol hanya mewakili\nkarakter pertama di s

9792
09:29:51,741 --> 09:29:54,981
menurut definisi string\nmenjadi array karakter.

9793
09:29:54,982 --> 09:30:01,232
Maka s, pada hari ini, adalah\nalamat karakter itu sendiri

9794
09:30:02,122 --> 09:30:06,082
Jadi jika sekarang saya melakukan make\naddress, dan melakukan ./address

9795
09:30:06,082 --> 09:30:08,842
kali ini saya melihat hal yang persis sama.

9796
09:30:13,588 --> 09:30:16,171
Ini benar-benar hal yang paling membosankan\nuntuk dipuji

9797
09:30:16,171 --> 09:30:21,932
tapi yang kami tunjukkan di sini adalah\n

9798
09:30:21,932 --> 09:30:23,622
dari karakter pertama di c.

9799
09:30:23,622 --> 09:30:26,292
Jadi jika kita meminjam beberapa\nmodel mental kita dari minggu lalu--

9800
09:30:26,292 --> 09:30:31,171
baiklah, jika s tanda kurung nol adalah yang pertama\n

9801
09:30:31,171 --> 09:30:33,711
ekspresi itu harus sama dengan s.

9802
09:30:33,711 --> 09:30:36,211
Ini bukan berarti kami\nakan melewati rintangan ini

9803
09:30:36,211 --> 09:30:40,411
sepanjang waktu dengan sintaksis sebanyak ini,\n

9804
09:30:40,411 --> 09:30:46,531
itu faktanya, seperti yang saya nyatakan sesaat\n

9805
09:30:46,531 --> 09:30:50,012
Bahkan tidak banyak karakter, itu\n

9806
09:30:50,012 --> 09:30:53,942
tapi yang penting itu alamatnya\n

9807
09:30:53,942 --> 09:30:57,182
dan pada minggu lalu kami\npercaya C akan hadir

9808
09:30:57,182 --> 09:31:00,241
untuk mencari karakter null\n itu di bagian paling akhir saja

9809
09:31:00,241 --> 09:31:04,081
untuk memastikan ia mengetahui di mana\nstring sebenarnya berakhir.

9810
09:31:04,082 --> 09:31:07,677
Baiklah, sebuah pertanyaan muncul di sini.

9811
09:31:21,942 --> 09:31:25,542
Untuk meringkas, online\neight, ketika saya menggunakan %p--

9812
09:31:25,542 --> 09:31:28,542
itu berarti mencetak nilai\npointer, jadi 0x sesuatu--

9813
09:31:30,942 --> 09:31:36,641
Sebelumnya, ketika kita menggunakan %s, printf mengetahui\n

9814
09:31:36,641 --> 09:31:40,841
dari s, tapi h, i, tanda seru, dan\n

9815
09:31:41,982 --> 09:31:47,202
p berbeda. %p memberitahu\nkomputer untuk pergi ke alamat itu--

9816
09:31:47,201 --> 09:31:52,072
maaf, memberitahu komputer untuk\nmencetak alamat itu di layar.

9817
09:31:52,072 --> 09:31:55,122
Jadi di sinilah %s selama ini\nbermanfaat.

9818
09:31:55,122 --> 09:31:59,322
Alasan printf berfungsi\nin minggu 1, 2, dan 3

9819
09:31:59,322 --> 09:32:02,622
karena printf dirancang\noleh beberapa manusia bertahun-tahun yang lalu

9820
09:32:02,622 --> 09:32:05,652
untuk pergi ke alamat yang\ndikirimkan-- misalnya

9821
09:32:05,652 --> 09:32:07,991
s-- dan mencetak\nkarakter demi karakter

9822
09:32:07,991 --> 09:32:11,652
setelah karakter hingga ia melihat karakter\nnull garis miring terbalik nol

9823
09:32:13,252 --> 09:32:16,841
Jadi itu-- Anda mendapatkan banyak\n

9824
09:32:16,841 --> 09:32:19,271
Hari ini kami menggunakan\nsesuatu yang lebih sederhana, %p

9825
09:32:19,271 --> 09:32:22,572
yang secara harfiah mencetak apa adanya.

9826
09:32:22,572 --> 09:32:24,311
Dan alasan kami\ntidak melakukan ini di minggu ke-1

9827
09:32:24,311 --> 09:32:26,381
hanya karena ini\nsepertinya terlalu berlebihan

9828
09:32:26,381 --> 09:32:28,381
menjadi menarik ketika\nakhirnya Anda ingin mencetaknya

9829
09:32:28,381 --> 09:32:29,901
adalah hai atau halo, dunia, atau sejenisnya.

9830
09:32:29,902 --> 09:32:31,872
Namun kini yang\nkami lakukan sebenarnya adalah mengungkapnya

9831
09:32:31,872 --> 09:32:34,302
apa yang terjadi selama ini.

9832
09:32:34,302 --> 09:32:36,039
Dan izinkan saya membuat satu contoh lain di sini.

9833
09:32:36,038 --> 09:32:37,871
Biarkan saya melanjutkan dan menghapus\nvariabel ini

9834
09:32:37,872 --> 09:32:41,262
di sini dan izinkan saya mencetak\n

9835
09:32:41,262 --> 09:32:45,492
Saya akan mencetak bukan hanya s\n

9836
09:32:46,542 --> 09:32:48,432
alamat setiap karakter di s.

9837
09:32:48,432 --> 09:32:52,713
Jadi mari kita ambil huruf pertama\nin s dan dapatkan alamatnya

9838
09:32:52,713 --> 09:32:54,671
dan saya akan melakukan copy\npaste demi waktu

9839
09:32:54,671 --> 09:32:57,881
tapi bukan sesuatu yang sering saya lakukan.

9840
09:32:57,881 --> 09:33:01,394
Jadi izinkan saya mencetak alamat\n

9841
09:33:01,394 --> 09:33:03,311
yang ketiga, dan sebenarnya\bahkan yang keempat, yang mana

9842
09:33:03,311 --> 09:33:06,682
adalah garis miring terbalik nol, dengan melakukan ini.

9843
09:33:06,682 --> 09:33:11,292
Jadi ketika saya mengkompilasi program ini--\nbuat alamat, ./alamat--

9844
09:33:11,292 --> 09:33:14,802
Saya akan melihat dua\nnilai yang identik dan kemudian

9845
09:33:14,802 --> 09:33:17,292
nilai tambahan yang\nberjarak satu byte.

9846
09:33:17,292 --> 09:33:22,932
Dalam diagram saya beberapa saat yang lalu, alamat saya\n

9847
09:33:22,932 --> 09:33:29,201
Sekarang secara kebetulan dimulai pada\n0x402004, yaitu s.

9848
09:33:29,201 --> 09:33:32,741
0x402004 adalah hal yang sama\nas karena saya adil

9849
09:33:32,741 --> 09:33:35,351
mengatakan buka karakter pertama\ndan dapatkan alamatnya.

9850
09:33:35,351 --> 09:33:36,851
Itu adalah satu hal yang sama sekarang.

9851
09:33:36,851 --> 09:33:42,762
Dan setelah itu\nis 0x402005, 006, 007

9852
09:33:42,762 --> 09:33:44,542
karena itu seperti diagram.

9853
09:33:44,542 --> 09:33:48,342
Lanjut ke i, ke tanda seru\n

9854
09:33:48,341 --> 09:33:51,252
Jadi yang saya lakukan sekarang adalah menggunakan\npemahaman baru saya tentang apa

9855
09:33:51,252 --> 09:33:54,612
ampersand dan apa yang dilakukan bintang\n

9856
09:33:54,612 --> 09:33:57,510
Saya mencari-cari\nmemori komputer.

9857
09:33:57,510 --> 09:33:59,052
Hanya untuk menunjukkan bahwa tidak ada keajaiban.

9858
09:33:59,052 --> 09:34:02,022
Semuanya ada di sana dengan sengaja\nkarena saya atau printf atau seseorang

9859
09:34:11,254 --> 09:34:12,921
DAVID J. MALAN: Pengamatan yang sangat bagus.

9860
09:34:12,921 --> 09:34:16,432
Jadi memang benar\nhai, tidak seperti 50

9861
09:34:16,432 --> 09:34:21,652
berakhir di alamat yang sangat rendah,\n

9862
09:34:21,652 --> 09:34:24,622
Itu sebenarnya karena,\nsingkatnya, string

9863
09:34:24,622 --> 09:34:27,592
sering kali disimpan di\nbagian lain memori komputer--

9864
09:34:27,591 --> 09:34:29,691
lebih lanjut tentang itu nanti\nhari ini-- untuk efisiensi.

9865
09:34:29,692 --> 09:34:32,902
Sebenarnya hanya akan ada satu\n

9866
09:34:32,902 --> 09:34:36,182
titik, dan komputer akan\n

9867
09:34:36,182 --> 09:34:39,112
tetapi nilai-nilai lain seperti\nints dan float dan

9868
09:34:39,112 --> 09:34:41,752
seperti-- memorinya menjadi lebih rendah\nin berdasarkan konvensi.

9869
09:34:41,752 --> 09:34:45,002
Namun pengamatan yang bagus, karena\nhal tersebut konsisten di sini.

9870
09:34:45,002 --> 09:34:48,472
Baiklah, jadi beberapa detail terakhir\n

9871
09:34:48,472 --> 09:34:54,052
Izinkan saya melanjutkan dan mengklaim bahwa\nkami menerapkan char star--

9872
09:34:54,052 --> 09:34:56,752
atau lebih tepatnya, string sebagai\nchar bintang sebagai berikut.

9873
09:34:56,752 --> 09:34:59,091
Mulai minggu lalu kami\nmenulis kode ini.

9874
09:34:59,091 --> 09:35:03,322
Mulai minggu ini, kami sudah dapat memulai\n

9875
09:35:03,322 --> 09:35:06,902
khususnya, kami menemukan\nin perpustakaan CS50.

9876
09:35:06,902 --> 09:35:10,252
Namun ternyata Anda telah melihat caranya\n

9877
09:35:11,991 --> 09:35:16,222
Terakhir kali kita bermain-main dengan data\n

9878
09:35:16,222 --> 09:35:20,002
dan secara singkat kata kunci typedef,\nyang mendefinisikan tipe untuk Anda.

9879
09:35:20,002 --> 09:35:22,012
Dan jika saya soroti\napa yang menarik di sini

9880
09:35:22,012 --> 09:35:25,702
cara kita menemukan\ntipe data orang terakhir kali

9881
09:35:25,701 --> 09:35:28,761
adalah mendefinisikan seseorang memiliki\ndua variabel di dalamnya--

9882
09:35:28,762 --> 09:35:33,959
struktur yang merangkum\nnama dan merangkum angka.

9883
09:35:33,959 --> 09:35:37,042
Sekarang meskipun sintaksnya sedikit\n

9884
09:35:37,042 --> 09:35:43,131
hal, perhatikan bahwa ini bisa menjadi\n

9885
09:35:43,131 --> 09:35:47,421
Jika saya ingin membuat tipe yang disebut\n

9886
09:35:47,421 --> 09:35:51,591
lalu saya menggunakan typedef untuk membuat\nit didefinisikan menjadi bintang char.

9887
09:35:51,591 --> 09:35:55,311
Jadi hanya ini\nyang pernah ada di CS50.h

9888
09:35:55,311 --> 09:35:58,131
selain prototipe\nfungsi yang telah kita bicarakan.

9889
09:35:58,131 --> 09:36:01,191
typedef char star string\adalah kode satu baris

9890
09:36:01,192 --> 09:36:05,919
yang membuat kata string\nas menjadi tipe data

9891
09:36:05,919 --> 09:36:07,502
dan hanya itu yang pernah ada di sana.

9892
09:36:07,502 --> 09:36:10,641
Namun bintangnya, bintang charnya,\nisa terlalu banyak di minggu pertama.

9893
09:36:10,641 --> 09:36:14,031
Kami menunggu hingga titik ini\nuntuk mengupas kembali lapisan tersebut.

9894
09:36:14,031 --> 09:36:16,521
ada pertanyaan,\non apa itu string?

9895
09:36:16,521 --> 09:36:19,101
Apa yang dilakukan bintang atau ampersand?

9896
09:36:26,432 --> 09:36:30,031
Jika itu-- itukah sebabnya ketika Anda\n

9897
09:36:30,031 --> 09:36:34,031
memang, atau hampir memang, masalah muncul.

9898
09:36:34,031 --> 09:36:36,332
Dan kenyataannya ya,\nminggu lalu kami menggunakan str bandingkan--

9899
09:36:36,332 --> 09:36:40,711
STRCMP-- untuk hal yang sangat disengaja\n

9900
09:36:40,711 --> 09:36:45,301
secara tidak sengaja akan membandingkan dua\n

9901
09:36:50,574 --> 09:36:53,531
Baiklah, sebelum kita memberi\n

9902
09:36:53,531 --> 09:36:54,762
kami punya banyak kertas.

9903
09:36:54,762 --> 09:36:57,552
Jika ada yang ingin datang dan\n

9904
09:36:57,552 --> 09:36:59,562
jika Anda ingin membuat sendiri\nukuran delapan kali delapan

9905
09:36:59,561 --> 09:37:02,621
untuk berbagi dengan kelas jika Anda\n

9906
09:37:02,622 --> 09:37:05,352
Jika tidak, mari kita luangkan waktu 10 menit\ndan akan kembali setelah jam 10.

9907
09:37:05,351 --> 09:37:10,271
Baiklah, mari\nkembali ke pertanyaan tentang caranya

9908
09:37:10,271 --> 09:37:13,241
kita bisa mulai menggunakan petunjuk ini\n

9909
09:37:14,332 --> 09:37:16,572
Sasarannya pada akhirnya\nminggu depan adalah tercapai

9910
09:37:16,572 --> 09:37:20,292
untuk menggunakan alamat ini untuk\n

9911
09:37:20,292 --> 09:37:23,622
struktur daripada sekedar orang,\nseperti minggu lalu, atau kandidat

9912
09:37:23,622 --> 09:37:25,422
dalam konteks algoritma\nelectoral

9913
09:37:25,421 --> 09:37:28,991
jika Anda mau, dan benar-benar menggunakan\n

9914
09:37:28,991 --> 09:37:32,051
untuk mewakili bukan hanya\ngambar tetapi mungkin video

9915
09:37:32,052 --> 09:37:34,552
dan struktur\ndua dimensi lainnya juga.

9916
09:37:34,552 --> 09:37:36,942
Namun untuk saat ini, mari kembali\nke contoh alamat ini

9917
09:37:36,942 --> 09:37:41,922
kurangi menjadi sekadar sapa pada awalnya,\n

9918
09:37:42,822 --> 09:37:45,762
Jadi izinkan saya menambahkan kembali perpustakaan\nCS50 supaya kita bisa

9919
09:37:45,762 --> 09:37:49,391
gunakan sinonim kami sejenak,\nyaitu string kata

9920
09:37:49,391 --> 09:37:51,521
dan saya akan mendefinisikan ulang s sebagai string.

9921
09:37:51,521 --> 09:37:54,191
Dan yang tidak saya sebutkan sebelumnya\adalah tanda kutip ganda ini

9922
09:37:54,192 --> 09:37:57,042
yang telah Anda gunakan selama beberapa waktu\n

9923
09:37:57,042 --> 09:38:00,281
Tanda petik ganda adalah\na petunjuk bagi kompiler

9924
09:38:00,281 --> 09:38:04,671
bahwa apa yang ada di antara mereka sebenarnya adalah sebuah string seperti yang kita kenal sekarang

9925
09:38:04,671 --> 09:38:07,932
yang berarti kompiler akan\melakukan semua pekerjaan mencari tahu

9926
09:38:07,932 --> 09:38:10,692
di mana harus meletakkan h,\ni, tanda seru

9927
09:38:10,692 --> 09:38:13,722
dan bahkan menambahkan garis miring terbalik nol untuk Anda\secara otomatis.

9928
09:38:13,722 --> 09:38:15,942
Dan apa yang kompiler\nakan lakukan untuk Anda juga

9929
09:38:15,942 --> 09:38:18,822
adalah mencari tahu apa alamat\nkeempat karakter tersebut

9930
09:38:18,822 --> 09:38:22,692
berakhir di dan menyimpannya\nuntuk Anda dalam variabel s.

9931
09:38:22,692 --> 09:38:26,891
Jadi itu sebabnya hal ini terjadi pada\n

9932
09:38:26,891 --> 09:38:31,271
atau bahkan memberi bintang secara eksplisit, tetapi bintang\n

9933
09:38:31,271 --> 09:38:33,761
string hanya sinonim\nsekarang dengan char star.

9934
09:38:33,762 --> 09:38:37,732
Ini tidak terlalu mudah dibaca,\ntetapi sekarang memiliki ide yang sama.

9935
09:38:37,732 --> 09:38:40,272
Jadi saya akan membiarkan string di tempatnya\nhanya untuk melakukan sesuatu minggu ini

9936
09:38:40,271 --> 09:38:43,941
1 gaya di sini sebentar, dan ayo\n

9937
09:38:43,942 --> 09:38:49,391
Jadi saya akan menggunakan %c kali ini, dan\n

9938
09:38:49,391 --> 09:38:54,521
lalu saya akan mencetak\ns braket satu dan s braket dua

9939
09:38:54,521 --> 09:38:58,451
benar-benar melakukan minggu ketiga\ngaya dari minggu lalu--

9940
09:38:58,451 --> 09:39:03,281
pencetakan setiap karakter\nin seolah-olah itu adalah sebuah array.

9941
09:39:03,281 --> 09:39:06,582
Jadi ./address seharusnya memberi\nsaya tanda seru.

9942
09:39:06,582 --> 09:39:09,822
Dan jika saya benar-benar ingin\ningin tahu, secara teknis

9943
09:39:09,822 --> 09:39:14,052
Saya bisa mencetak satu lokasi lagi,\n

9944
09:39:14,052 --> 09:39:19,572
buat alamat ./alamat dan ada,\n

9945
09:39:19,572 --> 09:39:25,002
Saya tidak melihat angka nol karena saya tidak\n

9946
09:39:25,002 --> 09:39:28,692
sebenarnya delapan bit nol\n

9947
09:39:28,692 --> 09:39:30,322
jika Anda mau, di printf bicaralah.

9948
09:39:30,322 --> 09:39:32,711
Jadi apa yang saya lihat di sini\ni seperti simbol kosong.

9949
09:39:32,711 --> 09:39:34,902
Itu berarti ada\nsesuatu yang lain di sana--

9950
09:39:34,902 --> 09:39:39,162
sepertinya semuanya delapan\nzero bit, tapi semuanya ada

9951
09:39:39,161 --> 09:39:41,931
meskipun kami tidak melihatnya\nsecara harfiah saat ini.

9952
09:39:41,932 --> 09:39:44,572
Baiklah, mari kita lanjutkan dan\nkupas salah satu lapisan ini

9953
09:39:44,572 --> 09:39:48,491
dan biarkan aku pergi duluan dan menyingkirkan\n

9954
09:39:48,491 --> 09:39:51,911
oleh karena itu, kata string karena\n

9955
09:39:53,262 --> 09:39:56,141
Sekarang saya akan membuat\nmembuat alamat, ./alamat

9956
09:39:56,141 --> 09:39:57,612
dan itu hal yang persis sama.

9957
09:39:57,612 --> 09:40:00,982
Dan sekarang, mari kita fokus pada hi\n

9958
09:40:00,982 --> 09:40:05,772
Jadi saya akan mengkompilasi ulang untuk terakhir kalinya\n

9959
09:40:05,771 --> 09:40:10,361
Nah, ternyata notasi\narray yang kita gunakan minggu lalu

9960
09:40:10,362 --> 09:40:12,972
secara teknis adalah sebagian dari\ngula sintaksis ini.

9961
09:40:12,972 --> 09:40:16,182
Semacam cara yang rapi untuk menggunakan\nsintaksis dengan cara yang bermanfaat

9962
09:40:16,182 --> 09:40:21,792
namun kita dapat melihatnya secara lebih eksplisit hari ini\n

9963
09:40:23,421 --> 09:40:25,161
Biarkan saya melanjutkan dan melakukan ini.

9964
09:40:25,161 --> 09:40:30,401
Izinkan saya dengan berani mengatakan bahwa saya\ningin mencetak bukan braket

9965
09:40:30,402 --> 09:40:36,192
nol, tapi saya ingin mencetak\n

9966
09:40:36,192 --> 09:40:38,442
Jadi untuk lebih jelasnya, apa yang terjadi sekarang?

9967
09:40:38,442 --> 09:40:39,792
Ini adalah alamat sebuah string.

9968
09:40:41,292 --> 09:40:44,802
s adalah alamat\nkarakter pertama dalam sebuah string

9969
09:40:44,802 --> 09:40:47,802
dan sekali lagi, itu cukup untuk\n

9970
09:40:47,802 --> 09:40:50,722
komputer akan melihat bahwa ada\n

9971
09:40:50,722 --> 09:40:56,601
Jadi s secara khusus adalah alamat\n

9972
09:40:56,601 --> 09:40:59,652
Artinya, gunakan sintaks\nbaru saya, jika saya mau

9973
09:40:59,652 --> 09:41:02,944
untuk mencetak\nkarakter pertama saya dapat mencetak bintang

9974
09:41:02,944 --> 09:41:06,834
s, karena ingat bahwa bintang adalah\n

9975
09:41:06,834 --> 09:41:09,042
ulangi kata char, jangan ulangi kata int--

9976
09:41:10,661 --> 09:41:13,181
Itu berarti pergi ke alamat itu.

9977
09:41:13,182 --> 09:41:18,012
Demikian pula, jika saya, dalam pengetahuan\yang baru saya temukan tentang cara kerja string

9978
09:41:18,012 --> 09:41:21,641
ketahuilah bahwa huruf h didahulukan,\nkemudian huruf i tepat setelahnya

9979
09:41:21,641 --> 09:41:25,512
lalu tanda seru, lalu\n

9980
09:41:25,512 --> 09:41:29,292
dengan selisih satu byte, saya dapat\nmulai melakukan beberapa aritmatika.

9981
09:41:29,292 --> 09:41:34,932
Saya bisa pergi ke s plus 1 byte dan\nmencetak karakter kedua

9982
09:41:34,932 --> 09:41:38,682
dan saya dapat mencetak\napa pun yang ada di s plus 2--

9983
09:41:38,682 --> 09:41:41,951
sebenarnya, melakukan apa yang umumnya\ndikenal sebagai aritmatika penunjuk.

9984
09:41:41,951 --> 09:41:44,951
Secara harfiah memperlakukan pointer\nas angkanya--

9985
09:41:44,951 --> 09:41:48,191
heksadesimal atau desimal, sebenarnya tidak\n

9986
09:41:48,192 --> 09:41:51,022
Dan lanjutkan dan tambahkan\none byte atau dua byte

9987
09:41:51,021 --> 09:41:53,511
kepada mereka untuk memulai di\nawal sebuah string

9988
09:41:53,512 --> 09:41:56,192
dan lihat saja dari kiri ke kanan.

9989
09:41:56,192 --> 09:42:00,262
Jadi ini sekarang setara dengan apa yang kita\n

9990
09:42:00,262 --> 09:42:05,031
notasi, tapi sekarang saya sedang menerapkan\n

9991
09:42:05,031 --> 09:42:09,182
pipa ledeng, pengertian ampersand\n

9992
09:42:09,182 --> 09:42:11,961
jadi jika saya membuat ulang\nprogram ini dan melakukan ./address

9993
09:42:11,961 --> 09:42:14,489
Saya masih akan melihat\nh-i tanda seru.

9994
09:42:14,489 --> 09:42:16,822
Namun yang sebenarnya saya lakukan hanyalah\nmendemonstrasikan

9995
09:42:16,822 --> 09:42:20,211
mudah-mudahan, pemahaman saya\ntentang apa yang sebenarnya

9996
09:42:20,211 --> 09:42:22,072
sedang terjadi di memori komputer.

9997
09:42:22,072 --> 09:42:24,591
Sekarang, programmer yang\nmungkin mencoba untuk pamer

9998
09:42:24,591 --> 09:42:25,971
mungkin benar-benar menulis sintaksis ini.

9999
09:42:25,972 --> 09:42:28,597
Saya pikir sintaks yang lebih umum\nadalah apa yang kita lakukan minggu lalu--

10000
09:42:28,597 --> 09:42:30,332
s tanda kurung nol, s tanda kurung satu.

10001
09:42:30,832 --> 09:42:32,707
Itu hanya sedikit lebih\nmudah dibaca dan kami tidak melakukannya

10002
09:42:32,707 --> 09:42:36,891
perlu menyombongkan diri atau peduli terhadap\nrepresentasi mendasar ini.

10003
09:42:36,891 --> 09:42:39,771
Tanda kurung siku minggu lalu\nkami adalah abstraksi, jika Anda mau

10004
09:42:39,771 --> 09:42:42,081
di atas apa itu matematika tingkat rendah.

10005
09:42:42,082 --> 09:42:44,722
Namun hanya itu yang terjadi\tidak di balik terpal.

10006
09:42:44,722 --> 09:42:48,171
Kami menelusuri dari\nbyte ke byte ke byte.

10007
09:42:48,171 --> 09:42:53,582
Baiklah, izinkan saya berhenti sejenak di sini, lihat apakah\n

10008
09:42:56,292 --> 09:42:59,012
Mari kita lakukan satu kali lagi,\nuntuk menunjukkan bahwa hal ini tidak benar

10009
09:43:00,531 --> 09:43:02,521
Biarkan saya lanjutkan dan\nsingkirkan semua ini

10010
09:43:02,521 --> 09:43:06,901
dan izinkan saya memberi diri saya serangkaian\nangka seperti yang saya lakukan minggu lalu.

10011
09:43:06,902 --> 09:43:09,182
Jadi jika saya ingin\nmendeklarasikan semua angkanya

10012
09:43:09,182 --> 09:43:11,881
sekaligus menggunakan notasi kurung kurawal\nyang funky ini

10013
09:43:11,881 --> 09:43:15,331
Saya bisa melakukan seperti 4, 6, 8, 2, 7, 5, 0.

10014
09:43:15,332 --> 09:43:19,412
Jadi tujuh nomor berbeda di dalamnya\n

10015
09:43:20,432 --> 09:43:22,491
Sebenarnya, saya tidak perlu mengatakan tujuh.

10016
09:43:22,491 --> 09:43:24,241
Kompilernya cukup pintar\ncukup untuk mengetahuinya

10017
09:43:24,241 --> 09:43:26,612
berapa banyak angka yang saya masukkan\ndengan koma di antaranya

10018
09:43:26,612 --> 09:43:31,112
dan itu hanya memberi saya array\nberisi 4, 6, 8, 2, 7, 5, 0.

10019
09:43:31,112 --> 09:43:34,561
Jadi ternyata saya bisa mencetak masing-masing\n

10020
09:43:34,561 --> 09:43:40,381
Saya dapat melakukan printf %i backslash n,\n

10021
09:43:40,381 --> 09:43:44,401
dan izinkan saya melakukan salin/tempel dengan cepat\n

10022
09:43:44,402 --> 09:43:49,241
Secara teoritis, itu seharusnya\nmencetak 4, 6, 8, dan seterusnya.

10023
09:43:49,241 --> 09:43:52,381
Tapi saya bisa melakukan pemahaman manipulasi yang sama

10024
09:43:52,381 --> 09:43:55,292
apa itu pointer sekarang,\menggunakan aritmatika pointer.

10025
09:43:55,292 --> 09:43:59,101
Jadi izinkan saya melepasnya\ndan kembali ke satu printf

10026
09:43:59,101 --> 09:44:02,551
dan alih-alih mencetak tanda kurung angka\n

10027
09:44:02,552 --> 09:44:06,722
izinkan saya pergi dan mencetak\napa pun yang ada di alamat itu--

10028
09:44:08,792 --> 09:44:11,222
Biarkan saya mencetak\ndigit kedua, yang mana

10029
09:44:11,222 --> 09:44:16,412
akan menjadi apa pun yang ada di angka\n

10030
09:44:16,411 --> 09:44:20,381
dan lakukan apa saja pada angka ditambah 2,\n

10031
09:44:20,381 --> 09:44:22,621
izinkan saya melakukannya empat\nkali lagi dan melakukan apa yang seharusnya

10032
09:44:22,622 --> 09:44:27,242
di lokasi tiga, empat, lima, dan enam.

10033
09:44:27,241 --> 09:44:30,991
Dan itu totalnya tujuh angka\n

10034
09:44:30,991 --> 09:44:32,561
Jadi izinkan saya menjalankan ini dengan cepat.

10035
09:44:35,012 --> 09:44:37,742
Ada tujuh\ndigit yang sedang dicetak.

10036
09:44:37,741 --> 09:44:41,761
Namun ada sesuatu\nyang halus namun juga berguna di sini.

10037
09:44:45,752 --> 09:44:47,891
Karena saya membuat array bilangan bulat.

10038
09:44:47,891 --> 09:44:52,542
Namun pikirkan kembali-- seberapa besar\nbilangan bulat tipikal yang sudah kita klaim?

10039
09:44:52,542 --> 09:44:58,182
Empat byte, atau 32 bit, jadi\nperlu dicatat bahwa saya tidak melakukannya

10040
09:44:58,182 --> 09:45:00,201
perlu khawatir tentang detail itu.

10041
09:45:00,201 --> 09:45:05,479
Perhatikan bahwa saya tidak melakukan plus 4,\n

10042
09:45:05,480 --> 09:45:07,272
Saya, sang programmer,\nsebenarnya, tidak

10043
09:45:07,271 --> 09:45:09,551
perlu khawatir tentang seberapa\nbesar tipe datanya.

10044
09:45:09,552 --> 09:45:11,652
Inilah kekuatan aritmatika penunjuk.

10045
09:45:11,652 --> 09:45:17,292
Kompiler cukup pintar untuk mengetahui\n

10046
09:45:17,292 --> 09:45:21,802
itu sama saja dengan mengatakan\npergi satu data lagi--

10047
09:45:22,841 --> 09:45:24,611
jadi jika itu int, pindahkan empat.

10048
09:45:24,612 --> 09:45:26,232
Jika int kedua, pindahkan delapan.

10049
09:45:26,232 --> 09:45:27,962
Jika int ketiga, pindahkan 12.

10050
09:45:27,961 --> 09:45:31,182
Aritmatika penunjuk menangani aritmatika yang\menganggu bagi Anda

10051
09:45:31,182 --> 09:45:33,822
jadi kamu bisa memikirkan ini\nas angka demi angka

10052
09:45:33,822 --> 09:45:37,182
setelah nomor yang kembali ke\n

10053
09:45:38,531 --> 09:45:42,561
Artinya hanya ditambah 1, ditambah 2,\n

10054
09:45:43,061 --> 09:45:48,481
Karena kompiler mengetahui apa\n

10055
09:45:48,482 --> 09:45:51,872
Sekarang, ada satu\ndetail lain yang harus saya ungkapkan di sini

10056
09:45:51,872 --> 09:45:54,032
yang telah saya anggap remeh.

10057
09:45:54,031 --> 09:45:57,002
Di masa lalu saya menggunakan tanda kutip ganda\nuntuk mewakili string

10058
09:45:57,002 --> 09:45:59,732
dan saya mengklaim bahwa kompilernya\nscukup pintar untuk menyadari bahwa oh

10059
09:45:59,732 --> 09:46:04,272
jika saya mempunyai tanda kutip ganda hai, itu berarti\n

10060
09:46:04,271 --> 09:46:05,791
dan kemudian garis miring terbalik nol.

10061
09:46:08,161 --> 09:46:13,921
Ternyata Anda sebenarnya bisa mengobati\n

10062
09:46:13,921 --> 09:46:16,141
itu sendiri adalah sebuah penunjuk,\ndan ini sebenarnya

10063
09:46:16,141 --> 09:46:18,512
akan menjadi sesuatu\nberguna dalam masalah yang akan datang

10064
09:46:18,512 --> 09:46:22,082
ketika kita ingin meneruskan array\ndi memori komputer.

10065
09:46:22,082 --> 09:46:25,824
Perhatikan bahwa sebenarnya online\n

10066
09:46:25,824 --> 09:46:27,781
Tidak ada bintang, tidak ada\ntidak ada ampersand-- ada

10067
09:46:27,781 --> 09:46:31,021
tidak ada yang baru di sana, namun\ninlangsung di jalur tujuh

10068
09:46:31,021 --> 09:46:35,851
Saya berpura-pura bahwa itu adalah\nalamatnya, dan ini sebenarnya oke.

10069
09:46:35,851 --> 09:46:39,752
Ternyata sebuah array\nbenar-benar dapat diobati

10070
09:46:39,752 --> 09:46:43,241
sebagai alamat elemen\pertama dalam array itu.

10071
09:46:43,241 --> 09:46:47,439
Bedanya tidak ada\n

10072
09:46:47,440 --> 09:46:49,232
Ini hanyalah sebagian\nnomor telepon di sini

10073
09:46:49,232 --> 09:46:52,052
diakhiri dengan nol-- itu tidak\nseperti garis miring terbalik nol yang khusus.

10074
09:46:52,052 --> 09:46:55,082
Jadi ini adalah sesuatu yang akan kami\n

10075
09:46:55,082 --> 09:46:58,802
Ada keterkaitan\nantara alamat dan array

10076
09:46:58,802 --> 09:47:03,482
itu secara umum memungkinkan Anda untuk\n

10077
09:47:03,482 --> 09:47:05,882
tapi perhitungannya sudah diurus untuk Anda.

10078
09:47:05,881 --> 09:47:10,322
Apakah ada pertanyaan tentang ini sebelumnya\n

10079
09:47:19,144 --> 09:47:20,311
DAVID J. MALAN: Berpotensi.

10080
09:47:20,311 --> 09:47:24,271
Jika Anda melampaui akhir array,\n

10081
09:47:24,271 --> 09:47:27,541
Masalahnya adalah gejala tersebut\nterkadang bersifat nondeterministik

10082
09:47:27,542 --> 09:47:30,542
yang berarti terkadang\nakan terjadi, terkadang tidak.

10083
09:47:30,542 --> 09:47:34,502
Hal ini sering kali bergantung pada seberapa jauh\n

10084
09:47:34,502 --> 09:47:36,991
Anda sering kali tidak menyebabkan\nkesalahan segmentasi

10085
09:47:36,991 --> 09:47:39,781
jika Anda hanya menyodok sedikit terlalu\njauh, tetapi jika Anda melakukannya terlalu jauh

10086
09:47:41,192 --> 09:47:44,522
Namun kami akan memberi Anda alatnya hari ini\n

10087
09:47:44,521 --> 09:47:46,541
situasi seperti itu.

10088
09:47:46,542 --> 09:47:49,452
Jadi mari kita lanjutkan sekarang dan lakukan\n

10089
09:47:49,451 --> 09:47:51,961
tapi itu sebenarnya kembali\nke spoiler sebelumnya.

10090
09:47:51,961 --> 09:47:56,832
Biarkan saya melanjutkan dan membuat program\n

10091
09:47:56,832 --> 09:48:00,002
Saya akan melanjutkan dan\nmengizinkan diri saya memiliki perpustakaan CS50

10092
09:48:00,002 --> 09:48:03,482
bukan untuk string melainkan untuk\n

10093
09:48:03,482 --> 09:48:07,801
yang jauh lebih mudah daripada cara yang akan kita\n

10094
09:48:07,800 --> 09:48:10,832
Izinkan saya memberi diri saya stdio.h,\ndo sebuah int main(void)

10095
09:48:10,832 --> 09:48:13,742
tidak mengkhawatirkan baris perintah\n

10096
09:48:13,741 --> 09:48:18,061
dan dapatkan int saya menggunakan get int, dan\n

10097
09:48:18,061 --> 09:48:23,822
lalu izinkan saya memberi diri saya int j, tanyakan\n

10098
09:48:23,822 --> 09:48:27,991
lalu izinkan saya melanjutkan dan\n

10099
09:48:27,991 --> 09:48:31,411
jika i sama dengan j,\nmaka lanjutkan saja

10100
09:48:31,411 --> 09:48:36,481
dan mencetak sesuatu seperti "sama",\n

10101
09:48:36,482 --> 09:48:40,152
dan mencetak "berbeda" jika\nkenyataannya tidak sama.

10102
09:48:40,152 --> 09:48:44,312
Jadi sepertinya itu adalah program yang\n

10103
09:48:44,311 --> 09:48:46,621
Baiklah, jadi mari kita\naju dan jalankan perbandingan--

10104
09:48:48,811 --> 09:48:52,351
Oke, aku akan berumur 50, j akan berumur 50--

10105
09:48:54,582 --> 09:48:57,599
aku akan berumur 50, j akan berumur 42.

10106
09:48:58,391 --> 09:49:02,701
Sejauh ini, perbandingan\nversi pertama cukup bagus.

10107
09:49:02,701 --> 09:49:05,771
Tapi seperti yang mungkin Anda lihat\nke mana tujuan saya dengan ini

10108
09:49:05,771 --> 09:49:09,511
mari beralih dari bilangan bulat dan\n

10109
09:49:10,661 --> 09:49:13,261
Jadi saya bisa melakukan string s di sini--

10110
09:49:15,841 --> 09:49:22,711
Lalu saya bisa melakukan string t di\ndi sini, dan GetString di sini

10111
09:49:22,711 --> 09:49:25,442
meminta pengguna untuk kali ini, di sini.

10112
09:49:25,442 --> 09:49:26,972
Dan kemudian saya bisa membandingkan keduanya.

10113
09:49:28,819 --> 09:49:30,152
dan ini adalah konvensi umum.

10114
09:49:30,152 --> 09:49:33,182
Jika Anda sudah menggunakan s untuk string, Anda\n

10115
09:49:33,182 --> 09:49:34,802
untuk demonstrasi sederhana seperti ini.

10116
09:49:34,802 --> 09:49:37,927
Saya akan membandingkan keduanya, seperti\n

10117
09:49:37,927 --> 09:49:41,882
Bandingkan-- sejauh ini\nbagus-- ./address--

10118
09:49:44,582 --> 09:49:47,792
Biarkan saya melanjutkan dan\nmengetik sesuatu seperti

10119
09:49:47,792 --> 09:49:52,762
hai, tanda seru dan sampai jumpa,\n

10120
09:49:52,762 --> 09:49:54,662
pastinya harus berbeda.

10121
09:49:54,661 --> 09:50:00,481
Biarkan saya menjalankannya lagi dengan hai, seru\n

10122
09:50:00,482 --> 09:50:02,432
Berbeda-- mungkin aku mengacaukannya.

10123
09:50:02,432 --> 09:50:05,542
Mari kita lakukan dengan huruf kecil,\nmungkin itu akan memperbaiki.

10124
09:50:05,542 --> 09:50:07,862
Tapi tidak, keduanya berbeda.

10125
09:50:07,862 --> 09:50:11,842
Jadi untuk kembali ke apa yang saya jelaskan\nas spoiler sebelumnya, apa itu

10126
09:50:11,841 --> 09:50:16,019
masalah mendasar di sini, agar jelas?

10127
09:50:16,019 --> 09:50:18,061
Mengapa dikatakan berbeda\padahal aku cantik

10128
09:50:18,061 --> 09:50:19,478
tentu saja saya mengetik hal yang sama dua kali.

10129
09:50:21,542 --> 09:50:24,961
Ya, di sinilah sekarang\tidak ada gunanya mengetahui string itu pernah ada

10130
09:50:24,961 --> 09:50:28,423
sebuah abstraksi-- roda pelatihan, jika\n

10131
09:50:28,423 --> 09:50:30,631
masih menggunakan GetString karena\nitu tetap nyaman--

10132
09:50:30,631 --> 09:50:33,421
tetapi jika saya mengubah string\nmenjadi char star, itu benar

10133
09:50:33,421 --> 09:50:39,661
sedikit lebih eksplisit mengenai apa dan\n

10134
09:50:39,661 --> 09:50:42,121
itu adalah alamat\na char. t adalah sebuah penunjuk

10135
09:50:42,122 --> 09:50:44,282
ke sebuah char, itu adalah\nalamat dari sebuah char.

10136
09:50:44,281 --> 09:50:47,432
Khususnya, karakter pertama\nin dan karakter pertama

10137
09:50:49,211 --> 09:50:51,436
Jadi jika saya membandingkan\nkeduanya seharusnya berlaku

10138
09:50:51,436 --> 09:50:53,311
untuk beralasan bahwa mereka\nakan berbeda.

10139
09:50:53,811 --> 09:50:57,421
Karena s mungkin akan berakhir di sini dalam ingatan\n

10140
09:50:57,421 --> 09:51:00,542
Setiap kali saya memanggil GetString, selalu\n

10141
09:51:00,542 --> 09:51:02,531
untuk mengetahuinya, tunggu sebentar--\nAnda mengetik hal yang sama.

10142
09:51:02,531 --> 09:51:04,051
Saya hanya akan mengembalikan\nAnda alamat yang sama.

10143
09:51:04,052 --> 09:51:06,872
Hal itu tidak terjadi karena kita\n

10144
09:51:06,872 --> 09:51:10,502
Setiap kali saya memanggil GetString,\nit tampaknya kembali

10145
09:51:10,502 --> 09:51:13,262
salinan berbeda dari\nstring yang diketik.

10146
09:51:13,262 --> 09:51:15,572
Salam di sini dan salam di sini.

10147
09:51:15,572 --> 09:51:18,152
They might look the same to\nthe human but to the computer

10148
09:51:18,152 --> 09:51:22,052
itu adalah bagian memori yang berbeda,\n

10149
09:51:22,052 --> 09:51:25,542
Dan di sini juga, kami dapat mengungkapkan\napa yang dikembalikan GetString?

10150
09:51:25,542 --> 09:51:29,522
Sampai hari ini, ia\nmengembalikan sebuah string.

10151
09:51:31,021 --> 09:51:33,361
Secara teknis,\nGetString selalu seperti itu

10152
09:51:33,362 --> 09:51:38,732
yang dilakukan adalah mengembalikan alamat\nkarakter pertama dalam sebuah string

10153
09:51:38,732 --> 09:51:42,542
dan percaya bahwa kita memasang garis miring terbalik\n

10154
09:51:42,542 --> 09:51:46,772
mengetik, dan sekarang sudah cukup\nuntuk printf, untuk strlen, untuk Anda

10155
09:51:46,771 --> 09:51:49,322
untuk mengetahui di mana string dimulai dan berakhir.

10156
09:51:49,322 --> 09:51:53,072
Jadi GetString sebenarnya\selalu mengembalikan sebuah pointer.

10157
09:51:53,072 --> 09:51:56,461
Itu belum mengembalikan string kutipan\nunquote itu sendiri

10158
09:51:56,461 --> 09:51:59,762
namun ada fungsi yang dapat\nmenyelesaikan perbandingan ini untuk kita.

10159
09:51:59,762 --> 09:52:02,862
Ingatlah bahwa saya dapat melakukan\nsesuatu seperti ini.

10160
09:52:02,862 --> 09:52:05,792
Saya sebenarnya bisa pergi\nin ke sini dan saya bisa--

10161
09:52:07,002 --> 09:52:14,341
Jadi jika saya menyertakan str bandingkan di sini dan\n

10162
09:52:14,341 --> 09:52:18,061
mari kita lihat sekarang apa yang terjadi\nketika saya membuat perbandingan.

10163
09:52:18,061 --> 09:52:21,572
Secara implisit mendeklarasikan perpustakaan\n

10164
09:52:22,682 --> 09:52:26,162
Jadi, Anda mungkin pernah melihat kesalahan ini sebelumnya\n

10165
09:52:26,161 --> 09:52:30,641
namun ada beberapa bukti\nbintang atau petunjuk yang terjadi di sini.

10166
09:52:30,641 --> 09:52:33,131
Sepertinya saya tidak menyertakan\nfile header string.h

10167
09:52:34,322 --> 09:52:38,911
Sertakan string.h yang, meskipun\n

10168
09:52:38,911 --> 09:52:41,791
disebut string, ia hanya memiliki\nfungsi yang berhubungan dengan string di dalamnya

10169
09:52:46,591 --> 09:52:50,371
Sekarang mari kita ketik hai, seru\n

10170
09:52:50,372 --> 09:52:54,002
Ini sekarang-- oh, saya salah menggunakannya.

10171
09:52:55,724 --> 09:52:58,141
Seharusnya itu\nimengesankan, namun yang terjadi justru sebaliknya.

10172
09:53:07,618 --> 09:53:09,951
DAVID J. MALAN: Ya, ini\nmengembalikan tiga nilai berbeda.

10173
09:53:09,951 --> 09:53:13,731
Nol jika sama, positif\n1 menjadi sebelum yang lain

10174
09:53:13,732 --> 09:53:15,422
negatif jika yang terjadi adalah sebaliknya.

10175
09:53:15,421 --> 09:53:18,621
Saya hanya lupa, jadi seperti\nyang saya lakukan minggu lalu dengan benar

10176
09:53:18,622 --> 09:53:22,102
jika saya ingin membandingkannya untuk\nekualitas per halaman manual

10177
09:53:22,101 --> 09:53:24,781
Saya harus memeriksa\nzero sebagai nilai kembalian.

10178
09:53:24,781 --> 09:53:27,951
Sekarang buat bandingkan, ./bandingkan, Enter.

10179
09:53:27,951 --> 09:53:30,621
Mari kita coba untuk terakhir kalinya-- hai dan hai.

10180
09:53:30,622 --> 09:53:32,182
Oke sekarang, sebenarnya keduanya sama.

10181
09:53:37,232 --> 09:53:40,112
Dan tentu saja, hal itu\ntidak akan kembali sama sepanjang waktu.

10182
09:53:40,112 --> 09:53:42,332
Jika saya mengetik hai lalu\nselamat tinggal, memang benar

10183
09:53:42,332 --> 09:53:44,622
memperhatikan perbedaan itu juga.

10184
09:53:44,622 --> 09:53:48,612
Baiklah, izinkan saya melanjutkan dan\melakukan satu hal lagi di sini.

10185
09:53:50,862 --> 09:53:54,362
Izinkan saya melanjutkan sekarang dan mengungkapkannya\n

10186
09:53:54,362 --> 09:53:57,692
Mari kita hilangkan perbandingan string\n

10187
09:53:57,692 --> 09:54:01,472
Cara sederhana untuk mencetaknya adalah\n

10188
09:54:02,521 --> 09:54:05,701
mengambil alamat dan mulai\ndi sana, cetak setiap karakter

10189
09:54:05,701 --> 09:54:09,101
sampai garis miring terbalik n, jadi\nserahkan saja dan lakukan itu.

10190
09:54:09,101 --> 09:54:12,271
Lalu mari kita lakukan satu lagi, %s,t.

10191
09:54:12,271 --> 09:54:17,111
Sekali lagi, ini adalah\ncampuran minggu pertama dan minggu ini

10192
09:54:17,112 --> 09:54:18,932
karena saya menghilangkan kata string.

10193
09:54:18,932 --> 09:54:24,072
Saya menggunakan char star, namun tetap\n

10194
09:54:24,072 --> 09:54:27,692
Izinkan saya menjalankan perbandingan\nsekarang, dan jika saya mengetik hai dan hai

10195
09:54:27,692 --> 09:54:29,652
Saya harus melihat hal yang sama dua kali.

10196
09:54:29,652 --> 09:54:33,272
Jadi tampilannya sama, tetapi di sini\nsekarang kita memiliki sintaksisnya hari ini

10197
09:54:33,271 --> 09:54:35,651
untuk mencetak\nalamat sebenarnya dari benda-benda ini.

10198
09:54:35,652 --> 09:54:40,082
Jadi izinkan saya mengubah s menjadi p,\n

10199
09:54:40,082 --> 09:54:44,012
dan mencetaknya, artinya cukup\ncetak alamatnya sebagai penunjuk.

10200
09:54:44,012 --> 09:54:48,781
Jadi buatlah perbandingan, ./bandingkan, dan sekarang\n

10201
09:54:48,781 --> 09:54:53,192
dan saya akan melihat, memang, ada dua\nalamat yang sedikit berbeda

10202
09:54:54,002 --> 09:54:56,311
Ada yang mendapat nilai B di akhir,\tidak ada yang mendapat nilai F di akhir

10203
09:54:56,311 --> 09:54:58,841
dan jaraknya memang hanya beberapa byte.

10204
09:54:58,841 --> 09:55:02,066
Jadi ini hanya mengkonfirmasi apa\n

10205
09:55:02,067 --> 09:55:04,442
Jadi apa artinya ini, mungkin\nin memori komputer?

10206
09:55:05,942 --> 09:55:09,872
Saya sudah memperkecil jadi saya punya sedikit\n

10207
09:55:09,872 --> 09:55:16,262
Ini mungkin ada dalam ingatan saya ketika saya melakukannya\n

10208
09:55:16,262 --> 09:55:19,742
Saya mendapatkan variabel dengan ukuran\n

10209
09:55:19,741 --> 09:55:23,311
diklaim sebelumnya bahwa pada sistem modern,\n

10210
09:55:23,311 --> 09:55:25,621
saat ini sehingga mereka dapat menghitung lebih tinggi lagi.

10211
09:55:25,622 --> 09:55:28,607
Dan di dalam\nmemori komputer, mungkin juga ada masalah.

10212
09:55:28,607 --> 09:55:31,232
Dan saya tidak tahu di mana akhirnya\njadi demi diskusi

10213
09:55:32,161 --> 09:55:35,121
Itu yang gratis\nsaat saya menjalankan programnya.

10214
09:55:35,122 --> 09:55:36,961
hai tanda seru, garis miring terbalik nol.

10215
09:55:36,961 --> 09:55:42,122
Mungkin itu berakhir, demi\n

10216
09:55:42,122 --> 09:55:47,162
Jadi untuk lebih jelasnya, apa yang disimpan setelah penugasan

10217
09:55:47,161 --> 09:55:50,072
operator menyalin dari kanan ke kiri?

10218
09:55:50,072 --> 09:55:54,692
Apa yang disimpan jika saya\namajukan satu slide lagi?

10219
09:55:56,811 --> 09:56:00,621
0x123, anggapan\nadalah jika sebuah string adalah

10220
09:56:00,622 --> 09:56:04,597
ditentukan oleh alamat\n pertamanya

10221
09:56:04,597 --> 09:56:09,052
adalah 0x123, maka itulah\nyang seharusnya ada dalam variabel s.

10222
09:56:09,052 --> 09:56:12,112
Dan secara teknis, itulah yang\n

10223
09:56:13,612 --> 09:56:16,762
GetString memang mengembalikan\na string, boleh dikatakan demikian

10224
09:56:16,762 --> 09:56:20,601
tetapi lebih tepat ia mengembalikan\nalamat char.

10225
09:56:20,601 --> 09:56:24,082
Apa yang kemudian disalin dari kanan ke\n

10226
09:56:24,082 --> 09:56:26,961
selama berminggu-minggu ini memang alamat itu.

10227
09:56:26,961 --> 09:56:31,461
Sekarang secara teknis, kami tidak terlalu memerlukan\n

10228
09:56:31,461 --> 09:56:34,311
Cukup dengan memikirkannya\nsecara referensial saja, tapi mari kita lakukan

10229
09:56:34,311 --> 09:56:38,151
pertama-tama pertimbangkan di mana letaknya.\n

10230
09:56:38,152 --> 09:56:39,802
dibuat pada baris kode kedua saya.

10231
09:56:39,802 --> 09:56:41,422
Mungkin berakhir di sana,\nmungkin di tempat lain.

10232
09:56:41,421 --> 09:56:43,713
Demi diskusi\nSaya akan menggambarnya ke kiri dan ke kanan.

10233
09:56:43,713 --> 09:56:47,131
Di manakah kata kedua\nyang saya ketikkan?

10234
09:56:47,131 --> 09:56:53,031
Misalkan salinan kedua\nhi berakhir di 0x456457458459.

10235
09:56:54,322 --> 09:56:55,911
Aku sendiri yang akan mencabutnya.

10236
09:56:57,982 --> 09:57:01,432
Dan sekarang ini adalah representasi\ngambar tentang alasannya

10237
09:57:01,432 --> 09:57:03,112
dan mari kita abstraksi semua hal lainnya.

10238
09:57:03,112 --> 09:57:08,421
Saat saya membandingkan s dengan t menggunakan\n

10239
09:57:08,421 --> 09:57:09,951
mereka jelas tidak sama.

10240
09:57:09,951 --> 09:57:12,112
Yang satu di sini, yang satu lagi di sini.

10241
09:57:12,112 --> 09:57:16,641
Dan beberapa saat yang lalu, yang satu adalah\n0x123, yang lainnya adalah 0x456.

10242
09:57:16,641 --> 09:57:19,851
Ya, secara teknis mereka menunjuk\na sesuatu yang sama

10243
09:57:19,851 --> 09:57:23,332
tapi itu hanya mengungkapkan\ncara kerja perbandingan str.

10244
09:57:23,332 --> 09:57:26,002
str bandingkan tampaknya\na berfungsi itu

10245
09:57:26,002 --> 09:57:29,241
mengambil alamat\na string sebagai argumennya

10246
09:57:29,241 --> 09:57:31,761
dan alamat string\nlainnya sebagai argumennya

10247
09:57:31,762 --> 09:57:36,682
itu menuju ke karakter pertama di\n

10248
09:57:36,682 --> 09:57:38,872
dan mungkin memiliki perulangan for\n atau perulangan while

10249
09:57:38,872 --> 09:57:41,782
dan hanya bergerak dari kiri ke\nkanan, membandingkan, melihat

10250
09:57:41,781 --> 09:57:45,502
untuk karakter yang sama di kiri dan kanan, dan\n

10251
09:57:47,482 --> 09:57:51,842
Jika memang terlihat perbedaannya\n

10252
09:57:51,841 --> 09:57:55,681
Ingat, itu sangat mirip dengan\n

10253
09:57:56,182 --> 09:57:59,092
Saya menggunakan perulangan for, saya\nmencari garis miring terbalik nol.

10254
09:57:59,091 --> 09:58:04,881
str bandingkan mungkin sedikit mirip\n

10255
09:58:04,881 --> 09:58:08,362
namun jika dibandingkan, kali ini\ntidak hanya menghitung.

10256
09:58:08,362 --> 09:58:11,092
Apakah ada pertanyaan,\perbandingan non string

10257
09:58:11,091 --> 09:58:14,181
dan mengapa kita menggunakan str\nbandingkan dan bukan sama dengan?

10258
09:58:15,374 --> 09:58:17,610
HADIRIN: Apakah pointer mempunyai alamat?

10259
09:58:17,610 --> 09:58:19,402
DAVID J. MALAN: Apakah\npointer punya alamat?

10260
09:58:19,902 --> 09:58:24,652
Jadi kami tidak akan melakukannya hari ini, tapi saya bisa\n

10261
09:58:26,182 --> 09:58:29,781
Itu akan memberi saya\neivalen dengan bintang char

10262
09:58:29,781 --> 09:58:31,966
itu sendiri dapat\ndisimpan di tempat lain dalam memori.

10263
09:58:32,841 --> 09:58:35,031
Kami tidak melakukan itu secara rekursif selamanya.

10264
09:58:35,031 --> 09:58:37,972
Ada bintang dan ada bintang\nbintang, tapi ya, itu suatu hal

10265
09:58:37,972 --> 09:58:41,272
dan ini sering kali berguna di\n

10266
09:58:41,271 --> 09:58:44,541
yang belum kita bicarakan,\n

10267
09:58:47,582 --> 09:58:50,632
Baiklah, jadi apa yang bisa kita lakukan sekarang\untuk meningkatkannya?

10268
09:58:50,631 --> 09:58:53,151
Mari kita lanjutkan dan terapkan\na program lain di sini

10269
09:58:53,152 --> 09:58:56,702
yang mungkin mencoba menyalin beberapa\nnilai, hanya untuk menunjukkannya.

10270
09:58:56,701 --> 09:59:00,441
Izinkan saya membuka file\nbernama, bagaimana dengan copy.c

10271
09:59:00,442 --> 09:59:02,872
dan saya akan memulai\ndengan beberapa penyertaan.

10272
09:59:02,872 --> 09:59:06,652
Jadi mari kita sertakan perpustakaan CS50 saja\n

10273
09:59:06,652 --> 09:59:11,302
Mari sertakan-- bagaimana kalau stdio\nas selalu, mari kita lakukan terlebih dahulu

10274
09:59:11,302 --> 09:59:14,072
sertakan string.h dan mungkin\tidak ada yang lain sebentar lagi.

10275
09:59:14,072 --> 09:59:17,072
Mari kita lakukan int main(void) seperti sebelumnya.

10276
09:59:17,072 --> 09:59:20,601
Dan kemudian di sini, mari kita ambil\nstring dari pengguna dan adil

10277
09:59:23,031 --> 09:59:26,722
Dan sebenarnya, kita sebenarnya bisa\nmemanggil bintang char ini jika kita mau

10278
09:59:26,722 --> 09:59:28,834
atau string, karena kita\menggunakan perpustakaan RS50.

10279
09:59:28,834 --> 09:59:30,002
Tapi kita akan kembali ke sana.

10280
09:59:30,002 --> 09:59:33,591
Sekarang mari kita buat salinan\nof s dan lakukan s sama dengan t

10281
09:59:33,591 --> 09:59:38,252
menggunakan satu operator penugasan dan\n

10282
09:59:38,252 --> 09:59:43,192
Mari masuk ke karakter pertama\nof t, yaitu t braket nol

10283
09:59:43,192 --> 09:59:45,592
lalu mari kita gunakan huruf besar\nit menggunakan fungsi itu

10284
09:59:45,591 --> 09:59:50,931
yang telah kami gunakan sebelumnya\n

10285
09:59:50,932 --> 09:59:52,592
Dan sebenarnya, aku harus kembali ke sini.

10286
09:59:52,591 --> 09:59:56,828
Jika saya menggunakan toupper atau jika Anda menggunakan\n

10287
09:59:56,828 --> 09:59:59,661
Saya mungkin tidak mengingatnya begitu saja,\n

10288
10:00:01,521 --> 10:00:04,651
Ada banyak\nfungsi berguna di perpustakaan itu juga.

10289
10:00:04,652 --> 10:00:09,457
Sekarang di baris terakhir program\n

10290
10:00:09,457 --> 10:00:16,882
adalah dengan hanya mencetak %s untuk setiap\n

10291
10:00:16,881 --> 10:00:20,042
tentu saja, dan mari\nlihat apa yang terjadi di sini.

10292
10:00:21,832 --> 10:00:23,242
ya Tuhan, banyak sekali kesalahannya.

10293
10:00:26,661 --> 10:00:30,211
String t sama dengan s, maaf, jadi\nSaya membuat dua variabel

10294
10:00:30,211 --> 10:00:33,141
s dan t masing-masing,\ndan saya menyalin s ke t.

10295
10:00:34,822 --> 10:00:40,012
Ini dia. ./copy, dan mari\nsekarang mengetik, misalnya

10296
10:00:40,012 --> 10:00:43,882
bagaimana dengan tanda seru\nin semua huruf kecil kali ini

10297
10:00:47,451 --> 10:00:51,561
Saya rasa bukan itu yang saya\inginkan, boleh dikatakan begitu, di sini.

10298
10:00:51,561 --> 10:00:55,381
Karena pemberitahuan yang saya dapatkan dari\npengguna, jadi periksa.

10299
10:00:55,381 --> 10:00:59,063
Saya kemudian menyalin t ke\ns, yang terlihat benar.

10300
10:00:59,063 --> 10:01:00,771
Untuk itulah kami selalu\nmenggunakan tugas.

10301
10:01:00,771 --> 10:01:04,551
Lalu saya huruf besar\nhuruf pertama di t, tapi bukan s--

10302
10:01:05,692 --> 10:01:09,412
lalu saya mencetak s dan t dan kemudian\nperhatikan, ternyata, keduanya s

10303
10:01:13,281 --> 10:01:15,881
Jadi jika Anda mulai merasa\nsedikit nyaman dengan apa yang ada

10304
10:01:15,881 --> 10:01:19,781
terjadi di balik terpal,\n

10305
10:01:19,781 --> 10:01:23,584
Mengapa keduanya dikapitalisasi?

10306
10:01:23,584 --> 10:01:24,792
Mengapa keduanya dikapitalisasi?

10307
10:01:25,482 --> 10:01:27,962
HADIRIN: Mungkinkah mereka\nmerujuk ke alamat yang sama?

10308
10:01:27,961 --> 10:01:29,372
DAVID J. MALAN: Ya, mereka\nmewakili alamat yang sama.

10309
10:01:31,232 --> 10:01:34,622
Jika Anda membuat variabel lain bernama\n

10310
10:01:34,622 --> 10:01:37,232
Anda benar-benar menetapkan\nit nilai dalam s

10311
10:01:37,232 --> 10:01:40,122
yaitu 0x123 atau semacamnya.

10312
10:01:40,122 --> 10:01:43,742
Dan pada saat itu dalam\ncerita mungkin ada s dan t

10313
10:01:43,741 --> 10:01:47,311
memiliki nilai 0x123,\nyang berarti secara teknis

10314
10:01:47,311 --> 10:01:51,421
menunjuk ke tanda seru h-i\nyang sama di memori.

10315
10:01:51,421 --> 10:01:56,252
Saya tidak pernah menyuruh komputer untuk memberi\n

10316
10:01:56,252 --> 10:01:59,491
sendiri, saya benar-benar mengatakan salin saja.

10317
10:01:59,491 --> 10:02:03,752
Jadi di sinilah pemahaman tentang apa\n

10318
10:02:03,752 --> 10:02:06,122
Saya hanya menyalin petunjuknya.

10319
10:02:06,122 --> 10:02:07,961
Jadi apa yang sebenarnya terjadi dalam ingatan?

10320
10:02:07,961 --> 10:02:09,601
Mari kita lihat di sini di grid ini.

10321
10:02:09,601 --> 10:02:12,451
Kalau awalnya saya buat,\nmungkin berakhir di sini.

10322
10:02:12,451 --> 10:02:15,961
Dan saya membuat hai dalam huruf kecil,\dan berakhir di sini.

10323
10:02:15,961 --> 10:02:22,112
Lalu alamatnya, sekali lagi, seperti\n

10324
10:02:22,112 --> 10:02:24,811
Jika kemudian saya membuat\nvariabel kedua bernama t

10325
10:02:24,811 --> 10:02:29,042
dan saya menyebutnya string, alias char\n

10326
10:02:29,042 --> 10:02:34,622
Tetapi ketika saya menyalin s ke t dengan\ndoing t sama dengan titik koma

10327
10:02:34,622 --> 10:02:40,227
yang sebenarnya hanya menyalin ke\n

10328
10:02:40,226 --> 10:02:43,351
Jadi jika kita sekarang mengabstraksikan semua ini\n

10329
10:02:43,351 --> 10:02:47,731
dengan panah, apa yang kita gambar di\nmemori komputer adalah ini.

10330
10:02:47,732 --> 10:02:52,232
Dua petunjuk berbeda tetapi menyimpan\nalamat yang sama, artinya

10331
10:02:52,232 --> 10:02:55,122
remah roti mengarah ke tempat yang sama.

10332
10:02:55,122 --> 10:02:58,202
Jadi jika Anda mengikuti t breadcrumb\n

10333
10:02:58,201 --> 10:03:02,191
secara fungsional itu\nsama dengan menyalin--

10334
10:03:02,192 --> 10:03:07,832
mengubah huruf pertama\nin versi s juga.

10335
10:03:07,832 --> 10:03:12,671
Lalu apa solusinya\nuntuk masalah seperti ini?

10336
10:03:12,671 --> 10:03:14,741
Bahkan jika Anda tidak tahu\ncara melakukannya dalam kode

10337
10:03:14,741 --> 10:03:17,307
apa inti dari apa yang sebenarnya saya\ninginkan, yaitu

10338
10:03:17,307 --> 10:03:21,461
Saya ingin salinan asli s, yang disebut t.

10339
10:03:21,461 --> 10:03:25,574
Saya ingin tanda seru h-i yang baru\ntanda garis miring terbalik nol.

10340
10:03:25,574 --> 10:03:27,281
Apa yang perlu saya lakukan\nuntuk mewujudkannya?

10341
10:03:28,249 --> 10:03:30,992
HADIRIN: Saya pikir ada\na fungsi yang disebut str copy.

10342
10:03:30,991 --> 10:03:34,322
DAVID J. MALAN: Jadi ada\nfungsi yang disebut str copy, strcpy

10343
10:03:34,322 --> 10:03:36,872
yang merupakan\njawaban yang mungkin untuk pertanyaan ini.

10344
10:03:36,872 --> 10:03:41,042
Hasil tangkapan dari stir copy adalah Anda\n

10345
10:03:41,042 --> 10:03:43,592
apa string sumbernya--\nyang ingin Anda salin--

10346
10:03:43,591 --> 10:03:46,322
Anda juga harus memasukkan\nalamat sebagian memori

10347
10:03:46,322 --> 10:03:50,911
tempat Anda dapat menyalin string, dan\n

10348
10:03:50,911 --> 10:03:53,311
dan kami membutuhkan satu\nblok lagi hari ini, jika Anda mau.

10349
10:03:53,311 --> 10:03:57,722
Kami belum melihat cara\nmembuat potongan memori baru

10350
10:03:57,722 --> 10:04:00,641
lalu biarkan beberapa\nfungsi lain menyalinnya.

10351
10:04:00,641 --> 10:04:04,021
Dan untuk ini, kami akan memperkenalkan\n

10352
10:04:04,932 --> 10:04:07,652
Dan ini mungkin fitur terakhir dan paling\nkuat saat ini

10353
10:04:07,652 --> 10:04:11,612
dimana kami akan memperkenalkan dua\n

10354
10:04:11,612 --> 10:04:14,851
malloc berarti alokasi memori,\nyang secara harafiah melakukan hal itu.

10355
10:04:14,851 --> 10:04:18,002
Ini adalah fungsi yang mengambil angka\n

10356
10:04:18,002 --> 10:04:21,394
apakah Anda ingin sistem operasinya\n

10357
10:04:21,394 --> 10:04:23,311
Ia akan menemukannya\ndan akan kembali

10358
10:04:23,311 --> 10:04:26,915
kepada Anda alamat byte pertama\n

10359
10:04:26,915 --> 10:04:29,582
and then you can do anything you\nwant with that chunk of memory.

10360
10:04:29,582 --> 10:04:31,112
gratis akan melakukan yang sebaliknya.

10361
10:04:31,112 --> 10:04:33,932
Setelah Anda selesai menggunakan sebagian\n

10362
10:04:33,932 --> 10:04:37,561
Anda dapat mengatakan gratis, dan itu berarti Anda\n

10363
10:04:37,561 --> 10:04:40,781
lalu sistem operasi dapat\n

10364
10:04:40,781 --> 10:04:44,222
Jadi ini sebenarnya adalah bukti\na masalah umum dalam pemrograman.

10365
10:04:44,222 --> 10:04:48,671
Jika Mac Anda pernah digunakan PC Anda\n

10366
10:04:48,671 --> 10:04:53,281
sangat lambat, atau melambat hingga\n

10367
10:04:53,281 --> 10:04:56,281
salah satu kemungkinan\npenjelasannya adalah

10368
10:04:56,281 --> 10:04:59,161
bahwa program yang Anda\njalankan oleh Apple atau Microsoft

10369
10:04:59,161 --> 10:05:02,401
atau siapa pun, mungkin mereka menggunakan\nmalloc atau yang setara

10370
10:05:02,402 --> 10:05:03,707
menanyakan sistem operasi--

10371
10:05:03,707 --> 10:05:05,582
Mac OS atau Windows-- untuk,\ngberi saya lebih banyak memori.

10372
10:05:06,362 --> 10:05:07,741
Pengguna membuat lebih banyak gambar.

10373
10:05:07,741 --> 10:05:09,182
Pengguna sedang mengetik esai yang lebih panjang.

10374
10:05:09,182 --> 10:05:10,802
Beri aku lebih banyak memori, lebih banyak memori.

10375
10:05:10,802 --> 10:05:15,362
Jika program mempunyai bug dan tidak pernah\n

10376
10:05:15,362 --> 10:05:18,061
komputer Anda mungkin akan menggunakan\nsemua memori yang tersedia

10377
10:05:18,061 --> 10:05:21,932
dan sejujurnya, manusia itu tidak terlalu baik\n

10378
10:05:21,932 --> 10:05:24,811
Seringkali program, komputer\nberhenti begitu saja

10379
10:05:24,811 --> 10:05:28,951
atau menjadi sangat, sangat lambat karena\n

10380
10:05:28,951 --> 10:05:31,112
ketika tidak ada cukup memori yang tersisa.

10381
10:05:31,112 --> 10:05:33,722
Jadi salah satu alasan\nkomputer menjadi sangat lambat

10382
10:05:33,722 --> 10:05:37,995
mungkin sering memanggil malloc, atau\n

10383
10:05:37,995 --> 10:05:40,412
Artinya, Anda harus\selalu menggunakan kedua fungsi ini

10384
10:05:40,411 --> 10:05:43,991
dalam konser dan bebaskan memori\nsetelah Anda selesai melakukannya.

10385
10:05:43,991 --> 10:05:48,121
Jadi izinkan saya melanjutkan dan melakukan ini di\n

10386
10:05:48,122 --> 10:05:50,162
Biarkan saya melanjutkan dan melakukan ini.

10387
10:05:50,161 --> 10:05:53,851
Sebelum saya menyalin s ke t menggunakan\nsesuatu seperti str copy

10388
10:05:53,851 --> 10:05:56,487
Pertama-tama saya perlu mendapatkan banyak\nmemori dari komputer.

10389
10:05:56,487 --> 10:05:59,612
Jadi untuk melakukan hal tersebut, mari kita jadikan ini super\n

10390
10:05:59,612 --> 10:06:03,182
jadi aku akan mengganti stringku\n

10391
10:06:03,182 --> 10:06:05,641
dan apa yang secara teknis\nam akan saya simpan di t

10392
10:06:05,641 --> 10:06:09,692
adalah alamat\nbagian memori yang tersedia.

10393
10:06:09,692 --> 10:06:13,891
Untuk melakukan itu, saya dapat meminta komputer\nuntuk mengalokasikan memori untuk saya

10394
10:06:15,302 --> 10:06:18,542
Jika saya ingin membuat salinan\ntanda seru h-i

10395
10:06:22,991 --> 10:06:27,252
Karena saya memerlukan h, i,\n

10396
10:06:28,362 --> 10:06:30,522
Terserah pada saya untuk memahami\nitu dan memintanya.

10397
10:06:30,521 --> 10:06:32,051
Itu tidak akan terjadi secara ajaib.

10398
10:06:32,052 --> 10:06:35,962
Tidak ada yang bisa dilakukan di C. Jadi saya bisa\ndengan naifnya mengetik empat di sana

10399
10:06:35,961 --> 10:06:38,862
dan itu akan benar\njika saya mengetikkan tanda seru hai

10400
10:06:38,862 --> 10:06:42,792
titik atau kata tiga huruf lainnya\n

10401
10:06:42,792 --> 10:06:46,122
Saya mungkin harus melakukan\nsesuatu seperti strlen dari s

10402
10:06:46,122 --> 10:06:49,692
ditambah 1 untuk karakter\nnull tambahan.

10403
10:06:49,692 --> 10:06:52,182
Ingat bahwa panjang string\ndoadalah dalam pengertian bahasa Inggris--

10404
10:06:52,182 --> 10:06:56,351
ia mengembalikan panjang string\n

10405
10:06:56,351 --> 10:06:58,601
fakta bahwa saya akan\nmembutuhkan garis miring terbalik itu n.

10406
10:06:58,601 --> 10:07:00,972
Sekarang izinkan saya melakukan\ngaya lama ini terlebih dahulu.

10407
10:07:00,972 --> 10:07:05,711
Izinkan saya melanjutkan dan secara manual\nmenyalin string s ke t terlebih dahulu.

10408
10:07:05,711 --> 10:07:13,572
Jadi untuk int i sama dengan 0, i lebih kecil dari\n

10409
10:07:13,572 --> 10:07:18,521
Lalu di dalam loop for saya, saya pergi\n

10410
10:07:18,521 --> 10:07:22,572
saya, tapi sebenarnya saya ingin\nkarakter nol juga

10411
10:07:22,572 --> 10:07:25,362
jadi saya ingin melakukan panjang\nstring ditambah 1 lagi

10412
10:07:25,362 --> 10:07:28,031
dan sialnya, sepertinya saya telah mempelajari\nan pengoptimalan terakhir kali.

10413
10:07:28,031 --> 10:07:30,491
Jika saya melakukan ini lagi\ndan lagi, saya benar-benar bisa

10414
10:07:30,491 --> 10:07:36,222
do n sama dengan strlen dari s ditambah 1\ndan kemudian do i kurang dari n

10415
10:07:36,222 --> 10:07:38,722
sama seperti optimasi desain yang bagus.

10416
10:07:38,722 --> 10:07:41,891
Saya pikir loop for ini\nbenar-benar akan menangani prosesnya

10417
10:07:41,891 --> 10:07:48,701
menyalin setiap karakter dari s ke\n

10418
10:07:48,701 --> 10:07:52,031
Atau saya bisa menghilangkan semua itu\n

10419
10:07:52,031 --> 10:07:56,201
adalah dengan menggunakan salinan str, yang diambil sebagai\n

10420
10:07:56,201 --> 10:07:58,661
dan argumen kedua adalah sumbernya.

10421
10:07:58,661 --> 10:08:03,641
Jadi salin dari kanan ke kiri dalam hal ini,\n

10422
10:08:03,641 --> 10:08:06,591
secara otomatis untuk saya juga.

10423
10:08:08,781 --> 10:08:10,762
Saya sekarang dapat memanfaatkan dengan aman.

10424
10:08:10,762 --> 10:08:14,802
Karakter pertama di t, yang\n

10425
10:08:14,802 --> 10:08:18,802
daripada s, lalu saya bisa mencetak keduanya\n

10426
10:08:19,811 --> 10:08:22,691
Jadi, buat salinannya-- baiklah,\napa kesalahan saya?

10427
10:08:22,692 --> 10:08:25,781
Secara implisit mendeklarasikan fungsi perpustakaan\n malloc dot, dot, dot.

10428
10:08:25,781 --> 10:08:28,421
Jadi kita telah melihat kesalahan seperti ini sebelumnya.

10429
10:08:28,421 --> 10:08:31,511
Apa-- bahkan jika Anda tidak\tahu bagaimana menyelesaikannya

10430
10:08:31,512 --> 10:08:33,042
apa inti dari solusinya?

10431
10:08:33,042 --> 10:08:36,072
Apa yang harus saya lakukan untuk memperbaikinya\n

10432
10:08:36,072 --> 10:08:38,631
mendeklarasikan fungsi perpustakaan?

10433
10:08:41,572 --> 10:08:42,921
Saya perlu memasukkan perpustakaan.

10434
10:08:42,921 --> 10:08:46,911
Dan saya bisa mencarinya di manual,\n

10435
10:08:47,722 --> 10:08:49,822
Ada perpustakaan lain\nkami akan melakukannya sesekali

10436
10:08:49,822 --> 10:08:51,921
perlu sekarang disebut lib standar--

10437
10:08:51,921 --> 10:08:56,031
perpustakaan standar-- yang berisi\nmalloc dan prototipe gratis

10438
10:08:57,381 --> 10:09:00,421
Baiklah, izinkan saya menjelaskannya\n

10439
10:09:00,421 --> 10:09:06,322
Sekarang aku baik-baik saja. ./copy, Masuk, Baiklah.\n

10440
10:09:06,322 --> 10:09:10,131
t dan s sekarang kembali sebagaimana mestinya.

10441
10:09:10,131 --> 10:09:15,322
Tampaknya s tidak tersentuh,\ntetapi t sekarang menggunakan huruf kapital.

10442
10:09:15,322 --> 10:09:18,711
Apakah ada pertanyaan tentang\napa yang baru saja kita lakukan dalam kode?

10443
10:09:20,533 --> 10:09:23,942
HADIRIN: Anda mengatakan bahwa\nmalloc dan free berjalan bersama.

10444
10:09:28,411 --> 10:09:30,453
Ada beberapa perbaikan\nSaya ingin melakukan, jadi biarkan saja

10445
10:09:30,453 --> 10:09:32,011
saya benar-benar melakukan itu sekarang.

10446
10:09:32,012 --> 10:09:35,042
Secara teknis, saya harus mempraktikkan apa\n

10447
10:09:35,042 --> 10:09:37,459
ketika saya selesai dengan t, bebaskan t.

10448
10:09:37,459 --> 10:09:39,542
Untungnya, saya tidak perlu\nkhawatir tentang seberapa besar t

10449
10:09:39,542 --> 10:09:43,052
tadinya-- komputer mengingat berapa\n

10450
10:09:43,052 --> 10:09:44,732
semuanya, bukan hanya yang pertama.

10451
10:09:46,442 --> 10:09:49,112
Saya tidak perlu melakukan yang gratis\ns, dan memang seharusnya tidak demikian

10452
10:09:49,112 --> 10:09:52,052
karena itu ditangani\secara otomatis oleh perpustakaan CS50.

10453
10:09:52,052 --> 10:09:54,452
s, ingat, berasal dari\nGetString, dan kami sebenarnya

10454
10:09:54,451 --> 10:09:56,829
punya beberapa kode bagus\nyang memastikannya

10455
10:09:56,830 --> 10:09:58,622
itu di akhir\neksekusi program Anda

10456
10:09:58,622 --> 10:10:01,682
kita mengosongkan memori apa pun yang\nkita alokasikan sehingga sebenarnya kita tidak mengalokasikannya

10457
10:10:01,682 --> 10:10:03,616
buang memori seperti yang saya jelaskan sebelumnya.

10458
10:10:03,616 --> 10:10:05,491
Namun sebenarnya ada beberapa\nbeberapa hal lainnya

10459
10:10:05,491 --> 10:10:07,991
jika saya benar-benar ingin\nbertele-tele saya harus memasukkannya ke sini.

10460
10:10:07,991 --> 10:10:11,432
Ternyata\nterkadang malloc bisa gagal

10461
10:10:11,432 --> 10:10:14,169
dan terkadang malloc tidak\nmemiliki cukup memori

10462
10:10:14,169 --> 10:10:15,961
karena mungkin\nkomputer Anda melakukan banyak hal

10463
10:10:15,961 --> 10:10:18,061
hal-hal tidak ada lagi\nRAM yang tersedia.

10464
10:10:18,061 --> 10:10:20,341
Jadi secara teknis, saya harus\melakukan sesuatu seperti ini--

10465
10:10:20,341 --> 10:10:24,901
jika t sama dengan nol,\ndengan dua L hari ini

10466
10:10:24,902 --> 10:10:28,112
maka saya harus mengembalikan 1 atau sesuatu\n

10467
10:10:28,112 --> 10:10:29,987
Saya mungkin harus mencetak\nan pesan kesalahan juga

10468
10:10:29,987 --> 10:10:31,662
tapi untuk saat ini saya akan membuatnya tetap sederhana.

10469
10:10:31,661 --> 10:10:33,886
Saya mungkin juga harus memeriksa ini.

10470
10:10:33,887 --> 10:10:36,211
Ini sedikit berisiko bagi saya.

10471
10:10:36,211 --> 10:10:40,872
Jika saya melakukan t braket nol, ini adalah\n

10472
10:10:40,872 --> 10:10:43,592
Namun bagaimana jika manusia tersebut\nmenekan Enter saat diminta

10473
10:10:43,591 --> 10:10:46,752
dan bahkan tidak mengetik h, apalagi h-i tanda seru?

10474
10:10:46,752 --> 10:10:48,991
Bagaimana jika tidak ada tanda kurung t nol?

10475
10:10:48,991 --> 10:10:54,542
Jadi secara teknis, apa yang mungkin harus saya lakukan\n

10476
10:10:54,542 --> 10:11:00,482
setidaknya lebih besar dari nol,\n

10477
10:11:01,802 --> 10:11:04,092
Dan pada saat\nakhir jika semuanya berjalan dengan baik

10478
10:11:04,091 --> 10:11:08,201
Saya dapat mengembalikan angka nol, sehingga menandakan\n

10479
10:11:08,201 --> 10:11:12,072
Jadi ya, kedua fungsi ini, malloc\n

10480
10:11:12,072 --> 10:11:17,012
Jadi, jika Anda menelepon malloc, pada akhirnya Anda\nharus menelepon gratis.

10481
10:11:17,012 --> 10:11:22,617
Namun Anda tidak memanggil malloc untuk s,\n

10482
10:11:23,491 --> 10:11:24,658
HADIRIN: Ini pertanyaannya.

10483
10:11:24,658 --> 10:11:26,940
Mengapa kita melakukan malloc plus 1?

10484
10:11:26,940 --> 10:11:28,732
DAVID J. MALAN: Mengapa\ndid melakukan malloc plus 1?

10485
10:11:28,732 --> 10:11:31,642
Jadi malloc-- maaf, malloc\npanjang stringnya s

10486
10:11:31,641 --> 10:11:35,264
ditambah 1-- panjang string adalah\n

10487
10:11:35,264 --> 10:11:36,472
akan melihatnya dalam bahasa Inggris.

10488
10:11:36,472 --> 10:11:39,472
Jadi, h-i tanda seru\ntanda-- strlen memberi saya 3

10489
10:11:39,472 --> 10:11:43,162
tapi saya tahu sekarang pada minggu lalu dan\n

10490
10:11:43,161 --> 10:11:45,111
dan sebuah string selalu memiliki byte tambahan.

10491
10:11:45,112 --> 10:11:47,662
Tanggung jawab ada pada saya untuk\nmemahami dan menerapkannya

10492
10:11:47,661 --> 10:11:52,371
pelajaran itu sehingga saya benar-benar\n

10493
10:11:53,991 --> 10:11:59,661
Dan inilah hal yang menjengkelkan ketika\n

10494
10:11:59,661 --> 10:12:03,711
minggu, ternyata\n-U-L-L idenya sama.

10495
10:12:03,711 --> 10:12:06,891
Itu juga nol, tapi itu nol\nin konteks penunjuk.

10496
10:12:06,891 --> 10:12:11,122
Singkat cerita, Anda tidak akan pernah\n

10497
10:12:11,122 --> 10:12:12,412
dan kami melihatnya di layar.

10498
10:12:12,411 --> 10:12:17,991
Anda akan mulai menulis N-U-L-L ketika Anda\n

10499
10:12:19,042 --> 10:12:20,452
Dan yang saya maksud dengan itu adalah ini.

10500
10:12:20,451 --> 10:12:23,331
Jika malloc gagal dan\ntidak cukup memori yang tersisa di dalamnya

10501
10:12:23,332 --> 10:12:26,632
komputer untuk Anda,\nharus mengembalikan nilai khusus

10502
10:12:26,631 --> 10:12:30,561
dan nilai khusus tersebut adalah\nN-U-L-L dengan huruf kapital semua.

10503
10:12:30,561 --> 10:12:32,182
Itu menandakan ada yang tidak beres.

10504
10:12:32,182 --> 10:12:37,131
Jangan percaya bahwa saya memberi\nAnda nilai pengembalian yang berguna.

10505
10:12:37,131 --> 10:12:40,752
Pertanyaan lain tentang\nsalinan ini sejauh ini?

10506
10:12:46,841 --> 10:12:48,091
DAVID J. MALAN: Pertanyaan bagus.

10507
10:12:48,091 --> 10:12:49,981
Apakah salinan str tidak akan berfungsi tanpa malloc?

10508
10:12:49,982 --> 10:12:53,252
Anda memerlukan keduanya dalam\nkasus ini karena str menyalin

10509
10:12:53,252 --> 10:12:56,641
menurut definisi-- jika saya menariknya\n

10510
10:12:56,641 --> 10:12:58,622
untuk meletakkan karakter yang disalin.

10511
10:12:58,622 --> 10:13:01,682
Tidak cukup hanya\nmengatakan char start t titik koma.

10512
10:13:01,682 --> 10:13:03,122
Itu hanya memberi Anda petunjuk.

10513
10:13:03,122 --> 10:13:06,062
Tapi aku butuh\sebagian memori lagi

10514
10:13:06,061 --> 10:13:10,171
sama besarnya dengan tanda seru h-i\ntanda garis miring terbalik nol

10515
10:13:10,171 --> 10:13:12,631
jadi malloc memberi saya\nbanyak memori

10516
10:13:12,631 --> 10:13:16,921
dan kemudian str copy mengisinya dengan h-i\n

10517
10:13:16,921 --> 10:13:19,381
Jadi sekali lagi, itulah alasan kita\nturun ke level yang lebih rendah ini

10518
10:13:19,381 --> 10:13:21,423
karena setelah Anda memahami\napa yang perlu dilakukan

10519
10:13:21,423 --> 10:13:23,292
Anda sekarang memiliki fungsi untuk melakukannya.

10520
10:13:23,292 --> 10:13:25,332
Jadi mari kita pertimbangkan\napa yang baru saja kita selesaikan.

10521
10:13:25,332 --> 10:13:29,192
Jadi dalam versi program berikutnya\n

10522
10:13:29,192 --> 10:13:32,702
t diinisialisasi untuk\nnilai kembalian malloc

10523
10:13:32,701 --> 10:13:34,741
dan mungkin kenangan yang\nsaya dapatkan kembali ada di sini--

10524
10:13:38,341 --> 10:13:40,651
Awalnya saya biarkan kosong\nkarena tidak ada apa-apa

10525
10:13:40,652 --> 10:13:42,362
diletakkan di sana secara otomatis oleh malloc.

10526
10:13:42,362 --> 10:13:46,472
Saya hanya mendapatkan sebagian memori itu\n

10527
10:13:46,472 --> 10:13:51,391
Saya kemudian menetapkan t ke nilai kembalian itu,\n

10528
10:13:51,391 --> 10:13:53,222
Perhatikan tidak ada garis miring terbalik nol.

10529
10:13:53,222 --> 10:13:56,101
Ini belum berupa string\ini hanya sebagian memori--

10530
10:13:56,101 --> 10:13:58,231
empat byte-- array empat byte.

10531
10:13:58,232 --> 10:14:01,802
Apa yang akhirnya dilakukan str copy\nuntuk saya adalah menyalin h over

10532
10:14:01,802 --> 10:14:06,032
tanda i berakhir, tanda seru\nover, dan garis miring terbalik nol.

10533
10:14:06,031 --> 10:14:09,902
Dan jika saya tidak ingin menggunakan str copy atau\n

10534
10:14:09,902 --> 10:14:14,062
akan melakukan hal yang persis sama.

10535
10:14:14,061 --> 10:14:19,178
Apakah ada pertanyaan,\bukan contoh berikut ini.

10536
10:14:28,491 --> 10:14:29,741
DAVID J. MALAN: Pertanyaan bagus.

10537
10:14:29,741 --> 10:14:34,091
Setelah malloc, jika saya sudah\nmasih melakukan t sama dengan s

10538
10:14:34,091 --> 10:14:37,211
itu sebenarnya akan menciptakan\nmasalah awal yang sama

10539
10:14:37,211 --> 10:14:40,932
dengan hanya menyalin 0x123 dari s ke t.

10540
10:14:40,932 --> 10:14:44,112
Jadi saya akan tertinggal\n

10541
10:14:44,112 --> 10:14:48,072
beberapa langkah yang lalu, saya akan-- dan\nsaya tidak bisa melakukannya secara langsung--

10542
10:14:48,072 --> 10:14:50,381
panah ini, jika saya melakukan\napa yang baru saja Anda jelaskan

10543
10:14:50,381 --> 10:14:54,358
sekarang akan menunjuk ke sini dan seterusnya\n

10544
10:14:54,358 --> 10:14:56,441
masalahnya, saya\nhanya akan menyia-nyiakannya

10545
10:14:56,442 --> 10:14:59,502
empat byte untuk sementara yang\nsebenarnya tidak saya gunakan.

10546
10:15:06,222 --> 10:15:08,180
apakah Anda selalu menggunakan malloc\nand str copy bersama-sama?

10547
10:15:08,955 --> 10:15:10,872
Keduanya memecahkan\ndua masalah yang berbeda.

10548
10:15:10,872 --> 10:15:15,132
malloc memberi saya cukup memori untuk\n

10549
10:15:15,131 --> 10:15:18,941
Namun, Anda sebenarnya bisa menggunakan\n

10550
10:15:18,942 --> 10:15:22,272
dan Anda dapat menggunakan salinan str untuk itu, dan\n

10551
10:15:22,271 --> 10:15:24,432
Namun sejauh ini, ini merupakan model mental yang masuk akal

10552
10:15:24,432 --> 10:15:26,652
untuk memilikinya jika Anda\ningin menyalin string

10553
10:15:26,652 --> 10:15:30,281
Anda menggunakan malloc dan kemudian str\ncopy, atau loop buatan Anda sendiri.

10554
10:15:42,531 --> 10:15:44,730
DAVID J. MALAN: Katakan itu sekali lagi.

10555
10:15:55,531 --> 10:15:58,801
str copy, sesuai dokumentasinya,\nakan menyalin seluruh string

10556
10:15:58,802 --> 10:16:01,022
ditambah karakter nol di akhir.

10557
10:16:01,021 --> 10:16:03,481
Itu hanya berasumsi akan ada satu di sana.

10558
10:16:03,482 --> 10:16:07,652
Oleh karena itu terserah pada Anda untuk meneruskan str\n

10559
10:16:08,641 --> 10:16:10,832
Jika saya hanya meminta malloc\nuntuk tiga byte, itu

10560
10:16:10,832 --> 10:16:12,902
berpotensi\nmenimbulkan masalah memori

10561
10:16:12,902 --> 10:16:16,262
dimana str copy akan tetap\nmenyalin secara membabi buta satu, dua, tiga

10562
10:16:16,262 --> 10:16:19,802
empat byte, namun secara teknis seharusnya\n

10563
10:16:19,802 --> 10:16:22,652
Anda belum memiliki akses ke\n

10564
10:16:22,652 --> 10:16:24,902
karena kamu tidak pernah memintanya kepada malloc.

10565
10:16:26,822 --> 10:16:29,822
HADIRIN: Jadi nomor di dalamnya\n

10566
10:16:30,182 --> 10:16:32,057
Nomor di dalam malloc--\nit adalah salah satu argumennya.

10567
10:16:32,057 --> 10:16:35,084
Ini adalah jumlah byte yang Anda inginkan kembali.

10568
10:16:35,084 --> 10:16:38,402
AUDIENCE: Apakah itu berarti anda\nharus mengingat [Tak terdengar]??

10569
10:16:41,158 --> 10:16:43,491
DAVID J. MALAN: Ya, tanggung jawab ada pada Anda, programmer

10570
10:16:43,491 --> 10:16:45,658
untuk mengingat atau sejujurnya, gunakan\na fungsi untuk mencari tahu

10571
10:16:45,658 --> 10:16:47,182
berapa banyak byte yang sebenarnya Anda butuhkan.

10572
10:16:47,182 --> 10:16:50,031
Itu sebabnya saya pada akhirnya\nmengetik empat secara manual

10573
10:16:51,802 --> 10:16:55,192
Jadi plus 1 diperlukan jika Anda\n

10574
10:16:55,192 --> 10:16:57,832
tetapi menggunakan strlen berarti\nsaya sebenarnya bisa

10575
10:16:57,832 --> 10:17:01,012
bermain-main dengan jenis\ninput apa pun dan itu akan terjadi secara dinamis

10576
10:17:02,902 --> 10:17:05,182
Jadi cukuplah untuk mengatakan,\nada banyak cara

10577
10:17:05,182 --> 10:17:07,292
sudah ada di mana Anda dapat\nmulai merusak program.

10578
10:17:07,292 --> 10:17:10,747
Mari berikan Anda setidaknya satu alat untuk\n

10579
10:17:10,747 --> 10:17:12,622
Dan tentu saja, dalam\npermasalahan mendatang Anda akan melakukannya

10580
10:17:12,622 --> 10:17:14,722
gunakan ini untuk menemukan bug dalam kode Anda sendiri.

10581
10:17:14,722 --> 10:17:18,351
Tidak hanya menggunakan printf, tidak hanya menggunakan\n

10582
10:17:19,561 --> 10:17:22,731
Jadi izinkan saya melanjutkan dan dengan sengaja\n

10583
10:17:22,732 --> 10:17:24,872
yang memiliki beberapa kesalahan terkait memori.

10584
10:17:24,872 --> 10:17:30,262
Izinkan saya menyertakan stdio.h di bagian atas dan\n

10585
10:17:30,262 --> 10:17:31,912
jadi saya punya akses ke malloc sekarang.

10586
10:17:31,911 --> 10:17:36,531
Biarkan saya melakukan int main(void) dan kemudian\n

10587
10:17:36,531 --> 10:17:39,711
Saya ingin mengalokasikan\nmungkin bagaimana kalau tiga--

10588
10:17:41,572 --> 10:17:43,552
Sekadar untuk diskusi.

10589
10:17:43,552 --> 10:17:48,082
Jadi saya akan melanjutkan dan melakukan malloc\n

10590
10:17:48,082 --> 10:17:51,368
Saya ingin tiga bilangan bulat dan\nan bilangan bulat adalah empat byte

10591
10:17:51,368 --> 10:17:52,701
jadi secara teknis saya bisa melakukan ini--

10592
10:17:52,701 --> 10:17:57,211
3 kali 4, atau saya bisa melakukannya 12 kali,\n

10593
10:17:57,211 --> 10:17:59,701
dan jika saya menjalankan program ini di\na komputer yang sedikit berbeda

10594
10:17:59,701 --> 10:18:01,221
int mungkin ukurannya berbeda.

10595
10:18:01,222 --> 10:18:05,682
jadi cara yang lebih baik untuk melakukan ini adalah\n

10596
10:18:05,682 --> 10:18:08,932
Dan ini hanyalah operator yang dapat Anda gunakan\n

10597
10:18:08,932 --> 10:18:10,972
di komputer ini, seberapa besar intnya?

10598
10:18:10,972 --> 10:18:13,652
Seberapa besar pelampungnya, atau yang lainnya?

10599
10:18:13,652 --> 10:18:15,772
Jadi itu akan memberiku banyak--

10600
10:18:15,771 --> 10:18:18,171
memori sebanyak itu untuk tiga int.

10601
10:18:18,171 --> 10:18:20,182
Saya ingin menetapkan ini pada apa?

10602
10:18:20,182 --> 10:18:22,372
Nah, malloc mengembalikan alamat.

10603
10:18:22,372 --> 10:18:27,652
Petunjuk adalah alamat, jadi saya berangkat\n

10604
10:18:31,101 --> 10:18:33,682
Ini agak kurang jelas,\nnamun sekali lagi kembali ke dasar.

10605
10:18:33,682 --> 10:18:38,451
Sisi kanan di sini memberi saya\n

10606
10:18:38,451 --> 10:18:42,021
malloc mengembalikan alamat\nbyte pertama dari potongan itu.

10607
10:18:42,021 --> 10:18:44,151
Bagaimana cara menyimpan alamat sesuatu?

10608
10:18:45,052 --> 10:18:48,922
Sintaks untuk tipe data hari ini\nis, bintang

10609
10:18:48,921 --> 10:18:53,991
di mana jenis data yang dimaksud\n

10610
10:18:53,991 --> 10:18:57,891
Sekali lagi, ini tidak ada gunanya, hanya\n

10611
10:18:57,891 --> 10:19:03,262
di sini, tapi sekarang ini setara dengan\n

10612
10:19:03,262 --> 10:19:06,711
secara total, mungkin, jadi secara teknis sekarang saya bisa melakukan ini.

10613
10:19:06,711 --> 10:19:10,851
Mungkin saya bisa membahas yang pertama\n

10614
10:19:12,271 --> 10:19:20,061
Lokasi kedua, nomor 73, dan\n

10615
10:19:20,061 --> 10:19:22,911
Sekarang saya sengaja\nmembuat dua kesalahan di sini

10616
10:19:22,911 --> 10:19:26,061
karena saya mencoba untuk tersandung\nmenyimpangkan pemahaman baru saya

10617
10:19:26,061 --> 10:19:28,641
atau kehijauanku dengan\npetunjuk pemahaman.

10618
10:19:28,641 --> 10:19:32,002
Pertama, saya tidak ingat bahwa saya\n

10619
10:19:33,112 --> 10:19:36,502
malloc pada dasarnya mengembalikan sebuah array,\n

10620
10:19:36,502 --> 10:19:38,902
Array yang terdiri dari tiga int,\atau lebih teknisnya

10621
10:19:38,902 --> 10:19:42,741
alamat sepotong memori\nyang dapat memuat tiga int.

10622
10:19:42,741 --> 10:19:46,042
Jadi saya bisa menggunakan tanda kurung siku\n

10623
10:19:46,042 --> 10:19:48,991
dan menggunakan aritmatika penunjuk, tetapi\n

10624
10:19:48,991 --> 10:19:50,841
Tapi saya telah membuat dua kesalahan.

10625
10:19:50,841 --> 10:19:54,441
Saya tidak mulai mengindeks\nat nol, jadi baris tujuh

10626
10:19:54,442 --> 10:19:56,302
seharusnya x braket nol.

10627
10:19:56,302 --> 10:19:59,174
Baris delapan seharusnya menjadi x\nbracket 1, lalu baris sembilan

10628
10:19:59,173 --> 10:20:00,381
seharusnya x braket 2.

10629
10:20:01,591 --> 10:20:04,521
Kesalahan kedua yang\nSaya lakukan sebagai efek samping

10630
10:20:04,521 --> 10:20:07,581
apakah aku juga menyentuh\ningatan yang seharusnya tidak kulakukan.

10631
10:20:07,582 --> 10:20:12,531
x braket 3 berarti pergi ke\n

10632
10:20:13,341 --> 10:20:15,861
Saya hanya meminta cukup\nmemori untuk tiga int

10633
10:20:15,862 --> 10:20:19,101
bukan empat, jadi inilah yang\ndisebut buffer overflow.

10634
10:20:19,101 --> 10:20:22,191
Saya tidak sengaja, tetapi\nsengaja saat ini

10635
10:20:22,192 --> 10:20:26,312
melampaui batas\narray ini, potongan memori ini.

10636
10:20:26,311 --> 10:20:28,671
Jadi hal buruk bisa saja terjadi,\ntetapi belum tentu terjadi

10637
10:20:28,671 --> 10:20:30,002
dengan hanya menjalankan program Anda.

10638
10:20:30,002 --> 10:20:31,552
Biarkan saya melanjutkan dan mencoba ini.

10639
10:20:31,552 --> 10:20:37,372
Buat memori, dan Anda akan melihat di sini\nbahwa kompilasinya OK. ./memori

10640
10:20:37,372 --> 10:20:39,500
dan itu sebenarnya\nbukan kesalahan segmentasi

10641
10:20:39,500 --> 10:20:41,542
yang kembali ke\ntitik nondeterminisme itu.

10642
10:20:41,542 --> 10:20:43,912
Kadang ya, kadang\ndotidak-- tergantung seberapa buruknya

10643
10:20:45,052 --> 10:20:48,219
Namun ada program yang dapat\nsmengidentifikasi kesalahan seperti ini

10644
10:20:48,218 --> 10:20:51,051
dan saya akan melanjutkan dan memperluas\n

10645
10:20:51,052 --> 10:20:56,512
dan saya akan menjalankan bukan hanya ./memory,\n

10646
10:20:56,512 --> 10:20:59,362
Ini adalah perintah yang disertakan\ndi banyak sistem komputer

10647
10:20:59,362 --> 10:21:02,432
yang dirancang untuk menemukan\nbug terkait memori dalam kode.

10648
10:21:02,432 --> 10:21:04,372
Jadi ini adalah alat baru di\nperangkat Anda saat ini

10649
10:21:04,372 --> 10:21:06,472
dan Anda akan menggunakannya dengan\nrangkaian masalah yang akan datang.

10650
10:21:07,671 --> 10:21:09,951
Ini keluarannya, sejujurnya, itu mengerikan.

10651
10:21:09,951 --> 10:21:13,341
Namun ada beberapa hal\nyang akan mulai terlihat

10652
10:21:13,341 --> 10:21:15,741
dan akan membantu Anda dengan\nalat dan masalahnya

10653
10:21:15,741 --> 10:21:17,311
set untuk melihat hal-hal semacam ini.

10654
10:21:21,832 --> 10:21:25,822
Itu ada di baris memory.c\nsembilan, sesuai sorotan saya.

10655
10:21:25,822 --> 10:21:27,711
Jadi izinkan saya melihat baris sembilan.

10656
10:21:27,711 --> 10:21:31,372
Dalam artian apa ini merupakan\ninpenulisan valid ukuran empat?

10657
10:21:31,372 --> 10:21:33,952
Ya, saya menyentuh ingatan\nyang seharusnya tidak saya lakukan, dan memang demikian

10658
10:21:33,951 --> 10:21:35,421
menyentuhnya seolah itu sebuah int.

10659
10:21:35,421 --> 10:21:37,911
Dan int berukuran empat byte-- ukuran empat.

10660
10:21:37,911 --> 10:21:41,191
Jadi sekali lagi, ini memerlukan beberapa latihan untuk\n

10661
10:21:41,192 --> 10:21:44,132
tapi ini sekarang menjadi petunjuk\nbagi saya, sang programmer

10662
10:21:44,131 --> 10:21:47,591
itu bukan saja saya mengacau, tapi\nsaya mengacau terkait dengan memori

10663
10:21:47,591 --> 10:21:50,109
jadi ini hanya sebuah petunjuk, jika Anda mau.

10664
10:21:50,110 --> 10:21:52,652
Ini belum tentu\nmemberi tahu Anda cara memperbaikinya

10665
10:21:52,652 --> 10:21:56,491
Anda harus bergulat dengan\nsemantik, tetapi tidak valid

10666
10:21:56,491 --> 10:21:58,322
tulis ukuran empat-- oh, oke.

10667
10:21:58,322 --> 10:22:02,682
Jadi saya seharusnya tidak mengindeks\nmelewati batas di sini.

10668
10:22:02,682 --> 10:22:05,381
Baiklah, jadi aku\nseharusnya tidak melakukan itu.

10669
10:22:05,381 --> 10:22:11,125
Jadi izinkan saya melanjutkan dan mengubahnya\n

10670
10:22:11,125 --> 10:22:13,292
Baiklah, jadi izinkan saya\nmengkompilasi ulang kode saya.

10671
10:22:13,292 --> 10:22:19,622
Buat memori, ./memori, tetap tidak\n

10672
10:22:20,252 --> 10:22:26,461
Biarkan saya menjalankan Valgrind\n

10673
10:22:26,461 --> 10:22:28,682
Dan sekarang tidak ada lagi yang menakutkan--

10674
10:22:28,682 --> 10:22:32,201
hasilnya tidak terlalu menakutkan sekarang, tapi\nmasih ada sesuatu di sana.

10675
10:22:32,201 --> 10:22:35,728
Perhatikan ini-- 12 byte dalam satu blok--

10676
10:22:35,728 --> 10:22:37,561
tidak memperhatikan tata bahasa\ndi sana-- pastinya

10677
10:22:37,561 --> 10:22:39,331
hilang dalam catatan hilang satu per satu.

10678
10:22:39,332 --> 10:22:42,972
Sangat samar, tapi ini mengisyaratkan\nat apa yang disebut kebocoran memori.

10679
10:22:42,972 --> 10:22:46,802
Blok memori hilang di\n

10680
10:22:46,802 --> 10:22:48,242
Aku memintanya tapi aku tidak pernah--

10681
10:22:51,368 --> 10:22:53,701
Dan ini adalah cara yang tidak masuk akal untuk mengatakan, Anda telah melakukan kesalahan.

10682
10:22:54,911 --> 10:22:57,181
Untungnya, ini adalah perbaikan yang mudah.

10683
10:22:57,182 --> 10:23:01,572
Setelah aku selesai dengan ingatan ini, aku\n

10684
10:23:01,572 --> 10:23:03,991
Jadi sekarang izinkan saya melanjutkan\ndan menjalankan kembali memori

10685
10:23:03,991 --> 10:23:07,801
itu masih berjalan dengan baik selama ini\n

10686
10:23:08,942 --> 10:23:10,622
Tapi izinkan saya menjalankan Valgrind sekali lagi.

10687
10:23:14,701 --> 10:23:16,891
Semua blok heap\ndibebaskan, apa pun maksudnya.

10688
10:23:18,732 --> 10:23:21,842
Dan meskipun itu masih sedikit\n

10689
10:23:21,841 --> 10:23:25,345
dan faktanya, ini cukup eksplisit--\n

10690
10:23:27,002 --> 10:23:30,192
Jadi meskipun ini adalah salah satu\nalat paling misterius yang akan kami gunakan

10691
10:23:30,192 --> 10:23:32,702
ia juga salah satu yang paling\nkuat karena ia dapat melihat sesuatu

10692
10:23:32,701 --> 10:23:36,031
bahwa kamu, sebagai manusia, mungkin tidak melakukannya, dan\n

10693
10:23:36,031 --> 10:23:38,101
Ini membuat\npembacaan kode Anda lebih dekat

10694
10:23:38,101 --> 10:23:43,862
saat sedang berjalan untuk mencari tahu\napa sebenarnya yang sedang terjadi.

10695
10:23:43,862 --> 10:23:46,141
Ada pertanyaan tentang alat ini?

10696
10:23:46,141 --> 10:23:50,042
Dan kami akan memandu Anda setelah hari ini\ndengan benar-benar menggunakan ini juga.

10697
10:23:50,042 --> 10:23:52,561
Hanya membantu Anda menemukan\nkesalahan terkait memori

10698
10:23:52,561 --> 10:23:55,381
yang sekarang mungkin dapat Anda buat.

10699
10:23:55,381 --> 10:23:57,542
Baiklah, ayo lakukan satu\hal lain yang berhubungan dengan memori.

10700
10:23:57,542 --> 10:23:59,531
Biarkan saya mengecilkan jendela terminal saya di sini.

10701
10:23:59,531 --> 10:24:03,271
Biarkan saya membuat satu\nfile lain di sini yang disebut sampah.c.

10702
10:24:03,271 --> 10:24:06,781
Ternyata ada istilah kita\n

10703
10:24:06,781 --> 10:24:08,292
yang dapat kami ungkapkan sebagai berikut.

10704
10:24:08,292 --> 10:24:11,281
Izinkan saya menyertakan stdio.h,\ndan izinkan saya menyertakan--

10705
10:24:11,281 --> 10:24:14,822
bagaimana dengan stdlib.h, lalu\nbiarkan saya memberikan diri saya int

10706
10:24:14,822 --> 10:24:17,921
main(void), dan kemudian dalam\nprogram yang relatif singkat ini

10707
10:24:17,921 --> 10:24:20,822
izinkan saya memberi diri saya tiga\nint menggunakan minggu lalu

10708
10:24:20,822 --> 10:24:24,781
notasi, cukup masukkan tanda kurung skor\n

10709
10:24:24,781 --> 10:24:28,801
Kalau begitu izinkan saya melanjutkan dan melakukannya untuk\n

10710
10:24:28,802 --> 10:24:34,052
i plus plus, lalu biarkan saya melanjutkan\ndan mencetak, %i garis miring terbalik n

10711
10:24:38,851 --> 10:24:44,141
Kode ini, cukup pasti akan berjalan\n

10712
10:24:46,531 --> 10:24:51,061
Saya lupa satu langkah meskipun\n

10713
10:24:53,792 --> 10:24:56,281
Ya, saya tidak memberikan\nskornya, jadi sebenarnya saya tidak memberikannya

10714
10:24:56,281 --> 10:25:00,211
inisialisasi array yang disebut skor\n

10715
10:25:00,211 --> 10:25:03,752
Tapi apa yang membuat penasaran tentang ini,\n

10716
10:25:04,442 --> 10:25:08,402
Biarkan saya lanjutkan dan main-main\nmembuat sampah, Masuk

10717
10:25:08,402 --> 10:25:10,982
dan itu deskripsi yang tepat\nkarena apa yang akan saya lihat

10718
10:25:10,982 --> 10:25:13,592
adalah apa yang disebut nilai sampah.

10719
10:25:13,591 --> 10:25:18,421
Bila Anda, sang pemrogram, jangan\n

10720
10:25:18,421 --> 10:25:21,239
nilai-nilai, terkadang, entah\napa yang akan terjadi di sana.

10721
10:25:21,239 --> 10:25:23,072
Komputer sedang\melakukan beberapa hal lainnya

10722
10:25:23,072 --> 10:25:26,521
ada sedikit pekerjaan yang terjadi bahkan\n

10723
10:25:26,521 --> 10:25:29,761
jadi mungkin ada sisa\nint, karakter, string masa lalu

10724
10:25:29,762 --> 10:25:32,402
mengapung-- apa pun yang ada di\ndi sana dan apa yang Anda lihat

10725
10:25:32,402 --> 10:25:38,022
adalah nilai-nilai sampah itu, yaitu\n

10726
10:25:38,021 --> 10:25:40,961
seperti yang baru saja saya lakukan, untuk menginisialisasi\nnilai beberapa variabel.

10727
10:25:40,961 --> 10:25:42,961
Dan ini sebenarnya\nsangat berbahaya

10728
10:25:42,961 --> 10:25:46,442
Ada banyak contoh\nperangkat lunak yang disusupi

10729
10:25:46,442 --> 10:25:49,622
karena salah satu masalah ini\n

10730
10:25:49,622 --> 10:25:53,972
dan tiba-tiba pengguna, mungkin orang\n

10731
10:25:53,972 --> 10:25:57,842
aplikasi, tiba-tiba melihat\n

10732
10:25:58,951 --> 10:26:01,411
Mungkin sandi seseorang yang\ntelah diketik sebelumnya

10733
10:26:01,411 --> 10:26:03,391
atau nilai lain seperti\na nomor kartu kredit

10734
10:26:03,391 --> 10:26:04,951
yang telah diketik sebelumnya.

10735
10:26:04,951 --> 10:26:06,932
Terdapat berbagai\ndmekanisme pertahanan yang ada

10736
10:26:06,932 --> 10:26:10,472
secara umum membuat hal ini\nsangat tidak mungkin terjadi, namun hal ini pasti terjadi

10737
10:26:10,472 --> 10:26:13,531
sangat mungkin, setidaknya\dalam konteks seperti ini

10738
10:26:13,531 --> 10:26:17,461
untuk melihat nilai-nilai yang\nmungkin tidak seharusnya Anda lihat karena nilai-nilai tersebut

10739
10:26:17,461 --> 10:26:20,981
mungkin sisa-sisa\nsesuatu yang lain yang menggunakannya.

10740
10:26:20,982 --> 10:26:25,062
Jadi sekali lagi, Anda punya ini\n

10741
10:26:25,061 --> 10:26:28,381
tetapi sekarang Anda juga mempunyai\nkemampuan meretas yang hebat untuk melihat-lihat

10742
10:26:28,381 --> 10:26:31,801
isi memori, dan ini adalah\n

10743
10:26:31,802 --> 10:26:35,792
mencoba menemukan cara untuk mengeksploitasi sistem.

10744
10:26:40,432 --> 10:26:42,472
Baiklah, mari kita lanjutkan dan\nistirahat sejenak selama lima menit

10745
10:26:42,472 --> 10:26:44,872
dan saat kami kembali lagi, kami akan\nmelanjutkan topik terakhir ini.

10746
10:26:47,031 --> 10:26:50,841
Pertama, hanya seorang programmer kecil\n

10747
10:26:50,841 --> 10:26:53,211
akan sedikit masuk akal bagi Anda.

10748
10:26:53,211 --> 10:26:57,682
Dan apa yang juga akan kita lakukan selanjutnya adalah mengambil\n

10749
10:26:57,682 --> 10:27:00,862
dianimasikan dengan claymation, jika Anda\n

10750
10:27:00,862 --> 10:27:03,862
apa yang sebenarnya terjadi sekarang jika Anda punya\n

10751
10:27:03,862 --> 10:27:07,364
nilai-nilai tersebut dan bagaimana nilai-nilai tersebut mencapainya, dan\n

10752
10:27:07,364 --> 10:27:09,531
Mencetaknya\nseperti yang baru saja saya lakukan adalah satu hal

10753
10:27:09,531 --> 10:27:13,792
lain halnya jika Anda benar-benar salah\n

10754
10:27:13,792 --> 10:27:17,241
karena nilai sampah hanya nol\n

10755
10:27:17,241 --> 10:27:20,121
Namun jika Anda menggunakan operator\nreferensi baru itu, bintangnya

10756
10:27:20,122 --> 10:27:24,472
dan coba buka nilai sampah\nsalah mengira itu adalah nilai sampah

10757
10:27:24,472 --> 10:27:26,872
penunjuk yang valid, hal buruk bisa terjadi.

10758
10:27:26,872 --> 10:27:31,792
Komputer bisa mogok atau lebih umum lagi,\n

10759
10:27:31,792 --> 10:27:34,762
Jadi izinkan saya untuk memperkenalkan, jika kita\n

10760
10:27:34,762 --> 10:27:36,472
teman kami Binky dari Stanford.

10761
10:27:40,311 --> 10:27:41,901
PEMBICARA 1: Hai Binky, bangun.

10762
10:27:48,544 --> 10:27:50,461
PEMBICARA 1: Baiklah, untuk memulai\nsaya kira begitu

10763
10:27:50,461 --> 10:27:52,082
akan membutuhkan beberapa petunjuk.

10764
10:27:52,082 --> 10:27:56,359
BINKY: Oke, kode ini mengalokasikan dua\n

10765
10:27:56,942 --> 10:28:00,549
Ya, saya melihat dua petunjuk tersebut, namun keduanya\n

10766
10:28:01,381 --> 10:28:03,511
Awalnya, petunjuk\ntidak menunjuk ke apa pun.

10767
10:28:03,512 --> 10:28:06,542
Hal-hal yang mereka tunjuk disebut\n

10768
10:28:07,535 --> 10:28:08,702
PEMBICARA 1: Oh, benar, benar.

10769
10:28:11,381 --> 10:28:13,711
Jadi bagaimana Anda mengalokasikan pointee?

10770
10:28:13,711 --> 10:28:17,281
BINKY: Oke, kode ini\nmengalokasikan titik bilangan bulat baru

10771
10:28:17,281 --> 10:28:20,354
dan bagian ini menetapkan x untuk menunjuk ke sana.

10772
10:28:20,355 --> 10:28:21,772
PEMBICARA 1: Hei, kelihatannya lebih bagus.

10773
10:28:23,381 --> 10:28:26,771
BINKY: Oke, saya akan mereferensikan\npointer x untuk menyimpan nomornya

10774
10:28:28,902 --> 10:28:32,562
Untuk trik ini, saya memerlukan\ntongkat ajaib dereferensi saya.

10775
10:28:32,561 --> 10:28:35,951
PEMBICARA 1: Tongkat ajaib\ndereferensi Anda?

10776
10:28:37,802 --> 10:28:39,512
BINKY: Seperti inilah kodenya.

10777
10:28:39,512 --> 10:28:42,307
Saya hanya akan mengatur nomornya dan--

10778
10:28:44,531 --> 10:28:49,451
Jadi melakukan dereferensi pada x mengikuti\n

10779
10:28:49,451 --> 10:28:51,491
dalam hal ini untuk menyimpan 42 di sana.

10780
10:28:51,491 --> 10:28:56,112
Hei, coba gunakan untuk menyimpan nomornya\n

10781
10:28:57,252 --> 10:29:01,631
Saya akan ke sini untuk\nmenyiapkan nomor 13

10782
10:29:01,631 --> 10:29:06,161
lalu ambil tongkat\ndereferensi dan hanya--

10783
10:29:07,241 --> 10:29:09,461
PEMBICARA 1: Oh hei, itu tidak berhasil.

10784
10:29:09,461 --> 10:29:13,182
Katakan, Binky, menurutku\nmereferensikan y bukanlah ide yang bagus

10785
10:29:13,182 --> 10:29:16,377
karena menyiapkan\norang yang ditunjuk adalah langkah terpisah

10786
10:29:16,377 --> 10:29:18,912
dan menurutku kita tidak pernah melakukannya.

10787
10:29:19,961 --> 10:29:22,391
PEMBICARA 1: Ya, kami\nmengalokasikan penunjuk y

10788
10:29:22,391 --> 10:29:25,631
namun kami tidak pernah menyetelnya\nuntuk menunjuk ke orang yang ditunjuk.

10789
10:29:26,800 --> 10:29:28,842
PEMBICARA 1: Hei, kamu\nkelihatan bagus di sana, Binky.

10790
10:29:28,841 --> 10:29:31,721
Bisakah Anda memperbaikinya sehingga y menunjuk\nke titik yang sama dengan x?

10791
10:29:31,722 --> 10:29:35,082
BINKY: Tentu, saya akan menggunakan tongkat sihir\npenugasan penunjuk saya.

10792
10:29:35,082 --> 10:29:37,332
PEMBICARA 1: Apakah itu akan\nmenjadi masalah seperti sebelumnya?

10793
10:29:37,332 --> 10:29:39,222
BINKY: Tidak, ini tidak\nmenyentuh pointees

10794
10:29:39,222 --> 10:29:42,851
itu hanya mengubah satu penunjuk menjadi\n

10795
10:29:43,872 --> 10:29:46,542
Sekarang y menunjuk ke tempat yang sama dengan x.

10796
10:29:48,432 --> 10:29:51,491
Alat ini memiliki ujung runcing sehingga Anda dapat mencoba\nalat dereferensi lagi

10797
10:29:56,434 --> 10:29:57,641
PEMBICARA 1: Hei, lihat itu.

10798
10:29:57,641 --> 10:29:59,472
Sekarang dereferensi berfungsi pada y.

10799
10:29:59,472 --> 10:30:03,522
Dan karena petunjuknya dibagikan\n

10800
10:30:05,232 --> 10:30:07,272
Jadi apakah kita akan bertukar tempat sekarang?

10801
10:30:07,271 --> 10:30:09,191
PEMBICARA 1: Oh lihat, kita kehabisan waktu.

10802
10:30:10,311 --> 10:30:12,531
Itu dari teman kami\nNick Parlante di Stanford.

10803
10:30:12,531 --> 10:30:14,871
Jadi mari kita pertimbangkan apa\nNick lakukan di sini sebagai Binky.

10804
10:30:14,872 --> 10:30:16,942
Jadi, inilah semua kodenya.

10805
10:30:16,942 --> 10:30:20,619
Beberapa baris pertama ini bukan\n

10806
10:30:20,618 --> 10:30:21,951
mereka memindahkan bintang ke kiri.

10807
10:30:22,701 --> 10:30:25,612
Sekali lagi, yang lebih konvensional\nmungkin adalah sintaksis berikut ini.

10808
10:30:26,822 --> 10:30:30,141
Tidak masalah untuk membuat\nvariabel, bahkan pointer

10809
10:30:30,141 --> 10:30:33,771
dan tidak memberi mereka nilai pada awalnya\n

10810
10:30:33,771 --> 10:30:36,291
Jadi pada akhirnya kita melakukannya\ndi sini, dengan baris ini.

10811
10:30:36,292 --> 10:30:39,351
Kami menugaskan ke x nilai kembalian malloc, yang mana

10812
10:30:39,351 --> 10:30:41,182
mungkin adalah alamat sesuatu.

10813
10:30:41,182 --> 10:30:44,432
Supaya adil, kita juga harus\nmemeriksa null

10814
10:30:44,432 --> 10:30:46,351
tapi itu bukan masalah terbesar di sini.

10815
10:30:46,351 --> 10:30:48,841
Masalah terbesarnya\nbahkan bukan pada baris berikutnya

10816
10:30:48,841 --> 10:30:54,591
yang berarti pergi ke lokasi memori\n

10817
10:30:54,591 --> 10:30:56,811
Tidak apa-apa, karena\naga lagi, malloc kembali

10818
10:30:56,811 --> 10:30:59,061
alamat beberapa bagian memori.

10819
10:30:59,061 --> 10:31:01,161
Potongan memori ini\ncukup besar untuk sebuah int.

10820
10:31:01,161 --> 10:31:04,072
x oleh karena itu akan menyimpan\nalamat dari potongan itu

10821
10:31:05,031 --> 10:31:08,902
Bintang x mengingat dereferensi\n

10822
10:31:10,701 --> 10:31:13,822
Ini seperti pergi ke kotak surat\ndan memasukkan nomor 42 ke dalamnya

10823
10:31:13,822 --> 10:31:16,732
alih-alih mengeluarkan nomor\n50, seperti yang kita lakukan sebelumnya.

10824
10:31:18,411 --> 10:31:21,651
Di sinilah Binky kehilangan\nkeinginannya.

10825
10:31:24,042 --> 10:31:26,042
HADIRIN: Kami belum\namengalokasikan ruang untuk itu.

10826
10:31:26,591 --> 10:31:28,502
Kami belum mengalokasikan ruang untuk y.

10827
10:31:28,502 --> 10:31:31,412
Malloc tidak disebutkan,\ntidak ada penetapan y

10828
10:31:32,951 --> 10:31:35,801
Jadi begini, buka\nke alamat di y

10829
10:31:35,802 --> 10:31:39,192
tetapi jika tidak ada alamat yang diketahui di\n

10830
10:31:39,192 --> 10:31:42,122
yang berarti pergi ke beberapa alamat acak\n

10831
10:31:42,932 --> 10:31:47,582
itu mungkin menyebabkan apa yang kita lihat di\n

10832
10:31:47,582 --> 10:31:49,472
Untungnya, hal semacam ini\adalah hal semacam ini

10833
10:31:49,472 --> 10:31:53,402
itu jika Anda tidak mempunyai mata yang tajam\n

10834
10:31:53,402 --> 10:31:55,272
dapat membantu Anda menemukannya juga.

10835
10:31:55,271 --> 10:31:59,041
Namun itu hanyalah contoh lain dari\n

10836
10:31:59,042 --> 10:32:02,472
memiliki kendali sekarang\natas memori pada level ini.

10837
10:32:02,972 --> 10:32:04,805
Baiklah, ayo lanjutkan\ndlakukan satu hal lagi.

10838
10:32:04,805 --> 10:32:07,947
Mengingat dari minggu lalu\nbahwa gagasan pertukaran ini

10839
10:32:07,947 --> 10:32:09,572
sebenarnya adalah operasi yang sangat umum.

10840
10:32:09,572 --> 10:32:12,572
Semua sukarelawan kami datang\n

10841
10:32:12,572 --> 10:32:14,942
selama pengurutan gelembung dan\nbahkan pengurutan pilihan

10842
10:32:14,942 --> 10:32:17,042
dan kami hanya menganggap\ngan saja keduanya

10843
10:32:17,042 --> 10:32:18,974
manusia akan menukar dirinya sendiri dengan baik.

10844
10:32:18,974 --> 10:32:21,182
Namun perlu ada kode\nuntuk melakukan itu jika Anda benar-benar melakukannya

10845
10:32:21,182 --> 10:32:24,999
menerapkan pengurutan gelembung, pengurutan pilihan,\n

10846
10:32:24,999 --> 10:32:26,582
Jadi mari kita pertimbangkan beberapa kode seperti ini.

10847
10:32:26,582 --> 10:32:28,652
Kami akan membuatnya tetap sederhana\nseperti minggu lalu, dan di mana

10848
10:32:28,652 --> 10:32:35,700
kami ingin menukar beberapa nilai seperti\n

10849
10:32:35,699 --> 10:32:38,491
Batal karena saya tidak akan kembali\n

10850
10:32:39,391 --> 10:32:44,701
Jadi di sini, misalnya,\nmungkin ada beberapa kode untuk ini.

10851
10:32:44,701 --> 10:32:45,909
Tapi mengapa ini begitu rumit?

10852
10:32:45,910 --> 10:32:47,494
Di sini, mari kita mundur selangkah.

10853
10:32:48,661 --> 10:32:50,281
Saya rasa kita punya waktu\nuntuk satu sukarelawan lagi.

10854
10:32:50,281 --> 10:32:51,739
Bisakah kita meminta seseorang untuk datang?

10855
10:32:51,739 --> 10:32:54,031
Anda harus merasa nyaman\tanpa kamera dan memang begitu

10856
10:32:54,031 --> 10:32:57,061
diminta membantu-- oh,\n

10857
10:32:57,061 --> 10:33:01,002
Jadi siapa pun yang\ntemannya melakukan ini di sini--

10858
10:33:01,982 --> 10:33:03,872
Sekarang mereka mengarahkannya ke sini.

10859
10:33:03,872 --> 10:33:05,612
Sekarang, secara harfiah sebuah lengan sedang dipelintir.

10860
10:33:25,002 --> 10:33:27,078
Siapa yang Anda coba jadi sukarelawan?

10861
10:33:29,332 --> 10:33:33,652
Jadi di sini kita punya dua untuk Marina\n

10862
10:33:33,652 --> 10:33:35,182
supaya terlihat sangat jelas.

10863
10:33:35,182 --> 10:33:37,586
Dan misalkan masalahnya\tidak ada, seperti minggu lalu

10864
10:33:37,586 --> 10:33:40,461
itu hanya untuk menukar dua nilai, seperti\n

10865
10:33:40,461 --> 10:33:42,472
dua orang dan kami ingin menukar mereka.

10866
10:33:42,472 --> 10:33:45,862
Tapi mari kita pertimbangkan kacamata ini\n

10867
10:33:45,862 --> 10:33:47,572
dalam sebuah array, dan tahukah Anda?

10868
10:33:47,572 --> 10:33:50,042
Saya sangat ingin Anda menukar nilainya.

10869
10:33:50,042 --> 10:33:53,601
Jadi warna oranye harus ada di sana,\dan ungu harus ada di sana.

10870
10:33:54,555 --> 10:33:56,722
Dan kita akan lihat apakah kita bisa\nmenerjemahkannya ke dalam kode.

10871
10:34:02,472 --> 10:34:04,932
Jadi mungkin, Anda\nberjuang secara mental

10872
10:34:04,932 --> 10:34:08,141
dengan bagaimana Anda akan melakukan ini tanpa\n

10873
10:34:08,682 --> 10:34:11,552
Biarkan saya melanjutkan dan kita punya\n

10874
10:34:11,552 --> 10:34:14,052
Jadi, jika saya menyerahkan ini kepada Anda, bagaimana\nAnda sekarang mengatasi masalah ini?

10875
10:34:16,542 --> 10:34:18,292
HADIRIN: Saya akan pergi\nseperti itu, tapi itu--

10876
10:34:18,292 --> 10:34:18,942
DAVID J. MALAN: Tidak, itu--

10877
10:34:20,232 --> 10:34:23,342
Lakukanlah-- ikuti naluri Anda.

10878
10:34:26,042 --> 10:34:28,171
Lakukan apa pun naluri Anda.

10879
10:34:34,561 --> 10:34:37,188
Ya, sedikit-- jadi\nbenarnya, mungkin

10880
10:34:37,188 --> 10:34:39,271
seharusnya tidak memindahkan\nkacamata hanya karena itu

10881
10:34:39,271 --> 10:34:41,291
akan seperti memindahkan\nlokasi array

10882
10:34:41,292 --> 10:34:43,972
jadi mari kita lakukan sekali\nlagi, kecuali kacamatanya sekarang

10883
10:34:43,972 --> 10:34:45,722
harus kembali ke tempat\nmereka semula.

10884
10:34:45,722 --> 10:34:50,412
Jadi bagaimana Anda menukarnya sekarang,\menggunakan variabel sementara ini?

10885
10:34:51,836 --> 10:34:54,461
Jika tidak, misalnya kita akan\nmencabut seluruh array

10886
10:34:54,461 --> 10:34:56,442
dengan hanya memindahkannya secara fisik.

10887
10:34:56,442 --> 10:34:58,932
Jadi Anda memindahkan jeruk ke\nvariabel sementara ini

10888
10:34:58,932 --> 10:35:01,271
lalu Anda menyalin warna ungu\ninke tempat warna oranye berada

10889
10:35:01,271 --> 10:35:03,641
dan sekarang, mungkin, luar biasa.

10890
10:35:03,641 --> 10:35:06,461
Warna oranye akan berakhir\ndi tempat warna ungu dulu

10891
10:35:06,461 --> 10:35:08,981
dan variabel sementara ini,\nit menyimpan sejumlah memori tambahan.

10892
10:35:08,982 --> 10:35:11,802
Hal ini memang diperlukan pada saat itu,\nnamun pada akhirnya tidak diperlukan.

10893
10:35:11,802 --> 10:35:17,492
Tapi tepuk tangan kalau bisa,\n

10894
10:35:17,491 --> 10:35:21,671
Jadi fakta itu\nlangsung terlintas di benak Mariana

10895
10:35:21,671 --> 10:35:25,072
bahwa Anda memerlukan beberapa variabel sementara\n

10896
10:35:25,072 --> 10:35:28,311
dan sebenarnya kode ini ada di sini,\nyang mungkin bisa kita lihat sekilas sekarang

10897
10:35:28,311 --> 10:35:30,398
mengingatkan pada\persis algoritma itu

10898
10:35:30,398 --> 10:35:33,231
di mana A dan B, di akhir\n

10899
10:35:33,232 --> 10:35:35,242
Sama seperti yang kedua\nkalinya, kedua gelas itu

10900
10:35:35,241 --> 10:35:37,641
harus tetap diam, meskipun\n

10901
10:35:37,641 --> 10:35:39,391
tapi mereka akan kembali\nke tempat semula

10902
10:35:39,391 --> 10:35:41,391
seperti memiliki\ndua nilai, A dan B

10903
10:35:41,391 --> 10:35:44,451
dan Anda hanya memiliki\nvariabel sementara tempat Anda menyalin A

10904
10:35:44,451 --> 10:35:47,691
lalu Anda ubah A dengan\nB, lalu pergi dan ubah

10905
10:35:47,692 --> 10:35:50,632
B dengan berapa pun\nnilai asli A

10906
10:35:50,631 --> 10:35:55,281
karena Anda menyimpannya untuk sementara\n

10907
10:35:55,281 --> 10:35:59,521
Sayangnya, kode ini\ntidak berfungsi sebagaimana mestinya.

10908
10:35:59,521 --> 10:36:02,752
Jadi izinkan saya membuka\nKode VS saya di sini dan membukanya

10909
10:36:02,752 --> 10:36:06,021
sebuah program bernama swap.c,\ndan di swap.c, biarkan

10910
10:36:06,021 --> 10:36:11,002
aku menyiapkan sesuatu dengan sangat cepat\n

10911
10:36:12,921 --> 10:36:18,112
Di dalam main izinkan saya melakukan sesuatu\nseperti x mendapat 1 dan y mendapat 2.

10912
10:36:18,112 --> 10:36:23,241
Biarkan saya mencetaknya sebagai\nkonfirmasi visual bahwa x adalah %i

10913
10:36:23,241 --> 10:36:28,252
y adalah %i garis miring terbalik n, masing-masing memasukkan\nin x dan y.

10914
10:36:28,252 --> 10:36:31,432
Lalu izinkan saya memanggil fungsi swap\n

10915
10:36:31,432 --> 10:36:38,122
Tukar x dan y Lalu biarkan saya mencetak\n

10916
10:36:38,122 --> 10:36:41,692
hanya untuk mencetak lagi apa adanya,\n

10917
10:36:41,692 --> 10:36:44,855
2 pertama, lalu 2, 1 kedua kalinya.

10918
10:36:44,855 --> 10:36:46,522
Sekarang bagaimana swap akan diterapkan?

10919
10:36:46,521 --> 10:36:49,951
Izinkan saya menerapkannya tepat\nas di layar beberapa saat yang lalu.

10920
10:36:52,372 --> 10:36:54,862
atau sebut saja int A\nuntuk konsistensi, int B.

10921
10:36:54,862 --> 10:36:57,022
Namun saya selalu dapat menyebut\nitu apa pun yang saya inginkan.

10922
10:36:57,021 --> 10:37:01,252
Int tmp mendapat A, A mendapat B, B mendapat tmp.

10923
10:37:01,252 --> 10:37:04,341
Jadi persis seperti yang saya usulkan\na beberapa saat yang lalu, dan tepat sekali

10924
10:37:04,341 --> 10:37:08,121
seperti yang dilakukan Mariana\nit menggunakan gelas-gelas air ini.

10925
10:37:08,122 --> 10:37:11,932
Sekarang saya perlu menyertakan prototipe saya,\n

10926
10:37:11,932 --> 10:37:15,622
Dan saya akan copy/paste saja di sini,\n

10927
10:37:15,622 --> 10:37:18,832
Jadi lakukan pertukaran-- sejauh ini, bagus-- tukar--

10928
10:37:18,832 --> 10:37:23,692
x sekarang menjadi 1, y menjadi 2, x menjadi 1, y menjadi 2.

10929
10:37:23,692 --> 10:37:29,452
Jadi sepertinya ada sedikit\nbug di sini, tapi mengapa ini bisa terjadi?

10930
10:37:29,451 --> 10:37:33,291
Kode ini sebenarnya tidak berfungsi, bahkan\n

10931
10:37:35,086 --> 10:37:41,600
HADIRIN: Karena A dan B berbeda\n

10932
10:37:41,599 --> 10:37:43,391
DAVID J. MALAN: Bagus,\nbiarkan saya meringkasnya.

10933
10:37:43,391 --> 10:37:46,722
A dan B memang mempunyai\nalamat x dan y yang berbeda

10934
10:37:46,722 --> 10:37:50,322
dan faktanya apa yang terjadi ketika Anda\n

10935
10:37:50,322 --> 10:37:54,582
memanggil swap, meneruskan x dan\ny, Anda memanggil suatu fungsi

10936
10:37:56,211 --> 10:37:57,972
Dan ini adalah istilah\nart yang artinya

10937
10:37:57,972 --> 10:38:02,682
Anda meneruskan salinan x dan\n

10938
10:38:02,682 --> 10:38:06,912
A dan B dalam konteks ini\n

10939
10:38:06,911 --> 10:38:10,811
Sekarang secara teknis,\nnama-nama ini hanya bersifat lokal.

10940
10:38:10,811 --> 10:38:13,572
Saya bisa saja menyebutnya x,\nSaya bisa menyebutnya y

10941
10:38:13,572 --> 10:38:17,891
Saya bisa saja mengubahnya menjadi x,\n

10942
10:38:17,891 --> 10:38:19,391
Masalahnya masih tetap ada.

10943
10:38:19,391 --> 10:38:23,322
Hanya karena Anda menggunakan nama yang sama\n

10944
10:38:23,322 --> 10:38:24,911
itu tidak berarti mereka sama.

10945
10:38:24,911 --> 10:38:26,481
Bagi Anda, mereka terlihat sama.

10946
10:38:26,482 --> 10:38:31,182
Namun memang, swap akan mendapatkan salinan\n

10947
10:38:33,822 --> 10:38:36,161
x dan y akan menjadi salinan dari aslinya.

10948
10:38:36,161 --> 10:38:38,501
Jadi agar lebih jelas, izinkan saya\nmengembalikannya ke A dan B

10949
10:38:38,502 --> 10:38:42,311
hanya untuk memperjelas bahwa mereka\n

10950
10:38:42,311 --> 10:38:44,261
tapi memang ada masalah disana.

10951
10:38:44,262 --> 10:38:46,402
Fungsi ini sebenarnya berfungsi dengan baik.

10952
10:38:47,722 --> 10:38:52,281
Biarkan saya melanjutkan dan mencetak\nindi dalamnya. printf A adalah %i

10953
10:38:52,281 --> 10:38:56,351
B adalah %i garis miring terbalik n, dan\nlalu saya akan mencetak A dan B.

10954
10:38:56,351 --> 10:38:59,561
Dan izinkan saya melakukan hal yang sama di\n

10955
10:39:02,112 --> 10:39:06,101
Lakukan swap, ./swap,\ndan ini menjanjikan.

10956
10:39:06,101 --> 10:39:12,731
Awalnya, x adalah 1, y adalah 2, A\nis 1, B adalah 2, A adalah 2, B adalah 1

10957
10:39:12,732 --> 10:39:14,959
tapi kemudian tidak-- x adalah 1, y adalah 2.

10958
10:39:14,959 --> 10:39:17,292
Jadi jika ada, saya sudah memastikan\nbahwa logikanya benar--

10959
10:39:17,292 --> 10:39:20,412
Logika Mariana benar, tapi\nada sesuatu tentang C.

10960
10:39:20,411 --> 10:39:24,281
Ada sesuatu tentang menggunakannya\n

10961
10:39:26,031 --> 10:39:30,381
Fakta bahwa saya meneruskan salinan\n

10962
10:39:30,381 --> 10:39:31,752
Jadi apa sebenarnya yang terjadi?

10963
10:39:31,752 --> 10:39:34,572
Sekali lagi, di dalam komputer Anda\n

10964
10:39:34,572 --> 10:39:36,447
dan kami telah membicarakannya\nsecara abstrak

10965
10:39:36,447 --> 10:39:38,502
hanya saja jaringan lokasi memori ini.

10966
10:39:38,502 --> 10:39:41,703
Ternyata\nkomputer Anda menggunakan memori ini

10967
10:39:41,703 --> 10:39:42,911
dengan cara yang cukup konvensional.

10968
10:39:42,911 --> 10:39:46,991
Ini bukan sekedar acak, dimana saja\n

10969
10:39:46,991 --> 10:39:50,951
sebenarnya menggunakan bagian yang berbeda\n

10970
10:39:50,951 --> 10:39:54,341
Dan Anda memiliki kendali atas banyak\n

10971
10:39:55,184 --> 10:39:56,891
Dan mari kita lanjutkan\ndan memperkecil tampilannya

10972
10:39:56,891 --> 10:40:00,942
dan pertimbangkan itu di dalam komputer Anda\n

10973
10:40:00,942 --> 10:40:04,362
do sebenarnya menyimpan pada awalnya,\semua angka nol dan satu

10974
10:40:04,362 --> 10:40:08,362
yang Anda kompilasi di atas\n

10975
10:40:08,362 --> 10:40:11,592
Jadi ketika Anda mengkompilasi sebuah program dan\n

10976
10:40:11,591 --> 10:40:15,011
atau di Mac atau PC Anda mengkliknya dua kali\n, komputer terlebih dahulu--

10977
10:40:15,012 --> 10:40:20,141
sistem operasi terlebih dahulu-- memuat semua\n

10978
10:40:20,141 --> 10:40:24,731
Kode mesin, menjadi satu bagian besar saja\n

10979
10:40:24,732 --> 10:40:28,662
Di bawahnya ia menyimpan variabel\nglobal-- variabel apa pun

10980
10:40:28,661 --> 10:40:32,543
yang Anda buat di program Anda\n

10981
10:40:33,252 --> 10:40:35,052
Umumnya, bagian atas file Anda.

10982
10:40:35,052 --> 10:40:36,995
Perusahaan global cenderung menempati posisi teratas di sana.

10983
10:40:36,995 --> 10:40:39,912
Lalu ada potongan memori ini\n

10984
10:40:39,911 --> 10:40:42,311
dan kami melihat kata itu\nsebentar di keluaran Valgin

10985
10:40:42,311 --> 10:40:45,941
dan kemudian ada\bagian memori lain yang disebut tumpukan.

10986
10:40:45,942 --> 10:40:51,072
Dan ternyata sampai saat ini\n

10987
10:40:51,072 --> 10:40:56,322
Kapan pun Anda menggunakan variabel lokal di\n

10988
10:40:56,322 --> 10:41:00,042
Setiap kali Anda menggunakan malloc,\nmemori itu akan disimpan di heap.

10989
10:41:00,042 --> 10:41:02,112
Seperti yang ditunjukkan tanda panah,\ninilah yang sebenarnya terlihat

10990
10:41:02,112 --> 10:41:05,194
seperti masalah yang menunggu untuk terjadi karena\n

10991
10:41:05,194 --> 10:41:07,031
heap, dan semakin banyak\ndan semakin banyak tumpukan, itu

10992
10:41:07,031 --> 10:41:09,762
seperti dua hal yang meluncur ke bawah\n

10993
10:41:10,252 --> 10:41:11,502
Dan itu sebenarnya sebuah masalah.

10994
10:41:11,502 --> 10:41:14,841
Jika Anda pernah mendengar ungkapan\n

10995
10:41:14,841 --> 10:41:16,631
inilah asal usul namanya.

10996
10:41:16,631 --> 10:41:18,881
Saat Anda mulai menggunakan\nlebih banyak dan lebih banyak lagi

10997
10:41:18,881 --> 10:41:21,161
memori dengan memanggil banyak\ndan banyak fungsi

10998
10:41:21,161 --> 10:41:23,621
atau menggunakan banyak sekali\nvariabel lokal

10999
10:41:23,622 --> 10:41:25,872
Anda menggunakan banyak memori tumpukan ini.

11000
10:41:25,872 --> 10:41:29,322
Atau jika Anda sering menggunakan malloc dan tetap\n

11001
10:41:29,322 --> 10:41:33,042
dan tidak pernah benar-benar atau jarang menelepon\n

11002
10:41:33,042 --> 10:41:36,881
dan pada akhirnya kedua hal ini mungkin\n

11003
10:41:37,932 --> 10:41:40,552
Program akan mogok atau\nsesuatu yang buruk akan terjadi.

11004
10:41:40,552 --> 10:41:43,332
Jadi tanggung jawab ada pada Anda\njangan lakukan itu.

11005
10:41:43,332 --> 10:41:45,582
Tapi ini adalah desainnya,\nsecara umum, apa adanya

11006
10:41:45,582 --> 10:41:47,472
terjadi di dalam\nmemori komputer Anda.

11007
10:41:47,472 --> 10:41:51,072
Namun, dalam ingatan itu,\nada konvensi tertentu

11008
10:41:51,072 --> 10:41:52,932
fokus di sini, tumpukan.

11009
10:41:52,932 --> 10:41:55,391
Dan faktanya, izinkan saya pergi\nke sini dengan membawa spidol

11010
10:41:55,391 --> 10:41:58,881
dan katakan bahwa ini mewakili\n

11011
10:41:58,881 --> 10:42:03,161
Jadi di sini kita punya banyak\n

11012
10:42:03,161 --> 10:42:05,451
mewakili satu byte memori\ndan ini, misalnya

11013
10:42:05,451 --> 10:42:08,141
mungkin mewakili empat byte\nalbersama-- cukup baik untuk sebuah int

11014
10:42:09,472 --> 10:42:13,811
Jadi dalam kode asli yang saya tulis\n

11015
10:42:13,811 --> 10:42:16,211
apa yang sebenarnya terjadi\nindi dalam fungsi swap?

11016
10:42:16,211 --> 10:42:20,262
Kita dapat memvisualisasikannya seperti ini-- kapan\n

11017
10:42:20,262 --> 10:42:23,862
penting, main adalah fungsi pertama\n

11018
10:42:23,862 --> 10:42:27,372
jadi saya hanya akan memberi label\n

11019
10:42:27,372 --> 10:42:31,742
Dan apa saja dua variabel I\n

11020
10:42:33,561 --> 10:42:35,761
Dan masing-masingnya adalah\nint, jadi itu empat byte

11021
10:42:35,762 --> 10:42:38,482
jadi sengaja\nsaya memesan empat--

11022
10:42:38,482 --> 10:42:41,312
sepotong kayu di sini berukuran empat byte.

11023
10:42:41,311 --> 10:42:45,261
Jadi izinkan saya menyebutnya x, dan saya hanya\n

11024
10:42:45,771 --> 10:42:49,791
Dan kemudian saya memiliki variabel lain y, dan\n

11025
10:42:49,792 --> 10:42:54,002
Apa yang terjadi bila panggilan utama bertukar\n

11026
10:42:54,002 --> 10:43:00,292
Ya, ia memiliki dua variabel\nnya

11027
10:43:00,292 --> 10:43:04,702
dan B awalnya 2, tetapi\nmemiliki variabel ketiga, tmp

11028
10:43:04,701 --> 10:43:07,731
yang merupakan variabel lokal selain argumen A dan B

11029
10:43:07,732 --> 10:43:12,292
yang sudah disahkan, jadi aku pergi\n

11030
10:43:12,292 --> 10:43:13,516
Dan berapa nilai tmp?

11031
10:43:13,516 --> 10:43:15,141
Nah, kita harus melihat kembali kodenya.

11032
10:43:15,141 --> 10:43:19,792
tmp awalnya mendapat nilai A.\n

11033
10:43:21,502 --> 10:43:23,961
Itu langkah pertama dalam\nprogram tiga baris saya.

11034
10:43:23,961 --> 10:43:27,981
Oke, A sama dengan B. Jadi itu ditetapkan\n

11035
10:43:27,982 --> 10:43:31,612
ke dalam A Jadi B adalah 2, A adalah\nini, jadi izinkan saya melanjutkan

11036
10:43:31,612 --> 10:43:33,722
dan hapus ini dan timpa saja itu.

11037
10:43:33,722 --> 10:43:37,252
Jadi saat ini dalam cerita\nAnda memiliki dua salinan dari dua

11038
10:43:37,252 --> 10:43:40,072
jadi tidak apa-apa, karena\nbaris kode ketiga

11039
10:43:40,072 --> 10:43:43,101
mengatakan tmp disalin\ninke B. Jadi apa itu tmp--

11040
10:43:43,101 --> 10:43:48,531
1, disalin ke B, jadi biar\nsaya timpa 2 ini dengan 1

11041
10:43:50,182 --> 10:43:53,302
Sayangnya sekarang, kodenya berakhir.

11042
10:43:53,302 --> 10:43:56,872
swap sebenarnya tidak melakukan apa pun\n

11043
10:43:56,872 --> 10:43:58,882
adalah bahwa saya bisa mendapatkan nilai kembalian.

11044
10:43:58,881 --> 10:44:01,101
Saya bisa masuk ke sana\nd mengubah void menjadi int

11045
10:44:01,101 --> 10:44:02,871
tapi yang mana yang akan aku kembalikan?

11046
10:44:04,582 --> 10:44:06,992
Tujuan keseluruhannya adalah untuk\nsmenukar dua nilai, dan itu

11047
10:44:06,991 --> 10:44:08,991
sepertinya agak membosankan jika Anda\ntidak dapat menulis suatu fungsi

11048
10:44:08,991 --> 10:44:12,021
untuk melakukan sesuatu seperti algoritma pengurutan per\nminggu terakhir

11049
10:44:14,902 --> 10:44:18,112
Ya, meskipun ketika\nprogram ini mulai berjalan

11050
10:44:18,112 --> 10:44:21,351
main menggunakan sebagian memori ini\n

11051
10:44:21,351 --> 10:44:24,021
dan tumpukannya seperti\na tumpukan nampan di kafetaria--

11052
10:44:25,561 --> 10:44:27,651
Inilah memori utama di tumpukan.

11053
10:44:27,652 --> 10:44:29,932
Inilah memori\nfungsi swap di tumpukan.

11054
10:44:29,932 --> 10:44:32,601
Itu menggunakan tiga int, bukan dua--

11055
10:44:34,311 --> 10:44:37,822
Apa yang terjadi jika fungsi\n

11056
10:44:37,822 --> 10:44:41,061
Jenis ingatan bahwa\nini adalah memori swap akan hilang

11057
10:44:41,061 --> 10:44:42,651
dan nilai sampah tersisa.

11058
10:44:42,652 --> 10:44:46,891
Jadi, sebaiknya kita menghilangkan\nnilai-nilai ini di sini

11059
10:44:46,891 --> 10:44:51,351
dan masih ada data di sana--\n

11060
10:44:51,351 --> 10:44:54,951
masih ada di komputer\n

11061
10:44:54,951 --> 10:44:56,701
karena fungsinya kini telah kembali.

11062
10:44:56,701 --> 10:44:59,781
Jadi mereka masih di sana dan ini\n

11063
10:44:59,781 --> 10:45:03,141
mengapa ada hal lain di memori\n

11064
10:45:03,982 --> 10:45:06,432
Kadang-kadang Anda menaruh\nit di sana, tapi sekarang sekali

11065
10:45:06,432 --> 10:45:10,072
swap mengembalikan Anda hanya perlu\nmenyentuh memori di dalam main.

11066
10:45:10,072 --> 10:45:14,362
Namun kami belum pernah\nmenyalin satu nilai pun ke main.

11067
10:45:14,362 --> 10:45:18,022
Kami belum mengembalikan apa pun dan kami\n

11068
10:45:19,652 --> 10:45:23,662
Nah, bagaimana jika kita meneruskan\ninke swap bukan salinan x dan y

11069
10:45:23,661 --> 10:45:28,041
memanggil mereka A dan B. Bagaimana jika mereka\n

11070
10:45:28,042 --> 10:45:31,222
semacam peta harta karun yang\nakan mengarahkan pertukaran ke x sebenarnya

11071
10:45:32,601 --> 10:45:36,411
Saat ini kami memiliki\nkemampuan tersebut menggunakan pointer.

11072
10:45:36,411 --> 10:45:40,281
Jadi misalkan kita\nmenggunakan kode ini sebagai gantinya.

11073
10:45:40,281 --> 10:45:43,192
Ada banyak bintang yang muncul\ndi sini, dan ini agak mengganggu

11074
10:45:43,192 --> 10:45:45,862
namun mari kita pertimbangkan apa yang ingin kita capai.

11075
10:45:45,862 --> 10:45:50,752
Bagaimana jika kita memasukkan bukan x dan y, melainkan\n

11076
10:45:50,752 --> 10:45:52,862
masing-masing--\nremah roti, jika Anda mau--

11077
10:45:52,862 --> 10:45:55,881
yang akan menyebabkan pertukaran ke\nnilai asli.

11078
10:45:55,881 --> 10:45:59,691
Lalu apa yang kita lakukan adalah kita masih\ngmemberi diri kita sendiri variabel tmp

11079
10:46:00,711 --> 10:46:03,051
Itu masih berupa gelas, jadi\nkita tetap menyebutnya int

11080
10:46:03,052 --> 10:46:05,432
tapi apa yang ingin kita masukkan\ninke dalam variabel sementara itu?

11081
10:46:05,432 --> 10:46:08,014
Kami tidak ingin memasukkan A ke dalamnya,\nkarena itu adalah alamat sekarang.

11082
10:46:08,014 --> 10:46:10,731
Kami ingin pergi ke\nalamat itu sesuai bintangnya

11083
10:46:10,732 --> 10:46:12,502
dan letakkan apa pun yang ada di alamat itu.

11084
10:46:13,741 --> 10:46:17,481
Lalu, kami ingin menyalin\ninke apa pun yang ada di lokasi A

11085
10:46:17,482 --> 10:46:20,272
kami ingin menyalin konten ke\nlokasi A

11086
10:46:20,271 --> 10:46:24,471
apa pun yang ada di lokasi B\nisinya dan yang terakhir, kami

11087
10:46:24,472 --> 10:46:27,622
ingin menyalin tmp ke\napa pun yang ada di lokasi B.

11088
10:46:27,622 --> 10:46:31,510
Jadi sekali lagi, kami sengaja\ninmemperkenalkan semua bintang ini

11089
10:46:31,510 --> 10:46:33,802
karena kami tidak ingin\nmengubah alamat ini

11090
10:46:33,802 --> 10:46:37,222
kami ingin pergi ke alamat ini\nsesuai operator referensi

11091
10:46:37,222 --> 10:46:41,582
dan menaruh nilai di sana,\atau mendapatkan nilai darinya.

11092
10:46:41,582 --> 10:46:43,052
Jadi apa sebenarnya maksudnya?

11093
10:46:43,052 --> 10:46:47,362
Nah, jika saya memutar ulang cerita ini\n

11094
10:46:47,362 --> 10:46:53,031
meskipun saya akan menghapusnya\n

11095
10:46:53,031 --> 10:46:56,481
dan aku masih punya nilai A, tapi\napa yang akan berbeda

11096
10:46:56,482 --> 10:47:00,412
kali ini cara saya menggunakan A dan B.\nJadi izinkan saya menyelesaikan penghapusannya.

11097
10:47:00,411 --> 10:47:02,541
Itu A di sebelah kiri,\nini B di sebelah kanan.

11098
10:47:02,542 --> 10:47:05,061
Pada titik\ncerita ini, kami menjalankan kembali pertukaran

11099
10:47:05,061 --> 10:47:08,511
dengan versi baru dan lebih baik ini,\nandan mari kita lihat apa yang terjadi.

11100
10:47:08,512 --> 10:47:12,232
Ya, x mungkin ada di suatu alamat.

11101
10:47:12,232 --> 10:47:15,712
Mungkin seperti 0x123, seperti biasa.

11102
10:47:15,711 --> 10:47:18,832
Lalu apa yang didapat A\nsaat saya menggunakan kode ini?

11103
10:47:28,012 --> 10:47:33,641
Baiklah, saya akan memasukkan 0x456,\ndan apa yang harus saya lakukan?

11104
10:47:33,641 --> 10:47:35,832
Berdasarkan tiga\nbaris kode ini, saya akan melanjutkan

11105
10:47:35,832 --> 10:47:40,031
untuk menyimpan di tmp apa pun yang ada di\n

11106
10:47:40,031 --> 10:47:43,061
Itulah yang terjadi di sini, jadi\nSaya akan memasukkan 1 ke dalam tmp.

11107
10:47:43,061 --> 10:47:45,612
Jalur dua-- Aku akan pergi ke B--

11108
10:47:45,612 --> 10:47:48,491
baiklah, B adalah 456, jadi\naku akan ke B dan aku

11109
10:47:48,491 --> 10:47:53,292
akan menyimpan 2 di mana pun yang\nat lokasi A, dan di lokasi A

11110
10:47:53,292 --> 10:47:56,572
adalah 123, jadi begini,\njadi apa yang harus saya lakukan?

11111
10:47:56,572 --> 10:47:59,262
Saya akan mengubah 1 ini menjadi 2.

11112
10:47:59,262 --> 10:48:01,992
Baris kode terakhir-- dapatkan\nnilai tmp, yaitu 1

11113
10:48:01,991 --> 10:48:07,091
lalu letakkan di tempat mana pun\n

11114
10:48:07,091 --> 10:48:11,651
dan ubah menjadi nilai\nof tmp, tmp, yang menempatkan 1 di sini.

11115
10:48:12,881 --> 10:48:14,441
Masih belum ada nilai pengembalian.

11116
10:48:14,442 --> 10:48:17,742
pengembalian swap, yang berarti\nketiga variabel sementara ini

11117
10:48:19,451 --> 10:48:21,831
Fungsi tersebut dapat digunakan kembali oleh\npanggilan fungsi berikutnya

11118
10:48:21,832 --> 10:48:26,452
tapi sekarang, saya sebenarnya\nsmenukar nilai x dan y.

11119
10:48:26,451 --> 10:48:30,401
Artinya apa yang terjadi secara alami\n

11120
10:48:30,402 --> 10:48:33,882
tidak semudah itu\ndilakukan di C karena sekali lagi

11121
10:48:33,881 --> 10:48:36,221
fungsi diisolasi satu sama lain.

11122
10:48:36,222 --> 10:48:39,502
Anda dapat meneruskan nilai tetapi Anda\nmendapatkan salinan dari nilai tersebut.

11123
10:48:39,502 --> 10:48:44,052
Jika Anda ingin satu fungsi memengaruhi\n

11124
10:48:44,052 --> 10:48:47,382
Anda harus 1, memahami\napa yang terjadi kecuali 2

11125
10:48:47,381 --> 10:48:50,331
meneruskan semuanya dengan penunjuk di sini.

11126
10:48:50,332 --> 10:48:53,921
Jadi jika saya kembali ke kode saya di sini,\n

11127
10:48:53,921 --> 10:48:56,021
Biarkan saya menyingkirkan printf tambahan ini.

11128
10:48:56,021 --> 10:48:58,752
Biarkan saya masuk dan menambahkan semua bintang ini.

11129
10:48:58,752 --> 10:49:02,771
Jadi saya melakukan dereferensi\alamat sebenarnya ini di sini dan di sini

11130
10:49:02,771 --> 10:49:05,182
dan aku harus membuat satu perubahan lagi.

11131
10:49:05,182 --> 10:49:11,741
Bagaimana sekarang saya memanggil swap jika swap\n

11132
10:49:11,741 --> 10:49:14,801
Artinya, alamat int\ndan alamat int lainnya.

11133
10:49:14,802 --> 10:49:17,292
Apa yang saya ubah pada baris 11 di sini?

11134
10:49:25,591 --> 10:49:28,411
DAVID J. MALAN: Maaf,\nalamat operator.

11135
10:49:28,411 --> 10:49:33,091
Jadi di sini di baris 11, kita melakukan\nampersand x dan ampersand y.

11136
10:49:33,091 --> 10:49:36,361
Jadi ya, secara teknis kami\nmeneruskan salinan suatu nilai

11137
10:49:36,362 --> 10:49:39,241
tapi kali ini salinannya kami sampaikan\n

11138
10:49:39,241 --> 10:49:42,631
dan begitu kita punya alamatnya, langsung saja\n

11139
10:49:42,631 --> 10:49:45,932
jari berbusa-- aku bisa menunjuk\n

11140
10:49:45,932 --> 10:49:49,921
dan benar-benar mendapatkan nilai dari\n

11141
10:49:52,182 --> 10:49:56,912
Jadi mari kita berdoa\nsekarang dan melakukan pertukaran, Enter.

11142
10:49:56,911 --> 10:49:58,081
Ya Tuhan, banyak sekali kesalahannya.

11143
10:49:58,082 --> 10:50:00,242
Oh, saya tidak ingat\nmengubah prototipe saya

11144
10:50:00,241 --> 10:50:03,781
jadi izinkan saya naik ke sini dan\menambahkan dua bintang lagi karena saya

11145
10:50:05,161 --> 10:50:10,322
Lakukan swap, ./swap, dan viola--\nsekarang saya sudah benar-benar bertukar.

11146
10:50:17,021 --> 10:50:19,851
Baiklah, jadi apa lagi yang bisa kita lakukan di sini?

11147
10:50:19,851 --> 10:50:24,822
Baiklah, izinkan saya mempertimbangkan\nbahwa selama ini kita sudah melakukannya

11148
10:50:24,822 --> 10:50:29,052
sengaja menggunakan\nGetString dan GetInt dan GetFloat

11149
10:50:29,052 --> 10:50:30,472
dan sebagainya, tapi karena suatu alasan.

11150
10:50:30,472 --> 10:50:33,430
Ini bukan sekadar roda latihan\n

11151
10:50:33,430 --> 10:50:36,432
mereka sebenarnya ada\nuntuk membuat kode Anda lebih aman.

11152
10:50:36,432 --> 10:50:40,872
Dan untuk mengilustrasikannya, izinkan saya menjelaskannya\n

11153
10:50:40,872 --> 10:50:45,222
Bagaimana dengan file bernama scanf.c.

11154
10:50:45,222 --> 10:50:48,252
Ternyata cara lama\nsekolah-- cara di C

11155
10:50:48,252 --> 10:50:52,512
sebenarnya, untuk mendapatkan input pengguna,\nis melalui fungsi seperti scanf

11156
10:50:52,512 --> 10:50:56,112
dan izinkan saya melanjutkan dan memasukkan\nstdio.h, int main(void)

11157
10:50:56,112 --> 10:50:59,802
dan tanpa menggunakan perpustakaan CS50 di\n

11158
10:51:00,972 --> 10:51:03,522
Biarkan saya memberi diri saya sebuah int bernama x.

11159
10:51:03,521 --> 10:51:07,436
Biarkan saya mencetak berapa nilainya\n

11160
10:51:07,436 --> 10:51:10,722
atau lebih tepatnya, tanyakan\nnilainya kepada pengguna dengan menanyakan x.

11161
10:51:10,722 --> 10:51:14,141
Dan saya akan menggunakan fungsi\n

11162
10:51:14,141 --> 10:51:20,711
dalam bilangan bulat menggunakan %i, dan saya akan\n

11163
10:51:22,667 --> 10:51:25,542
Lalu saya akan melanjutkan dan,\n

11164
10:51:25,542 --> 10:51:29,592
Saya akan mencetaknya dengan %i\n

11165
10:51:29,591 --> 10:51:32,681
Baiklah, jadi kode gaya baris kedelapan\nis minggu 1.

11166
10:51:32,682 --> 10:51:36,351
Baris lima dan enam adalah kode gaya minggu 1.

11167
10:51:36,351 --> 10:51:41,771
Jadi yang membuat penasaran hari ini adalah baris baru ini.\n

11168
10:51:43,332 --> 10:51:46,031
Saya menggunakan sintaks yang sama\nyang saya gunakan untuk printf

11169
10:51:46,031 --> 10:51:49,451
yang merupakan semacam petunjuk kecil-- a\n

11170
10:51:49,451 --> 10:51:52,391
ingin memindai, yaitu membaca\ndari keyboard manusia--

11171
10:51:52,391 --> 10:51:55,932
dan saya memberi tahu di mana harus meletakkan\napa pun yang diketik manusia.

11172
10:51:55,932 --> 10:51:59,682
Saya tidak bisa hanya mengatakan x, karena kita bertemu\n

11173
10:51:59,682 --> 10:52:02,171
Saya harus memberikan sedikit\nbreadcrumb pada variabel tersebut

11174
10:52:02,171 --> 10:52:05,472
di mana saya ingin scanf\nmeletakkan bilangan bulat manusia.

11175
10:52:05,472 --> 10:52:08,902
Jadi ini hanya memberitahu\nkomputer untuk mendapatkan int.

11176
10:52:08,902 --> 10:52:11,141
Pada dasarnya inilah yang harus\nAnda ketik

11177
10:52:11,141 --> 10:52:14,052
di minggu 1 hanya untuk mendapatkan\nan int dari pengguna

11178
10:52:14,052 --> 10:52:16,902
dan masih banyak\nhal yang bisa menjadi salah

11179
10:52:16,902 --> 10:52:20,292
tapi itulah sintaksis samar yang kami\n

11180
10:52:20,292 --> 10:52:22,241
Biarkan saya melanjutkan dan membuat scanf di sini--

11181
10:52:25,302 --> 10:52:27,252
Letakkan titik koma di tempat yang salah.

11182
10:52:30,641 --> 10:52:32,036
Non void tidak mengembalikan nilai.

11183
10:52:42,332 --> 10:52:45,312
Saya akan mengetikkan angka seperti\n

11184
10:52:45,311 --> 10:52:49,542
Jadi itulah cara tradisional\n

11185
10:52:49,542 --> 10:52:53,012
Namun masalahnya adalah ketika Anda\n

11186
10:52:54,482 --> 10:52:56,650
Izinkan saya menghapus semua\nini dan memberikan diri saya sendiri

11187
10:52:56,650 --> 10:52:59,192
sebuah string s, meskipun tunggu sebentar-- kami tidak menyebutnya string

11188
10:52:59,192 --> 10:53:02,252
lagi-- char star untuk menyimpan string.

11189
10:53:02,252 --> 10:53:06,091
Kalau begitu izinkan saya melanjutkan dan meminta\n

11190
10:53:06,091 --> 10:53:10,891
Kalau begitu izinkan saya melanjutkan dan menggunakan scanf, tanyakan\n

11191
10:53:10,891 --> 10:53:13,572
dan menyimpannya di alamat itu.

11192
10:53:13,572 --> 10:53:16,112
Kalau begitu izinkan saya melanjutkan dan mencetak\napa pun yang diketik manusia itu

11193
10:53:16,112 --> 10:53:19,002
hanya dengan menggunakan notasi yang sama.

11194
10:53:19,002 --> 10:53:24,152
Jadi di sini, baris kelima adalah hal yang sama\n

11195
10:53:24,152 --> 10:53:26,552
lapisan itu hari ini jadi char star s.

11196
10:53:26,552 --> 10:53:31,352
Ini baru minggu pertama\nbaru minggu pertama, baris ketujuh baru.

11197
10:53:31,351 --> 10:53:37,171
scanf juga akan membaca dari\n manusia

11198
10:53:37,171 --> 10:53:39,002
Tapi tidak apa-apa, karena s adalah alamat.

11199
10:53:39,002 --> 10:53:41,912
Benar jika tidak menggunakan ampersand.

11200
10:53:42,811 --> 10:53:47,432
Sebuah string adalah dan selalu\nmenjadi bintang char, alias string.

11201
10:53:47,432 --> 10:53:49,451
Namun masalahnya muncul sebagai berikut--

11202
10:53:51,771 --> 10:53:53,271
ya Tuhan, apa salahku--

11203
10:53:53,271 --> 10:53:55,791
Saya tidak bisa-- Oke, kami sudah menyiapkan\ndpertahanan tertentu.

11204
10:53:55,792 --> 10:54:02,241
Izinkan saya melakukan dentang scanf.c, sebuah\noutput program bernama scanf.

11205
10:54:02,241 --> 10:54:05,199
Baiklah, jadi saya mengesampingkan\nbeberapa pertahanan pedagogis kita

11206
10:54:05,199 --> 10:54:06,531
yang kami miliki dengan merek.

11207
10:54:06,531 --> 10:54:11,121
Izinkan saya menjalankan pemindaian versi ini,\n

11208
10:54:15,701 --> 10:54:18,521
Jadi ia bahkan tidak menyimpan sesuatu\n

11209
10:54:18,521 --> 10:54:22,182
Kali ini menggunakan huruf kecil,\ntapi itu ada hubungannya.

11210
10:54:22,182 --> 10:54:26,921
Apa kesalahan mendasar\ndo yang saya lakukan di sini?

11211
10:54:26,921 --> 10:54:29,051
Mengapa hal ini menjadi\nsemakin berbahaya?

11212
10:54:29,052 --> 10:54:30,832
Dan izinkan saya mengilustrasikan\npoin ini lebih lanjut.

11213
10:54:30,832 --> 10:54:34,101
Bagaimana jika saya mengetik bukan hanya sesuatu\n

11214
10:54:34,101 --> 10:54:39,941
Bagaimana jika saya suka, haloooo dan\n

11215
10:54:45,451 --> 10:54:48,631
Benar, string yang sangat panjang,\nsangat panjang.

11216
10:54:48,631 --> 10:54:50,491
Ini adalah sikap nondeterminisme yang mulai muncul.

11217
10:54:51,781 --> 10:54:53,614
Saya mencoba memicu\na kesalahan segmentasi

11218
10:54:53,614 --> 10:54:56,851
tapi ternyata tidak, tapi\nintinya tetap ada.

11219
10:54:56,851 --> 10:55:01,542
Masih tidak berfungsi, tapi apa\n

11220
10:55:01,542 --> 10:55:03,211
dan itu tidak menyimpan masukan saya yang sebenarnya?

11221
10:55:04,091 --> 10:55:06,026
HADIRIN: Apakah harus memberi ruang?

11222
10:55:06,027 --> 10:55:07,902
DAVID J. MALAN: Kami harus\nmemberikan ruang untuk itu.

11223
10:55:07,902 --> 10:55:11,141
Jadi yang kita lewatkan di sini adalah\nmalloc, atau semacamnya.

11224
10:55:11,141 --> 10:55:14,101
Jadi saya bisa melakukan itu, saya bisa\melakukan sesuatu seperti ini.

11225
10:55:14,101 --> 10:55:16,801
Baiklah, biarkan manusia mengetik\namun kata yang terdiri dari tiga huruf

11226
10:55:16,802 --> 10:55:20,942
jadi saya bisa melakukan malloc 3\nplus 1 untuk karakter nol.

11227
10:55:20,942 --> 10:55:25,322
Jadi izinkan saya memberi mereka empat karakter,\n

11228
10:55:26,281 --> 10:55:28,442
Tidak, maaf. dentang, aku harus--

11229
10:55:29,582 --> 10:55:36,171
Oh, sertakan stdlib.h-- ini dia.

11230
10:55:36,171 --> 10:55:39,197
Itu membuatku malloc, sekarang aku\n

11231
10:55:39,197 --> 10:55:42,322
sekarang saya akan menjalankannya kembali, dan sekarang saya\n

11232
10:55:43,701 --> 10:55:47,421
Dan izinkan saya menjadi sedikit agresif sekarang\n

11233
10:55:47,421 --> 10:55:49,461
Masih berfungsi, tapi saya beruntung.

11234
10:55:53,031 --> 10:55:55,355
Sial, itu masih berhasil juga.

11235
10:55:56,451 --> 10:55:58,650
Tapi sebenarnya-- kurang tepat.

11236
10:55:58,650 --> 10:56:00,771
Sudah ada keanehan\nyang terjadi di sana.

11237
10:56:00,771 --> 10:56:02,371
Ternyata saya juga bisa melakukan ini.

11238
10:56:02,372 --> 10:56:05,751
Saya sebenarnya hanya bisa mengatakan\nchar bintang empat dan memberikan diri saya sendiri

11239
10:56:05,750 --> 10:56:07,041
array empat karakter.

11240
10:56:07,042 --> 10:56:08,461
Izinkan saya mencobanya sekali lagi.

11241
10:56:08,461 --> 10:56:12,021
Jadi izinkan saya menjalankan kembali clang ./scanf.

11242
10:56:12,021 --> 10:56:16,820
Halooooo, jelas melebihi\nempat karakter--

11243
10:56:22,182 --> 10:56:24,703
Jadi intinya di sini adalah\njika kami tidak memberi Anda GetInt

11244
10:56:24,703 --> 10:56:27,161
Anda harus menggunakan alat\nscanf-- bukan masalah besar

11245
10:56:28,432 --> 10:56:31,682
Namun jika kami tidak memberi Anda GetString, Anda\n

11246
10:56:31,682 --> 10:56:34,842
sudah mengetahui tentang malloc atau\n

11247
10:56:34,841 --> 10:56:36,911
dan bahkan sekarang pun masih ada bahaya.

11248
10:56:36,911 --> 10:56:41,112
Jika manusia mengetik dalam lima huruf,\n

11249
10:56:41,112 --> 10:56:44,862
seperti dengan masukan Halo, akan\n

11250
10:56:44,862 --> 10:56:46,842
So GetString also has\nthis functionality built

11251
10:56:46,841 --> 10:56:49,150
di mana kita memiliki\nlingkaran mewah di dalamnya

11252
10:56:49,150 --> 10:56:53,682
yang kami alokasikan menggunakan malloc sebagai\n

11253
10:56:53,682 --> 10:56:55,631
dan kami menggunakan malloc\pada dasarnya setiap penekanan tombol.

11254
10:56:55,631 --> 10:57:00,461
Saat Anda mengetik halo, kami\n

11255
10:57:00,461 --> 10:57:04,932
mengalokasikan lebih banyak memori sehingga\n

11256
10:57:04,932 --> 10:57:07,661
GetString meskipun\ini mudah untuk dipecahkan--

11257
10:57:07,661 --> 10:57:10,811
semudah ini membuat kode Anda rusak\nmenggunakan scanf jika Anda melakukannya lagi

11258
10:57:10,811 --> 10:57:13,481
melakukannya tanpa bantuan perpustakaan.

11259
10:57:13,482 --> 10:57:15,539
Jadi kemana tujuan kita semua dengan ini?

11260
10:57:15,538 --> 10:57:17,621
Baiklah, izinkan saya menunjukkan\nbeberapa contoh terakhir yang bisa dilakukan

11261
10:57:17,622 --> 10:57:19,961
membuka jalan bagi\nyang akan menjadi rangkaian masalah keempat.

11262
10:57:19,961 --> 10:57:23,122
Biarkan saya melanjutkan dan membuka\ndari kode hari ini--

11263
10:57:23,122 --> 10:57:25,241
yang tersedia di\nsitus web kursus--

11264
10:57:25,241 --> 10:57:32,202
misalnya, program seperti\nini, bernama phonebook.c

11265
10:57:32,201 --> 10:57:34,900
dan saya hanya akan memberi\nAnda tur singkatnya

11266
10:57:34,900 --> 10:57:37,862
sehingga Anda akan melihat detail lebih lanjut di\n

11267
10:57:37,862 --> 10:57:40,570
Kami akan memperkenalkan beberapa\n

11268
10:57:40,571 --> 10:57:43,812
Anda akan melihat fungsi bernama\n

11269
10:57:43,811 --> 10:57:47,203
dan dibutuhkan dua argumen-- the\n

11270
10:57:47,203 --> 10:57:50,411
yang mungkin Anda manipulasi di Excel atau\n

11271
10:57:50,411 --> 10:57:55,211
nilai yang dipisahkan, dan kemudian sesuatu\n

11272
10:57:55,211 --> 10:57:58,150
W untuk menulis, tergantung apakah\nAnda ingin menambahkannya ke file

11273
10:57:58,150 --> 10:58:00,682
buka saja, atau ubah.

11274
10:58:00,682 --> 10:58:03,192
Kami akan memperkenalkan\nAnda pada penunjuk file.

11275
10:58:03,192 --> 10:58:05,031
Anda akan melihat file kapital itu--

11276
10:58:05,031 --> 10:58:07,631
yang sedikit\ntidak lazim-- file kapital

11277
10:58:07,631 --> 10:58:10,481
penunjuk ke file sebenarnya\bukan hard drive komputer

11278
10:58:10,482 --> 10:58:13,001
sehingga Anda benar-benar dapat mengakses\nsesuatu seperti file CSV

11279
10:58:14,351 --> 10:58:16,661
Dan kami akan melihat\ndi bawah bahwa Anda juga demikian

11280
10:58:16,661 --> 10:58:20,411
akan memiliki kemampuan menulis\n

11281
10:58:20,411 --> 10:58:24,341
Anda akan melihat fungsi seperti\nprintf printf untuk file printf.

11282
10:58:24,341 --> 10:58:29,471
Atau fwrite-- file write-- yang sekarang\n

11283
10:58:29,472 --> 10:58:33,311
Anda akan memiliki kemampuan untuk\sebenarnya tidak hanya membaca file--

11284
10:58:33,311 --> 10:58:36,830
file teks, gambar,\nlainnya-- tetapi juga menuliskannya.

11285
10:58:36,830 --> 10:58:42,281
Bahkan misalnya, hanya sebagai teaser\n

11286
10:58:42,281 --> 10:58:44,682
kami fokus pada minggu ini\nkami memberi Anda gambar forensik

11287
10:58:44,682 --> 10:58:47,351
dan tujuan Anda adalah\nmemulihkan foto sebanyak-banyaknya

11288
10:58:47,351 --> 10:58:51,012
dari gambar forensik a\n ini

11289
10:58:51,012 --> 10:58:54,432
Dan cara yang akan Anda lakukan\nitu adalah dengan mengetahui terlebih dahulu

11290
10:58:54,432 --> 10:58:58,932
bahwa setiap JPEG di dunia dimulai\n

11291
10:58:58,932 --> 10:59:01,161
dalam heksadesimal, tetapi tiga angka ini.

11292
10:59:01,161 --> 10:59:03,881
Sebenarnya, sebagai\na teaser, izinkan saya membukanya

11293
10:59:03,881 --> 10:59:07,061
contohnya dapat Anda lihat di\nsitus web kursus hari ini.

11294
10:59:07,061 --> 10:59:09,796
Jika saya gulir ke sini,\nAnda akan melihat sebuah program

11295
10:59:09,796 --> 10:59:11,421
itu melakukan sesuatu seperti ini.

11296
10:59:13,572 --> 10:59:15,762
jika kita bisa menekan tombolnya--

11297
10:59:16,402 --> 10:59:21,582
Jadi di sini kita mempunyai gagasan tentang satu byte\n

11298
10:59:21,582 --> 10:59:24,461
Kita akan melihat tipe data yang disebut byte,\nyang merupakan konvensi umum.

11299
10:59:25,701 --> 10:59:28,034
Dan Anda akan belajar\ntentang fungsi yang disebut fread

11300
10:59:28,035 --> 10:59:31,932
yang membaca dari file beberapa nomor\n

11301
10:59:31,932 --> 10:59:33,701
Kami kemudian mungkin menggunakan kode seperti ini.

11302
10:59:33,701 --> 10:59:37,362
Jika byte dalam kurung nol\nesama dengan 0xFF dan byte

11303
10:59:37,362 --> 10:59:43,122
braket 1 sama dengan 0xD8 dan byte braket\n

11304
10:59:43,122 --> 10:59:47,842
byte yang baru saja saya klaim mewakili a\n

11305
10:59:47,841 --> 10:59:51,171
Biarkan saya menjalankan\nprogram ini sebagai berikut.

11306
10:59:51,171 --> 10:59:55,281
Izinkan saya menyalin jpeg.c ke\ndirektori saya dari distribusi hari ini.

11307
10:59:55,281 --> 11:00:03,432
Biarkan saya membuat jpeg, dan biarkan saya menjalankan\n

11308
11:00:03,432 --> 11:00:07,201
disebut ceramah.jpeg, dan saya\nmengklaim ya, itu mungkin JPEG.

11309
11:00:08,201 --> 11:00:11,841
Biarkan saya membukanya untuk kita, yang disebut\n

11310
11:00:11,841 --> 11:00:15,941
adalah foto yang sama dengan saat kita memulai\n

11311
11:00:15,942 --> 11:00:18,072
Namun hal yang juga akan kami\nlakukan minggu ini

11312
11:00:18,072 --> 11:00:22,991
adalah mulai menerapkan pengurutan kita sendiri\n

11313
11:00:22,991 --> 11:00:26,261
kami mungkin mengambil gambar dan sebenarnya\n

11314
11:00:26,262 --> 11:00:28,279
menciptakan versi berbeda darinya.

11315
11:00:28,279 --> 11:00:30,072
Misalnya, menggunakan\ndiformat file yang berbeda

11316
11:00:30,072 --> 11:00:33,862
disebut BMP, yang pada dasarnya menjabarkan\n

11317
11:00:35,262 --> 11:00:36,822
Anda akan melihat struct--

11318
11:00:36,822 --> 11:00:38,862
struct data di C yang\njauh lebih rumit

11319
11:00:38,862 --> 11:00:40,991
dibandingkan struktur\nkandidat dari masa lalu

11320
11:00:40,991 --> 11:00:43,226
atau struktur orang\ndari masa lalu, itu

11321
11:00:43,226 --> 11:00:45,851
terlihat seperti ini, yang berisi\na lebih banyak nilai di dalamnya

11322
11:00:45,851 --> 11:00:47,769
tapi kami akan memandu Anda\nini di set-p.

11323
11:00:47,769 --> 11:00:49,781
Dan kami mungkin mengambil\nfoto seperti ini dan bertanya

11324
11:00:49,781 --> 11:00:52,241
Anda menjalankan beberapa\nfilter berbeda ala Instagram

11325
11:00:52,241 --> 11:00:55,871
seperti filter hitam putih,\atau skala abu-abu, filter sepia

11326
11:00:55,872 --> 11:00:59,891
untuk memberikan kesan kuno, atau\n

11327
11:00:59,891 --> 11:01:02,481
atau mengaburkannya, bahkan dengan cara ini.

11328
11:01:02,482 --> 11:01:05,472
Dan sebagai penutup\ndi sini, saya punya versinya

11329
11:01:05,472 --> 11:01:08,982
kode ini siap digunakan, namun tidak\n

11330
11:01:08,982 --> 11:01:11,712
itu hanya mengimplementasikan satu filter pada awalnya.

11331
11:01:11,711 --> 11:01:14,411
Biarkan saya melanjutkan dan menyiapkan\nini di komputer saya di sini.

11332
11:01:14,411 --> 11:01:16,466
Saya akan masuk ke\versi filter saya sekarang

11333
11:01:16,466 --> 11:01:18,341
dan Anda akan melihat beberapa\nfile yang akan diberikan kepada Anda

11334
11:01:18,341 --> 11:01:21,981
tur minggu depan\nin bitmap.h, misalnya

11335
11:01:21,982 --> 11:01:26,872
adalah versi dari struktur ini yang\n

11336
11:01:26,872 --> 11:01:34,722
Dan izinkan saya menunjukkan file ini kepada Anda di sini,\n

11337
11:01:34,722 --> 11:01:38,412
disebut filter yang sudah\nsaya terapkan sebelumnya hari ini.

11338
11:01:38,411 --> 11:01:41,471
Tapi yang kami berikan kepada Anda\n

11339
11:01:41,472 --> 11:01:43,847
fungsi ini disebut filter\nmengambil tinggi gambar

11340
11:01:43,847 --> 11:01:46,942
lebar gambar, dan\na array dua dimensi.

11341
11:01:46,942 --> 11:01:49,932
Jadi baris dan kolom\npiksel, lalu I

11342
11:01:49,932 --> 11:01:53,771
memiliki perulangan seperti ini yang berulang\n

11343
11:01:55,402 --> 11:01:57,372
Lalu perhatikan apa\nyang akan saya lakukan di sini.

11344
11:01:57,372 --> 11:02:00,552
Saya akan mengubah nilai\nbiru menjadi nol dalam kasus ini

11345
11:02:00,552 --> 11:02:02,962
dan nilai hijau menjadi\nmenjadi nol dalam kasus ini.

11346
11:02:03,701 --> 11:02:07,451
Nah, gambaran yang ada\ndalam pikiranku adalah yang ini

11347
11:02:07,451 --> 11:02:10,241
dimana kita memiliki\ngambar tersembunyi ini dengan sederhana

11348
11:02:10,241 --> 11:02:13,511
memiliki gaya jadul-- pesan rahasia tertanam di dalamnya.

11349
11:02:13,512 --> 11:02:16,722
Dan jika Anda tidak memilikinya\n

11350
11:02:16,722 --> 11:02:18,942
kacamata yang pada dasarnya\nmembuat segalanya menjadi merah--

11351
11:02:18,942 --> 11:02:21,817
menghilangkan warna hijau di\n

11352
11:02:21,817 --> 11:02:24,192
kamu sebenarnya bisa-- sebenarnya\nmungkin satu-satunya yang bisa melakukannya

11353
11:02:24,192 --> 11:02:26,472
dapat membacanya sekarang\n-- lihat pesan apa

11354
11:02:26,472 --> 11:02:28,752
tersembunyi di balik semua kebisingan merah ini.

11355
11:02:28,752 --> 11:02:34,482
Tetapi jika menggunakan kode saya yang ditulis di sini di\n

11356
11:02:34,482 --> 11:02:37,182
dalam gambar dan saya menghilangkan\nsemua warna hijau dalam gambar

11357
11:02:37,182 --> 11:02:39,792
pada dasarnya menerapkan\nide filter ini--

11358
11:02:39,792 --> 11:02:42,612
filter merah ini di mana Anda hanya melihat warna merah--

11359
11:02:42,612 --> 11:02:45,862
baiklah, ayo lanjutkan dan\nkompilasi program ini.

11360
11:02:45,862 --> 11:02:50,832
Buat filter, jalankan ./filter\non pesan tersembunyi ini.bmp.

11361
11:02:50,832 --> 11:02:53,891
Saya akan menyimpannya di\nfile baru bernama message.bmp

11362
11:02:53,891 --> 11:02:56,832
dan dengan satu perkembangan terakhir\nkami akan membuka diri

11363
11:02:56,832 --> 11:03:00,732
message.bmp, yang merupakan hasil\npengenaan kacamata ini

11364
11:03:00,732 --> 11:03:03,882
dan semoga sekarang Anda\njuga akan melihat apa yang saya lihat.

11365
11:03:12,891 --> 11:03:14,292
Baiklah, itu saja untuk CS50!

11366
11:04:39,311 --> 11:04:42,222
Dan ini sudah minggu ke 5,\nberarti ini sebenarnya

11367
11:04:44,722 --> 11:04:48,552
Faktanya, hanya dalam waktu beberapa hari\n, yang terlihat seperti ini

11368
11:04:48,552 --> 11:04:50,972
dan mungkin lebih samar\ndaripada ini

11369
11:04:50,972 --> 11:04:53,472
akan disaring menjadi\nsesuatu yang jauh lebih sederhana minggu depan.

11370
11:04:53,472 --> 11:04:55,632
Saat kita bertransisi ke\nbahasa yang disebut Python.

11371
11:04:55,631 --> 11:04:59,951
Dan dengan Python, kita masih memiliki\n

11372
11:05:00,654 --> 11:05:03,822
Namun banyak pipa ledeng tingkat rendah\n

11373
11:05:03,822 --> 11:05:06,502
berjuang dengan, frustrasi oleh,\nselama beberapa minggu terakhir

11374
11:05:06,502 --> 11:05:08,802
khususnya, sekarang\nkami telah memperkenalkan petunjuk.

11375
11:05:08,802 --> 11:05:11,682
Dan sepertinya Anda mungkin\nharus melakukan semuanya sendiri.

11376
11:05:11,682 --> 11:05:14,542
Dengan Python, dan dalam banyak\nbahasa tingkat tinggi

11377
11:05:14,542 --> 11:05:16,932
bisa dikatakan-- bahasa yang lebih modern dan terkini

11378
11:05:16,932 --> 11:05:20,021
Anda akan dapat melakukan lebih banyak hal\n

11379
11:05:20,021 --> 11:05:23,021
Dan memang benar, kita akan memulai\n

11380
11:05:24,461 --> 11:05:27,641
Frameworks, yang merupakan kumpulan\n

11381
11:05:27,641 --> 11:05:31,091
Dan yang terpenting, maukah Anda\n

11382
11:05:31,091 --> 11:05:34,691
proyek yang mengesankan, yang benar-benar menyelesaikan\n

11383
11:05:34,692 --> 11:05:37,582
Khususnya, melalui\ntugas akhir Anda sendiri.

11384
11:05:37,582 --> 11:05:41,082
Jadi minggu lalu, minggu ke 4,\n

11385
11:05:41,082 --> 11:05:43,692
Dan kami telah menangani\nmemori ini di dalam komputer Anda

11386
11:05:45,042 --> 11:05:48,252
Pada akhirnya, itu hanya\n

11387
11:05:48,252 --> 11:05:51,381
Dan terserah Anda\napa yang Anda lakukan dengan byte tersebut.

11388
11:05:51,381 --> 11:05:54,881
Dan bagaimana Anda menghubungkannya, bagaimana\n

11389
11:05:54,881 --> 11:05:56,959
Dan array, sepertinya\bukan cara yang paling sederhana.

11390
11:05:56,959 --> 11:05:58,752
Kami mulai bermain\ndengan memori itu.

11391
11:05:58,752 --> 11:06:00,641
Hanya potongan memori yang berdekatan.

11392
11:06:01,781 --> 11:06:04,512
Namun mari kita pertimbangkan, sejenak\n, beberapa masalah yang ada

11393
11:06:04,512 --> 11:06:06,101
cukup cepat muncul dengan array.

11394
11:06:06,101 --> 11:06:09,671
Lalu, hari ini fokuslah pada hal lain\n

11395
11:06:09,671 --> 11:06:14,591
Menggunakan memori komputer Anda sebagai\na kanvas yang jauh lebih serbaguna

11396
11:06:14,591 --> 11:06:16,861
untuk membuat\nstruktur dua dimensi genap.

11397
11:06:16,862 --> 11:06:18,612
Untuk mewakili informasi,\ndan, pada akhirnya

11398
11:06:18,612 --> 11:06:20,692
untuk memecahkan masalah yang lebih menarik.

11399
11:06:20,692 --> 11:06:22,272
Jadi inilah array ukuran 3.

11400
11:06:22,271 --> 11:06:24,072
Mungkin ukurannya 3 bilangan bulat.

11401
11:06:24,072 --> 11:06:26,319
Dan misalkan ini\ada di dalam sebuah program.

11402
11:06:26,319 --> 11:06:29,112
Dan pada bagian cerita ini,\n

11403
11:06:30,521 --> 11:06:34,558
Dan misalkan, apa pun konteksnya,\n

11404
11:06:36,432 --> 11:06:39,449
Nah, secara naluriah, ke mana\nangka 4 harus pergi?

11405
11:06:39,449 --> 11:06:41,531
Jika ini adalah\nmemori komputer Anda dan kami saat ini

11406
11:06:41,531 --> 11:06:43,241
punya array ini 1, 2, 3, dari apa.

11407
11:06:44,591 --> 11:06:47,822
Ke mana seharusnya angka 4\nmungkin saja pergi secara naif.

11408
11:06:52,061 --> 11:06:53,502
Jadi bisa ganti nomor 1.

11409
11:06:53,502 --> 11:06:55,377
Tapi aku tidak terlalu suka\nitu, karena memang begitu

11410
11:06:55,377 --> 11:06:56,771
ingin mempertahankan nomor 1.

11411
11:06:58,061 --> 11:06:59,811
Tapi tentu saja saya kehilangan informasi.

11412
11:06:59,811 --> 11:07:02,271
Jadi apa lagi yang bisa saya lakukan jika\nSaya ingin menambahkan angka 4.

11413
11:07:02,771 --> 11:07:04,146
HADIRIN: Di sisi kanan 3.

11414
11:07:04,813 --> 11:07:06,953
Jadi, maksud saya, rasanya\njika ada yang memesan

11415
11:07:06,953 --> 11:07:09,161
untuk ini, yang tampaknya merupakan\nkesimpulan yang masuk akal

11416
11:07:09,161 --> 11:07:11,261
bahwa itu mungkin ada\ndi suatu tempat di sini.

11417
11:07:11,262 --> 11:07:14,742
Tapi ingat minggu lalu, saat kita memulai\n

11418
11:07:14,741 --> 11:07:16,612
ada hal lain\nyang mungkin terjadi.

11419
11:07:16,612 --> 11:07:20,232
Dan jika mengisinya, idealnya, kami\n

11420
11:07:20,232 --> 11:07:22,062
Jika kita mempertahankan ketertiban seperti ini.

11421
11:07:22,061 --> 11:07:24,461
Namun ingat kembali dalam konteks\nmemori komputer Anda

11422
11:07:24,461 --> 11:07:25,902
mungkin ada hal lain di sana.

11423
11:07:25,902 --> 11:07:28,414
Beberapa nilai\nsampah berikut yang mungkin dapat digunakan

11424
11:07:28,413 --> 11:07:30,371
tapi kami tidak begitu tahu\atau peduli apa itu.

11425
11:07:30,372 --> 11:07:31,961
Seperti yang diwakili oleh Oscar di sini.

11426
11:07:31,961 --> 11:07:34,991
Namun sebenarnya mungkin ada\ndata berguna yang digunakan.

11427
11:07:34,991 --> 11:07:38,381
Misalnya, jika program Anda tidak\nhanya memiliki beberapa bilangan bulat dalam array ini

11428
11:07:38,381 --> 11:07:40,511
tapi juga string yang\nberkata seperti, "Halo, dunia.

11429
11:07:40,512 --> 11:07:46,572
Bisa jadi komputer Anda memiliki\n

11430
11:07:48,192 --> 11:07:50,442
Mungkin Anda membuat\narray dalam satu baris kode

11431
11:07:52,091 --> 11:07:54,491
Mungkin baris\nkode selanjutnya menggunakan GET-STRING.

11432
11:07:54,491 --> 11:07:57,711
Atau mungkin hanya mengkodekan sebuah string\n

11433
11:07:57,711 --> 11:08:00,459
Jadi, Anda membuat diri Anda\nin terpojok.

11434
11:08:00,459 --> 11:08:03,042
Sekarang saya rasa Anda mungkin akan berkata,\nbaiklah, kita timpa huruf H saja.

11435
11:08:03,042 --> 11:08:04,991
Namun hal itu menjadi masalah\nkarena alasan yang sama.

11436
11:08:06,711 --> 11:08:09,612
Jadi kemana lagi keempatnya bisa pergi?

11437
11:08:09,612 --> 11:08:12,851
Atau bagaimana kita mengatasi masalah ini\njika kita ingin menambahkan angka

11438
11:08:12,851 --> 11:08:14,561
dan jelas ada memori yang tersedia.

11439
11:08:14,561 --> 11:08:17,951
Karena nilai sampah tersebut adalah sampah\n

11440
11:08:17,951 --> 11:08:20,081
Jadi kita pasti bisa menggunakannya kembali.

11441
11:08:20,082 --> 11:08:23,722
Kemana perginya 4, dan\nmungkin keseluruhan array ini?

11442
11:08:24,222 --> 11:08:26,052
Jadi saya dengar kita bisa\nmemindahkannya ke suatu tempat.

11443
11:08:26,052 --> 11:08:27,885
Mungkin, ganti beberapa\nnilai sampah tersebut.

11444
11:08:27,885 --> 11:08:29,902
Dan sejujurnya, kami punya banyak pilihan.

11445
11:08:29,902 --> 11:08:32,141
Kita dapat menggunakan salah satu dari nilai\ngarbage berikut ini.

11446
11:08:32,141 --> 11:08:34,881
Kita dapat menggunakan salah satu dari ini\ndi sini, atau bahkan lebih jauh lagi.

11447
11:08:34,881 --> 11:08:38,441
Intinya adalah ada banyak\nmemori yang tersedia sebagai

11448
11:08:38,442 --> 11:08:41,891
ditunjukkan oleh Oscar ini, di mana\nkami dapat memberikan 4, bahkan mungkin, 5

11449
11:08:43,271 --> 11:08:46,451
Masalahnya adalah kami\memilih dengan buruk sejak dini.

11450
11:08:47,531 --> 11:08:51,167
Dan 1, 2, 3 berakhir berturut-turut dengan\n

11451
11:08:52,250 --> 11:08:55,060
Mari kita lanjutkan dan berasumsi bahwa\n

11452
11:08:55,061 --> 11:08:58,226
Dan kami akan menempatkan narasi\baru di lokasi ini di sini.

11453
11:08:58,226 --> 11:09:00,101
Jadi saya akan lanjutkan\ndmenyalin yang pertama.

11454
11:09:01,902 --> 11:09:04,634
Lalu, pada akhirnya, setelah\nSaya siap mengisi angka 4

11455
11:09:04,633 --> 11:09:07,091
Pada dasarnya, saya dapat membuang\narray lama pada saat ini.

11456
11:09:07,091 --> 11:09:09,101
Karena saya memilikinya sekarang\nseluruhnya dalam rangkap dua.

11457
11:09:09,101 --> 11:09:11,241
Dan saya bisa mengisinya dengan nomor 4.

11458
11:09:12,612 --> 11:09:15,582
Itu adalah potensi\nsolusi yang tepat untuk masalah ini.

11459
11:09:16,665 --> 11:09:19,624
Dan ini adalah sesuatu yang akan kami\n

11460
11:09:19,624 --> 11:09:22,302
Apa kerugiannya\nmenyelesaikan masalah ini dengan cara ini?

11461
11:09:23,896 --> 11:09:25,271
Saya menambahkan banyak waktu berjalan.

11462
11:09:25,271 --> 11:09:28,061
Saya memerlukan banyak upaya untuk\nmenyalin nomor tambahan tersebut.

11463
11:09:28,061 --> 11:09:29,502
Sekarang, memang benar, ini adalah susunan yang kecil.

11464
11:09:30,502 --> 11:09:32,377
Ini akan berakhir\dalam sekejap mata.

11465
11:09:32,377 --> 11:09:35,061
Namun jika kita mulai berbicara\ntentang kumpulan data yang menarik

11466
11:09:35,061 --> 11:09:37,671
kumpulan data aplikasi web,\nkumpulan data aplikasi seluler.

11467
11:09:37,671 --> 11:09:41,152
Di mana Anda tidak hanya memiliki sedikit, tetapi\n

11468
11:09:41,152 --> 11:09:43,112
beberapa juta keping data.

11469
11:09:43,112 --> 11:09:46,252
Ini mungkin solusi\nyang kurang optimal untuk, oh

11470
11:09:46,252 --> 11:09:48,234
pindahkan semua data Anda dari\tidak ada tempat ke tempat lain.

11471
11:09:48,233 --> 11:09:49,941
Karena siapa bilang\nkita tidak akan pergi

11472
11:09:49,942 --> 11:09:51,531
untuk melukis diri kita sendiri ke sudut yang baru.

11473
11:09:51,531 --> 11:09:54,741
Dan Anda akan merasa seperti menyia-nyiakan\n

11474
11:09:54,741 --> 11:09:58,591
Dan, pada akhirnya, hanya menghabiskan\nbanyak waktu Anda.

11475
11:09:58,591 --> 11:10:01,611
Faktanya, jika kita memasukkannya sekarang ke dalam\n

11476
11:10:01,612 --> 11:10:06,531
dari beberapa minggu yang lalu, apa yang mungkin\nwaktu berjalan Penelusuran saat ini

11477
11:10:08,752 --> 11:10:10,912
Sebuah kemunduran beberapa minggu lalu.

11478
11:10:10,911 --> 11:10:14,061
Jika Anda menggunakan array, untuk\nrekap, berapa waktu berjalannya

11479
11:10:14,061 --> 11:10:17,072
dari algoritma Pencarian dalam notasi Big O?

11480
11:10:17,072 --> 11:10:19,252
Jadi, mungkin, dalam kasus terburuk.

11481
11:10:19,252 --> 11:10:23,031
Jika Anda punya n angka, ini 3\n

11482
11:10:28,582 --> 11:10:30,202
Dan apa intuisi Anda mengenai hal itu?

11483
11:10:36,792 --> 11:10:39,584
Jadi jika kita menelusuri setiap elemen,\n

11484
11:10:39,584 --> 11:10:42,972
maka Penelusuran akan memakan waktu\nwaktu berjalan yang sangat lama.

11485
11:10:42,972 --> 11:10:46,002
Namun, jika kita berbicara tentang\nangka-angka ini, secara spesifik.

11486
11:10:46,002 --> 11:10:48,972
Dan sekarang saya akan secara eksplisit menetapkan\nbahwa, ya, semuanya sudah diurutkan.

11487
11:10:50,141 --> 11:10:54,432
Apa yang akan menjadi notasi Big O\n

11488
11:10:54,432 --> 11:10:56,921
baik itu ukuran 3, atau 4,\atau n, secara lebih umum.

11489
11:10:57,972 --> 11:10:59,772
PEMBICARA 1: O besar, bukan n, melainkan?

11490
11:11:01,182 --> 11:11:05,190
Karena kita bisa menggunakan per minggu nol\n

11491
11:11:05,190 --> 11:11:06,732
kita harus berurusan dengan beberapa pembulatan.

11492
11:11:06,732 --> 11:11:08,922
Karena tidak ada jumlah\nelemen yang sempurna saat ini.

11493
11:11:08,921 --> 11:11:10,332
Tapi Anda bisa menggunakan pencarian biner.

11494
11:11:11,652 --> 11:11:13,391
Lalu ke kiri atau\nkanan, kiri atau kanan

11495
11:11:13,391 --> 11:11:15,141
sampai Anda menemukan\elemen yang Anda minati.

11496
11:11:15,141 --> 11:11:19,302
Jadi Pencarian tetap berada di Big O\nof log n saat menggunakan array.

11497
11:11:19,302 --> 11:11:21,132
Tapi bagaimana dengan penyisipan sekarang?

11498
11:11:21,131 --> 11:11:23,171
Jika kami mulai memikirkan\ntentang operasi lainnya.

11499
11:11:23,171 --> 11:11:26,862
Seperti, menambahkan nomor ke array ini,\n

11500
11:11:26,862 --> 11:11:29,531
aplikasi, atau pencarian Google\nanhalaman lain di internet.

11501
11:11:29,531 --> 11:11:31,991
Jadi penyisipan terjadi setiap saat.

11502
11:11:31,991 --> 11:11:34,811
Berapa waktu berjalannya Sisipkan?

11503
11:11:34,811 --> 11:11:38,112
Saat memasukkan ke dalam\nan array berukuran n yang ada.

11504
11:11:38,112 --> 11:11:40,781
Berapa banyak langkah yang diperlukan?

11505
11:11:43,201 --> 11:11:46,061
Karena dalam kasus terburuk,\nAnda kehabisan ruang

11506
11:11:46,061 --> 11:11:48,629
Anda harus mengalokasikan,\ntampaknya, array baru.

11507
11:11:48,629 --> 11:11:50,921
Mungkin, mengambil alih beberapa\nnilai sampah sebelumnya.

11508
11:11:50,921 --> 11:11:52,661
Namun masalahnya adalah, meskipun\nAnda hanya

11509
11:11:52,661 --> 11:11:55,031
memasukkan satu nomor baru,\nseperti nomor 4

11510
11:11:55,031 --> 11:11:58,551
kamu harus menyalin semuanya\n

11511
11:11:58,552 --> 11:12:01,542
Jadi, jika array asli Anda berukuran\n, salinannya

11512
11:12:01,542 --> 11:12:03,412
akan mengambil Big O dari n ditambah 1.

11513
11:12:03,411 --> 11:12:06,411
Tapi kita bisa membuang nilai tambah 1\n

11514
11:12:06,411 --> 11:12:09,341
Jadi Sisipkan sekarang menjadi O Besar dari n.

11515
11:12:09,341 --> 11:12:11,201
Dan itu mungkin tidak ideal.

11516
11:12:11,201 --> 11:12:13,991
Karena jika Anda terbiasa\nsering memasukkan sesuatu

11517
11:12:13,991 --> 11:12:16,362
yang bisa mulai bertambah\n, dan bertambah, dan bertambah.

11518
11:12:16,362 --> 11:12:19,302
Inilah sebabnya mengapa program komputer,\ndan situs web, dan aplikasi seluler

11519
11:12:20,472 --> 11:12:23,482
Jika Anda tidak memperhatikan\npengorbanan ini.

11520
11:12:23,482 --> 11:12:27,492
Jadi bagaimana dengan, sekadar\nukuran yang baik, notasi Omega.

11521
11:12:28,752 --> 11:12:31,241
Sekadar rekap\ndi sini, kita bisa saja beruntung

11522
11:12:31,241 --> 11:12:33,533
dan Penelusuran hanya perlu satu langkah.

11523
11:12:33,533 --> 11:12:35,741
Karena Anda mungkin\nberuntung, dan meningkatkan angkanya

11524
11:12:35,741 --> 11:12:38,292
yang Anda cari ada di sana, di\n

11525
11:12:38,292 --> 11:12:40,152
Atau bahkan pencarian linear, dalam hal ini.

11526
11:12:41,201 --> 11:12:45,191
Jika ada cukup ruang, dan kami tidak\n

11527
11:12:45,192 --> 11:12:46,728
1, 2, dan 3, ke lokasi baru.

11528
11:12:47,561 --> 11:12:49,722
Dan kita bisa saja melakukannya, seperti\nseseorang menyarankan

11529
11:12:49,722 --> 11:12:51,520
letakkan nomor 4 tepat di akhir.

11530
11:12:51,519 --> 11:12:53,561
Dan jika kita tidak beruntung,\ni mungkin memerlukan n langkah.

11531
11:12:53,561 --> 11:12:57,441
Jika kami beruntung, mungkin perlu\n

11532
11:12:57,442 --> 11:12:59,152
Sebenarnya, izinkan saya melanjutkan dan melakukan ini.

11533
11:12:59,152 --> 11:13:00,802
Bagaimana kalau kita melakukan hal seperti ini?

11534
11:13:00,802 --> 11:13:02,502
Izinkan saya beralih ke beberapa kode di sini.

11535
11:13:02,502 --> 11:13:05,591
Mari saya mulai membuat\nprogram bernama List.C.

11536
11:13:05,591 --> 11:13:08,270
Dan di List.C, mari\nmulai dengan cara lama.

11537
11:13:08,271 --> 11:13:11,512
Jadi kami mengikuti remah roti yang kami miliki\n

11538
11:13:11,512 --> 11:13:14,952
Jadi di List.C ini, saya akan\nmemasukkan standardio.h.

11539
11:13:16,932 --> 11:13:20,262
Lalu di dalam kode saya di sini, saya\n

11540
11:13:20,262 --> 11:13:22,072
versi memori pertama.

11541
11:13:22,072 --> 11:13:26,811
Jadi int list 3 sekarang diimplementasikan\saat ini, dalam sebuah array.

11542
11:13:26,811 --> 11:13:29,169
Jadi kami memutar ulang\nsekarang ke kode gaya minggu ke-2.

11543
11:13:29,169 --> 11:13:31,002
Lalu, izinkan saya\nmenginisialisasi hal ini.

11544
11:13:31,002 --> 11:13:32,682
Di lokasi pertama akan menjadi 1.

11545
11:13:32,682 --> 11:13:34,722
Di lokasi selanjutnya akan ada 2.

11546
11:13:34,722 --> 11:13:37,391
Dan di lokasi terakhir akan ada 3.

11547
11:13:37,391 --> 11:13:39,722
Jadi array selalu diindeks nol.

11548
11:13:39,722 --> 11:13:41,472
Saya, hanya untuk kepentingan\ndiskusi saja

11549
11:13:41,472 --> 11:13:44,902
Saya memasukkan angka 1, 2,\n3, seperti yang mungkin dilakukan orang normal.

11550
11:13:45,402 --> 11:13:46,819
Jadi sekarang mari kita cetak saja ini.

11551
11:13:50,322 --> 11:13:53,232
Ayo lanjutkan sekarang dan\ncetak menggunakan printf.

11552
11:13:56,141 --> 11:13:59,771
Program yang sangat sederhana, terinspirasi\noleh apa yang kami lakukan di minggu ke-2.

11553
11:13:59,771 --> 11:14:03,682
Hanya untuk membuat dan kemudian mencetak\nisi array.

11554
11:14:05,862 --> 11:14:09,942
Sejauh ini, bagus sekali. ./list\nDan voila, kita melihat 1, 2, 3.

11555
11:14:09,942 --> 11:14:14,952
Sekarang mari kita mulai mempraktikkan beberapa hal\n

11556
11:14:14,951 --> 11:14:19,541
Jadi izinkan saya masuk sekarang dan singkirkan\nversi arraynya.

11557
11:14:19,542 --> 11:14:22,391
Dan izinkan saya memperkecilnya sedikit\n

11558
11:14:22,391 --> 11:14:25,932
Dan sekarang mari kita mulai\nmembuat daftar ukuran 3.

11559
11:14:25,932 --> 11:14:29,112
Jadi jika saya akan melakukan\nini sekarang, secara dinamis

11560
11:14:29,112 --> 11:14:33,262
sehingga saya mengalokasikan\nhal-hal ini lagi dan lagi

11561
11:14:33,262 --> 11:14:34,912
biarkan aku melanjutkan dan melakukan ini.

11562
11:14:34,911 --> 11:14:41,951
Izinkan saya memberikan sendiri daftar yang bertipe\n

11563
11:14:41,951 --> 11:14:48,971
sebesar 3 kali ukuran int, jadi apa\n

11564
11:14:48,972 --> 11:14:51,972
cukup memori untuk\ngambar pertama yang kita gambar di papan.

11565
11:14:51,972 --> 11:14:54,641
Yang merupakan array\nberisi 1, 2, dan 3.

11566
11:14:54,641 --> 11:14:57,472
Namun meletakkan fondasi\nuntuk dapat mengubah ukurannya

11567
11:14:57,472 --> 11:14:59,061
yang akhirnya menjadi tujuan.

11568
11:14:59,061 --> 11:15:01,131
Jadi sintaks saya sedikit berbeda di sini.

11569
11:15:01,131 --> 11:15:04,572
Saya akan menggunakan malloc dan mendapatkan memori\n

11570
11:15:05,482 --> 11:15:09,372
Daripada menggunakan tumpukan hanya dengan\n

11571
11:15:12,161 --> 11:15:16,572
Artinya baris kode ini dari\n

11572
11:15:16,572 --> 11:15:20,112
identik dengan baris\nkode ini di versi kedua.

11573
11:15:20,112 --> 11:15:22,211
Namun baris\nkode pertama menempatkan memori

11574
11:15:22,211 --> 11:15:24,372
di tumpukan, secara otomatis, untuk saya.

11575
11:15:24,372 --> 11:15:27,282
Baris kode kedua,\nyang saya tinggalkan di sini sekarang

11576
11:15:27,281 --> 11:15:30,762
sedang membuat array berukuran 3,\ntetapi menyimpannya di heap.

11577
11:15:30,762 --> 11:15:34,382
Dan itu penting karena itu hanya\n

11578
11:15:35,311 --> 11:15:38,341
Bahwa Anda sebenarnya dapat meminta lebih banyak\n

11579
11:15:38,341 --> 11:15:42,241
Saat Anda baru saja menggunakan\nnotasi pertama di daftar 3

11580
11:15:42,241 --> 11:15:45,631
Anda telah secara permanen memberi\ndiri Anda sendiri array berukuran 3.

11581
11:15:45,631 --> 11:15:48,612
Anda tidak dapat menambahkannya ke dalam kode.

11582
11:15:48,612 --> 11:15:50,491
Jadi izinkan saya melanjutkan dan melakukan ini.

11583
11:15:50,491 --> 11:15:53,625
Jika daftar==null, ada yang tidak beres.

11584
11:15:53,625 --> 11:15:54,792
Komputer kehabisan memori.

11585
11:15:54,792 --> 11:15:56,985
Jadi mari kita kembalikan 1 dan\nkeluar dari program ini.

11586
11:15:56,985 --> 11:15:58,152
Tidak ada yang bisa dilihat di sini.

11587
11:15:58,152 --> 11:16:00,002
Jadi, periksa kesalahan yang bagus di sana.

11588
11:16:00,002 --> 11:16:02,252
Sekarang izinkan saya melanjutkan dan\ninisialisasi daftar ini.

11589
11:16:02,252 --> 11:16:04,201
Jadi list [0] akan menjadi 1 lagi.

11590
11:16:07,921 --> 11:16:10,292
Jadi itu sintaks\nof yang sama seperti sebelumnya.

11591
11:16:10,292 --> 11:16:13,412
Dan perhatikan kesetaraan ini.

11592
11:16:13,411 --> 11:16:18,211
Ingatlah bahwa ada hubungan ini\n

11593
11:16:18,211 --> 11:16:21,031
Dan array sebenarnya hanya melakukan\nhitungan pointer untuk Anda

11594
11:16:21,031 --> 11:16:22,741
di mana notasi tanda kurung siku berada.

11595
11:16:22,741 --> 11:16:27,511
Jadi jika saya bertanya pada diri sendiri di sini, di antrean\n

11596
11:16:27,512 --> 11:16:32,732
tidak apa-apa untuk memperlakukannya sekarang seperti\n

11597
11:16:32,732 --> 11:16:35,222
Karena komputer akan\melakukan aritmatika untuk saya

11598
11:16:35,222 --> 11:16:37,921
dan temukan lokasi pertama,\nlokasi kedua, dan ketiga.

11599
11:16:37,921 --> 11:16:42,031
Jika Anda benar-benar ingin menjadi\nkeren dan seperti hacker, ya

11600
11:16:42,031 --> 11:16:48,781
bisa dibilang daftar=1,\ndaftar 1=2, daftar 2=3.

11601
11:16:51,362 --> 11:16:53,701
Itu sama saja\namun sangat eksplisit

11602
11:16:53,701 --> 11:16:56,311
aritmatika penunjuk, yang telah kita\nlihat secara singkat minggu lalu.

11603
11:16:56,311 --> 11:16:58,651
Namun hal ini mengerikan untuk\ndilihat oleh kebanyakan orang.

11604
11:16:58,652 --> 11:17:00,342
Itu tidak terlalu ramah pengguna.

11605
11:17:00,341 --> 11:17:03,271
Mengetik lebih lama, jadi\nkebanyakan orang, bahkan saat mengetik pun

11606
11:17:03,271 --> 11:17:06,151
mengalokasikan memori secara dinamis\nas seperti yang saya lakukan beberapa saat yang lalu

11607
11:17:06,152 --> 11:17:10,112
hanya akan menggunakan notasi array yang lebih\nfamiliar.

11608
11:17:11,792 --> 11:17:16,322
Sekarang anggap saja waktu berlalu\ndan saya sadar, oh sial

11609
11:17:16,322 --> 11:17:21,302
Saya benar-benar ingin array ini\nberukuran 4, bukan ukuran 3.

11610
11:17:21,302 --> 11:17:23,844
Sekarang, tentu saja, saya bisa\nmemutar ulang dan memperbaiki programnya.

11611
11:17:23,843 --> 11:17:25,801
Namun misalkan ini adalah\na program yang jauh lebih besar.

11612
11:17:25,802 --> 11:17:28,172
Dan saya telah menyadari, pada saat ini, bahwa saya membutuhkannya

11613
11:17:28,171 --> 11:17:31,561
untuk dapat menambahkan lebih banyak secara dinamis\n

11614
11:17:32,222 --> 11:17:33,762
Baiklah, izinkan saya melanjutkan dan melakukan ini.

11615
11:17:33,762 --> 11:17:36,152
Izinkan saya mengatakan, baiklah\nbaiklah, daftarnya seharusnya

11616
11:17:36,152 --> 11:17:42,182
menjadi hasil dari meminta 4\nchunks memori dari malloc.

11617
11:17:42,182 --> 11:17:46,217
Dan kemudian, saya bisa melakukan sesuatu\nseperti ini, daftar [3]=4.

11618
11:17:49,171 --> 11:17:52,182
Sekarang ini mungkin bermasalah,\nin beberapa cara.

11619
11:17:52,182 --> 11:17:59,012
Tapi izinkan saya bertanya dulu, ada apa sebenarnya\n

11620
11:17:59,012 --> 11:18:03,332
Sasarannya adalah memulai dengan\n

11621
11:18:03,332 --> 11:18:05,141
Dan saya ingin menambahkan angka 4 ke dalamnya.

11622
11:18:05,141 --> 11:18:10,862
Jadi saat ini, di baris 17, saya sudah bertanya\n

11623
11:18:12,421 --> 11:18:14,612
Dan kemudian saya menambahkan angka 4 ke dalamnya.

11624
11:18:14,612 --> 11:18:18,092
Namun saya telah melewatkan beberapa\nlangkah dan entah bagaimana merusaknya.

11625
11:18:19,375 --> 11:18:21,504
HADIRIN: Anda tidak tahu\tentunya [Tak terdengar]..

11626
11:18:22,171 --> 11:18:24,542
Saya belum tentu tahu di mana\n

11627
11:18:24,542 --> 11:18:26,042
Ini mungkin tidak\nakan terjadi dalam waktu dekat

11628
11:18:26,042 --> 11:18:27,391
berdekatan dengan potongan sebelumnya.

11629
11:18:27,391 --> 11:18:30,222
Jadi, ya, meskipun saya\nmemasukkan nomornya di sana

11630
11:18:30,222 --> 11:18:34,182
Saya belum menyalin yang 1, 2, atau\n

11631
11:18:35,881 --> 11:18:40,112
yah, itu sebenarnya,\n

11632
11:18:40,112 --> 11:18:43,561
Saya kehilangan\nbagian memori asli.

11633
11:18:43,561 --> 11:18:46,741
Jika Anda memikirkan gambar itu\n

11634
11:18:46,741 --> 11:18:52,981
di sini di baris 5 yang mengalokasikan\n

11635
11:18:55,752 --> 11:18:59,131
Namun begitu saya melakukan ini, saya\nmelobangi nilai list.

11636
11:18:59,131 --> 11:19:01,441
Dan berkata tidak, jangan tunjuk\na potongan memori ini.

11637
11:19:01,442 --> 11:19:05,382
Arahkan ke bagian memori ini, di\n

11638
11:19:05,381 --> 11:19:07,711
di mana potongan memori asli berada.

11639
11:19:07,711 --> 11:19:12,301
Jadi cara yang tepat untuk melakukan sesuatu seperti\n

11640
11:19:12,302 --> 11:19:14,880
Biarkan saya melanjutkan dan memberi\ndiri saya variabel sementara.

11641
11:19:14,879 --> 11:19:16,171
Dan saya akan menyebutnya TMP.

11642
11:19:16,171 --> 11:19:18,301
T-M-P, seperti yang saya lakukan minggu lalu.

11643
11:19:18,302 --> 11:19:21,602
Sehingga saya sekarang dapat meminta\n komputer

11644
11:19:22,771 --> 11:19:25,711
Saya akan katakan lagi\njika TMP sama dengan nol

11645
11:19:25,711 --> 11:19:27,851
Saya akan mengatakan\nhal buruk terjadi di sini.

11646
11:19:29,042 --> 11:19:31,322
Dan tahukah Anda,\nhanya untuk merapikannya, izinkan saya

11647
11:19:31,322 --> 11:19:34,023
bebaskan daftar aslinya sebelum saya berhenti.

11648
11:19:34,023 --> 11:19:35,731
Karena ingat dari\nminggu lalu, kapan saja

11649
11:19:35,732 --> 11:19:38,132
Anda menggunakan malloc Anda\nakhirnya harus menggunakan yang gratis.

11650
11:19:38,131 --> 11:19:41,521
Namun potongan kode ini\nihanya untuk pemeriksaan keamanan.

11651
11:19:41,521 --> 11:19:43,921
Jika tidak ada lagi kenangan,\ntidak ada yang bisa dilihat di sini.

11652
11:19:43,921 --> 11:19:46,981
Saya hanya akan membersihkan\nnegara saya dan berhenti.

11653
11:19:46,982 --> 11:19:50,322
Tapi sekarang, jika saya meminta\npotongan memori ini

11654
11:19:50,322 --> 11:19:55,682
sekarang saya bisa melakukan ini 4 int saya mendapat 0.

11655
11:19:58,082 --> 11:20:00,002
Bagaimana jika saya melakukan hal seperti ini?

11656
11:20:04,021 --> 11:20:08,461
Tampaknya hal itu berpengaruh\n

11657
11:20:09,281 --> 11:20:12,991
Dan kemudian, saya pikir saya perlu\ndo melakukan satu hal terakhir TMP [3]

11658
11:20:12,991 --> 11:20:14,941
mendapat nomor 4, misalnya.

11659
11:20:14,942 --> 11:20:18,961
Sekali lagi, saya kesulitan mengkodekan angka-angkanya\ndemi diskusi.

11660
11:20:18,961 --> 11:20:23,942
Setelah saya melakukan ini,\napa yang dapat saya lakukan sekarang?

11661
11:20:23,942 --> 11:20:28,472
Saya sekarang dapat mengatur daftar sama dengan TMP.

11662
11:20:28,472 --> 11:20:31,529
Dan sekarang, saya telah memperbarui\ndaftar tertaut saya dengan benar.

11663
11:20:31,529 --> 11:20:32,822
Jadi izinkan saya melanjutkan dan melakukan ini.

11664
11:20:36,961 --> 11:20:42,301
Biarkan saya melanjutkan dan mencetak masing-masing\n

11665
11:20:42,302 --> 11:20:45,372
Dan kemudian, saya akan mengembalikan 0 saja\n

11666
11:20:45,372 --> 11:20:49,472
Sekarang untuk rekap, kita\niinisialisasi array asli

11667
11:20:49,472 --> 11:20:52,622
berukuran 3 dan plug-in\nnilai 1, 2, 3.

11668
11:20:53,442 --> 11:20:55,692
Lalu, saya sadar, tunggu\nsebentar, saya butuh lebih banyak ruang.

11669
11:20:55,692 --> 11:20:58,067
Maka saya meminta komputer\nuntuk memberikan potongan memori kedua.

11670
11:20:59,281 --> 11:21:01,949
Sama seperti pemeriksaan keamanan, saya memastikan\nbahwa TMP tidak sama dengan nol.

11671
11:21:01,949 --> 11:21:03,489
Karena jika itu terjadi aku kehabisan ingatan.

11672
11:21:03,489 --> 11:21:05,072
Jadi sebaiknya saya berhenti sama sekali.

11673
11:21:05,072 --> 11:21:07,591
Namun setelah saya yakin itu\itu bukan nol, saya pun batal

11674
11:21:07,591 --> 11:21:12,931
akan menyalin semua nilai dari\n

11675
11:21:12,932 --> 11:21:16,391
Lalu, saya akan menambahkan\n baru saya

11676
11:21:16,391 --> 11:21:19,891
Lalu, setelah saya selesai bermain\n

11677
11:21:19,891 --> 11:21:23,341
Saya akan mengingat\nvariabel daftar saya apa

11678
11:21:23,341 --> 11:21:25,381
alamat dari\nbagian memori baru ini.

11679
11:21:25,381 --> 11:21:28,051
Lalu, saya akan mencetak\nsemua nilai tersebut.

11680
11:21:28,052 --> 11:21:31,832
Setidaknya, secara estetika, saat saya\n

11681
11:21:31,832 --> 11:21:34,141
kecuali titik koma saya yang hilang.

11682
11:21:38,101 --> 11:21:40,771
Secara implisit mendeklarasikan\nfungsi perpustakaan malloc.

11683
11:21:40,771 --> 11:21:45,230
Apa kesalahan saya setiap kali\nAnda melihat kesalahan seperti itu?

11684
11:21:46,862 --> 11:21:52,182
Jadi sampai di sini, saya lupa menyertakan\n

11685
11:21:52,182 --> 11:21:53,972
Izinkan saya melanjutkan dan,\nagi lagi, membuat daftar.

11686
11:21:56,432 --> 11:21:59,311
Dan saya akan melihat 1, 2, 3, 4.

11687
11:21:59,311 --> 11:22:03,122
Tapi masih ada bug di sini.

11688
11:22:03,122 --> 11:22:05,792
Apakah ada yang melihat\nthe-- bug atau pertanyaan?

11689
11:22:05,792 --> 11:22:07,582
HADIRIN: Anda lupa membebaskan mereka.

11690
11:22:07,582 --> 11:22:08,272
PEMBICARA 1 : Maaf, ucapkan lagi.

11691
11:22:08,271 --> 11:22:09,951
HADIRIN: Anda lupa membebaskan mereka.

11692
11:22:09,951 --> 11:22:12,051
PEMBICARA 1: Saya lupa\nmembebaskan daftar aslinya.

11693
11:22:12,052 --> 11:22:15,652
Dan kami dapat melihatnya, meskipun tidak\n

11694
11:22:15,652 --> 11:22:18,329
Jika saya melakukan sesuatu seperti\nValgrind dari titik/daftar

11695
11:22:18,328 --> 11:22:19,911
ingat alat kami minggu lalu.

11696
11:22:19,911 --> 11:22:22,791
Izinkan saya menambah ukuran\njendela terminal saya, untuk sementara.

11697
11:22:22,792 --> 11:22:25,022
Outputnya sangat samar pada awalnya.

11698
11:22:25,021 --> 11:22:30,261
Tapi, perhatikan bahwa saya sudah pasti\n

11699
11:22:30,262 --> 11:22:32,632
Dan memang, itu genap\nmenunjuk pada nomor baris

11700
11:22:32,631 --> 11:22:34,411
di mana beberapa byte tersebut hilang.

11701
11:22:34,411 --> 11:22:36,411
Jadi izinkan saya melanjutkan dan kembali ke kode saya.

11702
11:22:36,411 --> 11:22:41,091
Dan memang benar, menurutku apa yang harus kulakukan\n

11703
11:22:41,091 --> 11:22:44,631
mengarahkannya ke potongan\nmemori baru ini, bukan yang lama

11704
11:22:44,631 --> 11:22:47,391
Saya rasa sekarang saya perlu\npertama-tama, secara proaktif

11705
11:22:47,391 --> 11:22:49,942
katakan kosongkan daftar memori lama.

11706
11:22:51,961 --> 11:22:56,731
Jadi kalau sekarang saya melakukan Make List dan melakukan titik\n

11707
11:22:56,732 --> 11:22:59,932
Dan, jika saya berharap\ndan menjalankan Valgrind lagi

11708
11:22:59,932 --> 11:23:03,921
setelah memperbesar\nukuran jendela saya, semoga di sini.

11709
11:23:06,561 --> 11:23:09,502
Sepertinya lebih sedikit memori yang hilang.

11710
11:23:09,502 --> 11:23:11,932
Apa yang sekarang saya lupa lakukan?

11711
11:23:11,932 --> 11:23:13,912
HADIRIN: Anda lupa membebaskan bagian akhir.

11712
11:23:13,911 --> 11:23:16,221
PEMBICARA 1: Saya juga lupa mengosongkan\nit di bagian paling akhir.

11713
11:23:16,222 --> 11:23:19,042
Karena saya masih memiliki sebagian\nmemori yang saya dapatkan dari malloc.

11714
11:23:19,042 --> 11:23:21,682
Jadi izinkan saya menuju ke\nbagian paling bawah program ini sekarang.

11715
11:23:21,682 --> 11:23:26,811
Dan setelah saya selesai dengan sia-sia\nhanya mencetak benda ini

11716
11:23:29,932 --> 11:23:33,262
Dan sekarang izinkan saya membuat Daftar, titik/daftar.

11717
11:23:35,152 --> 11:23:39,682
Sekarang mari kita lakukan Valgrind\ntitik/daftar, Enter.

11718
11:23:39,682 --> 11:23:43,012
Dan sekarang, mudah-mudahan, semua\nheap blok telah dibebaskan.

11719
11:23:44,500 --> 11:23:47,542
Jadi ini mungkin hasil terbaik\n

11720
11:23:47,542 --> 11:23:50,432
Saya menggunakan heap, namun saya juga mengosongkan\nsemua memori.

11721
11:23:50,432 --> 11:23:52,112
Jadi ada 2 perbaikan yang diperlukan di sana.

11722
11:23:52,612 --> 11:23:56,391
Ada pertanyaan tentang berbasis array ini\n

11723
11:23:56,391 --> 11:23:59,012
mengalokasikan\nan array secara statis.

11724
11:23:59,012 --> 11:24:00,711
Dengan hanya mengkodekan angka 3 dengan susah payah.

11725
11:24:00,711 --> 11:24:04,671
Versi kedua sekarang\nmengalokasikan array secara dinamis

11726
11:24:04,671 --> 11:24:06,862
tidak menggunakan tumpukan tetapi tumpukan.

11727
11:24:06,862 --> 11:24:10,281
Namun, ia juga mengalami\nkelambatan yang kami jelaskan sebelumnya

11728
11:24:10,281 --> 11:24:12,771
karena harus menyalin semua\nnilai tersebut dari satu nilai ke nilai lainnya.

11729
11:24:14,665 --> 11:24:17,340
HADIRIN: Mengapa Anda tidak\nharus membebaskan TMP?

11730
11:24:18,381 --> 11:24:20,301
Mengapa saya tidak perlu membebaskan TMP?

11731
11:24:20,302 --> 11:24:22,612
Pada dasarnya saya melakukannya pada akhirnya.

11732
11:24:22,612 --> 11:24:27,842
Karena TMP menunjuk\nat potongan 4 bilangan bulat.

11733
11:24:27,841 --> 11:24:33,291
Namun pada baris 33 di sini,\nSaya menetapkan list menjadi

11734
11:24:33,292 --> 11:24:36,061
identik dengan apa yang ditunjuk TMP.

11735
11:24:36,061 --> 11:24:40,654
Jadi, ketika saya akhirnya mengosongkan daftarnya,\n

11736
11:24:40,654 --> 11:24:43,822
Sebenarnya, kalau saya mau, saya bisa bilang\n

11737
11:24:43,822 --> 11:24:45,561
Namun secara konseptual, itu salah.

11738
11:24:45,561 --> 11:24:49,612
Karena pada titik cerita ini, saya\n

11739
11:24:50,722 --> 11:24:52,822
Namun mereka tetap sama pada\nsaat itu dalam cerita.

11740
11:24:53,322 --> 11:24:55,360
HADIRIN: Apakah [? garisnya?] bagiannya?

11741
11:24:56,402 --> 11:24:58,832
Dan singkatnya,\semua yang kami lakukan sejauh ini

11742
11:24:58,832 --> 11:25:00,302
masih di dunia array.

11743
11:25:00,302 --> 11:25:02,192
Satu-satunya perbedaan\nyang kami buat adalah itu

11744
11:25:02,192 --> 11:25:08,702
di versi 1, ketika saya mengatakan int list\n

11745
11:25:08,701 --> 11:25:12,631
Yang disebut dialokasikan secara statis\bukan tumpukan, seperti minggu lalu.

11746
11:25:12,631 --> 11:25:16,381
Versi ini sekarang masih menangani\n

11747
11:25:16,381 --> 11:25:18,461
dan menggunakan alokasi memori dinamis.

11748
11:25:18,461 --> 11:25:20,979
Sehingga saya masih bisa menggunakan\narray per gambar pertama

11749
11:25:22,021 --> 11:25:24,551
Tapi setidaknya saya bisa mengembangkan\narraynya jika saya mau.

11750
11:25:24,552 --> 11:25:28,472
Jadi kami bahkan belum menyelesaikan masalah ini\n

11751
11:25:30,061 --> 11:25:34,411
AUDIENCE: Bagaimana Anda bisa bebas\n

11752
11:25:34,411 --> 11:25:37,201
PEMBICARA 1: Bagaimana saya bisa membuat daftar gratis?

11753
11:25:37,201 --> 11:25:41,791
Saya membebaskan alamat asli daftar.

11754
11:25:41,792 --> 11:25:44,702
Saya, kemudian, mengubah daftar apa yang disimpan.

11755
11:25:44,701 --> 11:25:47,551
Saya memindahkan panahnya ke\na potongan memori baru.

11756
11:25:47,552 --> 11:25:51,032
Dan itu sangat masuk akal\nbagi saya untuk memanipulasinya sekarang

11757
11:25:51,031 --> 11:25:54,661
karena sekarang daftar menunjuk\nat nilai TMP yang sama.

11758
11:25:54,661 --> 11:26:00,091
Dan TMP lah yang diberi imbalan\n

11759
11:26:00,091 --> 11:26:02,261
Jadi potongan memori itu valid.

11760
11:26:02,262 --> 11:26:05,702
Jadi ini hanya kotak\bukan papannya, kan.

11761
11:26:05,701 --> 11:26:07,451
Hanya ada petunjuk di dalamnya.

11762
11:26:07,451 --> 11:26:09,368
Jadi, secara teknis\nsaya katakan demikian, dan sebenarnya tidak

11763
11:26:09,368 --> 11:26:11,521
menunjuk saya tidak membebaskan\ndaftar itu sendiri, saya yang membebaskan

11764
11:26:11,521 --> 11:26:16,141
mengosongkan sebagian memori yang dimulai\n

11765
11:26:16,141 --> 11:26:21,542
Oleh karena itu, jika beberapa baris kemudian, saya\n

11766
11:26:21,542 --> 11:26:25,561
Sangat masuk akal untuk menyentuhnya\n

11767
11:26:25,561 --> 11:26:27,871
Karena Anda tidak membebaskan\nvariabel itu sendiri

11768
11:26:27,872 --> 11:26:30,272
Anda membebaskan\nalamat dalam variabel.

11769
11:26:31,622 --> 11:26:37,232
Jadi izinkan saya kembali ke sini dan\nsekarang melakukan satu pengeditan terakhir.

11770
11:26:37,232 --> 11:26:41,672
Jadi mari kita selesaikan ini dengan\tidak ada perbaikan akhir di sini.

11771
11:26:41,671 --> 11:26:44,641
Karena ternyata\nada cara yang lebih baik

11772
11:26:44,641 --> 11:26:48,091
untuk benar-benar mengubah ukuran array\nas yang telah kita lakukan di sini.

11773
11:26:48,091 --> 11:26:52,509
Dan ada fungsi lain di stdlib\n

11774
11:26:52,510 --> 11:26:55,052
Dan saya akan masuk dan\nmembuat sedikit perubahan

11775
11:26:55,052 --> 11:26:58,060
di sini sehingga saya dapat melakukan hal berikut.

11776
11:26:58,059 --> 11:26:59,851
Biarkan saya melanjutkan dan\nmengomentari ini terlebih dahulu sekarang

11777
11:26:59,851 --> 11:27:02,801
supaya kami dapat melacak apa yang ada\n

11778
11:27:02,802 --> 11:27:09,452
Jadi alokasikan\nan array berukuran 3 secara dinamis.

11779
11:27:09,451 --> 11:27:14,131
Tetapkan 3 angka ke array itu.

11780
11:27:15,811 --> 11:27:21,121
Alokasikan array baru berukuran 4.

11781
11:27:21,122 --> 11:27:26,942
Salin nomor dari\narray lama ke array baru.

11782
11:27:26,942 --> 11:27:31,652
Dan tambahkan nomor keempat ke array baru.

11783
11:27:36,332 --> 11:27:41,942
Ingat, jika Anda mau, array baru\menggunakan variabel daftar saya yang sama.

11784
11:27:49,741 --> 11:27:53,011
Dan kami akan mengeposkan kode ini secara online setelahnya\n

11785
11:27:53,012 --> 11:27:56,702
Jadi ternyata kita bisa mengurangi\n

11786
11:27:56,701 --> 11:27:59,461
Bukan dengan pencetakan\ndi sini, melainkan dengan penyalinan ini.

11787
11:27:59,461 --> 11:28:01,741
Ternyata c memang memiliki\nfungsi yang disebut realloc

11788
11:28:01,741 --> 11:28:07,061
yang benar-benar dapat menangani pengubahan ukuran\n

11789
11:28:07,061 --> 11:28:09,182
Saya akan menggulir ke atas\nke tempat saya sebelumnya

11790
11:28:09,182 --> 11:28:12,302
mengalokasikan array baru berukuran 4.

11791
11:28:12,302 --> 11:28:19,502
Dan saya malah akan mengatakan ini,\n

11792
11:28:19,502 --> 11:28:21,959
Sekarang, sebelumnya hal ini\ntidak mungkin dilakukan.

11793
11:28:21,959 --> 11:28:23,792
Karena ingat bahwa kita\ntelah melukis diri kita sendiri

11794
11:28:23,792 --> 11:28:25,625
ke sudut dengan\contoh di layar

11795
11:28:25,625 --> 11:28:28,472
di mana "Halo, dunia" terjadi pada\n

11796
11:28:29,891 --> 11:28:32,822
Izinkan saya menggunakan realloc, untuk mengalokasikan ulang.

11797
11:28:32,822 --> 11:28:36,122
Dan masukkan bukan hanya ukuran\nmemori yang kita inginkan kali ini

11798
11:28:36,122 --> 11:28:39,812
tapi juga alamat\nyang ingin kita ubah ukurannya.

11799
11:28:39,811 --> 11:28:43,421
Yang mana, sekali lagi, array ini disebut daftar.

11800
11:28:43,921 --> 11:28:46,811
Kode setelahnya\nhampir sama.

11801
11:28:46,811 --> 11:28:50,682
Tapi yang tidak perlu saya lakukan adalah ini.

11802
11:28:50,682 --> 11:28:54,002
Jadi realloc adalah cara yang cukup berguna\n

11803
11:28:54,002 --> 11:28:57,152
Jika di awal kelas,\n

11804
11:28:57,152 --> 11:29:00,491
Dan naluri seseorang adalah menjatuhkan\n

11805
11:29:00,491 --> 11:29:03,241
Jika ada memori yang tersedia,\nrealloc akan melakukan itu.

11806
11:29:03,241 --> 11:29:07,682
Dan boom, itu hanya akan menambah susunannya\n

11807
11:29:07,682 --> 11:29:11,641
Namun, jika ia menyadarinya, maaf, tidak ada\n

11808
11:29:11,641 --> 11:29:14,521
atau hal lain di sana,\nrealloc akan menanganinya

11809
11:29:14,521 --> 11:29:18,211
kesulitan memindahkan seluruh\narasi itu dari 1 bagian memori

11810
11:29:18,211 --> 11:29:20,491
awalnya, ke sebagian memori baru.

11811
11:29:20,491 --> 11:29:26,881
Lalu realloc akan kembali kepada Anda,\n

11812
11:29:26,881 --> 11:29:31,031
Dan itu akan menangani proses\nmembebaskan potongan lama untuk Anda.

11813
11:29:31,031 --> 11:29:33,281
Jadi Anda tidak perlu melakukannya sendiri.

11814
11:29:33,281 --> 11:29:36,612
Jadi, izinkan saya melanjutkan\ndan menyingkirkan ini juga.

11815
11:29:36,612 --> 11:29:41,582
Jadi realoc hanya mengembun, banyak\n

11816
11:29:41,582 --> 11:29:45,592
Dimana, realloc menanganinya untuk Anda.

11817
11:29:46,091 --> 11:29:49,151
Jadi itulah perbaikan terakhir\bukan pendekatan berbasis array ini.

11818
11:29:49,152 --> 11:29:51,932
Jadi bagaimana sekarang, mengetahui\napa ingatan Anda

11819
11:29:51,932 --> 11:29:54,881
apa yang bisa kita lakukan sekarang untuk\nmenyelesaikan masalah seperti itu?

11820
11:29:54,881 --> 11:29:56,801
Karena dunia\nakan menjadi sangat lambat.

11821
11:29:56,802 --> 11:29:59,802
Dan aplikasi kami, dan ponsel kami, dan\n

11822
11:29:59,802 --> 11:30:04,032
jika kita terus-terusan membuang-buang\n

11823
11:30:04,031 --> 11:30:05,891
Apa yang bisa kita lakukan?

11824
11:30:05,891 --> 11:30:07,961
Ada satu\nsintaks baru hari ini

11825
11:30:07,961 --> 11:30:11,322
yang dibangun berdasarkan 3 bagian\nsintaks dari masa lalu.

11826
11:30:11,322 --> 11:30:13,182
Ingat, kita telah\nmelihat struct, yang mana

11827
11:30:13,182 --> 11:30:16,302
adalah kata kunci dalam C, yang memungkinkan\nAnda menciptakan struktur Anda sendiri.

11828
11:30:16,302 --> 11:30:19,542
Variabel Anda sendiri, jika Anda mau,\nin digabungkan dengan typedef.

11829
11:30:19,542 --> 11:30:23,682
Yang memungkinkan Anda mengatakan seseorang mempunyai nama\n

11830
11:30:23,682 --> 11:30:26,141
Atau seorang kandidat mempunyai nama\ndan sejumlah suara.

11831
11:30:26,141 --> 11:30:30,521
Anda dapat merangkum beberapa bagian\n

11832
11:30:30,521 --> 11:30:34,641
Untuk apa kami menggunakan Notasi Titik\nsaat ini, beberapa kali?

11833
11:30:34,641 --> 11:30:37,949
Apa yang dilakukan operator Titik di C?

11834
11:30:37,949 --> 11:30:39,241
HADIRIN: Akses strukturnya.

11835
11:30:39,631 --> 11:30:41,682
Untuk mengakses bidang\nindi dalam struktur.

11836
11:30:41,682 --> 11:30:43,807
Jadi jika Anda punya seseorang\ndengan nama dan nomor

11837
11:30:43,807 --> 11:30:46,832
Anda bisa mengatakan sesuatu seperti\norang.nama atau orang.nomor

11838
11:30:46,832 --> 11:30:48,992
jika orang adalah nama\nsalah satu variabel tersebut.

11839
11:30:48,991 --> 11:30:51,331
Star, tentu saja, sekarang kita\nmelihatnya dalam beberapa hal.

11840
11:30:51,332 --> 11:30:55,022
Like way back in week 1, we\nsaw it as like, multiplication.

11841
11:30:55,021 --> 11:30:58,231
Minggu lalu, kami mulai melihatnya\dalam konteks petunjuk

11842
11:30:58,232 --> 11:31:00,452
dimana, Anda menggunakannya\nuntuk mendeklarasikan sebuah pointer.

11843
11:31:00,451 --> 11:31:03,041
Seperti, int* p, atau semacamnya.

11844
11:31:03,042 --> 11:31:05,522
Namun kami juga melihatnya dalam\konteks lain, yaitu

11845
11:31:05,521 --> 11:31:08,861
seperti kebalikannya, yaitu\noperator dereferensi.

11846
11:31:08,862 --> 11:31:10,754
Yang menyatakan jika ini\nan alamat, itu dia

11847
11:31:10,754 --> 11:31:13,711
jika ini adalah variabel seperti pointer,\n

11848
11:31:13,711 --> 11:31:17,461
lalu tanpa int atau tanpa char,\ntidak ada tipe data di depannya.

11849
11:31:17,461 --> 11:31:19,351
Itu berarti pergi ke alamat itu.

11850
11:31:19,351 --> 11:31:22,781
Dan itu mereferensikan penunjuk\ndan menuju ke lokasi itu.

11851
11:31:22,781 --> 11:31:25,201
Jadi ternyata menggunakan\n3 blok penyusun ini

11852
11:31:25,201 --> 11:31:28,241
Anda sebenarnya dapat mulai menggunakan\n

11853
11:31:28,741 --> 11:31:31,201
Dan bahkan minggu depan, saat\nkita bertransisi ke Python

11854
11:31:31,201 --> 11:31:33,841
dan Anda mulai mendapatkan\nbanyak fitur secara gratis.

11855
11:31:33,841 --> 11:31:36,031
Sepertinya satu baris\nkode saja akan melakukan banyak hal

11856
11:31:36,031 --> 11:31:40,652
lebih banyak di Python daripada di C. Itu\n

11857
11:31:40,652 --> 11:31:42,542
Dan supaya Anda sudah melihatnya.

11858
11:31:42,542 --> 11:31:47,252
Ternyata di C sangat\numum menggunakan operator ini

11859
11:31:47,252 --> 11:31:51,271
untuk masuk ke dalam struktur dan\n

11860
11:31:51,271 --> 11:31:53,731
bahwa ada singkatan\nnotasi untuk itu, alias.

11861
11:31:54,932 --> 11:31:56,576
Itu benar-benar terlihat seperti anak panah.

11862
11:31:56,576 --> 11:31:58,951
Ingat minggu lalu, saya bahkan punya kebiasaan menunjuk

11863
11:32:00,152 --> 11:32:04,502
Notasi panah ini, a\ntanda hubung dan tanda kurung siku

11864
11:32:04,502 --> 11:32:11,432
menunjukkan pergi ke suatu alamat dan\nmelihat bidang di dalamnya.

11865
11:32:11,432 --> 11:32:13,722
Namun kita akan melihatnya dalam\npraktiknya sebentar lagi.

11866
11:32:13,722 --> 11:32:16,592
Jadi apa yang mungkin menjadi\nsolusi untuk masalah ini

11867
11:32:16,591 --> 11:32:20,101
kita lihat beberapa saat yang lalu, kita telah\n

11868
11:32:20,101 --> 11:32:23,381
Dan ingatan kami, beberapa saat\na lalu, terlihat seperti ini.

11869
11:32:23,381 --> 11:32:28,201
Kita cukup menyalin seluruh\n yang ada

11870
11:32:29,491 --> 11:32:33,331
Apa solusi lain yang mungkin\nlebih baik untuk jangka panjang

11871
11:32:33,332 --> 11:32:38,627
jadi, itu tidak mengharuskan\nmemindahkan barang terus-menerus?

11872
11:32:38,627 --> 11:32:40,502
Mungkin bertahanlah sesuai\ninsting Anda jika Anda mau

11873
11:32:40,502 --> 11:32:44,682
tahu frasa menarik yang kami cari\n

11874
11:32:44,682 --> 11:32:47,281
Namun jika kita ingin menghindari\nmemindahkan angka 1, 2, dan 3

11875
11:32:47,281 --> 11:32:49,981
namun kami tetap ingin dapat\nmenambahkan data dalam jumlah tak terbatas.

11876
11:32:51,961 --> 11:32:54,872
Jadi mungkin membuat semacam\ndaftar menggunakan petunjuk itu

11877
11:32:54,872 --> 11:32:56,852
tinggal tunjuk lokasi yang baru ya.

11878
11:32:56,851 --> 11:32:59,972
Di dunia yang ideal, meskipun ini hanya sepotong kenangan

11879
11:32:59,972 --> 11:33:02,912
sedang digunakan oleh h ini di\nstring "Halo, dunia"

11880
11:33:02,911 --> 11:33:05,461
mungkin kita bisa menggunakan\na pointer dari minggu lalu.

11881
11:33:05,461 --> 11:33:09,811
Seperti anak panah yang tertulis setelah\n

11882
11:33:11,521 --> 11:33:15,791
Dan Anda cukup menyatukan\nbilangan bulat ini dalam memori

11883
11:33:15,792 --> 11:33:17,822
sehingga masing-masing mengarah ke yang berikutnya.

11884
11:33:17,822 --> 11:33:21,182
Ini belum tentu\nbenar-benar terjadi secara berurutan.

11885
11:33:21,182 --> 11:33:23,432
Tampaknya hal itu\nmemiliki sisi negatifnya

11886
11:33:23,432 --> 11:33:24,991
membuat kita kehilangan sedikit ruang.

11887
11:33:24,991 --> 11:33:27,601
Seperti sebuah penunjuk, yang dipanggil kembali,\nmembutuhkan sejumlah ruang.

11888
11:33:27,601 --> 11:33:29,881
Biasanya 8 byte atau 64 bit.

11889
11:33:29,881 --> 11:33:33,481
Namun saya tidak perlu menyalin\na data dalam jumlah besar saja

11890
11:33:34,921 --> 11:33:36,760
Jadi benda-benda ini mempunyai nama.

11891
11:33:36,760 --> 11:33:38,552
Dan memang, hal-hal ini\namun tidak seperti biasanya

11892
11:33:38,552 --> 11:33:42,302
akan disebut daftar tertaut.

11893
11:33:42,302 --> 11:33:44,822
Daftar tertaut menangkap\npersis intuisi tersebut

11894
11:33:44,822 --> 11:33:46,542
menghubungkan hal-hal dalam memori.

11895
11:33:46,542 --> 11:33:48,012
Jadi mari kita lihat sebuah contoh.

11896
11:33:48,012 --> 11:33:49,804
Berikut adalah\nmemori komputer secara abstrak.

11897
11:33:49,803 --> 11:33:52,621
Misalkan saya mencoba\nmembuat array.

11898
11:33:52,622 --> 11:33:55,682
Mari kita generalisasikan sebagai\na daftar angka.

11899
11:33:55,682 --> 11:33:57,362
Array mempunyai arti yang sangat spesifik.

11900
11:33:57,362 --> 11:34:00,092
Itu adalah memori yang bersebelahan,\nkembali, ke belakang, ke belakang.

11901
11:34:00,091 --> 11:34:03,721
Pada akhirnya, saya sebagai\n

11902
11:34:05,822 --> 11:34:09,781
Saya tidak terlalu peduli bagaimana itu disimpan.

11903
11:34:09,781 --> 11:34:12,091
Saya tidak peduli bagaimana kodenya disimpan\nsaat saya menulis kodenya

11904
11:34:12,091 --> 11:34:13,924
Saya hanya ingin bekerja\namun di penghujung hari.

11905
11:34:13,925 --> 11:34:16,052
Jadi misalkan saya pertama\nmasukkan nomor saya 1.

11906
11:34:16,052 --> 11:34:19,592
Dan siapa tahu, berakhir\ndi sana, di lokasi 0X123

11907
11:34:21,302 --> 11:34:23,552
Mungkin sudah ada sesuatu di sini.

11908
11:34:23,552 --> 11:34:25,592
Dan mungkin sudah ada\nsesuatu di sini

11909
11:34:25,591 --> 11:34:28,576
namun ada banyak pilihan lain\nuntuk tujuan apa hal ini dapat dilakukan.

11910
11:34:28,576 --> 11:34:30,451
Dan anggap saja, untuk\ndemi diskusi

11911
11:34:30,451 --> 11:34:32,284
tempat\nspertama yang tersedia untuk nomor berikutnya

11912
11:34:32,285 --> 11:34:38,094
kebetulan ada di sini di lokasi\n

11913
11:34:38,093 --> 11:34:40,051
Jadi di situlah saya akan\nmenempatkan nomor 2.

11914
11:34:40,052 --> 11:34:41,552
Dan di manakah angka 3 akan berakhir?

11915
11:34:41,552 --> 11:34:44,342
Oh entahlah, mungkin\ndi sana pada 0X789.

11916
11:34:44,341 --> 11:34:48,511
Intinya adalah, saya tidak tahu\napa itu, atau benar-benar peduli

11917
11:34:48,512 --> 11:34:50,672
segala sesuatu yang lain yang\ndi memori komputer.

11918
11:34:50,671 --> 11:34:54,722
Saya hanya peduli bahwa ada\nsetidaknya 3 lokasi yang tersedia

11919
11:34:54,722 --> 11:34:57,781
Saya dapat memasukkan 1 saya, 2 saya, dan 3 saya.

11920
11:34:57,781 --> 11:35:01,502
Namun masalahnya adalah, sekarang\nkita tidak menggunakan array

11921
11:35:01,502 --> 11:35:05,851
kita tidak bisa berasumsi begitu saja\n

11922
11:35:06,991 --> 11:35:10,441
Tambahkan 2 ke indeks, dan boom\nAnda berada di angka berikutnya.

11923
11:35:10,442 --> 11:35:14,852
Sekarang Anda harus meninggalkan\n kecil ini

11924
11:35:14,851 --> 11:35:17,161
untuk memimpin dari satu ke yang lain.

11925
11:35:17,161 --> 11:35:19,351
Dan terkadang, jaraknya mungkin\ndekat, beberapa byte saja.

11926
11:35:19,351 --> 11:35:23,292
Mungkin jaraknya hanya satu gigabyte\n

11927
11:35:25,021 --> 11:35:30,252
Seperti ke mana arah\npetunjuk ini, seperti yang Anda usulkan?

11928
11:35:30,752 --> 11:35:32,822
Yang saya punya akses di sini hanyalah byte.

11929
11:35:32,822 --> 11:35:34,891
Saya sudah menyimpan\n1, 2, dan 3.

11930
11:35:37,961 --> 11:35:40,851
Jadi izinkan saya, Anda meletakkan petunjuk\ntepat di sebelah angka-angka ini.

11931
11:35:40,851 --> 11:35:44,891
Jadi izinkan saya setidaknya membuat rencana terlebih dahulu, agar\n

11932
11:35:44,891 --> 11:35:47,951
ingat dari minggu lalu, untuk beberapa\ningat, saya tidak hanya menanyakannya sekarang

11933
11:35:47,951 --> 11:35:49,856
untuk ruang hanya untuk nomornya.

11934
11:35:49,857 --> 11:35:51,732
Biarkan saya mulai\ninbiasakan bertanya

11935
11:35:51,732 --> 11:35:56,832
malloc untuk ruang yang cukup untuk nomor tersebut\n

11936
11:35:56,832 --> 11:35:59,542
Jadi saya sedikit lebih agresif\nmeminta lebih banyak memori.

11937
11:36:00,822 --> 11:36:02,622
Dan berikut adalah contoh trade off.

11938
11:36:02,622 --> 11:36:06,402
Hampir kapan saja di CS, saat Anda memulai\n

11939
11:36:06,402 --> 11:36:10,662
Atau jika Anda mencoba menghemat ruang,\nAnda mungkin akan kehilangan waktu.

11940
11:36:10,661 --> 11:36:12,161
Itu adalah pertukaran di sana.

11941
11:36:14,391 --> 11:36:15,942
Baiklah, izinkan saya mengabstraksikannya.

11942
11:36:15,942 --> 11:36:19,057
Dan di samping atau di bawah, saya\n

11943
11:36:19,057 --> 11:36:20,182
demi diskusi.

11944
11:36:20,182 --> 11:36:22,152
Jadi anak panahnya sedikit lebih cantik.

11945
11:36:22,152 --> 11:36:25,062
Saya telah meminta malloc\nsekarang ruang dua kali lebih besar

11946
11:36:25,061 --> 11:36:27,072
tampaknya, daripada yang saya butuhkan sebelumnya.

11947
11:36:27,072 --> 11:36:31,016
Tapi saya akan menggunakan potongan kedua ini\n

11948
11:36:31,016 --> 11:36:33,641
Dan saya akan menggunakan potongan\nmemori ini untuk merujuk ke bagian berikutnya

11949
11:36:33,641 --> 11:36:35,451
pada dasarnya, menyatukan\nhal ini.

11950
11:36:35,451 --> 11:36:37,511
Jadi apa yang harus dimasukkan ke dalam kotak pertama ini?

11951
11:36:37,512 --> 11:36:41,082
Ya, saya klaim nomornya, 0X456.

11952
11:36:41,082 --> 11:36:43,781
Dan ditulis dalam hex karena\nit mewakili alamat memori.

11953
11:36:43,781 --> 11:36:47,801
Tapi ini setara dengan menggambar\n

11954
11:36:47,802 --> 11:36:51,552
Sebagai sedikit cek di sini, apa\nyang harus ada di kotak kedua ini

11955
11:36:51,552 --> 11:36:55,422
jika tujuannya adalah menyatukan ini\ndalam urutan 1, 2, 3?

11956
11:36:55,421 --> 11:36:57,593
Jangan ragu untuk meneriakkan ini saja.

11957
11:36:59,052 --> 11:37:00,472
PEMBICARA 1: Oke, itu berhasil dengan baik.

11958
11:37:01,396 --> 11:37:04,271
Dan Anda tidak dapat melakukannya dengan tangan\n

11959
11:37:04,271 --> 11:37:08,511
Jadi 0X789 sebaiknya diletakkan di sini karena itu\n

11960
11:37:08,512 --> 11:37:11,772
Dan kemudian, kita tidak memiliki\nbanyak kemungkinan di sini.

11961
11:37:11,771 --> 11:37:14,441
Ini harus ada nilainya, kan.

11962
11:37:14,442 --> 11:37:19,312
Karena pada akhirnya, itu\n

11963
11:37:19,311 --> 11:37:22,651
Jadi nilai apa yang harus dimasukkan ke sini,\njika ini adalah akhir dari daftar ini?

11964
11:37:23,652 --> 11:37:25,752
SPEAKER 1 : Jadi bisa jadi 0X123.

11965
11:37:25,752 --> 11:37:29,531
Implikasinya adalah\nit akan menjadi daftar bersiklus.

11966
11:37:29,531 --> 11:37:32,051
Tidak apa-apa, namun\nberpotensi bermasalah.

11967
11:37:32,052 --> 11:37:36,102
Jika ada di antara Anda yang tidak sengaja\n

11968
11:37:36,101 --> 11:37:39,161
karena Anda mempunyai putaran tak terbatas,\n

11969
11:37:39,161 --> 11:37:43,811
untuk memberi diri Anda probabilitas\nyang tidak disengaja dari putaran tak terbatas.

11970
11:37:43,811 --> 11:37:46,398
Apa yang lebih sederhana dari\nitu dan mencegahnya?

11971
11:37:48,612 --> 11:37:50,322
SPEAKER 1: Jadi karakter null saja.

11972
11:37:50,322 --> 11:37:53,021
Bukan N-U-L, yang membingungkan, yang\ada di akhir string.

11973
11:37:53,021 --> 11:37:56,031
Namun N-U-L-L, seperti yang kami\nperkenalkan minggu lalu.

11974
11:37:58,061 --> 11:38:00,881
Jadi ini hanyalah nilai khusus\nyang dimiliki programmer beberapa dekade yang lalu

11975
11:38:00,881 --> 11:38:04,991
memutuskan bahwa jika Anda menyimpan alamatnya\n

11976
11:38:04,991 --> 11:38:07,902
Tidak akan pernah ada\apa pun yang berguna pada 0x0.

11977
11:38:07,902 --> 11:38:11,082
Oleh karena itu, ini adalah nilai\nsentinel, hanya nilai khusus

11978
11:38:12,281 --> 11:38:14,351
Tidak ada tempat lain yang bisa dituju.

11979
11:38:14,351 --> 11:38:17,951
Tidak apa-apa untuk kembali ke\n Anda

11980
11:38:17,951 --> 11:38:19,871
Namun sebaiknya kita\ncukup pintar untuk melakukannya, mungkin

11981
11:38:19,872 --> 11:38:23,862
ingat di mana daftarnya dimulai\nsehingga Anda dapat mendeteksi siklus.

11982
11:38:23,862 --> 11:38:26,421
Jika Anda mulai mengulangi\nin struktur ini, sebaliknya.

11983
11:38:26,921 --> 11:38:29,121
Namun alamat-alamat ini, siapa yang benar-benar\npeduli pada akhirnya

11984
11:38:30,402 --> 11:38:32,302
Baru saja terlihat seperti ini.

11985
11:38:32,302 --> 11:38:35,260
Dan memang, seperti itulah kebanyakan orang\n

11986
11:38:35,260 --> 11:38:36,552
jika sedang berdiskusi di tempat kerja.

11987
11:38:36,552 --> 11:38:38,344
Berbicara tentang\nstruktur data apa yang harus kita lakukan

11988
11:38:38,343 --> 11:38:40,271
gunakan untuk memecahkan beberapa masalah\di dunia nyata.

11989
11:38:40,271 --> 11:38:42,521
Secara umum kami tidak peduli\ntentang alamatnya.

11990
11:38:42,521 --> 11:38:45,111
Kami peduli bahwa dalam kode kami dapat mengaksesnya.

11991
11:38:45,112 --> 11:38:48,072
Namun dari segi konsep\nnya saja, mungkin ini yang terjadi

11992
11:38:48,072 --> 11:38:49,720
cara yang tepat untuk memikirkan hal ini.

11993
11:38:49,720 --> 11:38:51,678
Baiklah, izinkan saya berhenti sejenak\ndi sini dan melihat apakah ada

11994
11:38:51,678 --> 11:38:55,901
ada pertanyaan tentang ide pembuatan ini\n

11995
11:38:55,902 --> 11:39:00,022
bukan hanya angka seperti 1,\n2, 3, tetapi datanya dua kali lebih banyak.

11996
11:39:00,021 --> 11:39:02,591
Sehingga Anda memiliki sedikit\nbreadcrumb dalam bentuk pointer

11997
11:39:02,591 --> 11:39:05,991
yang dapat membawa Anda dari satu ke yang berikutnya.

11998
11:39:05,991 --> 11:39:08,155
Ada pertanyaan tentang daftar tertaut ini?

11999
11:39:14,913 --> 11:39:19,506
AUDIENCE: Jadi, apakah ini memerlukan\nwaktu lebih banyak memori daripada array?

12000
11:39:19,506 --> 11:39:21,631
SPEAKER 1: Ini memerlukan\nlebih banyak memori daripada array

12001
11:39:21,631 --> 11:39:24,180
karena saya sekarang memerlukan ruang\nuntuk petunjuk ini.

12002
11:39:24,180 --> 11:39:28,151
Dan untuk lebih jelasnya, secara teknis saya\ntidak terlalu menggambarkannya dalam skala besar.

12003
11:39:28,152 --> 11:39:31,082
Sejauh ini, di kelas, kita\numumnya telah memikirkan tentang bilangan bulat

12004
11:39:31,082 --> 11:39:33,992
seperti, 1, 2 dan 3, sebagai\nmenjadi 4 byte, atau 32 bit.

12005
11:39:33,991 --> 11:39:37,021
Saya membuat klaim minggu lalu bahwa\bukan petunjuk komputer modern

12006
11:39:37,021 --> 11:39:40,051
cenderung 8 byte atau 64 bit.

12007
11:39:40,052 --> 11:39:42,762
Jadi, secara teknis, kotak ini seharusnya\sebenarnya berukuran sedikit lebih besar.

12008
11:39:42,762 --> 11:39:44,461
Itu hanya akan terlihat\nsedikit bodoh dalam gambar.

12009
11:39:45,811 --> 11:39:48,811
Namun, akibatnya Anda menggunakan\nlebih banyak ruang.

12010
11:39:50,269 --> 11:39:51,601
PEMBICARA 1: Oh, bagaimana-- maaf.

12011
11:39:51,601 --> 11:39:55,451
Bagaimana komputer mengidentifikasi\ndata berguna dari data yang digunakan?

12012
11:39:55,451 --> 11:39:58,261
Jadi, misalnya, nilai\nsampah atau nilai bukan sampah.

12013
11:39:58,262 --> 11:40:00,902
Untuk saat ini, pikirkan itu\nas tugas malloc.

12014
11:40:00,902 --> 11:40:04,292
Jadi ketika Anda menanyakan memori malloc,\nas kita memulainya minggu lalu

12015
11:40:04,292 --> 11:40:07,472
malloc melacak\nalamat memori

12016
11:40:07,472 --> 11:40:10,442
itu telah diserahkan sebagai nilai yang valid.

12017
11:40:10,442 --> 11:40:12,932
Jenis memori lain yang\nAnda gunakan, bukan hanya dari heap.

12018
11:40:12,932 --> 11:40:15,872
Karena ingat kita sebentar\nmembahas bahwa malloc menggunakan ruang

12019
11:40:15,872 --> 11:40:18,872
dari tumpukan, yang diambil di\n

12020
11:40:18,872 --> 11:40:22,702
Ada juga memori tumpukan, yaitu\n

12021
11:40:22,701 --> 11:40:25,201
Dan ke mana perginya semua memori\yang digunakan oleh masing-masing fungsi.

12022
11:40:25,201 --> 11:40:27,534
Dan yang digambar dalam\ngambar sedang naik ke atas.

12023
11:40:27,535 --> 11:40:30,302
Itu hanya cara\nmenyutradarai seorang seniman.

12024
11:40:30,302 --> 11:40:33,662
Kompiler, pada dasarnya,\njuga akan membantu

12025
11:40:33,661 --> 11:40:37,349
melacak nilai mana yang\nvalid atau tidak di dalam tumpukan.

12026
11:40:37,349 --> 11:40:39,391
Atau sebenarnya kode\ndasar yang Anda tulis

12027
11:40:39,391 --> 11:40:40,724
akan melacaknya untuk Anda.

12028
11:40:40,724 --> 11:40:43,691
Jadi itu dikelola untuk Anda pada saat itu.

12029
11:40:44,792 --> 11:40:46,522
Maaf, aku butuh waktu agak lama untuk memahaminya.

12030
11:40:46,521 --> 11:40:48,691
Jadi sekarang mari kita terjemahkan\nini ke kode sebenarnya.

12031
11:40:48,692 --> 11:40:52,262
Bagaimana kami dapat menerapkan ide ini\n

12032
11:40:52,262 --> 11:40:53,641
Dan itulah istilah NCS kami.

12033
11:40:53,641 --> 11:40:57,692
Kapan pun Anda memiliki struktur data\n

12034
11:40:57,692 --> 11:41:00,429
N-O-D-E, adalah istilah umum untuk itu.

12035
11:41:00,428 --> 11:41:02,261
Jadi masing-masingnya mungkin\ndisebut sebagai sebuah node.

12036
11:41:03,311 --> 11:41:06,103
Beberapa minggu yang lalu, kami melihat\n

12037
11:41:06,103 --> 11:41:07,741
seperti pelajar atau kandidat.

12038
11:41:07,741 --> 11:41:12,421
Dan seorang siswa, atau lebih tepatnya seseorang,\n

12039
11:41:12,421 --> 11:41:14,161
Dan kami menggunakan beberapa sintaks di sini.

12040
11:41:14,161 --> 11:41:17,371
Pertama, kita menggunakan kata kunci struct,\nyang memberi kita struktur data.

12041
11:41:17,372 --> 11:41:21,902
Kami menggunakan typedef, yang mendefinisikan\nnama orang sebagai data baru kami

12042
11:41:21,902 --> 11:41:24,332
tipe yang mewakili keseluruhan struktur itu.

12043
11:41:24,332 --> 11:41:26,432
Jadi kami mungkin memiliki\nbahan-bahan yang tepat di sini

12044
11:41:26,432 --> 11:41:28,982
untuk membangun hal ini yang disebut node.

12045
11:41:28,982 --> 11:41:32,102
Dan untuk memperjelas, apa yang harus\n

12046
11:41:32,917 --> 11:41:35,042
Tentu saja, itu bukan nama\atau nomor.

12047
11:41:35,042 --> 11:41:39,732
Tapi mungkin apa yang harus dimiliki sebuah node dalam\nbidang tersebut?

12048
11:41:41,107 --> 11:41:44,082
PEMBICARA 1: Jadi angka seperti\nangka dan penunjuk dalam beberapa bentuk.

12049
11:41:44,082 --> 11:41:46,332
Jadi mari kita terjemahkan ini ke kode sebenarnya.

12050
11:41:46,332 --> 11:41:51,092
Jadi mari kita ganti nama person menjadi node\nuntuk menangkap gagasan ini di sini.

12051
11:41:52,347 --> 11:41:54,222
Jika hanya berupa\nint, tidak apa-apa.

12052
11:41:54,222 --> 11:41:56,461
Kita bisa mengatakan int nomor,\atau int n, atau apa pun

12053
11:41:56,461 --> 11:41:58,862
Anda ingin memanggil bidang tertentu itu.

12054
11:41:58,862 --> 11:42:00,554
Yang berikutnya agak tidak jelas.

12055
11:42:00,553 --> 11:42:02,761
Dan di sinilah segalanya\nmenjadi sedikit aneh pada awalnya

12056
11:42:02,762 --> 11:42:05,312
namun, jika dipikir-pikir lagi, semuanya harus cocok satu sama lain.

12057
11:42:05,311 --> 11:42:11,112
Izinkan saya mengusulkan bahwa, idealnya, kita\n

12058
11:42:11,112 --> 11:42:13,412
Dan saya dapat menyebut kata\nberikutnya apa pun yang saya inginkan.

12059
11:42:13,411 --> 11:42:17,591
Berikutnya berarti apa yang terjadi setelahnya\n

12060
11:42:17,591 --> 11:42:19,981
Jadi banyak orang CS yang\nhanya menggunakan next untuk mewakili

12061
11:42:22,741 --> 11:42:25,921
Ingat, kompiler C dan C\ncukup naif.

12062
11:42:25,921 --> 11:42:29,141
Mereka hanya melihat kode dari atas\nke bawah, kiri ke kanan.

12063
11:42:29,141 --> 11:42:31,322
Dan setiap kali mereka menemukan\na kata yang belum pernah mereka temukan

12064
11:42:31,322 --> 11:42:32,995
terlihat sebelumnya, hal buruk terjadi.

12065
11:42:32,995 --> 11:42:34,412
Misalnya, Anda tidak dapat mengkompilasi kode Anda.

12066
11:42:34,411 --> 11:42:36,401
Anda mendapatkan pesan\nkesalahan samar atau sejenisnya.

12067
11:42:36,402 --> 11:42:39,391
Dan sepertinya hal itu\nakan terjadi di sini.

12068
11:42:39,391 --> 11:42:42,451
Karena jika compiler membaca\nkode ini dari atas ke bawah

12069
11:42:42,451 --> 11:42:44,822
itu akan mengatakan, oh,\nindi dalam struct ini

12070
11:42:44,822 --> 11:42:46,622
harus berupa variabel yang dipanggil berikutnya.

12071
11:42:49,682 --> 11:42:52,951
Karena secara harafiah tidak\ntidak ketahuan sampai 2 baris

12072
11:42:52,951 --> 11:42:55,201
nanti, setelah titik koma itu.

12073
11:42:55,201 --> 11:42:57,811
Jadi cara untuk menghindari hal ini, yang\nbelum pernah kita lihat sebelumnya

12074
11:42:57,811 --> 11:43:02,701
adalah Anda dapat memberi nama ini untuk sementara\n

12075
11:43:02,701 --> 11:43:08,041
Lalu, di sini, di dalam\n

12076
11:43:08,042 --> 11:43:09,692
Dan kemudian, biarkan sisanya.

12077
11:43:09,692 --> 11:43:14,102
Ini adalah solusi yang\nmungkin dilakukan karena Anda sekarang sudah melakukannya

12078
11:43:14,101 --> 11:43:17,222
mengajari kompiler, dari\nbaris pertama, bahwa ini dia

12079
11:43:17,222 --> 11:43:19,442
struktur data yang disebut struct node.

12080
11:43:19,442 --> 11:43:22,902
Di sini, Anda menyingkat namanya\n

12081
11:43:23,402 --> 11:43:26,485
Ini hanya sedikit lebih nyaman\n

12082
11:43:26,485 --> 11:43:30,241
Tetapi Anda harus menulis struct\n

12083
11:43:30,241 --> 11:43:33,211
Namun tidak apa-apa karena\sudah ada

12084
11:43:33,211 --> 11:43:35,373
sekarang, pada baris kode pertama itu.

12085
11:43:35,374 --> 11:43:37,082
Jadi itulah satu-satunya\nperbedaan mendasar

12086
11:43:37,082 --> 11:43:40,382
antara apa yang kita lakukan minggu lalu\ndengan seseorang atau kandidat.

12087
11:43:40,381 --> 11:43:45,371
Sekarang kita harus menggunakan solusi\nstruct ini, secara sintaksis.

12088
11:43:46,652 --> 11:43:50,491
HADIRIN: Jadi [TIDAK TERDENGAR] punya suka\n

12089
11:43:51,451 --> 11:43:56,551
PEMBICARA 1: Mengapa variabel berikutnya\n

12090
11:43:58,631 --> 11:44:01,351
Jadi pikirkan tentang gambar\nyang sedang kita coba gambar.

12091
11:44:01,351 --> 11:44:05,222
Secara teknis, ya, masing-masing\sempit ini sengaja saya gambar

12092
11:44:07,982 --> 11:44:10,802
Mereka perlu menunjuk ke\nseluruh struktur data di memori.

12093
11:44:10,802 --> 11:44:13,082
Karena komputer,\npada akhirnya, dan compiler

12094
11:44:13,082 --> 11:44:16,952
pada gilirannya, perlu mengetahui bahwa ini\n

12095
11:44:18,521 --> 11:44:21,851
Di dalam sebuah node terdapat sebuah angka\ndan juga sebuah pointer lainnya.

12096
11:44:21,851 --> 11:44:24,252
Jadi ketika Anda menggambar\sempit ini, itu akan terjadi

12097
11:44:24,252 --> 11:44:26,862
salah jika menunjuk nomornya saja.

12098
11:44:26,862 --> 11:44:29,239
Karena itu membuang\tidak ada informasi itu

12099
11:44:29,239 --> 11:44:31,572
akan membuat kompiler\nbertanya-tanya, oke, saya ada di nomor tertentu.

12100
11:44:31,572 --> 11:44:32,682
Di mana sih penunjuknya?

12101
11:44:32,682 --> 11:44:34,932
Anda harus memberitahunya bahwa\nit menunjuk ke seluruh node

12102
11:44:34,932 --> 11:44:38,338
jadi ia mengetahui beberapa byte jauhnya\nis penunjuk yang sesuai.

12103
11:44:40,665 --> 11:44:42,112
HADIRIN: Bagaimana kabarmu [Tak terdengar].

12104
11:44:42,112 --> 11:44:43,444
PEMBICARA 1: Pertanyaan yang sangat bagus.

12105
11:44:43,444 --> 11:44:46,731
Tampaknya sama seperti\nmenyalin array tadi

12106
11:44:46,732 --> 11:44:49,942
memerlukan memori dua kali lebih besar,\n

12107
11:44:49,942 --> 11:44:52,612
Jadi, secara teknis, dua kali lipat\nditambah 1 untuk nomor baru.

12108
11:44:52,612 --> 11:44:56,002
Di sini juga, sepertinya kami juga menggunakan memori dua kali lebih banyak.

12109
11:44:56,002 --> 11:44:58,881
Dan pada komentar saya sebelumnya, itu\n

12110
11:44:58,881 --> 11:45:02,752
karena pointer ini berukuran 8 byte, dan\n

12111
11:45:04,762 --> 11:45:08,391
Dalam konteks array, Anda\n

12112
11:45:08,391 --> 11:45:10,231
Jadi, ya, Anda memerlukan\ntdua kali lebih banyak memori.

12113
11:45:10,232 --> 11:45:13,082
Namun kemudian Anda dengan cepat\nmembebaskan array aslinya.

12114
11:45:13,082 --> 11:45:16,372
Jadi Anda tidak mengonsumsinya dalam jangka panjang,\n

12115
11:45:16,372 --> 11:45:19,772
Perbedaannya di sini juga adalah\nitu, seperti yang akan kita lihat sebentar lagi

12116
11:45:19,771 --> 11:45:23,151
ternyata itu akan terjadi\n

12117
11:45:23,152 --> 11:45:25,101
untuk memasukkan nomor baru di sini.

12118
11:45:25,101 --> 11:45:28,101
Karena saya tidak perlu\nmelakukan penyalinan dalam jumlah besar.

12119
11:45:28,101 --> 11:45:31,281
Dan meskipun saya mungkin masih memiliki\n

12120
11:45:31,281 --> 11:45:33,561
akan memakan waktu\nawaktunya, aku

12121
11:45:33,561 --> 11:45:36,951
tidak perlu meminta\n

12122
11:45:36,951 --> 11:45:40,671
Dan operasi tertentu di komputer,\n

12123
11:45:40,671 --> 11:45:42,481
memori belakang, cenderung lebih lambat.

12124
11:45:42,482 --> 11:45:44,340
Jadi kita juga bisa menghindari\nsituasi itu.

12125
11:45:44,339 --> 11:45:46,131
Namun, akan ada\nbeberapa kerugiannya.

12126
11:45:47,182 --> 11:45:51,241
Namun kita akan melihat sebentar lagi apa\n

12127
11:45:51,741 --> 11:45:56,222
Jadi dari sini, jika kita kembali ke\n

12128
11:45:56,222 --> 11:45:59,302
mari kita mulai membuat\ndaftar tertaut dengan beberapa kode aktual.

12129
11:45:59,302 --> 11:46:03,682
Bagaimana cara Anda, di C,\nmewakili daftar tertaut dalam kode?

12130
11:46:03,682 --> 11:46:06,262
Nah, untuk saat ini,\sebenarnya akan sesederhana ini.

12131
11:46:06,262 --> 11:46:09,412
Anda mendeklarasikan sebuah variabel,\ndisebut daftar, misalnya.

12132
11:46:09,411 --> 11:46:12,451
Itu sendiri menyimpan\nalamat sebuah node.

12133
11:46:14,701 --> 11:46:17,362
Jadi jika Anda ingin menyimpan\na daftar tertaut di memori

12134
11:46:17,362 --> 11:46:19,879
Anda cukup membuat variabel\nyang disebut daftar, atau apa pun.

12135
11:46:19,879 --> 11:46:21,711
Dan Anda cukup mengatakan bahwa\nvariabel ini berjalan

12136
11:46:21,711 --> 11:46:25,911
untuk menunjuk pada node pertama di a\n

12137
11:46:25,911 --> 11:46:29,751
Karena malloc pada akhirnya akan berjalan\n

12138
11:46:29,752 --> 11:46:33,752
dapatkan di salah satu\nnnode tertentu di memori.

12139
11:46:34,252 --> 11:46:36,171
Jadi mari kita lakukan\nini dalam bentuk gambar.

12140
11:46:36,171 --> 11:46:39,171
Saat Anda menulis sebaris\nkode, seperti yang baru saja saya lakukan di sini--

12141
11:46:39,171 --> 11:46:43,161
dan saya tidak menginisialisasinya ke\n

12142
11:46:44,211 --> 11:46:48,201
Itu memang ada di memori sebagai sebuah kotak,\n

12143
11:46:48,201 --> 11:46:50,911
Tapi saya sengaja\menggambar Oscar di dalamnya.

12144
11:46:54,112 --> 11:46:55,444
PEMBICARA 1: Ini adalah nilai sampah.

12145
11:46:55,444 --> 11:46:59,881
Saya telah mengalokasikan\nvariabel di memori, yang disebut daftar.

12146
11:46:59,881 --> 11:47:03,951
Yang akan memberi saya 64 bit\n

12147
11:47:04,951 --> 11:47:07,701
Namun jika saya sendiri belum\menggunakan operator penugasan

12148
11:47:07,701 --> 11:47:11,311
itu tidak akan terjadi secara ajaib\n

12149
11:47:11,811 --> 11:47:13,951
Itu bahkan tidak akan memberi saya sebuah simpul.

12150
11:47:13,951 --> 11:47:18,631
Ini benar-benar hanya akan menjadi\n

12151
11:47:18,631 --> 11:47:20,241
Jadi apa solusinya di sini?

12152
11:47:20,241 --> 11:47:23,241
Misalkan saya mulai\nmembuat daftar tertaut

12153
11:47:23,241 --> 11:47:24,771
tapi saya belum punya node apa pun.

12154
11:47:24,771 --> 11:47:28,783
Hal yang masuk akal untuk\n

12155
11:47:31,319 --> 11:47:32,612
PEMBICARA 1: Jadi null saja ya.

12156
11:47:32,612 --> 11:47:34,342
Jika ragu dengan\npointer, biasanya memang demikian

12157
11:47:34,341 --> 11:47:36,091
merupakan hal yang baik untuk\nmenginisialisasi sesuatu menjadi nol

12158
11:47:36,091 --> 11:47:37,641
jadi setidaknya itu bukan nilai sampah.

12159
11:47:39,900 --> 11:47:41,692
Namun ini adalah nilai\nkhusus yang dapat Anda periksa

12160
11:47:41,692 --> 11:47:43,622
untuk dengan kondisi, atau sejenisnya.

12161
11:47:43,622 --> 11:47:47,602
Jadi ini mungkin cara yang lebih baik\nuntuk membuat daftar tertaut

12162
11:47:47,601 --> 11:47:51,601
bahkan sebelum Anda memasukkan\number apa pun ke dalam benda itu sendiri.

12163
11:47:52,101 --> 11:47:55,316
Jadi setelah itu, bagaimana kita melanjutkan\n

12164
11:47:55,317 --> 11:47:56,692
Jadi sekarang ceritanya terlihat seperti ini.

12165
11:47:56,692 --> 11:47:59,632
Oscar hilang karena di dalam\nokotak ini semuanya nol bit.

12166
11:47:59,631 --> 11:48:03,531
Hanya karena bagus dan bersih, dan\n

12167
11:48:03,531 --> 11:48:08,072
Nah, jika saya ingin menambahkan angka 1\n

12168
11:48:08,072 --> 11:48:10,072
Yah, mungkin saya bisa\nmulai dengan kode seperti ini.

12169
11:48:10,072 --> 11:48:11,781
Meminjam inspirasi dari minggu lalu.

12170
11:48:11,781 --> 11:48:16,402
Mari kita minta malloc menyediakan\nruang yang cukup untuk ukuran sebuah node.

12171
11:48:16,402 --> 11:48:20,542
Dan ini menjawab pertanyaan Anda sebelumnya,\n

12172
11:48:20,542 --> 11:48:23,842
Saya tidak hanya membutuhkan ruang untuk int dan\n

12173
11:48:24,921 --> 11:48:27,631
Dan saya memberi nama pada benda itu, simpul.

12174
11:48:27,631 --> 11:48:30,411
Jadi ukuran simpul keluar\ndan melakukan aritmatika untuk saya.

12175
11:48:30,411 --> 11:48:32,871
Dan memberi saya kembali\njumlah byte yang tepat.

12176
11:48:32,872 --> 11:48:36,412
Ini kemudian menyimpan alamat\nbagian memori tersebut

12177
11:48:36,411 --> 11:48:38,361
dalam apa yang saya sebut sementara n.

12178
11:48:38,362 --> 11:48:40,641
Hanya untuk mewakili node baru yang umum.

12179
11:48:42,351 --> 11:48:45,561
Karena sama seperti minggu lalu ketika saya\n

12180
11:48:45,561 --> 11:48:47,841
dan saya menyimpannya di pointer int*.

12181
11:48:47,841 --> 11:48:50,241
Minggu ini, jika saya meminta\nmemori untuk sebuah node

12182
11:48:50,241 --> 11:48:52,822
Saya menyimpannya di penunjuk simpul*.

12183
11:48:52,822 --> 11:48:56,002
Jadi secara teknis, tidak ada yang baru\nkecuali istilah baru ini

12184
11:48:56,002 --> 11:48:58,502
seni dalam struktur data yang disebut node.

12185
11:48:59,002 --> 11:49:00,351
Jadi apa manfaatnya bagi saya?

12186
11:49:00,351 --> 11:49:03,141
Ini pada dasarnya menggambar\ngambar seperti ini di memori.

12187
11:49:03,141 --> 11:49:07,171
Saya masih memiliki variabel daftar dari\n

12188
11:49:07,671 --> 11:49:09,129
Dan itulah mengapa saya mengosongkannya.

12189
11:49:09,129 --> 11:49:11,541
Saya juga sekarang memiliki\nvariabel sementara yang dipanggil

12190
11:49:11,542 --> 11:49:15,052
n, yang saya inisialisasi ke\nnilai kembalian malloc.

12191
11:49:15,052 --> 11:49:17,132
Yang memberi saya salah satu\nnode ini di memori.

12192
11:49:17,131 --> 11:49:19,612
Namun saya telah menggambarnya dengan nilai\ngarbage juga

12193
11:49:19,612 --> 11:49:21,332
karena saya tidak tahu apa int yang ada di sana.

12194
11:49:21,332 --> 11:49:22,790
Saya tidak tahu petunjuk apa yang ada di sana.

12195
11:49:22,790 --> 11:49:27,082
Itu nilai sampah karena malloc tidak\n

12196
11:49:27,082 --> 11:49:28,732
Ada fungsi lain untuk itu.

12197
11:49:28,732 --> 11:49:31,582
Namun malloc sendiri hanya mengatakan,\ntentu saja, gunakan sebagian memori ini.

12198
11:49:31,582 --> 11:49:33,391
Hadapi apa pun yang ada di sana.

12199
11:49:33,391 --> 11:49:36,381
Jadi bagaimana cara\nmenginisialisasi ini ke nilai yang diketahui?

12200
11:49:36,381 --> 11:49:40,921
Baiklah, misalkan saya ingin memasukkan\n

12201
11:49:40,921 --> 11:49:44,693
Daftar ukuran 1, saya bisa\ndo sesuatu seperti ini.

12202
11:49:44,694 --> 11:49:47,402
Dan di sinilah Anda harus\n

12203
11:49:47,402 --> 11:49:51,542
Persyaratan saya di sini adalah menanyakan\n

12204
11:49:51,542 --> 11:49:54,692
Jadi, jika malloc\ngmemberi saya memori yang valid

12205
11:49:54,692 --> 11:49:58,172
dan saya tidak harus berhenti sama sekali\n

12206
11:49:58,171 --> 11:50:02,072
Jika n tidak sama dengan nol, tetapi\nis sama dengan alamat yang valid

12207
11:50:02,072 --> 11:50:03,552
Saya akan melanjutkan dan melakukan ini.

12208
11:50:03,552 --> 11:50:06,302
Dan ini adalah sintaksis yang tampak samar sekarang.

12209
11:50:06,302 --> 11:50:09,632
Tapi apakah ada yang mau mencoba\n

12210
11:50:13,862 --> 11:50:18,002
Bagaimana Anda menjelaskan apa yang dilakukan\ninner baris kode tersebut? *N.

12211
11:50:27,283 --> 11:50:29,641
Tempat yang n ditunjuk\n, atur sama dengan 1.

12212
11:50:29,641 --> 11:50:33,542
Atau menggunakan bahasa sehari-hari pergi\nsana, pergi ke alamat di n

12213
11:50:33,542 --> 11:50:35,961
dan atur bidang nomornya ke 1.

12214
11:50:35,961 --> 11:50:37,961
Bagaimanapun Anda ingin memikirkannya\n, tidak apa-apa.

12215
11:50:37,961 --> 11:50:40,411
Namun * lagi-lagi adalah\noperator referensi di sini.

12216
11:50:40,411 --> 11:50:42,211
Dan kami melakukan\ntanda kurung, yang kami lakukan

12217
11:50:42,211 --> 11:50:45,722
belum perlu melakukannya sebelumnya karena kami\n

12218
11:50:45,722 --> 11:50:47,491
struktur bersama sampai hari ini.

12219
11:50:47,491 --> 11:50:49,862
Artinya pergi ke sana dulu.

12220
11:50:49,862 --> 11:50:52,201
Lalu setelah Anda\ndi sana, buka nomor akses.

12221
11:50:52,201 --> 11:50:54,311
Anda tidak ingin melakukan satu\nhal sebelum yang lain.

12222
11:50:54,311 --> 11:50:56,371
Jadi ini hanya menegakkan\nurutan operasi.

12223
11:50:56,372 --> 11:50:58,782
Tanda kurungnya seperti\nin matematika sekolah dasar.

12224
11:50:59,281 --> 11:51:00,692
Jadi baris kode ini samar.

12225
11:51:01,463 --> 11:51:03,421
Ini bukanlah sesuatu yang mudah diingat oleh kebanyakan\norang.

12226
11:51:03,421 --> 11:51:07,231
Untungnya, ada sintaksisnya\n

12227
11:51:08,338 --> 11:51:10,171
Dan ini, meskipun\ini baru bagi Anda saat ini

12228
11:51:10,171 --> 11:51:12,301
pada akhirnya akan terasa\na sedikit lebih familiar.

12229
11:51:12,302 --> 11:51:15,692
Karena sekarang ini adalah notasi\nsingkatan untuk mengatakan, mulai dari n.

12230
11:51:15,692 --> 11:51:17,891
Pergi ke sana dengan mengikuti panah.

12231
11:51:17,891 --> 11:51:20,012
Dan ketika Anda sampai di sana,\nubah kolom nomornya.

12232
11:51:22,201 --> 11:51:24,721
Jadi kebanyakan orang tidak akan\nmenulis kode seperti ini.

12233
11:51:25,512 --> 11:51:26,912
Ini adalah beberapa penekanan tombol tambahan.

12234
11:51:26,911 --> 11:51:30,781
Ini lebih mirip milik artis\n

12235
11:51:30,781 --> 11:51:35,012
Dan apa yang dipikirkan sebagian besar orang CS\n

12236
11:51:37,775 --> 11:51:42,132
Gambar sekarang, setelah menyetel nomor ke\n

12237
11:51:42,131 --> 11:51:43,921
Jadi masih ada satu langkah yang terlewat.

12238
11:51:43,921 --> 11:51:46,201
Dan itu, tentu saja, untuk\niinisialisasi

12239
11:51:46,201 --> 11:51:50,561
penunjuk di simpul baru ini\nke sesuatu yang dikenal seperti null.

12240
11:51:50,561 --> 11:51:52,216
Jadi saya yakin kita bisa melakukan ini seperti ini.

12241
11:51:52,216 --> 11:51:54,091
Dengan baris\nkode yang berbeda, saya langsung saja

12242
11:51:54,091 --> 11:52:00,361
untuk mengatakan jika n tidak sama dengan nol,\n

12243
11:52:00,362 --> 11:52:04,022
Atau lebih tepatnya, lanjutkan\nke n, ikuti panah

12244
11:52:04,021 --> 11:52:07,921
lalu perbarui kolom berikutnya\n

12245
11:52:07,921 --> 11:52:10,171
Dan sekali lagi, ini hanya\melakukan pembukuan yang bagus.

12246
11:52:10,171 --> 11:52:13,351
Secara teknis,\nkita mungkin tidak perlu menyetelnya

12247
11:52:13,351 --> 11:52:16,391
ini menjadi nol jika kita ingin mempertahankan\n

12248
11:52:16,391 --> 11:52:19,591
Tapi saya melakukannya selangkah demi selangkah jadi\n

12249
11:52:19,591 --> 11:52:23,281
Dan tidak ada bug di\nkode saya saat ini.

12250
11:52:24,752 --> 11:52:27,211
Ada satu hal terakhir yang\nharus saya lakukan di sini.

12251
11:52:27,211 --> 11:52:32,432
Jika tujuannya pada akhirnya adalah memasukkan\n

12252
11:52:32,432 --> 11:52:36,342
apa langkah terakhir yang mungkin harus saya\nlakukan di sini?

12253
11:52:38,031 --> 11:52:40,741
AUDIENCE: Tetapkan nilai penunjuk ke null.

12254
11:52:41,491 --> 11:52:45,451
Saya sekarang perlu memperbarui\n

12255
11:52:45,451 --> 11:52:48,511
list, untuk menunjuk pada simpul baru ini.

12256
11:52:48,512 --> 11:52:52,798
Itu sekarang diinisialisasi dengan sempurna sebagai\n

12257
11:52:52,798 --> 11:52:54,881
Ya, secara teknis, ini\nsudah mengarah ke sana.

12258
11:52:54,881 --> 11:52:57,572
Namun saya menggambarkan hal ini dengan sengaja\hampir bersifat sementara.

12259
11:52:57,572 --> 11:53:02,101
Saya hanya memerlukan ini untuk mendapatkannya kembali dari\n

12260
11:53:02,101 --> 11:53:04,711
Ini adalah variabel\njangka panjang yang saya pedulikan.

12261
11:53:04,711 --> 11:53:06,961
Jadi saya ingin melakukan\nsesuatu yang sederhana seperti ini.

12262
11:53:09,002 --> 11:53:11,345
Dan ini agak\naneh karena daftarnya sama dengan n.

12263
11:53:11,345 --> 11:53:13,262
Namun sekali lagi, pikirkan\napa yang ada di dalam kotak ini.

12264
11:53:13,262 --> 11:53:15,470
Saat ini null\nkarena tidak ada tautan

12265
11:53:15,470 --> 11:53:17,012
daftar di awal cerita kita.

12266
11:53:17,012 --> 11:53:21,391
N adalah alamat awal, dan\n

12267
11:53:21,391 --> 11:53:24,781
Jadi masuk akal jika\njika Anda menetapkan daftar sama dengan n

12268
11:53:24,781 --> 11:53:27,661
yang mempunyai efek\nmenyalin alamat ini di sini.

12269
11:53:27,661 --> 11:53:30,764
Atau sebenarnya hanya menyalin\sempit ke lokasi yang sama

12270
11:53:30,764 --> 11:53:32,432
sehingga sekarang gambarnya menjadi seperti ini.

12271
11:53:32,432 --> 11:53:35,822
Dan sialnya, apakah ini hanya sementara\n

12272
11:53:35,822 --> 11:53:37,351
Dan sekarang, inilah gambarannya.

12273
11:53:37,351 --> 11:53:39,512
Tentu saja sejumlah langkah yang menjengkelkan

12274
11:53:39,512 --> 11:53:42,002
untuk berjalan melalui secara verbal seperti ini.

12275
11:53:42,002 --> 11:53:44,162
Tapi itu hanya malloc untuk\ngmemberi diri Anda sebuah node

12276
11:53:44,161 --> 11:53:49,411
inisialisasi 2 bidang di dalam\n

12277
11:53:50,252 --> 11:53:52,391
Saya tidak perlu menyalin apa pun.

12278
11:53:52,391 --> 11:53:55,614
Saya hanya perlu memasukkan\nsesuatu dalam kasus ini.

12279
11:53:55,614 --> 11:53:58,322
Izinkan saya berhenti sejenak di sini untuk melihat apakah ada\n

12280
11:53:58,322 --> 11:54:02,271
Dan kita akan segera melihat semuanya\n

12281
11:54:02,271 --> 11:54:06,447
AUDIENCE: Jadi jika\npernyataannya [TIDAK TERDENGAR]..

12282
11:54:07,072 --> 11:54:10,491
Saya menggambarnya secara terpisah\nhanya demi sulih suara

12283
11:54:10,491 --> 11:54:12,502
melakukan setiap hal dengan sangat metodis.

12284
11:54:12,502 --> 11:54:14,572
Dalam kode nyata, seperti yang akan kita\ntransisikan ke sekarang

12285
11:54:14,572 --> 11:54:16,701
Saya bisa saja dan seharusnya\nmelakukannya

12286
11:54:16,701 --> 11:54:20,481
semua dalam satu kondisi setelah\n

12287
11:54:20,482 --> 11:54:22,792
Saya dapat menetapkan angka ke nilai seperti 1.

12288
11:54:22,792 --> 11:54:25,897
Dan saya bisa mengatur pointer\nitself ke sesuatu seperti null.

12289
11:54:26,512 --> 11:54:30,082
Kalau begitu, mari kita terjemahkan\nini ke dalam kode serupa

12290
11:54:30,082 --> 11:54:34,822
yang memungkinkan kita membangun tautan\n

12291
11:54:35,631 --> 11:54:37,381
Tapi sekarang, menggunakan primitif baru ini.

12292
11:54:37,381 --> 11:54:39,621
Jadi saya akan\nkembali ke VS Code di sini.

12293
11:54:39,622 --> 11:54:42,952
Saya akan melanjutkan sekarang dan menghapus\n

12294
11:54:44,752 --> 11:54:49,951
Dan sekarang, di dalam fungsi utama saya,\n

12295
11:54:49,951 --> 11:54:53,661
Pertama-tama saya akan memberikan\nsaya sendiri daftar ukuran 0.

12296
11:54:53,661 --> 11:54:56,091
Dan saya akan memanggil daftar node* itu.

12297
11:54:56,091 --> 11:54:59,091
Dan saya akan menginisialisasinya\n

12298
11:54:59,091 --> 11:55:02,241
Namun sekarang saya juga harus\n

12299
11:55:03,451 --> 11:55:06,981
Jadi ingatlah bahwa saya mungkin melakukan sesuatu\nseperti typedef, struct node.

12300
11:55:06,982 --> 11:55:09,802
Di dalam node struct ini, saya\nakan memiliki nomor, yang mana

12301
11:55:09,802 --> 11:55:11,492
Saya akan memanggil nomor bertipe int.

12302
11:55:11,491 --> 11:55:13,641
Dan saya akan memiliki\na struktur yang disebut node

12303
11:55:13,641 --> 11:55:16,951
dengan tanda * yang menyatakan bahwa\npointer berikutnya dipanggil berikutnya.

12304
11:55:16,951 --> 11:55:20,631
Dan saya akan menyebut keseluruhan\nini, dengan lebih ringkas, node

12305
11:55:22,311 --> 11:55:25,401
Sekarang sebagai tambahan, bagi Anda\n

12306
11:55:27,082 --> 11:55:29,932
Secara teknis, saya bisa\melakukan sesuatu seperti ini.

12307
11:55:29,932 --> 11:55:33,442
Tidak menggunakan typedef dan tidak\nmenggunakan simpul kata saja.

12308
11:55:33,442 --> 11:55:37,162
Sintaks ini sebenarnya\nmembuat data baru untuk saya

12309
11:55:37,161 --> 11:55:40,311
ketik disebut, secara verbal, struct node.

12310
11:55:40,311 --> 11:55:42,921
Dan saya bisa menggunakan ini di seluruh\nkode saya dengan mengatakan struct node.

12311
11:55:43,942 --> 11:55:45,322
Itu menjadi sedikit membosankan.

12312
11:55:45,322 --> 11:55:48,197
Dan akan lebih baik jika hanya merujuk\n

12313
11:55:49,232 --> 11:55:51,712
Jadi yang typedef\nlakukan untuk kita adalah itu

12314
11:55:51,711 --> 11:55:55,252
sekali lagi, mari kita ciptakan\nkata kita sendiri yang lebih ringkas.

12315
11:55:55,252 --> 11:55:58,521
Dan ini hanya mempunyai efek\nmengakhiri semua ini

12316
11:55:58,521 --> 11:56:02,241
node tanpa perlu, selanjutnya, ke\n

12317
11:56:04,161 --> 11:56:07,531
Jadi sekarang benda ini ada di\n

12318
11:56:10,252 --> 11:56:12,921
Dan untuk melakukan ini, saya akan\ngmemberikan diri saya sebuah variabel sementara.

12319
11:56:12,921 --> 11:56:14,822
Saya akan menyebutnya n untuk konsistensi.

12320
11:56:14,822 --> 11:56:18,021
Saya akan menggunakan malloc untuk\ngmemberi diri saya ukuran sebuah node

12321
11:56:19,561 --> 11:56:21,021
Lalu, saya akan\melakukan sedikit pemeriksaan keamanan.

12322
11:56:21,021 --> 11:56:23,951
Jika n sama dengan nol, saya akan pergi\n

12323
11:56:23,951 --> 11:56:25,701
Saya hanya akan keluar\ndari program ini

12324
11:56:25,701 --> 11:56:28,441
karena tidak ada\nyang berguna untuk dilakukan saat ini.

12325
11:56:28,442 --> 11:56:31,052
Namun kemungkinan besar komputer saya\ntidak akan kehabisan memori.

12326
11:56:31,052 --> 11:56:34,232
Jadi saya berasumsi kita bisa mempertahankan\n

12327
11:56:34,232 --> 11:56:38,872
Jika n tidak sama dengan nol, dan itu\n

12328
11:56:40,851 --> 11:56:42,411
Saya akan membangunnya secara terbalik.

12329
11:56:44,188 --> 11:56:45,771
Tidak apa-apa, mari kita lanjutkan dan lakukan ini.

12330
11:56:48,082 --> 11:56:52,972
Dan kemudian n [panah berikutnya] sama dengan nol.

12331
11:56:52,972 --> 11:56:59,902
Dan sekarang, perbarui daftar untuk menunjuk\nke simpul baru, daftar sama dengan n.

12332
11:56:59,902 --> 11:57:02,062
Jadi pada titik\ncerita ini, pada dasarnya kita sudah melakukannya

12333
11:57:02,061 --> 11:57:06,811
membuat gambar\npertama itu, yang terlihat seperti ini.

12334
11:57:06,811 --> 11:57:11,362
Ini adalah kode yang sesuai melalui\n

12335
11:57:11,362 --> 11:57:14,342
Misalkan sekarang, kita ingin menambahkan\nangka 2 ke dalam daftar.

12336
11:57:21,391 --> 11:57:23,811
Baiklah, saya tidak perlu\nmendeklarasikan ulang karena saya bisa menggunakannya

12337
11:57:23,811 --> 11:57:25,591
variabel sementara yang sama sebelumnya.

12338
11:57:25,591 --> 11:57:30,791
Jadi kali ini, saya hanya akan mengatakan n\n

12339
11:57:30,792 --> 11:57:32,542
Sekali lagi, saya akan\nmelakukan pemeriksaan keamanan.

12340
11:57:32,542 --> 11:57:36,772
Jadi jika n sama dengan nol, mari\n

12341
11:57:36,771 --> 11:57:41,301
Namun, saya harus sedikit lebih berhati-hati sekarang.

12342
11:57:41,302 --> 11:57:43,641
Secara teknis,\napa yang masih saya perlukan

12343
11:57:43,641 --> 11:57:48,021
yang harus saya lakukan sebelum saya keluar dari\nprogram saya agar benar?

12344
11:57:48,021 --> 11:57:51,361
Bebaskan memori yang\nberhasil sedikit lebih tinggi.

12345
11:57:51,362 --> 11:57:56,762
Jadi menurut saya cukup dengan membebaskan apa\n

12346
11:57:57,262 --> 11:58:03,742
Namun, jika semuanya baik-baik saja, ayo\n

12347
11:58:03,741 --> 11:58:09,322
Dan sekarang, n [panah berikutnya] sama dengan nol.

12348
11:58:09,322 --> 11:58:12,381
Dan sekarang, mari kita lanjutkan\ndan tambahkan ke dalam daftar.

12349
11:58:12,381 --> 11:58:20,391
Jika saya lanjutkan dan lakukan\ndaftar panah berikutnya sama dengan n

12350
11:58:20,391 --> 11:58:24,141
Saya pikir apa yang baru saja kita lakukan adalah\nmembangun hal yang setara, sekarang

12351
11:58:24,141 --> 11:58:27,141
ini di memori komputer.

12352
11:58:27,141 --> 11:58:29,661
Dengan membuka kolom\ndaftar selanjutnya, yang mana

12353
11:58:29,661 --> 11:58:33,561
identik dengan 1\nnode, kotak paling bawah.

12354
11:58:33,561 --> 11:58:37,021
Dan simpan alamat yang tadinya n,\n

12355
11:58:37,021 --> 11:58:39,871
Dan aku hanya membuangnya, di\n

12356
11:58:42,362 --> 11:58:47,569
Izinkan saya turun ke sini dan berkata, tambahkan\n

12357
11:58:49,822 --> 11:58:52,762
Dan yang jelas, dalam program nyata, kami\n

12358
11:58:52,762 --> 11:58:56,542
Dan lakukan ini secara dinamis atau suatu fungsi\n

12359
11:58:56,542 --> 11:58:59,601
Namun hanya melalui\nsintaksis di sini, tidak apa-apa.

12360
11:58:59,601 --> 11:59:03,182
Jika n sama dengan nol, kehabisan\nmemori karena alasan tertentu.

12361
11:59:03,182 --> 11:59:09,131
Mari kita kembalikan 1, tapi kita\nharus mengosongkan daftarnya sendiri

12362
11:59:09,131 --> 11:59:12,932
dan bahkan node kedua, daftar [berikutnya].

12363
11:59:12,932 --> 11:59:16,211
Tapi aku sengaja melakukan ini dengan buruk.

12364
11:59:16,711 --> 11:59:18,722
Ini menjadi sedikit lebih halus sekarang.

12365
11:59:18,722 --> 11:59:22,052
Dan biarkan saya menghilangkan sorotannya\n

12366
11:59:22,052 --> 11:59:26,372
Jika n kebetulan sama dengan\nnull, dan sesuatunya benar-benar adil

12367
11:59:26,372 --> 11:59:32,522
terjadi kesalahan, memorinya habis,\n

12368
11:59:32,521 --> 11:59:35,252
Dan sekali lagi, ini bukan berarti saya\nmembebaskan variabel-variabel itu sendiri.

12369
11:59:35,252 --> 11:59:39,101
Saya membebaskan alamat\nat di variabel tersebut.

12370
11:59:39,101 --> 11:59:41,371
Namun ada juga\nbug pada kode saya di sini.

12371
11:59:45,061 --> 11:59:49,165
Baris ini, 43, apa itu\nkhususnya pembebasan?

12372
11:59:49,832 --> 11:59:52,382
HADIRIN: Anda membebaskan daftar 2 kali.

12373
11:59:52,381 --> 11:59:54,121
PEMBICARA 1: Saya sedang bebas, bukan begitu.

12374
11:59:54,631 --> 11:59:56,221
Saya tidak membebaskan daftar 2 kali.

12375
11:59:56,222 --> 11:59:59,012
Secara teknis, saya mengosongkan\ndaftar satu kali dan daftar berikutnya satu kali.

12376
11:59:59,012 --> 12:00:01,082
Namun izinkan saya menanyakan\npertanyaan yang lebih eksplisit.

12377
12:00:01,082 --> 12:00:03,902
Apa yang saya bebaskan dengan\nline 43 saat ini?

12378
12:00:08,911 --> 12:00:10,921
Karena jika 1 ada di\nawal daftar

12379
12:00:10,921 --> 12:00:14,011
list berisi alamat\nnode nomor 1 itu.

12380
12:00:14,012 --> 12:00:15,762
Dan ini membebaskan simpul itu.

12381
12:00:15,762 --> 12:00:18,732
Baris kode ini, mungkin\nAnda sekarang berpikir secara intuitif, oke

12382
12:00:18,732 --> 12:00:21,092
itu mungkin membebaskan simpul nomor 2.

12383
12:00:22,891 --> 12:00:24,601
Valgrind mungkin bisa membantu Anda memahami ini.

12384
12:00:24,601 --> 12:00:27,002
Namun jika dilihat,\nbelum tentu terlihat jelas.

12385
12:00:27,002 --> 12:00:31,472
Anda tidak boleh menyentuh memori\nyang telah Anda kosongkan.

12386
12:00:31,472 --> 12:00:34,412
Jadi, fakta bahwa saya melakukan\nperintah ini, sangat buruk.

12387
12:00:34,411 --> 12:00:37,111
Karena saya memberi tahu\sistem operasinya, saya tidak tahu.

12388
12:00:37,112 --> 12:00:39,631
Saya tidak memerlukan alamat daftar lagi.

12389
12:00:40,891 --> 12:00:43,141
Lalu, satu baris kemudian,\n

12390
12:00:43,141 --> 12:00:45,211
Biarkan saya pergi ke\nalamat itu sebentar

12391
12:00:45,211 --> 12:00:47,881
dan lihat kolom\nberikutnya dari node pertama tersebut.

12392
12:00:48,701 --> 12:00:51,191
Anda sudah melepaskan\nkontrol atas node tersebut.

12393
12:00:51,192 --> 12:00:54,211
Jadi ini merupakan perbaikan yang mudah dalam\nkasus ini, secara logis.

12394
12:00:54,211 --> 12:00:56,851
Namun kita harus membebaskan\nnode kedua terlebih dahulu

12395
12:00:56,851 --> 12:01:00,542
lalu yang pertama\nsehingga kita bisa melakukannya

12396
12:01:00,542 --> 12:01:02,522
pada dasarnya dalam urutan terbalik.

12397
12:01:02,521 --> 12:01:04,438
Dan sekali lagi, Valgrind akan\nmembantu Anda memahaminya.

12398
12:01:04,438 --> 12:01:07,063
Namun hal itulah yang\nperlu diwaspadai saat itu

12399
12:01:08,082 --> 12:01:10,592
Anda tidak dapat menyentuh memori\nsetelah Anda mengosongkannya.

12400
12:01:12,451 --> 12:01:17,971
Biarkan saya lanjutkan dan perbarui\nkolom angka n menjadi 3.

12401
12:01:17,972 --> 12:01:20,982
Node berikutnya dari n menjadi nol.

12402
12:01:20,982 --> 12:01:22,772
Lalu, seperti\nin slide sebelumnya

12403
12:01:22,771 --> 12:01:28,502
Saya rasa saya bisa melakukan list\nnext, next sama dengan n.

12404
12:01:28,502 --> 12:01:32,372
Dan hal itu berdampak pada\n sekarang

12405
12:01:32,372 --> 12:01:34,472
pada dasarnya, struktur data ini.

12406
12:01:36,302 --> 12:01:38,342
Misalnya, di dunia yang lebih baik, kita\nmemiliki loop dan beberapa fungsi

12407
12:01:38,341 --> 12:01:39,901
yang mengotomatiskan proses ini.

12408
12:01:39,902 --> 12:01:44,162
Namun, untuk saat ini, kami hanya melakukannya\n

12409
12:01:44,161 --> 12:01:48,901
Sayangnya, pada saat ini,\n

12410
12:01:48,902 --> 12:01:53,671
Tidak lagi semudah int\ni sama dengan 0, i kurang dari 3, i .

12411
12:01:53,671 --> 12:02:00,902
Karena Anda tidak bisa\melakukan hal seperti ini begitu saja.

12412
12:02:00,902 --> 12:02:06,002
Karena aritmatika penunjuk\ntidak lagi berperan

12413
12:02:06,002 --> 12:02:10,232
padahal kamulah yang menjahit\n

12414
12:02:10,232 --> 12:02:12,932
Dalam semua contoh kami sebelumnya\ndengan array, Anda sudah

12415
12:02:12,932 --> 12:02:16,302
telah mempercayai bahwa semua byte di\n

12416
12:02:16,302 --> 12:02:19,015
Jadi ini sangat masuk akal untuk\nkompiler dan komputer

12417
12:02:19,014 --> 12:02:21,932
untuk sekedar mencari tahu, oh, baiklah jika Anda\n

12418
12:02:21,932 --> 12:02:23,612
[1], itu satu lokasi di atas.

12419
12:02:23,612 --> 12:02:25,592
[2], itu satu lokasi di atas.

12420
12:02:25,591 --> 12:02:28,511
Hal ini menjadi kurang jelas sekarang.

12421
12:02:28,512 --> 12:02:32,132
Karena meskipun Anda mungkin ingin\n

12422
12:02:32,131 --> 12:02:36,752
daftar, atau yang kedua, atau ketiga, Anda\n

12423
12:02:38,072 --> 12:02:41,521
Sebaliknya, Anda harus\nmengikuti semua panah tersebut.

12424
12:02:41,521 --> 12:02:44,822
Jadi dengan daftar tertaut, Anda tidak dapat menggunakan\n

12425
12:02:44,822 --> 12:02:47,792
karena satu node mungkin ada di sini,\tidak di sini, di sini, di sini.

12426
12:02:47,792 --> 12:02:51,031
Anda tidak bisa hanya menggunakan offset sederhana.

12427
12:02:51,031 --> 12:02:53,822
Jadi menurut saya kode kita\nharus menjadi sedikit lebih menarik.

12428
12:02:53,822 --> 12:02:57,302
Dan ini mungkin terlihat menakutkan\npada awalnya, tapi ini hanya sebuah aplikasi

12429
12:02:57,302 --> 12:02:59,641
dari beberapa definisi dasar di sini.

12430
12:02:59,641 --> 12:03:06,961
Izinkan saya melakukan perulangan yang sebenarnya\n

12431
12:03:08,612 --> 12:03:13,262
Saya akan terus melakukan ini, jadi\n

12432
12:03:13,262 --> 12:03:15,842
Dan pada setiap iterasi\nperulangan ini, saya akan melanjutkan

12433
12:03:15,841 --> 12:03:20,581
untuk memperbarui TMP menjadi\napa pun panah TMP berikutnya.

12434
12:03:20,582 --> 12:03:23,192
Dan saya akan mengingatkan Anda sebentar lagi\ndan menjelaskan lebih detail.

12435
12:03:23,192 --> 12:03:27,211
Namun ketika saya mencetak sesuatu di sini\ndengan printf, saya masih dapat menggunakan %i.

12436
12:03:27,211 --> 12:03:29,521
Karena itu masih berupa angka\pada akhirnya.

12437
12:03:29,521 --> 12:03:34,121
Tapi yang ingin saya cetak adalah\n

12438
12:03:34,122 --> 12:03:36,514
Jadi mungkin loop\nterjelek yang pernah kami lihat.

12439
12:03:36,514 --> 12:03:38,972
Karena ini adalah pencampuran, bukan hanya\nide tentang for-loop, yang mana

12440
12:03:38,972 --> 12:03:40,982
itu sendiri agak samar beberapa minggu yang lalu.

12441
12:03:40,982 --> 12:03:43,507
Tapi sekarang, saya menggunakan pointer\bukan bilangan bulat.

12442
12:03:43,506 --> 12:03:45,631
Tapi saya tidak melanggar\ndefinisi for-loop.

12443
12:03:45,631 --> 12:03:48,421
Ingatlah bahwa perulangan for memiliki 3\nhal utama dalam tanda kurung.

12444
12:03:48,421 --> 12:03:50,281
Apa yang ingin Anda inisialisasi terlebih dahulu?

12445
12:03:50,281 --> 12:03:53,222
Kondisi apa yang ingin Anda\nterus periksa berulang kali?

12446
12:03:53,222 --> 12:03:56,921
Dan pembaruan apa yang ingin Anda lakukan\n

12447
12:03:56,921 --> 12:03:59,341
Jadi dengan mempertimbangkan\nddefinisi dasar tersebut, ini

12448
12:03:59,341 --> 12:04:01,831
memberi saya variabel\nsementara bernama TMP

12449
12:04:01,832 --> 12:04:04,002
yang diinisialisasi ke\nawal loop.

12450
12:04:04,002 --> 12:04:07,591
Jadi seperti menunjuk\njari saya pada simpul nomor 1.

12451
12:04:07,591 --> 12:04:11,011
Lalu saya bertanya,\apakah TMP tidak sama dengan nol?

12452
12:04:11,012 --> 12:04:13,652
Mudah-mudahan, bukan karena\nSaya menunjuk pada node yang valid

12453
12:04:15,192 --> 12:04:17,012
Jadi, tentu saja, ini\ndobelum sama dengan nol.

12454
12:04:17,012 --> 12:04:19,512
Tidak akan ada lagi sampai kita sampai\nke akhir daftar.

12455
12:04:21,012 --> 12:04:22,742
Saya memulai variabel TMP ini.

12456
12:04:22,741 --> 12:04:27,752
Saya mengikuti panah dan membuka\nbidang nomor yang ada di dalamnya.

12457
12:04:28,832 --> 12:04:32,492
For-loop mengatakan,\nubah TMP menjadi apa pun

12458
12:04:32,491 --> 12:04:36,572
berada di TMP, dengan mengikuti panah\ndan mengambil kolom berikutnya.

12459
12:04:36,572 --> 12:04:39,741
Maka, hal itu menghasilkan\n

12460
12:04:39,741 --> 12:04:42,241
Tidak, tentu saja, ini tidak sama\nnull karena node kedua

12461
12:04:43,531 --> 12:04:45,402
Null masih berada di akhir.

12462
12:04:45,402 --> 12:04:47,192
Jadi saya mencetak nomor 2.

12463
12:04:47,192 --> 12:04:51,152
Langkah selanjutnya, saya memperbarui TMP sekali lagi\nkali menjadi apa pun yang berikutnya.

12464
12:04:51,152 --> 12:04:53,711
Maka, itu belum sama dengan nol.

12465
12:04:53,711 --> 12:04:55,951
Jadi saya lanjutkan dan mencetak\nout simpul nomor 3.

12466
12:04:55,951 --> 12:05:01,601
Lalu untuk terakhir kalinya, saya memperbarui TMP ke\n

12467
12:05:01,601 --> 12:05:05,461
Namun setelah 1, 2, 3,\nbidang berikutnya berikutnya adalah nol.

12468
12:05:05,461 --> 12:05:09,271
Jadi, saya keluar dari\nperulangan ini sepenuhnya.

12469
12:05:09,271 --> 12:05:12,211
Jadi jika saya melakukan ini dalam\nbentuk gambar, kita semua

12470
12:05:12,211 --> 12:05:15,781
lakukan, jika sekarang saya menggunakan jari saya\nuntuk mewakili variabel TMP.

12471
12:05:15,781 --> 12:05:19,561
Saya menginisialisasi TMP menjadi apa pun\nlistnya, jadi ini menunjuk ke sini.

12472
12:05:19,561 --> 12:05:22,261
Itu jelas bukan null\njadi saya mencetak apa pun

12473
12:05:22,262 --> 12:05:26,582
apakah itu TMP, ikuti nomor panah\nin, dan saya mencetaknya.

12474
12:05:26,582 --> 12:05:28,772
Lalu saya perbarui TMP untuk menunjuk ke sini.

12475
12:05:28,771 --> 12:05:30,558
Lalu saya perbarui TMP untuk menunjuk ke sini.

12476
12:05:30,559 --> 12:05:31,891
Lalu saya perbarui TMP untuk menunjuk ke sini.

12477
12:05:34,961 --> 12:05:39,152
Jadi, sekali lagi, memang jauh lebih samar\n

12478
12:05:40,091 --> 12:05:46,336
Tapi itu hanya pemanfaatan sintaks for-loop yang berbeda.

12479
12:05:46,836 --> 12:05:50,622
HADIRIN: Bagaimana hal itu bisa terjadi\n

12480
12:05:50,622 --> 12:05:52,500
Karena menurut saya alamat-

12481
12:05:53,542 --> 12:05:56,542
Bagaimana sebenarnya saya mencetak\n

12482
12:05:57,921 --> 12:05:59,601
Kompiler membantu saya di sini.

12483
12:05:59,601 --> 12:06:02,211
Karena saya mengajarkannya, di\nawal program saya

12484
12:06:05,211 --> 12:06:08,991
Kompiler mengetahui bahwa sebuah node memiliki\n

12485
12:06:10,911 --> 12:06:16,891
Karena saya mengulangi menggunakan node*\n

12486
12:06:16,891 --> 12:06:19,641
kompiler mengetahui hal itu kapan saja\nsaya menunjuk pada sesuatu

12487
12:06:19,641 --> 12:06:21,421
Saya menunjuk ke seluruh simpul.

12488
12:06:21,421 --> 12:06:24,502
Tidak masalah secara spesifik di mana\n

12489
12:06:24,502 --> 12:06:26,692
Pada akhirnya, ini menunjuk\nat keseluruhan node itu sendiri.

12490
12:06:26,692 --> 12:06:30,802
Dan fakta bahwa saya menggunakan\nnomor panah TMP berarti, OK

12491
12:06:30,802 --> 12:06:31,972
sesuaikan jari Anda sedikit.

12492
12:06:31,972 --> 12:06:35,991
Jadi Anda benar-benar menunjuk ke\n

12493
12:06:35,991 --> 12:06:40,402
Jadi itu informasi yang cukup untuk\n

12494
12:06:41,042 --> 12:06:44,211
Pertanyaan lain kemudian\non pendekatan ini di sini.

12495
12:06:46,762 --> 12:06:51,322
SPEAKER 1: Bagaimana cara menggunakan for-loop\n

12496
12:06:51,322 --> 12:06:56,122
Anda akan melakukan sesuatu seperti ini,\njika boleh, di kumpulan soal 5.

12497
12:06:56,122 --> 12:06:59,211
Kami akan memberi Anda beberapa\nscaffolding untuk melakukan hal ini.

12498
12:06:59,211 --> 12:07:02,182
Namun dalam beberapa minggu mendatang, materi\nakan kami pandu Anda untuk mencapai hal tersebut.

12499
12:07:02,182 --> 12:07:04,775
Tapi izinkan saya tidak merusaknya dulu.

12500
12:07:06,192 --> 12:07:08,559
HADIRIN: Jadi saya punya\npertanyaan tentang baris 49.

12501
12:07:09,141 --> 12:07:11,159
AUDIENCE: Apakah baris 49\nmungkin di baris 43?

12502
12:07:12,201 --> 12:07:15,381
Apakah baris 49 dapat diterima, meskipun\nkita sudah membebaskannya lebih awal.

12503
12:07:15,381 --> 12:07:18,081
Kami tidak mengosongkannya di baris\n43, dalam hal ini, kan.

12504
12:07:18,082 --> 12:07:22,281
Anda hanya dapat mencapai baris 49,\njika n tidak sama dengan nol.

12505
12:07:22,281 --> 12:07:24,472
Dan Anda tidak kembali pada jalur 45.

12506
12:07:25,341 --> 12:07:29,661
Saya hanya melakukan pembebasan itu, jika saya\n

12507
12:07:32,512 --> 12:07:33,887
HADIRIN: Saya punya pertanyaan singkat.

12508
12:07:36,862 --> 12:07:40,131
PEMBICARA 1: Benar Anda bertanya\n

12509
12:07:40,131 --> 12:07:41,839
apakah itu berarti Anda\ntidak perlu mengosongkannya?

12510
12:07:41,839 --> 12:07:44,241
Anda tidak perlu memberikan petunjuk gratis.

12511
12:07:44,241 --> 12:07:49,042
Anda sebaiknya hanya mengosongkan alamat itu\n

12512
12:07:49,042 --> 12:07:51,412
Jadi saya belum menyelesaikan\nprogramnya, jujur saja.

12513
12:07:51,411 --> 12:07:53,361
Tapi Anda tidak membebaskan variabel.

12514
12:07:53,362 --> 12:07:55,222
Anda tidak membebaskan seperti, ladang.

12515
12:07:55,222 --> 12:07:58,351
Anda membebaskan\nalamat tertentu, apa pun itu.

12516
12:07:58,351 --> 12:08:01,252
Jadi hal terakhir, dan saya\nbertahan untuk menunjukkan ini

12517
12:08:01,252 --> 12:08:02,932
karena itu juga agak samar.

12518
12:08:02,932 --> 12:08:06,052
Inilah cara Anda dapat membebaskan,\nsekarang, seluruh daftar tertaut.

12519
12:08:06,052 --> 12:08:08,724
Dalam dunia array,\ningatlah, hal itu sangat mudah.

12520
12:08:09,682 --> 12:08:11,402
Anda mengembalikan 0 dan selesai.

12521
12:08:12,622 --> 12:08:14,482
Sebab, sekali lagi,\nkomputer tidak mengetahuinya

12522
12:08:14,482 --> 12:08:17,182
apa yang telah Anda gabungkan\menggunakan semua petunjuk ini

12523
12:08:17,182 --> 12:08:18,622
seluruh memori komputer.

12524
12:08:18,622 --> 12:08:20,662
Anda harus mengikuti panah itu.

12525
12:08:20,661 --> 12:08:23,401
Jadi salah satu cara untuk melakukan ini\nadalah sebagai berikut.

12526
12:08:23,402 --> 12:08:28,402
Meskipun daftarnya sendiri bukan nol,\n

12527
12:08:29,722 --> 12:08:32,454
Saya akan memberi diri saya\nvariabel sementara bernama TMP lagi.

12528
12:08:32,453 --> 12:08:34,911
Dan ini merupakan TMP yang berbeda karena\ni berada dalam cakupan yang berbeda.

12529
12:08:34,911 --> 12:08:38,691
Itu ada di dalam loop while\n

12530
12:08:38,692 --> 12:08:44,122
Saya akan menginisialisasi TMP menjadi\nmenjadi alamat node berikutnya.

12531
12:08:44,122 --> 12:08:46,641
Supaya saya bisa selangkah lebih maju.

12532
12:08:47,932 --> 12:08:51,811
Karena sekarang, saya dapat dengan berani\nmembebaskan daftar itu sendiri

12533
12:08:51,811 --> 12:08:53,451
yang tidak berarti keseluruhan daftar.

12534
12:08:53,451 --> 12:08:56,151
Sekali lagi, saya membebaskan\nalamat dalam daftar, yang mana

12535
12:08:56,152 --> 12:08:58,891
adalah alamat node nomor 1.

12536
12:08:59,872 --> 12:09:02,461
Itu hanya alamat\ndari node nomor 1.

12537
12:09:02,461 --> 12:09:05,362
Jadi kalau saya pertama kali menggunakan TMP\nuntuk menunjukkan nomornya

12538
12:09:05,362 --> 12:09:10,792
2 agak di tengah-tengah gambar,\n

12539
12:09:10,792 --> 12:09:12,772
saat ini, ke daftar gratis.

12540
12:09:12,771 --> 12:09:15,351
Itu adalah alamat node pertama.

12541
12:09:15,351 --> 12:09:19,641
Sekarang saya akan bilang, oke, sekali saja\n

12542
12:09:19,641 --> 12:09:24,561
Saya dapat memperbarui daftar\nya sendiri menjadi TMP.

12543
12:09:27,932 --> 12:09:33,622
Jika Anda memikirkan gambar ini, TMP\n

12544
12:09:35,031 --> 12:09:38,421
Jadi TMP, diwakili oleh tangan kanan saya\n

12545
12:09:38,421 --> 12:09:43,011
Benar-benar aman dan masuk akal untuk\nmembebaskan sekarang daftar itu sendiri alias.

12546
12:09:43,012 --> 12:09:44,632
alamat node nomor 1.

12547
12:09:44,631 --> 12:09:47,362
Itu mempunyai efek\nmembuang simpul nomor 1 saja

12548
12:09:47,362 --> 12:09:50,152
memberi tahu komputer bahwa Anda dapat\nmenggunakan kembali memori itu untuk Anda.

12549
12:09:50,152 --> 12:09:53,632
Baris kode terakhir yang saya tulis\n

12550
12:09:53,631 --> 12:09:58,042
2, pada saat itulah perulangan saya dilanjutkan\n

12551
12:09:58,042 --> 12:10:01,072
Dan hanya sekali jari saya\nbenar-benar tidak menunjuk ke mana pun

12552
12:10:01,072 --> 12:10:03,832
simbol nol, akan\nmengulang, secara alami untuk beberapa saat

12553
12:10:03,832 --> 12:10:06,472
loop saat saya akan beralih kembali ke, keluar.

12554
12:10:06,472 --> 12:10:09,112
Dan tidak ada lagi yang bisa dibebaskan.

12555
12:10:09,112 --> 12:10:12,171
Jadi sekali lagi, apa yang akan Anda lihat,\nakhirnya, di kumpulan soal 5

12556
12:10:12,171 --> 12:10:16,171
lebih lanjut tentang itu nanti, adalah sebuah peluang\n

12557
12:10:17,211 --> 12:10:20,061
Tapi sekali lagi, meskipun sintaksnya\nis memang cukup samar

12558
12:10:20,061 --> 12:10:23,781
kami masih menggunakan dasar-dasar seperti\nperulangan for atau perulangan while ini.

12559
12:10:23,781 --> 12:10:27,442
Kami baru saja mulai\nmengikuti alamat eksplisit

12560
12:10:27,442 --> 12:10:31,222
daripada membiarkan komputer melakukan\nsemua aritmatika untuk kita

12561
12:10:31,222 --> 12:10:33,116
seperti yang sebelumnya kita manfaatkan.

12562
12:10:33,116 --> 12:10:36,241
Pada akhir dari semua ini, saya\n

12563
12:10:36,241 --> 12:10:39,722
Dan menurutku, kita siap berangkat.

12564
12:10:40,222 --> 12:10:43,442
Pertanyaan tentang kode daftar tertaut ini sekarang?

12565
12:10:43,442 --> 12:10:46,192
Dan sekali lagi, kita akan membahasnya\n

12566
12:10:46,692 --> 12:10:51,095
HADIRIN: Bisakah Anda menjelaskannya\n

12567
12:10:51,762 --> 12:10:55,432
Bisakah kami menjelaskan perulangan while\ndi sini untuk mengosongkan daftar.

12568
12:10:55,432 --> 12:10:58,061
Jadi perhatikan bahwa, pertama, saya hanya\mengajukan pertanyaan yang sudah jelas.

12569
12:10:58,902 --> 12:11:02,872
Karena jika ya,\ntidak ada pekerjaan yang harus diselesaikan.

12570
12:11:02,872 --> 12:11:06,942
Namun, sementara daftarnya tidak\nnull, menurut baris 58

12571
12:11:08,021 --> 12:11:12,401
Saya ingin membuat variabel sementara\n

12572
12:11:12,402 --> 12:11:15,022
panah daftar berikutnya menunjuk ke sana.

12573
12:11:17,741 --> 12:11:21,171
Daftar panah berikutnya adalah apa saja\nyang ada di sini.

12574
12:11:21,171 --> 12:11:23,951
Jadi jika tangan kanan saya mewakili\nvariabel sementara

12575
12:11:23,951 --> 12:11:27,951
Saya benar-benar menunjuk pada hal yang\nsama dengan daftar itu sendiri.

12576
12:11:27,951 --> 12:11:31,121
Baris kode berikutnya,\ningat, adalah daftar bebas.

12577
12:11:31,122 --> 12:11:33,882
Dan tidak seperti, di dunia\narasi kita, sekitar setengah jam

12578
12:11:33,881 --> 12:11:36,581
lalu yang berarti\nmembebaskan seluruh daftar sialan itu

12579
12:11:36,582 --> 12:11:41,171
Anda sekarang telah mengambil alih kendali atas\n

12580
12:11:41,171 --> 12:11:43,031
dengan cara yang tidak Anda lakukan dengan array.

12581
12:11:43,031 --> 12:11:46,332
Komputer mengetahui cara membebaskan\nseluruh array karena Anda

12582
12:11:46,332 --> 12:11:48,162
malloc semuanya sekaligus.

12583
12:11:48,161 --> 12:11:52,061
Anda sekarang melakukan mallocing pada\ndaftar tertaut satu node dalam satu waktu.

12584
12:11:52,061 --> 12:11:54,911
Dan sistem operasi\ntidak memantaunya untuk Anda

12585
12:11:56,292 --> 12:11:59,952
Jadi ketika Anda membuat daftar bebas,\nAnda benar-benar bebas

12586
12:11:59,951 --> 12:12:03,911
nilai variabel daftar,\n

12587
12:12:03,911 --> 12:12:07,301
Lalu baris kode terakhir saya, yang akan saya\n

12588
12:12:07,302 --> 12:12:11,982
list untuk sekarang mengabaikan\nmemori bebas dan menunjuk ke 2.

12589
12:12:14,561 --> 12:12:17,981
Jadi, sekali lagi, ini hanya\ncara penggunaan yang sangat berlebihan

12590
12:12:17,982 --> 12:12:21,942
sintaks notasi bintang baru ini,\n

12591
12:12:21,942 --> 12:12:25,902
untuk melakukan hal yang sama dengan berjalan\nturun semua panah ini.

12592
12:12:25,902 --> 12:12:28,122
Mengikuti semua remah roti ini.

12593
12:12:28,122 --> 12:12:31,422
Namun memang perlu\nmembiasakan diri.

12594
12:12:31,421 --> 12:12:33,926
Sintaksnya, Anda hanya perlu melakukannya satu minggu.

12595
12:12:33,927 --> 12:12:35,802
Tapi, sekali lagi, minggu depan\nin Python akan kita mulai

12596
12:12:35,802 --> 12:12:37,632
untuk mengabstraksikan banyak\nkerumitan ini.

12597
12:12:37,631 --> 12:12:39,502
Namun semua\nkerumitan ini tidak akan hilang.

12598
12:12:39,502 --> 12:12:42,252
Hanya saja orang lain,\npenulis Python misalnya

12599
12:12:42,252 --> 12:12:44,389
akan mengotomatiskan hal ini untuk kami.

12600
12:12:44,389 --> 12:12:46,182
Sasaran minggu ini adalah\nmemahami apa itu

12601
12:12:46,182 --> 12:12:49,461
apakah kita akan mendapatkannya secara\ngratis, bisa dikatakan, minggu depan.

12602
12:12:49,961 --> 12:12:54,292
Pertanyaan tentang daftar panjang ini.

12603
12:12:55,932 --> 12:12:58,745
AUDIENCE: Begitu juga dengan while\nloop yang benar-benar diperlukan

12604
12:12:58,745 --> 12:13:00,209
untuk pembebasan [Tak terdengar].

12605
12:13:01,252 --> 12:13:03,834
Izinkan saya meringkasnya sebagai, bisakah kita\nmembebaskannya dengan for-loop?

12606
12:13:04,760 --> 12:13:06,112
Ini hanya masalah gaya.

12607
12:13:06,112 --> 12:13:09,152
Melakukannya sedikit lebih elegan\n

12608
12:13:09,152 --> 12:13:11,154
Namun orang lain akan\ntidak setuju.

12609
12:13:11,154 --> 12:13:13,862
Apa pun yang dapat Anda lakukan untuk sementara waktu\n

12610
12:13:14,872 --> 12:13:17,211
Lakukan perulangan while, ingat,\nsedikit berbeda.

12611
12:13:17,211 --> 12:13:19,853
Namun mereka akan selalu\melakukan setidaknya satu hal.

12612
12:13:19,853 --> 12:13:22,311
Namun perulangan for dan perulangan while\nberperilaku sama dalam kasus ini.

12613
12:13:25,482 --> 12:13:27,881
Baiklah, mari kita\nvariasi sedikit di sini.

12614
12:13:27,881 --> 12:13:29,963
Sekadar untuk melihat\njebakan apa saja yang mungkin terjadi saat ini

12615
12:13:29,963 --> 12:13:31,722
tanpa masuk ke dalam gulma kode.

12616
12:13:31,722 --> 12:13:35,711
Memang benar, kami akan mencoba menyelamatkan sebagian\n

12617
12:13:35,711 --> 12:13:40,002
Namun sebaliknya, bayangkan saja kita\n

12618
12:13:40,002 --> 12:13:43,182
Saya bisa menawarkan, sebagai imbalan atas\nbeberapa sukarelawan, beberapa jari berbusa

12619
12:13:43,182 --> 12:13:45,099
untuk dibawa ke pertandingan berikutnya, mungkin.

12620
12:13:45,099 --> 12:13:46,932
Bisakah kita mendapatkan\ntidak ada sukarelawan terlebih dahulu?

12621
12:13:47,591 --> 12:13:50,591
Anda akan menjadi\ndaftar tertaut kami sejak awal.

12622
12:13:52,061 --> 12:13:54,322
PEMBICARA 1: Pedro, ayo naik.

12623
12:13:54,322 --> 12:13:55,572
Baiklah, terima kasih kepada Pedro.

12624
12:13:58,661 --> 12:14:00,661
Dan jika Anda ingin\nberdiri secara kasar di sini.

12625
12:14:00,661 --> 12:14:03,210
Tapi Anda adalah penunjuk nol jadi\ntunjukkan saja ke tanah

12626
12:14:03,211 --> 12:14:04,412
seolah-olah Anda menunjuk ke 0.

12627
12:14:04,911 --> 12:14:07,508
Jadi Pedro adalah daftar tertaut kami\noukuran 0, yang berbentuk gambar

12628
12:14:07,508 --> 12:14:10,800
mungkin terlihat seperti ini\n

12629
12:14:10,800 --> 12:14:15,481
Sekarang anggaplah kita ingin melanjutkan\n

12630
12:14:15,482 --> 12:14:17,682
Bisakah kami meminta sukarelawan\nmelihat kamera di sini?

12631
12:14:18,182 --> 12:14:19,349
Kamu melompat dari tempat dudukmu.

12632
12:14:21,889 --> 12:14:23,682
Oke, Anda benar-benar menginginkan\njari busa, kataku.

12633
12:14:36,752 --> 12:14:39,271
Jadi inilah nomor Anda\n2 untuk bidang nomor Anda.

12634
12:14:40,502 --> 12:14:43,597
Dan ayolah, katakanlah begitu\n

12635
12:14:44,222 --> 12:14:46,961
Jadi Caleb kena malloced,\nkalau mau, ke sini.

12636
12:14:46,961 --> 12:14:51,286
Jadi sekarang jika kita ingin memasukkan Caleb dan\n

12637
12:14:51,286 --> 12:14:52,411
baiklah apa yang perlu kita lakukan?

12638
12:14:52,411 --> 12:14:53,822
Saya sudah menginisialisasi Anda ke 2.

12639
12:14:53,822 --> 12:14:55,802
Dan menunjuk saat Anda mendekati tanah artinya

12640
12:14:55,802 --> 12:14:58,112
Anda diinisialisasi ke\nnull untuk bidang berikutnya.

12641
12:14:58,112 --> 12:14:59,881
Pedro, apa yang seharusnya kamu lakukan-- sempurna.

12642
12:15:02,101 --> 12:15:03,676
Jadi Pedro sekarang menunjuk pada daftarnya.

12643
12:15:03,677 --> 12:15:05,802
Jadi sekarang daftar kita terlihat\nseperti ini.

12644
12:15:07,652 --> 12:15:10,152
Jadi beberapa hal pertama\nakan cukup mudah.

12645
12:15:10,152 --> 12:15:13,662
Mari masukkan satu lagi, jika ada\n

12646
12:15:13,661 --> 12:15:15,161
Di sini, bagaimana kalau tepat di tengah.

12647
12:15:16,351 --> 12:15:19,159
Dan sebagai antisipasi saja, bagaimana\nkalau kita cari orang lain.

12648
12:15:19,160 --> 12:15:20,702
Oke, temanmu menunjuk ke arahmu.

12649
12:15:20,701 --> 12:15:22,831
Apakah Anda ingin turun\nlebih dahulu juga?

12650
12:15:22,832 --> 12:15:25,334
Ini adalah kumpulan kenangan, jika Anda mau.

12651
12:15:30,661 --> 12:15:32,291
Dan bertahanlah di sana sebentar.

12652
12:15:32,792 --> 12:15:34,351
Jadi kita baru saja melakukan malloced pada Hannah.

12653
12:15:34,351 --> 12:15:37,621
Dan Hannah, bagaimana dengan Hannah,\nmisalkan Anda berakhir di sana

12654
12:15:37,622 --> 12:15:39,282
hanya di beberapa lokasi acak.

12655
12:15:39,781 --> 12:15:43,442
Jadi apa yang harus kita lakukan sekarang, jika\n

12656
12:15:44,042 --> 12:15:46,020
Jadi Pedro, apakah Anda harus\nmengupdate diri sendiri?

12657
12:15:47,391 --> 12:15:48,781
Caleb, apa yang harus kamu lakukan?

12658
12:15:49,281 --> 12:15:52,173
Dan Hannah, apa yang harus kamu lakukan?

12659
12:15:52,173 --> 12:15:55,381
Ya, itu hanya untukmu untuk saat ini, jadi\n

12660
12:15:55,881 --> 12:15:58,771
Jadi, sekali lagi tunjukkan faktanya\n

12661
12:15:58,771 --> 12:16:01,291
kami memiliki susunan yang bagus dan bersih\nkembali, ke belakang, ke belakang

12662
12:16:01,292 --> 12:16:03,862
secara bersamaan, orang-orang ini\nsengaja berada di mana-mana.

12663
12:16:10,921 --> 12:16:12,737
Dan pilih tempat favorit Anda dalam memori.

12664
12:16:16,802 --> 12:16:19,030
Jadi Jonathan sekarang ada di sana.

12665
12:16:20,072 --> 12:16:21,929
Jadi 5, kami ingin menunjuk\nHannah di nomor 5.

12666
12:16:21,928 --> 12:16:23,761
Jadi, tentu saja Anda\nakan menunjuk ke sana.

12667
12:16:23,762 --> 12:16:25,137
Dan di mana Anda harus menunjuk?

12668
12:16:25,137 --> 12:16:26,982
Turun untuk mewakili nol juga.

12669
12:16:29,035 --> 12:16:30,702
Tapi sekarang segalanya menjadi sedikit menarik.

12670
12:16:30,701 --> 12:16:33,481
Dan di sini, kita akan menggunakan peluang\nto, tanpa kode yang rumit

12671
12:16:33,482 --> 12:16:36,572
tunjukkan betapa pentingnya urutan operasi\n.

12672
12:16:36,572 --> 12:16:40,802
Misalkan saya selanjutnya ingin\nmengalokasikan katakanlah, nomor 1.

12673
12:16:40,802 --> 12:16:42,992
Dan saya ingin memasukkan\nnomor 1 ke dalam daftar ini.

12674
12:16:43,491 --> 12:16:45,101
Seperti inilah tampilan kodenya.

12675
12:16:45,101 --> 12:16:48,661
Namun jika kita bertindak seperti ini-- bisakah\nkita mendapatkan satu sukarelawan lagi?

12676
12:16:48,661 --> 12:16:50,471
Bagaimana kalau di bagian akhir\ndi dalam sweter.

12677
12:17:01,457 --> 12:17:03,332
Dan bagaimana, Lauren,\nkenapa kamu tidak langsung saja

12678
12:17:03,332 --> 12:17:04,952
di sini di depan, jika Anda tidak keberatan.

12679
12:17:07,262 --> 12:17:09,332
Jadi saya telah menginisialisasi\nLauren ke nomor 1.

12680
12:17:09,332 --> 12:17:11,942
Dan penunjuk Anda akan\nnull, menunjuk ke tanah.

12681
12:17:11,942 --> 12:17:14,485
Di manakah tempat Anda jika kami\nmempertahankan urutan yang terurut?

12682
12:17:14,485 --> 12:17:15,902
Sepertinya tepat di awal.

12683
12:17:18,902 --> 12:17:23,582
Jadi Pedro sekarang bermaksud\nmenunjuk Lauren.

12684
12:17:23,582 --> 12:17:27,812
Tapi bagaimana Anda tahu ke mana harus menunjuk?

12685
12:17:28,982 --> 12:17:30,882
PEMBICARA 1: Pedro membatalkan\napa yang dia lakukan beberapa saat yang lalu.

12686
12:17:31,862 --> 12:17:35,232
Dan itu sempurna bagi Pedro\n

12687
12:17:35,732 --> 12:17:39,432
Anda benar-benar baru saja menjadi yatim piatu semua ini\n

12688
12:17:39,932 --> 12:17:44,281
Karena jika Pedro adalah satu-satunya variabel kita\n

12689
12:17:44,281 --> 12:17:47,281
inilah bahayanya menggunakan pointer,\n

12690
12:17:47,281 --> 12:17:48,661
dan membangun struktur data Anda sendiri.

12691
12:17:48,661 --> 12:17:50,619
Saat Anda menunjuk\nsementara, jika Anda bisa

12692
12:17:50,620 --> 12:17:53,972
pada Lauren, aku tidak tahu\ndia menunjuk ke mana.

12693
12:17:53,972 --> 12:17:58,741
Aku tidak tahu bagaimana cara kembali ke Caleb,\n

12694
12:18:01,771 --> 12:18:03,781
Saya pikir kita perlu Lauren\nmengambil keputusan terlebih dahulu.

12695
12:18:05,131 --> 12:18:06,301
PEMBICARA 1 : Jadi sambil menunjuk Caleb.

12696
12:18:06,601 --> 12:18:09,184
Karena Anda menunjuk\nyang sebenarnya ditunjuk Pedro.

12697
12:18:09,184 --> 12:18:10,971
Pedro, sekarang apa yang bisa kamu lakukan dengan aman?

12698
12:18:11,472 --> 12:18:13,211
Jadi urutan operasi di sana penting.

12699
12:18:13,211 --> 12:18:17,311
Dan jika kita baru saja melakukan baris ini\n

12700
12:18:17,311 --> 12:18:20,222
Itu seperti naluri pertama Pedro, hal buruk terjadi.

12701
12:18:20,222 --> 12:18:22,182
Dan kami menjadi yatim piatu bagi sisa daftarnya.

12702
12:18:22,182 --> 12:18:25,832
Namun jika kita memikirkannya secara logis dan\n

12703
12:18:25,832 --> 12:18:29,322
kami sekarang telah memperbarui daftarnya agar terlihat\n

12704
12:18:30,391 --> 12:18:32,966
Kami punya satu jari busa lagi\ndi sini untuk nomor 3.

12705
12:18:49,216 --> 12:18:52,851
Jika Anda ingin pergi mungkin di tengah\n

12706
12:18:52,851 --> 12:18:56,752
Jadi di sini juga, tujuannya adalah\nmenjaga ketertiban.

12707
12:18:56,752 --> 12:19:01,881
Jadi mari kita bertanya kepada penonton, siapa atau apa\n

12708
12:19:01,881 --> 12:19:04,391
Jadi kita tidak mengacaukan dan\menghilangkan sebagian memori.

12709
12:19:04,391 --> 12:19:07,722
Dan jika kita melakukan memori yatim piatu, ini adalah\n

12710
12:19:08,591 --> 12:19:10,901
Mac Anda, PC Anda,\nponsel Anda mungkin mulai melambat

12711
12:19:10,902 --> 12:19:14,092
jika Anda terus meminta memori tetapi\n

12712
12:19:14,091 --> 12:19:15,911
Jadi kami ingin memperbaikinya.

12713
12:19:20,502 --> 12:19:22,182
PEMBICARA 1: 3 harusnya menunjuk ke 4.

12714
12:19:22,182 --> 12:19:25,572
Jadi 3, maukah Anda menunjuk ke 4.

12715
12:19:27,281 --> 12:19:32,442
Dan bagaimana Anda tahu,\nMiriam, siapa yang harus ditunjuk?

12716
12:19:36,131 --> 12:19:39,701
Karena jika Anda melihat di mana\ndaftar ini dibuat

12717
12:19:39,701 --> 12:19:42,551
dan kamu bisa melakukan cheat di papan\ndi sini, 2 menunjuk ke 4.

12718
12:19:42,552 --> 12:19:46,122
Jika Anda menunjuk pada siapa pun yang ditunjuk oleh Kaleb,\nnomor 2

12719
12:19:46,122 --> 12:19:48,942
itu, memang, membawamu\nke Hannah untuk nomor 4.

12720
12:19:48,942 --> 12:19:53,082
Jadi sekarang apa langkah selanjutnya\nuntuk menyatukannya?

12721
12:19:57,792 --> 12:20:00,385
Jadi Caleb, menurutku sekarang\naman bagimu untuk berpisah.

12722
12:20:00,385 --> 12:20:02,302
Karena seseorang sudah\nmenunjuk ke arah Hannah.

12723
12:20:02,302 --> 12:20:03,427
Kami belum menjadi yatim piatu bagi siapa pun.

12724
12:20:03,427 --> 12:20:05,322
Jadi sekarang, jika kita mengikuti\nremah roti, kita sudah melakukannya

12725
12:20:05,322 --> 12:20:10,351
membuat Pedro memimpin ke 1,\nke 2, ke 3, ke 4, ke 5.

12726
12:20:10,351 --> 12:20:12,851
Kami memerlukan nomornya kembali, tapi\nAnda tetap dapat menggunakan jari busa tersebut.

12727
12:20:12,851 --> 12:20:15,019
Terima kasih kepada relawan kami di sini.

12728
12:20:17,741 --> 12:20:20,739
PEMBICARA 1: Anda tinggal\nmemasukkan angkanya di sini.

12729
12:20:21,572 --> 12:20:22,739
PEMBICARA 1 : Terima kasih semuanya.

12730
12:20:22,739 --> 12:20:26,682
Jadi ini hanya untuk mengatakan bahwa ketika Anda\n

12731
12:20:26,682 --> 12:20:29,245
dan dalam kumpulan soal,\nakan sangat mudah untuk kalah

12732
12:20:29,245 --> 12:20:30,662
pemandangan hutan untuk pepohonan.

12733
12:20:30,661 --> 12:20:32,701
Karena kodenya menjadi sangat padat.

12734
12:20:32,701 --> 12:20:37,721
Namun idenya adalah, sekali lagi, benar-benar membuat gelembung\n

12735
12:20:37,722 --> 12:20:40,781
Dan jika Anda berpikir tentang struktur\ndata pada tingkat ini.

12736
12:20:40,781 --> 12:20:42,898
Jika Anda mengikuti program\nsetelah kelas seperti CS50

12737
12:20:42,898 --> 12:20:45,481
dan Anda menulis sesuatu di papan tulis\ndengan teman atau kolega

12738
12:20:45,482 --> 12:20:48,512
kebanyakan orang berpikir\ndan berbicara pada tingkat ini.

12739
12:20:48,512 --> 12:20:51,031
Dan mereka berasumsi begitu,\nyeah, kalau kita kembali dan melihat

12740
12:20:51,031 --> 12:20:54,371
di buku teks atau catatan kelas kami, kami\n

12741
12:20:54,372 --> 12:20:56,222
Namun yang penting\adalah percakapan.

12742
12:20:57,601 --> 12:21:02,561
Meskipun demikian, melalui minggu ini, kami akan\n

12743
12:21:02,561 --> 12:21:06,572
Jadi ketika menganalisis\nan algoritma seperti ini

12744
12:21:06,572 --> 12:21:08,641
mari kita simak berikut ini.

12745
12:21:08,641 --> 12:21:15,961
Jam berapa saat ini\n

12746
12:21:17,582 --> 12:21:19,292
Kita sudah membicarakan tentang array sebelumnya.

12747
12:21:19,292 --> 12:21:22,292
Dan kami masih memiliki beberapa\nkemungkinan penelusuran biner, dalam waktu dekat

12748
12:21:23,131 --> 12:21:26,311
Namun begitu kita memiliki daftar tertaut,\n

12749
12:21:27,661 --> 12:21:29,369
Jadi Anda tidak bisa begitu saja\beranggapan bahwa Anda bisa

12750
12:21:29,370 --> 12:21:32,162
melompat secara hitung ke tengah\n

12751
12:21:32,982 --> 12:21:36,572
Anda cukup mengikuti semuanya\n

12752
12:21:36,572 --> 12:21:39,362
Jadi bagaimana hal itu dapat menginformasikan apa yang kita lihat?

12753
12:21:41,076 --> 12:21:43,951
Meskipun aku terus menggambar semua ini\n

12754
12:21:44,461 --> 12:21:46,254
Dan kita semua manusia\di dalam ruangan dapat melakukannya dengan mudah

12755
12:21:46,254 --> 12:21:49,842
tempat di mana angka 1 berada, di mana angka 2 berada,\n

12756
12:21:49,841 --> 12:21:54,091
sama seperti loker dan array kami,\n

12757
12:21:54,091 --> 12:21:57,991
Dan hal terpenting dalam daftar\ntertaut adalah satu-satunya alamat

12758
12:21:57,991 --> 12:22:01,891
pada dasarnya kami telah mengingatnya\n

12759
12:22:01,891 --> 12:22:05,472
Dia adalah penghubung ke semua\node lainnya.

12760
12:22:05,472 --> 12:22:07,472
Dan, pada gilirannya, setiap\norang menuju ke orang berikutnya.

12761
12:22:07,472 --> 12:22:12,132
Namun tanpa Pedro, kami akan kalah\n

12762
12:22:12,131 --> 12:22:14,432
Jadi ketika Anda memulai dengan\na daftar tertaut, jika Anda

12763
12:22:14,432 --> 12:22:18,211
ingin mencari elemen sebagai via\n

12764
12:22:18,211 --> 12:22:19,682
Mengikuti semua anak panah.

12765
12:22:19,682 --> 12:22:21,692
Mengikuti semua\npetunjuk di panggung

12766
12:22:21,692 --> 12:22:23,822
untuk sampai ke node yang dimaksud.

12767
12:22:23,822 --> 12:22:27,182
Dan hanya setelah Anda menekan null,\nAnda dapat menyimpulkan, ya, itu memang ada.

12768
12:22:28,982 --> 12:22:31,922
Jadi mengingat bahwa jika sebuah\nkomputer, pada dasarnya

12769
12:22:31,921 --> 12:22:36,451
hanya dapat melihat angka 1, atau angka\n

12770
12:22:36,451 --> 12:22:39,752
atau angka 5, satu\na sekaligus, bagaimana kita bisa

12771
12:22:39,752 --> 12:22:43,171
pikirkan tentang waktu berjalannya pencarian?

12772
12:22:43,171 --> 12:22:45,091
Dan ini memang Big O dari n.

12773
12:22:45,891 --> 12:22:48,391
Dalam kasus terburuk,\nnomor yang mungkin Anda cari

12774
12:22:49,961 --> 12:22:53,192
Jadi, tentu saja, Anda akan\n

12775
12:22:53,192 --> 12:22:55,425
Dan saya menggambar benda-benda ini\ndengan kotak-kotak di atasnya.

12776
12:22:55,425 --> 12:22:57,842
Sebab, sekali lagi, meskipun\nAnda dan saya bisa langsung melihat

12777
12:22:57,841 --> 12:23:00,091
dimana angka 5 misalnya, komputer

12778
12:23:00,091 --> 12:23:03,961
hanya dapat mengetahuinya dengan memulai\n

12779
12:23:03,961 --> 12:23:05,881
Jadi, ada juga trade-off lainnya.

12780
12:23:05,881 --> 12:23:09,511
Tampaknya, dalam semalam,\nkita kehilangan kemampuan

12781
12:23:09,512 --> 12:23:14,672
untuk melakukan algoritma yang sangat kuat dari\n

12782
12:23:15,302 --> 12:23:19,292
Karena tidak ada cara dalam\ngambar ini untuk melompat secara matematis

12783
12:23:19,292 --> 12:23:21,857
ke node tengah, kecuali\nAnda ingat lokasinya.

12784
12:23:21,857 --> 12:23:23,732
Lalu, ingat di mana\tidak ada node lain berada.

12785
12:23:23,732 --> 12:23:25,524
Dan pada saat itu,\nAnda kembali ke array.

12786
12:23:25,523 --> 12:23:29,862
Daftar tertaut, menurut desainnya, hanya\nmengingat simpul berikutnya dalam daftar.

12787
12:23:30,362 --> 12:23:32,851
Bagaimana dengan sesuatu seperti sisipan?

12788
12:23:32,851 --> 12:23:35,671
Dalam kasus terburuk,\nmungkin, berapa langkah

12789
12:23:35,671 --> 12:23:38,822
mungkinkah perlu memasukkan\nsesuatu ke dalam daftar tertaut?

12790
12:23:44,372 --> 12:23:45,713
Untungnya, itu tidak terlalu buruk.

12791
12:23:45,713 --> 12:23:46,921
Ini tidak seburuk n kuadrat.

12792
12:23:46,921 --> 12:23:49,201
Biasanya berarti\melakukan n hal, n kali.

12793
12:23:49,201 --> 12:23:53,741
Dan saya pikir kita bisa tetap berada di bawah\nitu, tapi bukan pemikiran yang buruk.

12794
12:23:55,313 --> 12:23:56,521
PEMBICARA 1: Mengapa harus n?

12795
12:23:56,521 --> 12:24:00,269
HADIRIN: Karena [TIDAK TERDENGAR].

12796
12:24:00,851 --> 12:24:03,131
Jadi untuk meringkas, Anda mengusulkan n.

12797
12:24:03,131 --> 12:24:04,994
Karena untuk menemukan ke mana\nhal itu pergi, Anda

12798
12:24:04,995 --> 12:24:06,912
harus melintasi,\nkemungkinan besar, seluruh daftar.

12799
12:24:06,911 --> 12:24:09,701
Karena kalau saya masukkan angka\n6 atau angka 99

12800
12:24:09,701 --> 12:24:12,252
yang secara numerik\nberada di bagian paling akhir

12801
12:24:12,252 --> 12:24:15,311
Saya hanya dapat menemukan lokasinya\ndengan mencari semuanya.

12802
12:24:15,311 --> 12:24:16,849
Namun, pada titik ini, dalam jangka waktu tersebut.

12803
12:24:16,849 --> 12:24:18,641
Dan sungguh, pada\nbagian cerita ini, Anda

12804
12:24:18,641 --> 12:24:22,072
harus mulai mempertanyakan hal ini\n

12805
12:24:22,072 --> 12:24:25,841
Karena jawabannya hampir\selalu bergantung, kan.

12806
12:24:25,841 --> 12:24:28,461
Jika saya baru saja mendapat tautan ke\ndaftar, tampilannya seperti ini

12807
12:24:28,461 --> 12:24:31,722
pertanyaan pertama kembali ke\nseseorang menanyakan pertanyaan ini

12808
12:24:31,722 --> 12:24:34,781
akankah, apakah daftarnya\nperlu diurutkan, bukan?

12809
12:24:34,781 --> 12:24:37,173
Saya telah menggambarnya sebagai telah diurutkan\dan itu mungkin menyiratkan hal yang sama.

12810
12:24:37,173 --> 12:24:39,131
Jadi itu adalah asumsi\yang masuk akal untuk dibuat.

12811
12:24:39,131 --> 12:24:41,801
Tetapi jika saya tidak peduli\nmempertahankan urutan yang diurutkan

12812
12:24:41,802 --> 12:24:45,672
Saya sebenarnya bisa memasukkan ke dalam\ndaftar tertaut dalam waktu yang konstan.

12813
12:24:46,211 --> 12:24:49,110
Saya bisa terus memasukkan ke\n

12814
12:24:49,902 --> 12:24:51,792
Dan meskipun\ndaftarnya semakin panjang

12815
12:24:51,792 --> 12:24:55,752
jumlah langkah yang diperlukan untuk memasukkan\n

12816
12:25:00,222 --> 12:25:02,382
Jika Anda ingin menyimpannya\ndisortir, ya, itu benar

12817
12:25:02,381 --> 12:25:03,792
memang akan menjadi Big O of n.

12818
12:25:03,792 --> 12:25:05,322
Tapi sekali lagi, asumsi-asumsi semacam ini\nsekarang

12819
12:25:05,322 --> 12:25:06,529
akan mulai penting.

12820
12:25:06,529 --> 12:25:09,222
Jadi, demi\ndiskusi, katakanlah ini adalah O Besar dari n

12821
12:25:09,222 --> 12:25:11,141
jika kita ingin mempertahankan urutan yang diurutkan.

12822
12:25:11,141 --> 12:25:14,292
Namun bagaimana jika\ntidak peduli.

12823
12:25:14,292 --> 12:25:16,110
Ini mungkin memang menjadi O Besar dari 1.

12824
12:25:16,110 --> 12:25:19,152
Dan sekarang inilah jenis keputusannya\n

12825
12:25:19,152 --> 12:25:20,682
Bagaimana dengan kasus terbaik di sini?

12826
12:25:20,682 --> 12:25:22,722
Jika kita memikirkan\nnotasi Omega Besar

12827
12:25:22,722 --> 12:25:25,114
maka, sejujurnya, kita bisa saja\ngberuntung dalam kasus terbaik.

12828
12:25:25,114 --> 12:25:27,822
Dan elemen yang kita cari\n

12829
12:25:27,822 --> 12:25:32,052
Atau, kita hanya memasukkan secara membabi buta ke\n

12830
12:25:32,052 --> 12:25:33,982
bahwa kami ingin menyimpannya.

12831
12:25:34,482 --> 12:25:39,900
Selain itu, bagaimana kami\ndapat meningkatkan lebih lanjut desain ini?

12832
12:25:39,900 --> 12:25:41,442
Kita tidak perlu berhenti pada daftar tertaut.

12833
12:25:41,442 --> 12:25:43,572
Karena sejujurnya, ini\nbukan kemenangan yang jelas.

12834
12:25:43,572 --> 12:25:46,421
Misalnya, daftar tertaut memungkinkan kita\nmenggunakan lebih banyak memori

12835
12:25:46,421 --> 12:25:49,911
karena kita tidak membutuhkan\n dalam jumlah besar

12836
12:25:50,781 --> 12:25:54,792
Namun mereka masih membutuhkan waktu\nn Besar untuk menemukan akhirnya

12837
12:25:56,112 --> 12:25:59,351
Kami menggunakan setidaknya dua kali\nbanyak memori untuk penunjuk sialan itu.

12838
12:25:59,351 --> 12:26:01,601
Jadi itu tampak seperti sebuah langkah menghindar.

12839
12:26:01,601 --> 12:26:03,582
Ini sebenarnya bukan sebuah langkah maju.

12840
12:26:05,322 --> 12:26:09,639
Di sinilah kita sekarang dapat mempercepat\n

12841
12:26:09,639 --> 12:26:11,472
meskipun Anda belum\menggunakan teknik ini

12842
12:26:11,472 --> 12:26:15,612
kami tampaknya memiliki kemampuan untuk\n

12843
12:26:16,601 --> 12:26:19,002
Dan apa pun yang dapat\dibayangkan untuk digambar dengan panah

12844
12:26:19,002 --> 12:26:21,622
Anda dapat menerapkannya,\ntampaknya, dalam kode.

12845
12:26:21,622 --> 12:26:24,102
Lalu bagaimana jika kita memanfaatkan\na dimensi kedua.

12846
12:26:24,101 --> 12:26:26,618
Daripada hanya merangkai\nberbagai hal secara menyamping

12847
12:26:26,618 --> 12:26:28,451
dari kiri ke kanan, pada dasarnya,\meskipun begitu

12848
12:26:28,451 --> 12:26:30,101
melompat-lompat di layar.

12849
12:26:30,101 --> 12:26:33,252
Bagaimana jika kita mulai memanfaatkan a\n

12850
12:26:33,252 --> 12:26:36,881
Dan buat struktur\nyang lebih menarik di memori komputer.

12851
12:26:36,881 --> 12:26:39,671
Ternyata itu\nin memori komputer

12852
12:26:39,671 --> 12:26:42,612
kita dapat membuat pohon,\nmirip dengan pohon keluarga.

12853
12:26:42,612 --> 12:26:46,362
Jika Anda pernah melihat atau menggambar sebuah keluarga\n

12854
12:26:50,442 --> 12:26:53,652
Biasanya, cabang pohon yang tumbuh terbalik

12855
12:26:53,652 --> 12:26:56,531
kalau digambar, ke bawah, bukan ke atas seperti pohon pada umumnya.

12856
12:26:56,531 --> 12:26:59,021
Tapi itu juga bisa\nterjemahkan ke dalam kode.

12857
12:26:59,021 --> 12:27:02,721
Secara khusus, mari kita lakukan sesuatu\nyang disebut pohon pencarian biner.

12858
12:27:04,601 --> 12:27:07,152
Dan yang saya maksud\nini adalah sebagai berikut.

12859
12:27:07,961 --> 12:27:10,841
Ini adalah contoh\narasi dari minggu ke-2

12860
12:27:10,841 --> 12:27:12,231
ketika kita pertama kali membicarakan hal itu.

12861
12:27:12,232 --> 12:27:13,932
Dan kami memiliki loker di atas panggung.

12862
12:27:13,932 --> 12:27:19,961
Dan ingat apa yang menyenangkan\ntentang sebuah array, jika 1, maka diurutkan.

12863
12:27:19,961 --> 12:27:23,021
Dan 2, semua angkanya\na memang bersebelahan

12864
12:27:23,021 --> 12:27:25,011
yang menurut definisi adalah array.

12865
12:27:25,012 --> 12:27:26,752
Kita hanya bisa melakukan perhitungan sederhana.

12866
12:27:26,752 --> 12:27:31,461
Misalnya, jika ada 7 elemen\n

12867
12:27:31,961 --> 12:27:34,811
3 dan 1/2, dibulatkan ke bawah\nsampai pemotongan, jadinya 3.

12868
12:27:36,161 --> 12:27:39,414
Itu memberi saya elemen tengah,\secara naratif, dalam hal ini.

12869
12:27:39,415 --> 12:27:41,832
Dan meskipun saya harus\nberhati-hati dalam membulatkan, menggunakan

12870
12:27:41,832 --> 12:27:45,912
aritmatika sederhana, saya bisa dengan cepat,\n

12871
12:27:45,911 --> 12:27:48,371
carikan untukmu bagian tengah\nbagian kiri, bagian kiri

12872
12:27:48,372 --> 12:27:49,664
dari bagian kanan, atau apa pun.

12873
12:27:49,663 --> 12:27:50,961
Itulah kekuatan array.

12874
12:27:50,961 --> 12:27:52,902
Dan itulah yang memberi kami pencarian biner.

12875
12:27:52,902 --> 12:27:54,421
Dan bagaimana cara kerja pencarian biner?

12876
12:27:54,421 --> 12:27:55,671
Ya, kami melihat bagian tengahnya.

12877
12:27:55,671 --> 12:27:57,311
Lalu, kami ke kiri atau ke kanan.

12878
12:27:57,311 --> 12:28:02,561
Lalu, kita ke kiri atau ke kanan lagi,\n

12879
12:28:02,561 --> 12:28:07,691
Bukankah lebih baik jika kita\nmempertahankan sisi positif yang baru

12880
12:28:07,692 --> 12:28:10,520
hari ini memori\nallokasi dinamis, memberikan diri kita sendiri

12881
12:28:10,519 --> 12:28:13,061
kemampuan untuk menambahkan\elemen lain, menambahkan elemen lain

12882
12:28:14,232 --> 12:28:16,782
Namun tetap mempertahankan kekuatan pencarian biner.

12883
12:28:16,781 --> 12:28:21,582
Karena log n jauh lebih baik daripada\n

12884
12:28:21,582 --> 12:28:24,461
Bahkan buku telepon\nddemonstrasikan beberapa minggu yang lalu.

12885
12:28:24,461 --> 12:28:28,491
Jadi bagaimana jika saya menggambar\ngambar yang sama dalam 2 dimensi.

12886
12:28:28,491 --> 12:28:32,441
Dan saya mempertahankan skema warnanya,\n

12887
12:28:32,442 --> 12:28:35,982
Seperti apa keadaannya sekarang?

12888
12:28:35,982 --> 12:28:38,532
Mungkin, seperti, sesuatu yang\nsekarang kita sebut node, kan.

12889
12:28:38,531 --> 12:28:42,512
Node hanyalah istilah umum\nuntuk menyimpan beberapa data.

12890
12:28:42,512 --> 12:28:45,682
Bagaimana jika data yang disimpan node\na ini adalah angka.

12891
12:28:47,211 --> 12:28:51,341
Namun bagaimana jika kita menghubungkan ini\n

12892
12:28:51,341 --> 12:28:56,711
Dengan demikian, saat ini setiap node tidak memiliki satu\npointer, melainkan sebanyak 2.

12893
12:28:56,711 --> 12:28:59,811
Mungkin 0, seperti pada daun\nat bagian bawahnya berwarna hijau.

12894
12:28:59,811 --> 12:29:02,932
Namun node lain di bagian dalam\nmungkin memiliki sebanyak 2.

12895
12:29:02,932 --> 12:29:04,732
Ibarat punya 2 anak, boleh dibilang begitu.

12896
12:29:04,732 --> 12:29:06,902
Dan memang, bahasa sehari-hari\ndi sini memang seperti itu.

12897
12:29:06,902 --> 12:29:08,812
Ini akan disebut\nakar pohon.

12898
12:29:08,811 --> 12:29:11,752
Atau ini adalah orang tua,\nsehubungan dengan anak-anak ini.

12899
12:29:11,752 --> 12:29:14,391
Yang hijau akan menjadi\ncucu, hormatilah mereka.

12900
12:29:14,391 --> 12:29:19,012
Yang hijau akan menjadi saudara\ndalam hubungan satu sama lain.

12901
12:29:19,851 --> 12:29:22,144
Jadi semua jargon yang sama\nmungkin Anda gunakan di dunia nyata

12902
12:29:22,144 --> 12:29:25,402
berlaku di dunia struktur\ndata dan pohon CS.

12903
12:29:25,402 --> 12:29:30,292
Tapi ini menarik karena menurut saya\n

12904
12:29:30,292 --> 12:29:32,781
struktur dalam memori komputer.

12905
12:29:33,322 --> 12:29:37,521
Misalkan kita mendefinisikan\na node menjadi tidak lagi adil

12906
12:29:37,521 --> 12:29:39,591
ini, nomor di kolom berikutnya.

12907
12:29:39,591 --> 12:29:42,351
Bagaimana jika kita memberi diri kita\na sedikit lebih banyak ruang di sini?

12908
12:29:42,351 --> 12:29:47,211
Dan berikan diri kita sebuah pointer bernama\n

12909
12:29:47,211 --> 12:29:49,561
Keduanya merupakan\npointer ke node struct.

12910
12:29:49,561 --> 12:29:53,511
Idenya sama seperti sebelumnya, tapi sekarang kita\n

12911
12:29:53,512 --> 12:29:56,692
seperti menunjuk ke sini dan\nke sini, bukan hanya ke sini.

12912
12:29:56,692 --> 12:29:58,762
Bukan hanya satu arah, tapi 2.

12913
12:29:58,762 --> 12:30:02,662
Jadi Anda bisa membayangkan, dalam kode, membangun\n

12914
12:30:02,661 --> 12:30:06,051
Hal ini pada dasarnya menciptakan\ndiagram ini di sini.

12915
12:30:07,732 --> 12:30:09,772
Misalkan saya ingin mencari angka 3.

12916
12:30:09,771 --> 12:30:12,322
Saya ingin mencari\nnomor 3 di pohon ini.

12917
12:30:12,322 --> 12:30:15,682
Tampaknya, sama seperti Pedro\n

12918
12:30:15,682 --> 12:30:18,572
di dunia pepohonan,\nbisa dikatakan akarnya

12919
12:30:18,572 --> 12:30:20,572
adalah awal dari struktur data Anda.

12920
12:30:20,572 --> 12:30:26,211
Anda dapat menyimpan dan mengingat keseluruhannya\n

12921
12:30:26,752 --> 12:30:29,811
Satu variabel dapat digantung\non pada keseluruhan pohon ini.

12922
12:30:29,811 --> 12:30:32,002
Jadi bagaimana cara menemukan angka 3?

12923
12:30:32,002 --> 12:30:36,141
Nah, jika saya melihat node root dan\n

12924
12:30:37,732 --> 12:30:40,052
Atau jika lebih besar\ntdari itu, saya bisa lewat sini.

12925
12:30:40,052 --> 12:30:42,232
Jadi saya mempertahankan\nproperti buku telepon itu

12926
12:30:42,232 --> 12:30:44,482
atau hanya berbagai macam array secara umum.

12927
12:30:45,802 --> 12:30:48,810
Jika saya mencari angka 3, saya dapat\npergi ke sebelah kanan angka 2 tersebut

12928
12:30:48,809 --> 12:30:50,601
karena jumlah itu\nakan lebih besar.

12929
12:30:50,601 --> 12:30:53,161
Jika saya ke kiri, ukurannya akan\nmenjadi lebih kecil.

12930
12:30:53,161 --> 12:30:55,911
Dan inilah contoh\nodari rekursi yang sebenarnya.

12931
12:30:55,911 --> 12:30:59,572
Rekursi dalam arti fisik\nmirip dengan piramida Mario.

12932
12:30:59,572 --> 12:31:01,732
Yang ditemukan secara rekursif.

12933
12:31:02,781 --> 12:31:04,731
Saya menyatakan semua ini adalah sebuah pohon.

12934
12:31:04,732 --> 12:31:08,272
Khususnya, pohon\npenelusuran biner, yang artinya setiap node

12935
12:31:08,271 --> 12:31:11,361
memiliki 2, atau mungkin 1, atau mungkin 0 anak.

12936
12:31:14,211 --> 12:31:19,641
Dan setiap kiri\n

12937
12:31:19,641 --> 12:31:22,612
Dan setiap anak kanan\nlebih besar dari akarnya.

12938
12:31:22,612 --> 12:31:25,582
Definisi tersebut tentu saja\nberlaku untuk 2, 4, dan 6.

12939
12:31:25,582 --> 12:31:30,412
Namun ini juga berfungsi secara rekursif untuk\n

12940
12:31:30,411 --> 12:31:32,391
Perhatikan, jika Anda menganggap\nini sebagai akarnya

12941
12:31:32,391 --> 12:31:34,461
memang lebih besar\ntdari anak kiri ini.

12942
12:31:34,461 --> 12:31:36,561
Dan itu lebih kecil dari anak kanan ini.

12943
12:31:36,561 --> 12:31:39,081
Dan jika Anda melihat\ndaunnya saja.

12944
12:31:40,491 --> 12:31:44,169
Node akar ini lebih besar dari\nit anak kirinya, jika ada.

12945
12:31:44,169 --> 12:31:45,502
Jadi itu adalah pernyataan yang tidak ada artinya.

12946
12:31:45,502 --> 12:31:47,692
Dan itu kurang dari anak kanannya.

12947
12:31:47,692 --> 12:31:50,482
Atau tidak lebih besar dari itu, tentu saja,\njadi itu juga tidak ada artinya.

12948
12:31:50,482 --> 12:31:54,242
Jadi kami tidak melanggar definisi\n

12949
12:31:54,241 --> 12:31:57,711
Jadi, sekarang, berapa banyak langkah yang diperlukan\n

12950
12:31:57,711 --> 12:32:02,061
nomor apa saja di pohon\npencarian biner?

12951
12:32:04,012 --> 12:32:05,882
Dan tinggi\nbenda ini sebenarnya adalah 3.

12952
12:32:05,881 --> 12:32:08,631
Dan singkat cerita, khususnya,\n

12953
12:32:08,631 --> 12:32:10,792
dengan logaritma Anda dari kemarin.

12954
12:32:10,792 --> 12:32:14,601
Basis log 2 adalah berapa kali Anda\n

12955
12:32:14,601 --> 12:32:16,341
dan setengahnya, sampai Anda turun ke 1.

12956
12:32:16,341 --> 12:32:19,309
Ini seperti logaritma\n arah sebaliknya.

12957
12:32:19,309 --> 12:32:20,601
Berikut banyak sekali elemennya.

12958
12:32:20,601 --> 12:32:22,972
Dan kami sedang melakukan, kami\nmelakukannya hingga turun ke angka 1.

12959
12:32:22,972 --> 12:32:27,125
Jadi tinggi pohon ini, bisa dikatakan, adalah basis log 2 dari n.

12960
12:32:27,125 --> 12:32:30,292
Artinya, bahkan dalam kasus terburuk sekalipun,\n

12961
12:32:30,292 --> 12:32:32,167
semuanya berada di\nbawah dedaunan.

12962
12:32:32,811 --> 12:32:37,701
Ini akan membutuhkan basis log 2\nof n langkah, atau log n langkah

12963
12:32:37,701 --> 12:32:41,311
untuk menemukan, secara maksimal, semua\tidak satu pun dari angka-angka tersebut.

12964
12:32:41,311 --> 12:32:46,101
Jadi, sekali lagi, pencarian biner telah kembali.

12965
12:32:46,101 --> 12:32:48,116
Tapi kita sudah membayar harganya, kan.

12966
12:32:48,116 --> 12:32:49,491
Ini bukan daftar tertaut lagi.

12967
12:32:50,673 --> 12:32:53,631
Namun kami telah mendapatkan kembali penelusuran biner,\n

12968
12:32:53,631 --> 12:32:56,256
Di situlah seluruh kelas\nmulai membuat perbedaan tersebut.

12969
12:32:56,256 --> 12:33:01,502
Namun berapa harga yang harus kita bayar untuk mempertahankannya\n

12970
12:33:04,552 --> 12:33:06,532
Ini tidak lagi diurutkan\nkiri ke kanan, tapi ini

12971
12:33:06,531 --> 12:33:09,502
adalah klaim yang diurutkan, menurut\n

12972
12:33:09,502 --> 12:33:13,491
Dimana, sekali lagi, anak kiri\nlebih kecil dari akar.

12973
12:33:13,491 --> 12:33:15,921
Dan anak yang tepat lebih besar dari pada akar.

12974
12:33:15,921 --> 12:33:19,341
Jadi sudah diurutkan, tapi sudah diurutkan di\n

12975
12:33:22,741 --> 12:33:24,152
AUDIENCE: node [Tak terdengar] sekarang.

12976
12:33:24,944 --> 12:33:29,312
Setiap node sekarang tidak memerlukan satu\nangka, namun 2, 3 data.

12977
12:33:31,112 --> 12:33:32,866
Jadi, sekali lagi, ada trade off lagi.

12978
12:33:32,866 --> 12:33:34,741
Nah, jika Anda ingin\nmenghemat waktu, Anda sudah melakukannya

12979
12:33:34,741 --> 12:33:37,561
harus memberikan sesuatu jika\nAnda mulai memberi ruang.

12980
12:33:37,561 --> 12:33:40,028
Dan Anda mulai menggunakan lebih banyak\nruang, Anda dapat mempercepat waktu.

12981
12:33:40,862 --> 12:33:42,122
Selalu ada harga yang harus dibayar.

12982
12:33:42,122 --> 12:33:47,882
Dan sering kali hal ini terjadi dalam ruang, atau waktu,\n

12983
12:33:47,881 --> 12:33:49,511
jumlah bug yang harus Anda selesaikan.

12984
12:33:49,512 --> 12:33:51,542
Maksudku, semua ini\naadalah sumber daya yang terbatas

12985
12:33:51,542 --> 12:33:53,315
bahwa Anda harus menyulapnya.

12986
12:33:53,315 --> 12:33:55,982
Jadi sekarang kita pertimbangkan kode\nyang dapat kita gunakan untuk mengimplementasikan ini

12987
12:33:57,601 --> 12:34:00,551
Dan bagaimana kita bisa\nmenggunakan sesuatu seperti ini?

12988
12:34:00,552 --> 12:34:03,002
Baiklah, mari kita lihat,\nmungkin, satu program terakhir.

12989
12:34:03,002 --> 12:34:07,122
Dan lihat di sini, sebelum kita melakukan transisi\n

12990
12:34:07,122 --> 12:34:11,552
Biarkan aku lanjutkan ke sini dan biarkan aku\n

12991
12:34:11,552 --> 12:34:15,692
Jadi izinkan saya, sebentar lagi, menyalin\nover file bernama tree.c.

12992
12:34:15,692 --> 12:34:18,550
Yang akan kami miliki di\nsitus web kursus.

12993
12:34:18,550 --> 12:34:20,342
Dan saya akan memandu Anda\nbeberapa logikanya

12994
12:34:20,341 --> 12:34:25,271
di sini yang saya tulis untuk tree.c.

12995
12:34:25,771 --> 12:34:27,281
Jadi apa yang pertama kita punya di sini?

12996
12:34:27,281 --> 12:34:31,921
Jadi inilah implementasi\n

12997
12:34:31,921 --> 12:34:36,341
Dan seperti sebelumnya, saya telah bermain-main dan\n

12998
12:34:37,771 --> 12:34:41,611
Inilah definisi saya tentang simpul untuk a\n

12999
12:34:41,612 --> 12:34:44,491
dari apa yang saya usulkan di\npapan beberapa saat yang lalu.

13000
12:34:44,491 --> 12:34:47,191
Berikut adalah 2 prototipe untuk\n2 fungsi, yang akan saya lakukan

13001
12:34:47,192 --> 12:34:49,262
tunjukkan padamu sebentar lagi,\nitu izinkan aku untuk bebas

13002
12:34:49,262 --> 12:34:52,652
seluruh pohon, satu simpul pada satu waktu.

13003
12:34:52,652 --> 12:34:55,382
Lalu, izinkan saya juga\nmencetak pohon secara berurutan.

13004
12:34:55,381 --> 12:34:57,781
Jadi meskipun\ntidak diurutkan dari kiri ke kanan

13005
12:34:57,781 --> 12:35:00,932
Saya yakin jika saya pandai\nanak mana yang pertama kali saya cetak

13006
12:35:00,932 --> 12:35:04,152
Saya dapat merekonstruksi ide\nmencetak pohon ini dengan benar.

13007
12:35:04,152 --> 12:35:06,632
Jadi bagaimana cara mengimplementasikan\na pohon pencarian biner?

13008
12:35:07,921 --> 12:35:10,502
Inilah cara saya\nmerepresentasikan pohon berukuran 0.

13009
12:35:10,502 --> 12:35:13,442
Itu hanya penunjuk nol yang disebut pohon.

13010
12:35:13,442 --> 12:35:15,542
Inilah cara saya menambahkan\na nomor ke daftar itu.

13011
12:35:15,542 --> 12:35:19,561
Jadi di sini, misalnya, saya\nmengurangi ruang untuk sebuah node.

13012
12:35:19,561 --> 12:35:21,691
Menyimpannya dalam variabel\nsementara bernama n.

13013
12:35:21,692 --> 12:35:23,552
Inilah saya yang baru saja melakukan pemeriksaan keamanan.

13014
12:35:23,552 --> 12:35:25,262
Pastikan n tidak sama dengan nol.

13015
12:35:25,262 --> 12:35:29,612
Dan kemudian, inilah saya yang menginisialisasi ini\n

13016
12:35:29,612 --> 12:35:32,342
Kemudian, inisialisasi anak\nkiri dari node tersebut menjadi null.

13017
12:35:32,341 --> 12:35:34,991
Dan anak kanan dari\nnode nol itu menjadi nol.

13018
12:35:34,991 --> 12:35:40,152
Lalu, inisialisasi pohon itu sendiri\n

13019
12:35:40,152 --> 12:35:43,322
Jadi pada titik cerita ini, ada\n

13020
12:35:43,322 --> 12:35:46,222
berisi nomor\n2 tanpa anak.

13021
12:35:46,722 --> 12:35:49,112
Mari kita tambahkan secara manual\nsedikit lebih jauh ke dalamnya.

13022
12:35:49,112 --> 12:35:52,262
Mari tambahkan nomor lain ke\ndaftar, dengan melakukan mallocing pada node lain.

13023
12:35:52,262 --> 12:35:55,622
Saya tidak perlu mendeklarasikan n sebagai node*\n

13024
12:35:56,262 --> 12:35:58,202
Ini sedikit pemeriksaan keamanan.

13025
12:35:58,201 --> 12:36:02,761
Aku tidak akan ambil pusing dengan urusanku,\n

13026
12:36:07,285 --> 12:36:09,452
Kami juga menginginkan memori bebas,\nyang belum saya lakukan di sini

13027
12:36:09,451 --> 12:36:11,131
tapi aku akan menyimpannya untuk lain waktu.

13028
12:36:11,131 --> 12:36:13,471
Di sini, saya akan\nmenginisialisasi angkanya menjadi 1.

13029
12:36:13,472 --> 12:36:17,582
Saya akan menginisialisasi anak-anak\n

13030
12:36:17,582 --> 12:36:19,292
Dan sekarang, saya akan melakukan ini.

13031
12:36:19,292 --> 12:36:23,762
Inisialisasi\nanak kiri pohon menjadi n.

13032
12:36:23,762 --> 12:36:26,704
Jadi yang pada dasarnya\ndolakukan di sini adalah jika ini

13033
12:36:26,703 --> 12:36:29,911
adalah simpul akar saya, persegi panjang tunggal\n

13034
12:36:29,911 --> 12:36:32,011
tidak memiliki anak, baik kiri maupun kanan.

13035
12:36:32,012 --> 12:36:33,961
Ini simpul baru saya dengan nomor 1.

13036
12:36:33,961 --> 12:36:36,101
Saya ingin dia menjadi anak kiri yang baru.

13037
12:36:36,101 --> 12:36:39,631
Jadi baris kode di\nlayar itu, pohon di kiri sama dengan n

13038
12:36:39,631 --> 12:36:44,201
seperti menyatukan keduanya\n

13039
12:36:44,701 --> 12:36:47,581
Baris kode berikutnya,\nAnda mungkin bisa menebaknya

13040
12:36:47,582 --> 12:36:50,042
apakah saya menambahkan\nnomor lain ke dalam daftar.

13041
12:36:51,211 --> 12:36:56,682
Jadi ini adalah pohon yang lebih sederhana dengan\n2, 1, dan, 3 masing-masing.

13042
12:36:56,682 --> 12:36:59,192
Dan kode ini, izinkan saya melambaikan\ntangan saya, hampir sama.

13043
12:36:59,192 --> 12:37:02,492
Kecuali fakta bahwa saya\nmemperbarui anak pohon yang tepat

13044
12:37:02,491 --> 12:37:04,472
menjadi node baru dan ketiga ini.

13045
12:37:04,472 --> 12:37:07,862
Sekarang mari kita jalankan kodenya sebelum\nmelihat 2 fungsi tersebut.

13046
12:37:12,991 --> 12:37:16,411
Jadi sepertinya struktur data\n

13047
12:37:16,411 --> 12:37:18,181
Tapi bagaimana sebenarnya saya mencetak ini?

13048
12:37:18,182 --> 12:37:20,072
Lalu, pada akhirnya,\nmembebaskan semuanya?

13049
12:37:20,072 --> 12:37:23,461
Mari kita lihat\ndefinisi pohon cetakan pertama.

13050
12:37:23,461 --> 12:37:26,432
Dan di sinilah\nsegalanya menjadi menarik.

13051
12:37:26,432 --> 12:37:30,271
Pohon cetak tidak menghasilkan apa-apa\njadi fungsi ini batal.

13052
12:37:30,271 --> 12:37:36,002
Tapi dibutuhkan pointer ke elemen root\n

13053
12:37:37,171 --> 12:37:39,271
Jika root sama dengan\nnull, jelas ada

13054
12:37:39,271 --> 12:37:40,591
tidak ada yang perlu dicetak, kembalikan saja.

13055
12:37:42,451 --> 12:37:44,491
Namun di sinilah segalanya\nmenjadi sedikit ajaib.

13056
12:37:44,491 --> 12:37:47,761
Jika tidak, cetak anak kiri Anda.

13057
12:37:50,491 --> 12:37:53,911
Lalu, cetak anak kanan Anda.

13058
12:37:53,911 --> 12:37:59,181
Ini contohnya apa, genap\n

13059
12:37:59,182 --> 12:38:00,802
Teknik pemrograman apa di sini?

13060
12:38:02,398 --> 12:38:05,853
Jadi ini mungkin yang paling\n

13061
12:38:05,853 --> 12:38:08,061
Itu tidak terlalu\nmenarik dengan masalah Mario

13062
12:38:08,061 --> 12:38:10,191
because we had such an easy\nimplementation with a for-loop loop

13063
12:38:11,031 --> 12:38:15,652
Namun ini adalah aplikasi yang sempurna\n

13064
12:38:17,391 --> 12:38:19,701
Jika Anda mengambil potongan\ncabang mana pun, semuanya

13065
12:38:19,701 --> 12:38:22,072
masih terlihat seperti pohon,\nhanya lebih kecil.

13066
12:38:22,072 --> 12:38:23,911
Itu cocok untuk rekursi.

13067
12:38:23,911 --> 12:38:28,491
Jadi inilah lompatan keyakinan yang saya\n

13068
12:38:28,491 --> 12:38:31,311
pohon, jika Anda mau, melalui\nanak saya di sebelah kiri.

13069
12:38:31,311 --> 12:38:34,612
Lalu, saya akan mencetak root\nnode saya sendiri di sini, di tengah.

13070
12:38:34,612 --> 12:38:37,222
Lalu, lanjutkan dan\ncetak subpohon kanan saya.

13071
12:38:37,222 --> 12:38:41,662
Dan karena kita memiliki kasus dasar itu\n

13072
12:38:41,661 --> 12:38:44,448
tidak ada yang bisa dilakukan, Anda\ntidak akan mengulanginya tanpa batas waktu.

13073
12:38:44,449 --> 12:38:47,031
Anda tidak akan menyebut diri Anda\na lagi, lagi, dan lagi

13074
12:38:48,692 --> 12:38:52,882
Jadi ini berhasil dan mencetak\nyang 1, 2, dan 3.

13075
12:38:52,881 --> 12:38:54,322
Dan perhatikan juga apa yang dapat kami lakukan.

13076
12:38:54,322 --> 12:38:57,741
Jika Anda ingin mencetak pohon di\n

13077
12:38:57,741 --> 12:39:00,531
Cetak pohon kanan Anda\npertama, elemen yang lebih besar.

13078
12:39:01,432 --> 12:39:02,811
Kemudian, sub pohon Anda yang lebih kecil.

13079
12:39:02,811 --> 12:39:05,451
Dan jika saya membuat pohon\ndi sini dan ./pohon, sekarang

13080
12:39:05,451 --> 12:39:07,581
Saya telah membalik urutan daftarnya.

13081
12:39:08,671 --> 12:39:10,421
Anda dapat melakukannya dengan\nfor-loop dalam array.

13082
12:39:10,421 --> 12:39:13,851
Namun Anda juga dapat melakukannya, bahkan dengan\nstruktur 2 dimensi ini.

13083
12:39:13,851 --> 12:39:17,661
Terakhir, mari kita lihat\nfungsi pohon gratis ini.

13084
12:39:17,661 --> 12:39:19,641
Dan yang ini hampir sama.

13085
12:39:19,641 --> 12:39:22,881
Urutan tidak menjadi masalah\n

13086
12:39:22,881 --> 12:39:24,502
Inilah yang saya lakukan dengan pohon gratis.

13087
12:39:24,502 --> 12:39:27,459
Nah, jika akar pohonnya adalah\n

13088
12:39:28,042 --> 12:39:32,582
Jika tidak, lanjutkan dan bebaskan\n Anda

13089
12:39:32,582 --> 12:39:35,572
Lalu bebaskan anak kananmu\ndan seluruh keturunannya.

13090
12:39:37,381 --> 12:39:43,171
Dan sekali lagi, gratis secara harfiah\n

13091
12:39:43,171 --> 12:39:45,051
Itu tidak membebaskan semuanya.

13092
12:39:45,052 --> 12:39:47,332
Itu hanya membebaskan secara harfiah\napa yang ada di alamat itu.

13093
12:39:47,332 --> 12:39:51,382
Namun, mengapa penting\nsaya melakukan baris 72 terakhir?

13094
12:39:51,381 --> 12:39:53,932
Mengapa saya membebaskan\nanak kiri dan anak kanan

13095
12:39:53,932 --> 12:39:57,455
sebelum aku membebaskan diriku, boleh dikatakan begitu?

13096
12:39:59,163 --> 12:40:03,621
Kalau kamu bebaskan dirimu dulu, kalau aku\n

13097
12:40:03,622 --> 12:40:08,302
kamu tidak diperbolehkan menyentuh sisi kiri\n

13098
12:40:08,302 --> 12:40:10,832
Karena alamat memori\ntidak lagi valid pada saat itu.

13099
12:40:10,832 --> 12:40:12,772
Mungkin Anda akan mengalami\nkesalahan memori.

13100
12:40:13,792 --> 12:40:15,472
Valgrind pasti tidak akan menyukainya.

13101
12:40:15,472 --> 12:40:17,542
Jika tidak, hal-hal buruk akan terjadi.

13102
12:40:17,542 --> 12:40:19,372
Namun berikut adalah\contoh rekursi.

13103
12:40:19,372 --> 12:40:23,842
Dan sekali lagi, hanya penggunaan struktur data aktual\nsecara rekursif.

13104
12:40:23,841 --> 12:40:26,601
Dan yang lebih keren lagi di sini\nis, secara relatif

13105
12:40:26,601 --> 12:40:29,121
misalkan kita ingin\nmenelusuri sesuatu seperti ini.

13106
12:40:29,122 --> 12:40:33,202
Penelusuran biner menjadi sangat menarik\n

13107
12:40:33,891 --> 12:40:38,421
ini mungkin prototipe untuk penelusuran\n

13108
12:40:38,421 --> 12:40:43,402
Kau memberiku akar pohon, dan\n

13109
12:40:43,402 --> 12:40:47,362
dan sekarang saya dapat dengan mudah mengembalikan nilai true\n

13110
12:40:47,932 --> 12:40:49,912
Baiklah, mari kita ajukan pertanyaan terlebih dahulu.

13111
12:40:49,911 --> 12:40:52,876
Jika pohon sama dengan nol,\nmaka Anda hanya mengembalikan false.

13112
12:40:52,877 --> 12:40:56,002
Karena jika tidak ada pohon, maka tidak ada\n

13113
12:40:57,341 --> 12:41:04,041
Jika tidak, nomor yang Anda cari\n

13114
12:41:04,042 --> 12:41:06,052
arah mana yang harus kita tuju?

13115
12:41:08,671 --> 12:41:11,781
Baiklah, mari kita kembalikan\njawaban pertanyaan ini.

13116
12:41:11,781 --> 12:41:15,921
Telusuri subpohon kiri,\nmelalui anak kiri saya

13117
12:41:15,921 --> 12:41:17,451
mencari nomor yang sama.

13118
12:41:17,451 --> 12:41:19,731
Dan Anda hanya berasumsi melalui\nkeindahan rekursi

13119
12:41:19,732 --> 12:41:22,882
bahwa Anda sudah berusaha keras\ndbiarkan diri Anda sendiri yang mengetahuinya

13120
12:41:24,082 --> 12:41:26,542
Hanya pohon kiri yang terpotong saja.

13121
12:41:26,542 --> 12:41:30,802
Jika tidak, nomor yang Anda cari\n

13122
12:41:30,802 --> 12:41:32,641
pergi ke kanan, seperti yang mungkin Anda simpulkan.

13123
12:41:32,641 --> 12:41:35,542
Jadi saya bisa mengembalikan\njawaban pertanyaan ini.

13124
12:41:35,542 --> 12:41:38,631
Telusuri subpohon kanan saya\nuntuk nomor yang sama.

13125
12:41:38,631 --> 12:41:40,502
Dan ada kondisi keempat\nterakhir.

13126
12:41:40,502 --> 12:41:43,732
Apa skenario keempat yang harus kita pertimbangkan secara eksplisit?

13127
12:41:45,262 --> 12:41:47,304
PEMBICARA 1: Jika nomor itu sendiri ada di sana.

13128
12:41:47,303 --> 12:41:50,961
Jadi kalau tidak, nomor yang saya cari\n

13129
12:41:50,961 --> 12:41:53,731
kemudian dan hanya setelah itu,\nAnda harus mengembalikan nilai true.

13130
12:41:53,732 --> 12:41:55,972
Dan jika Anda berpikir\ncepat, ini dia

13131
12:41:55,972 --> 12:41:59,632
kemungkinan pengoptimalan,\npeluang desain yang lebih baik.

13132
12:41:59,631 --> 12:42:01,131
Pikirkan kembali hari-hari awal kita.

13133
12:42:01,131 --> 12:42:03,252
Apa yang bisa kami lakukan lebih baik di sini?

13134
12:42:06,622 --> 12:42:09,164
Karena kalau secara logika\hanya ada 4 hal yang bisa terjadi

13135
12:42:09,163 --> 12:42:12,021
Anda membuang-buang waktu dengan menanyakan\na pertanyaan keempat yang tidak ada gunanya.

13136
12:42:13,341 --> 12:42:16,981
Jadi ini lebih dari\ncontoh Mario beberapa minggu yang lalu

13137
12:42:16,982 --> 12:42:19,582
hanya ada keanggunan\bisa dibilang rekursi.

13138
12:42:21,442 --> 12:42:25,432
Ini adalah kode untuk pencarian\nbiner pada pohon pencarian biner.

13139
12:42:25,432 --> 12:42:27,502
Jadi, rekursi cenderung\nberfungsi secara berurutan

13140
12:42:27,502 --> 12:42:32,182
dengan struktur data seperti ini\n

13141
12:42:34,161 --> 12:42:39,841
Kalau begitu, ada pertanyaan tentang penelusuran biner\n

13142
12:42:40,709 --> 12:42:42,656
HADIRIN: Kira-kira seperti tahun ketiga.

13143
12:42:48,211 --> 12:42:54,171
Jadi ketika mengembalikan nilai Boolean, true\n

13144
12:42:54,171 --> 12:42:57,832
di perpustakaan bernama Standard\nBool, S-T-D-B-O-O-L dot H.

13145
12:42:57,832 --> 12:42:59,961
Dengan file header yang dapat Anda gunakan.

13146
12:42:59,961 --> 12:43:06,739
Ini adalah kasus yang benar, itu\n

13147
12:43:06,739 --> 12:43:08,031
Tapi mereka memang akan memetakannya, ya.

13148
12:43:09,442 --> 12:43:11,872
Namun Anda tidak boleh membandingkan\nnya secara eksplisit dengan 0 dan 1.

13149
12:43:11,872 --> 12:43:14,872
Saat Anda menggunakan benar dan salah, Anda\n

13150
12:43:14,872 --> 12:43:18,857
AUDIENCE: Maksud saya jika\nit ada dalam kode kembali.

13151
12:43:19,732 --> 12:43:23,332
Jadi jika saya menggunakan kode saya sendiri dari\nearlier, fungsi penghindaran

13152
12:43:23,332 --> 12:43:25,762
tidak apa-apa untuk kembali.

13153
12:43:25,762 --> 12:43:28,432
Anda tidak bisa mengembalikan\nsesuatu secara eksplisit.

13154
12:43:28,432 --> 12:43:30,201
Jadi kembali berarti itu saja.

13155
12:43:31,762 --> 12:43:33,632
Anda sebenarnya tidak\nmengembalikan suatu nilai.

13156
12:43:33,631 --> 12:43:37,252
Jadi ini merupakan cara untuk memperpendek\neksekusi.

13157
12:43:37,252 --> 12:43:39,531
Jika Anda tidak menyukainya,\ndan beberapa orang mengerutkan kening

13158
12:43:39,531 --> 12:43:44,241
setelah kode dikembalikan dari fungsi\n

13159
12:43:45,531 --> 12:43:49,222
Jika akarnya tidak sama\nnull, lakukan semua hal berikut.

13160
12:43:49,222 --> 12:43:51,502
Lalu, indentasi ketiga\ngaris ini di bawahnya.

13161
12:43:52,972 --> 12:43:54,772
Saya kebetulan menulisnya\nsebaliknya begitu saja

13162
12:43:54,771 --> 12:43:58,471
bahwa ada kasus dasar secara eksplisit\n

13163
12:43:58,472 --> 12:44:01,402
Padahal, saat ini, hal itu\nsecara implisit hanya ada untuk kita saja.

13164
12:44:03,771 --> 12:44:07,441
Jadi mari kita ajukan pertanyaan seperti\nsebelumnya tentang waktu berjalan ini.

13165
12:44:07,442 --> 12:44:09,412
Tampaknya\npenelusuran biner telah kembali.

13166
12:44:09,411 --> 12:44:15,081
Dan sekarang kita dapat melakukan berbagai hal dalam logaritma\n

13167
12:44:15,082 --> 12:44:17,421
Apakah ini pohon pencarian biner?

13168
12:44:19,141 --> 12:44:21,862
Dan sekali lagi, pohon\npenelusuran biner adalah sebuah pohon

13169
12:44:21,862 --> 12:44:28,599
dimana akarnya lebih besar dari kirinya\n

13170
12:44:29,391 --> 12:44:30,862
Jadi, Anda menganggukkan kepala.

13171
12:44:33,502 --> 12:44:35,512
Jadi ini adalah pohon pencarian biner.

13172
12:44:35,512 --> 12:44:37,872
Apakah ini pohon pencarian biner?

13173
12:44:40,341 --> 12:44:43,191
Atau sepertinya saya hanya mendengar keterlambatan\nmengubah suara saya.

13174
12:44:43,192 --> 12:44:45,562
Jadi ini adalah salah satu pertanyaan jebakan.

13175
12:44:45,561 --> 12:44:47,961
Ini adalah pohon\npencarian biner karena saya belum melakukannya

13176
12:44:47,961 --> 12:44:50,872
melanggar definisi\ndari apa yang saya berikan kepada Anda, kan.

13177
12:44:50,872 --> 12:44:56,961
Apakah ada contoh anak kiri\n

13178
12:44:56,961 --> 12:44:59,961
Atau apakah ada contoh hak\n

13179
12:44:59,961 --> 12:45:02,379
Itu justru kebalikan\nmenggambarkan hal yang sama.

13180
12:45:02,379 --> 12:45:04,552
Tidak, ini adalah pohon pencarian biner.

13181
12:45:04,552 --> 12:45:07,692
Sayangnya, sepertinya juga,\n

13182
12:45:09,381 --> 12:45:11,451
Tapi Anda bisa membayangkan\nini terjadi, kan.

13183
12:45:11,451 --> 12:45:14,121
Misalkan saja saya tidak begitu\nbikir seperti sebelumnya

13184
12:45:14,122 --> 12:45:17,452
dengan memasukkan 2, lalu 1, lalu 3.

13185
12:45:17,451 --> 12:45:19,641
Yang dengan baik menyeimbangkan semuanya.

13186
12:45:19,641 --> 12:45:22,341
Misalkan saja, karena\napa yang diketik pengguna

13187
12:45:22,341 --> 12:45:25,461
atau apa pun yang Anda buat di\n

13188
12:45:27,741 --> 12:45:30,331
Misalnya, Anda telah menciptakan\nmasalah untuk diri Anda sendiri.

13189
12:45:30,332 --> 12:45:33,772
Karena jika kita mengikuti logika yang sama\n

13190
12:45:33,771 --> 12:45:38,511
inilah cara Anda menerapkan\n

13191
12:45:38,512 --> 12:45:42,232
jika Anda terus\nmengikuti definisi tersebut secara membabi buta.

13192
12:45:42,232 --> 12:45:44,512
Maksudku, ini akan\nlebih baik dirancang seperti apa?

13193
12:45:44,512 --> 12:45:46,972
Jika kita memutar semuanya.

13194
12:45:48,351 --> 12:45:50,542
Dan pohon-pohon tersebut\sebenarnya mempunyai nama.

13195
12:45:50,542 --> 12:45:52,881
Ada pohon yang disebut pohon AVL\ndalam ilmu komputer.

13196
12:45:52,881 --> 12:45:54,531
Ada pohon merah-hitam\ndalam ilmu komputer.

13197
12:45:54,531 --> 12:45:56,781
Selain itu, ada jenis\npohon lain

13198
12:45:56,781 --> 12:45:59,991
tambahkan beberapa logika yang memberi tahu Anda\nkapan Anda harus memutarnya

13199
12:45:59,991 --> 12:46:03,720
dan putar, lalu potong\n

13200
12:46:03,720 --> 12:46:05,512
Tapi pohon\npenelusuran biner, dengan sendirinya

13201
12:46:05,512 --> 12:46:09,152
tidak menjamin bahwa\nakan seimbang.

13202
12:46:09,152 --> 12:46:11,722
Jadi, jika Anda mempertimbangkan\nskenario terburuk

13203
12:46:11,722 --> 12:46:13,342
bahkan menggunakan pohon pencarian biner.

13204
12:46:13,341 --> 12:46:15,441
Jika Anda tidak pandai\nkode yang Anda tulis

13205
12:46:15,442 --> 12:46:17,662
dan Anda hanya membabi buta\nmengikuti definisi ini

13206
12:46:17,661 --> 12:46:21,771
Anda mungkin secara tidak sengaja membuat\n

13207
12:46:21,771 --> 12:46:24,531
pohon yang pada dasarnya\nterlihat seperti daftar tertaut.

13208
12:46:24,531 --> 12:46:26,991
Karena Anda bahkan tidak menggunakan\satu pun turunan kiri.

13209
12:46:26,991 --> 12:46:30,231
Sayangnya, jawaban\nharfiah atas pertanyaan tersebut

13210
12:46:30,232 --> 12:46:32,962
ini jam berapa\nwaktu pencariannya?

13211
12:46:34,881 --> 12:46:37,461
Namun tidak jika Anda tidak menjaga\nkeseimbangan pohon tersebut.

13212
12:46:37,461 --> 12:46:42,771
Keduanya, dalam penelusuran tertentu, sebenarnya bisa\n

13213
12:46:44,434 --> 12:46:46,641
Jika Anda tidak memperhitungkan\nint, dan kami tidak memperhitungkannya

13214
12:46:46,641 --> 12:46:48,201
akan melakukan kode untuk itu di sini.

13215
12:46:48,201 --> 12:46:51,621
Ini adalah hal tingkat lebih tinggi yang mungkin Anda\njelajahi nanti.

13216
12:46:51,622 --> 12:46:55,412
Hal ini dapat berubah menjadi sesuatu\nyang mungkin tidak Anda inginkan.

13217
12:46:55,411 --> 12:46:57,503
Jadi, sekarang kita\nberbicara tentang 2 dimensi

13218
12:46:57,504 --> 12:46:59,211
itu benar-benar tanggung jawab programmer

13219
12:46:59,211 --> 12:47:01,972
untuk mempertimbangkan\nsituasi buruk seperti apa yang mungkin terjadi.

13220
12:47:01,972 --> 12:47:04,342
Saat benda tersebut berpindah\ninke dalam sebuah struktur

13221
12:47:04,341 --> 12:47:07,831
yang sebenarnya tidak Anda\ninginkan terjadi.

13222
12:47:08,332 --> 12:47:09,842
Kami hanya punya beberapa struktur yang harus dibangun.

13223
12:47:09,841 --> 12:47:11,421
Mari kita istirahat\nsekali lagi selama 5 menit di sini.

13224
12:47:11,421 --> 12:47:12,891
Saat kami kembali,\nkami akan berbicara pada tingkat ini

13225
12:47:12,891 --> 12:47:14,512
tentang beberapa aplikasi akhir ini.

13226
12:47:19,341 --> 12:47:22,731
Dan seperti yang dijanjikan, kami akan beroperasi\nsekarang pada tingkat yang lebih tinggi ini.

13227
12:47:22,732 --> 12:47:26,002
Dimana jika kita menganggap remeh hal itu, bahkan\n

13228
12:47:26,002 --> 12:47:28,794
belum bisa menggunakan teknik ini,\n

13229
12:47:30,262 --> 12:47:33,112
Baik dalam satu dimensi\ndan genap 2 dimensi

13230
12:47:33,112 --> 12:47:35,451
untuk membuat hal-hal seperti daftar dan pohon.

13231
12:47:35,451 --> 12:47:37,461
Jadi jika kita memiliki landasan ini.

13232
12:47:37,461 --> 12:47:40,161
Hal-hal seperti sekarang array,\ndan daftar, dan pohon

13233
12:47:40,161 --> 12:47:44,271
bagaimana jika kita mulai menggabungkan\n

13234
12:47:44,271 --> 12:47:46,381
dari beberapa struktur data?

13235
12:47:46,381 --> 12:47:49,841
Bisakah kita mulai mendapatkan yang terbaik\n

13236
12:47:49,841 --> 12:47:51,191
sesuatu yang disebut tabel hash.

13237
12:47:51,192 --> 12:47:55,022
Jadi tabel hash adalah pisau struktur data Swiss\narmy

13238
12:47:55,021 --> 12:47:56,791
karena itu sangat umum digunakan.

13239
12:47:56,792 --> 12:48:01,482
Karena ini memungkinkan Anda mengaitkan\nkunci dengan nilai.

13240
12:48:01,482 --> 12:48:06,542
Jadi, misalnya, ini memungkinkan Anda untuk\n

13241
12:48:08,552 --> 12:48:11,402
Atau apa pun yang Anda\nharus mengambil sesuatu sebagai masukan

13242
12:48:11,402 --> 12:48:13,781
dan dapatkan sebagai output\ninformasi yang sesuai.

13243
12:48:13,781 --> 12:48:16,692
Tabel hash sering kali merupakan\nstruktur data pilihan.

13244
12:48:16,692 --> 12:48:17,942
Dan inilah tampilannya.

13245
12:48:17,942 --> 12:48:20,281
Sekilas terlihat seperti\nan array.

13246
12:48:20,281 --> 12:48:23,472
Namun demi diskusi, saya telah\menggambar array ini secara vertikal

13247
12:48:26,141 --> 12:48:31,201
Tapi ini memungkinkan Anda, tabel hash, untuk\n

13248
12:48:32,222 --> 12:48:35,612
Jadi, misalnya, sebenarnya ada\n26 lokasi dalam larik ini.

13249
12:48:35,612 --> 12:48:38,582
Karena saya ingin, misalnya, menyimpannya terlebih dahulu

13250
12:48:38,582 --> 12:48:41,461
misalnya nama orang.

13251
12:48:41,461 --> 12:48:44,135
Dan alangkah baiknya jika\nnama orang tersebut diawali dengan A

13252
12:48:44,135 --> 12:48:45,302
Aku harus pergi ke suatu tempat untuk itu.

13253
12:48:46,262 --> 12:48:48,345
Dan jika dimulai dengan Z,\nSaya letakkan di bawah.

13254
12:48:48,345 --> 12:48:50,552
Agar saya bisa melompat\ninstan, secara aritmatika

13255
12:48:50,552 --> 12:48:52,952
menggunakan sedikit\nkelebihan Ascii atau Unicode

13256
12:48:52,951 --> 12:48:56,021
tepat ke lokasi yang\nmereka ingin tuju.

13257
12:48:56,021 --> 12:48:58,171
Jadi, misalnya, inilah\indeks array 0 kita.

13258
12:48:59,612 --> 12:49:01,982
Namun jika saya memikirkan hal ini,\nsebagai A sampai Z

13259
12:49:01,982 --> 12:49:03,852
Saya akan memikirkan\n26 lokasi ini

13260
12:49:03,851 --> 12:49:07,112
sekarang dalam konteks tabel hash,\n

13261
12:49:07,112 --> 12:49:09,491
Jadi wadah tempat\nAnda dapat memasukkan nilai.

13262
12:49:09,491 --> 12:49:13,862
Jadi, misalnya, kita\n

13263
12:49:15,072 --> 12:49:16,741
Dan nama itu dikatakan, Albus.

13264
12:49:16,741 --> 12:49:21,461
Jadi Albus dimulai dengan A. Albus mungkin\n

13265
12:49:21,961 --> 12:49:23,669
Lalu, kami ingin\ninmemasukkan nama lain.

13266
12:49:23,669 --> 12:49:25,112
Yang ini kebetulan adalah Zakharia.

13267
12:49:25,112 --> 12:49:28,171
Dimulai dengan Z, dan seterusnya\nsampai akhir data ini

13268
12:49:28,171 --> 12:49:29,972
struktur di lokasi 25 a.k.a.

13269
12:49:30,872 --> 12:49:34,742
Lalu, mungkin nama ketiga seperti\n

13270
12:49:34,741 --> 12:49:36,792
menurut\nposisi itu dalam alfabet.

13271
12:49:36,792 --> 12:49:39,542
Jadi ini bagus karena\nwaktunya konstan

13272
12:49:39,542 --> 12:49:43,502
Saya dapat menyisipkan dan sebaliknya\nmenelusuri nama-nama ini

13273
12:49:43,502 --> 12:49:45,182
berdasarkan huruf pertama namanya.

13274
12:49:45,182 --> 12:49:47,580
A, atau Z, atau H, dalam hal ini.

13275
12:49:47,580 --> 12:49:50,372
Mari kita percepat dan asumsikan kita\n

13276
12:49:50,372 --> 12:49:52,382
mungkin terlihat familiar,\ninke dalam tabel hash ini.

13277
12:49:52,381 --> 12:49:56,591
Ini bagus karena setiap\nnama memiliki lokasinya sendiri.

13278
12:49:56,591 --> 12:50:00,961
Namun jika Anda memikirkan nama\n

13279
12:50:00,961 --> 12:50:03,192
kami akhirnya menemui\nmasalah dengan ini, kan.

13280
12:50:03,192 --> 12:50:06,961
Kapan terjadi kesalahan\menggunakan tabel hash seperti ini

13281
12:50:06,961 --> 12:50:09,572
jika kita ingin memasukkan lebih banyak nama lagi?

13282
12:50:09,572 --> 12:50:11,771
Apa yang akhirnya akan terjadi?

13283
12:50:12,271 --> 12:50:14,479
Sudah ada seseorang dengan\nhuruf pertama kan.

13284
12:50:14,480 --> 12:50:17,342
Sepertinya saya belum menyebutkan\nHarry, misalnya, atau Hagrid.

13285
12:50:17,341 --> 12:50:19,231
Namun, Hermione\nsudah menggunakan tempat itu.

13286
12:50:19,232 --> 12:50:21,512
Sehingga mengundang\npertanyaan, apa yang terjadi?

13287
12:50:21,512 --> 12:50:25,082
Mungkin, jika kita ingin memasukkan Harry\n

13288
12:50:26,192 --> 12:50:28,805
Namun jika ada lokasi\nI, di mana kita akan meletakkannya?

13289
12:50:28,805 --> 12:50:31,472
Dan rasanya situasinya\nbisa berubah dengan sangat cepat.

13290
12:50:31,472 --> 12:50:34,412
Namun saya sengaja\menggambar struktur data ini

13291
12:50:34,411 --> 12:50:37,471
yang saya klaim sebagai hash\ntable, dalam 2 arah.

13292
12:50:39,601 --> 12:50:42,781
Namun apa yang mungkin diisyaratkan oleh hal ini\nSaya menggunakan secara horizontal

13293
12:50:42,781 --> 12:50:45,781
padahal saya sedang menggambar persegi panjang\n

13294
12:50:47,239 --> 12:50:48,572
Mungkin susunan lain, agar adil.

13295
12:50:48,572 --> 12:50:51,739
Tapi sejujurnya, array itu menyusahkan\n

13296
12:50:52,292 --> 12:50:56,082
Ini terlihat seperti awal\ndaftar tertaut, jika Anda mau.

13297
12:50:56,082 --> 12:50:59,671
Dimana nama dimana nomornya\n

13298
12:50:59,671 --> 12:51:01,682
secara horizontal sekarang hanya\nuntuk kepentingan diskusi.

13299
12:51:01,682 --> 12:51:05,281
Dan sepertinya ini adalah sebuah penunjuk\nyang belum mengarah ke mana pun.

13300
12:51:05,281 --> 12:51:10,561
Tapi sepertinya arraynya adalah 26\n

13301
12:51:11,402 --> 12:51:14,156
Beberapa di antaranya menunjuk ke\nnode pertama dalam daftar tertaut.

13302
12:51:14,156 --> 12:51:16,531
Jadi itulah yang mungkin ada dalam pikiran Anda tentang hash\ntable.

13303
12:51:16,531 --> 12:51:21,309
Campuran dari array, yang\elemennya merupakan daftar tertaut.

13304
12:51:21,309 --> 12:51:23,851
Dan secara teori, ini memberi Anda\nyang terbaik dari kedua hal tersebut, bukan.

13305
12:51:23,851 --> 12:51:26,911
Anda mendapatkan akses acak dengan\nkemungkinan besar, kan.

13306
12:51:26,911 --> 12:51:30,101
Anda dapat langsung melompat ke\n

13307
12:51:30,101 --> 12:51:32,911
Namun, jika Anda mengalami hal yang tidak wajar ini\n

13308
12:51:34,351 --> 12:51:37,832
Ini mulai berpindah ke\ndaftar tertaut, tapi setidaknya berjumlah 26

13309
12:51:39,061 --> 12:51:42,151
Tidak ada satu pun daftar tertaut yang besar,\nyang akan menjadi O Besar dari n.

13310
12:51:43,961 --> 12:51:46,112
Jadi jika Harry dimasukkan ke dalam Hagrid.

13311
12:51:46,112 --> 12:51:50,262
Ya, Anda harus menyatukannya\ndengan cara ini.

13312
12:51:50,262 --> 12:51:53,127
Namun, setidaknya Anda tidak\nmenyudutkan diri Anda sendiri.

13313
12:51:53,127 --> 12:51:56,252
Faktanya, jika kita mempercepat dan\n

13314
12:51:56,252 --> 12:51:58,601
struktur data\nmulai terlihat seperti ini.

13315
12:51:58,601 --> 12:52:00,941
Jadi rantainya tidak terlalu panjang.

13316
12:52:00,942 --> 12:52:03,752
Dan beberapa di antaranya sebenarnya\nberukuran 0 karena memang ada saja

13317
12:52:03,752 --> 12:52:06,631
beberapa huruf\nalfabet yang tidak populer di antara nama-nama ini.

13318
12:52:06,631 --> 12:52:08,581
Namun tampaknya ini lebih baik daripada\nmenempatkan semua orang

13319
12:52:08,582 --> 12:52:11,342
dalam satu larik besar, atau\tidak ada daftar tertaut yang besar.

13320
12:52:11,341 --> 12:52:15,671
Kami mencoba menyeimbangkan perdagangan ini\n

13321
12:52:15,671 --> 12:52:17,891
Nah, bagaimana kita bisa merepresentasikan\nsesuatu seperti ini?

13322
12:52:17,891 --> 12:52:19,622
Inilah cara kami menggambarkan hal ini.

13323
12:52:19,622 --> 12:52:22,802
Node dalam konteks\ndaftar tertaut bisa berupa ini.

13324
12:52:22,802 --> 12:52:26,342
Saya memiliki array bernama\nword bertipe char.

13325
12:52:26,341 --> 12:52:30,541
Dan itu cukup besar untuk memuat\n

13326
12:52:30,542 --> 12:52:32,372
Dan plus 1 kenapa, mungkin?

13327
12:52:33,241 --> 12:52:34,211
PEMBICARA 1: Karakter nol.

13328
12:52:34,211 --> 12:52:37,322
Jadi saya berasumsi kata terpanjang itu\n

13329
12:52:37,951 --> 12:52:40,216
Dan jumlahnya besar\nmisalnya 40, 100, berapa pun.

13330
12:52:40,216 --> 12:52:43,291
Apapun kata terpanjang\nin di dunia Harry Potter

13331
12:52:43,292 --> 12:52:45,921
is atau kamus bahasa inggris is.

13332
12:52:45,921 --> 12:52:51,531
Kata terpanjang ditambah 1 sudah cukup\n

13333
12:52:51,531 --> 12:52:53,841
Lalu, apa lagi yang\dimiliki masing-masing node ini?

13334
12:52:53,841 --> 12:52:57,541
Ya, itu memiliki penunjuk ke node lain.

13335
12:52:57,542 --> 12:52:59,872
Jadi inilah cara kita\nmengimplementasikan gagasan tentang node

13336
12:52:59,872 --> 12:53:04,192
dalam konteks menyimpan\nbukan bilangan bulat, melainkan nama.

13337
12:53:05,841 --> 12:53:08,841
Namun bagaimana kita memutuskan\ntabel hash itu sendiri?

13338
12:53:08,841 --> 12:53:12,621
Nah, jika sekarang kita mempunyai definisi a\n

13339
12:53:12,622 --> 12:53:14,992
atau bahkan secara global, disebut tabel hash.

13340
12:53:14,991 --> 12:53:20,391
Itu sendiri adalah pointer array\nof node*.

13341
12:53:20,391 --> 12:53:22,792
Itu adalah array pointer ke node.

13342
12:53:22,792 --> 12:53:24,772
Awal dari daftar tertaut.

13343
12:53:26,432 --> 12:53:28,565
Saya mengusulkan, secara lisan, agar menjadi 26.

13344
12:53:28,565 --> 12:53:30,982
Namun sejujurnya, jika Anda mendapatkan banyak\ntabrakan, boleh dikatakan begitu.

13345
12:53:30,982 --> 12:53:33,105
Banyak nama H yang mencoba\npergi ke tempat yang sama.

13346
12:53:33,105 --> 12:53:35,272
Mungkin kita perlu\nslebih pintar dan tidak sekadar melihat

13347
12:53:35,271 --> 12:53:36,688
pada huruf pertama nama mereka.

13348
12:53:36,688 --> 12:53:38,281
Tapi mungkin yang pertama dan kedua.

13349
12:53:38,281 --> 12:53:42,381
Jadi itu H-A dan H-E. Tapi tunggu, tidak,\n

13350
12:53:42,381 --> 12:53:45,322
Tapi setidaknya kita mulai membuat\nmasalahnya sedikit berkurang

13351
12:53:45,322 --> 12:53:48,982
berdampak dengan mengutak-atik\nsesuatu seperti jumlah keranjang

13352
12:53:50,362 --> 12:53:55,042
Namun bagaimana kita memutuskan di mana seseorang\n

13353
12:53:55,042 --> 12:53:57,381
Ya, ini masalah input dan output yang kuno\n.

13354
12:53:57,381 --> 12:54:00,741
Masukan untuk masalahnya akan\nseperti namanya.

13355
12:54:00,741 --> 12:54:02,781
Dan algoritme berada di\ntengah, mulai hari ini

13356
12:54:02,781 --> 12:54:05,211
akan menjadi sesuatu\ndisebut fungsi hash.

13357
12:54:05,211 --> 12:54:07,101
Fungsi hash\numumnya adalah sesuatu yang seperti itu

13358
12:54:07,101 --> 12:54:10,851
diambil sebagai input, string,\nangka, apa pun, dan menghasilkan

13359
12:54:10,851 --> 12:54:13,341
sebagai keluaran lokasi dalam konteks kita.

13360
12:54:16,972 --> 12:54:19,671
Atau berapa pun jumlah\nkeran yang Anda inginkan

13361
12:54:19,671 --> 12:54:23,851
itu hanya akan memberitahu Anda ke mana harus\n

13362
12:54:23,851 --> 12:54:27,682
Jadi, misalnya, Albus, menurut\n

13363
12:54:30,052 --> 12:54:32,782
Jadi fungsi hashnya, berada di\ntengah-tengah kotak hitam itu

13364
12:54:32,781 --> 12:54:35,241
cukup sederhana dalam cerita ini.

13365
12:54:35,241 --> 12:54:38,841
Itu hanya melihat Ascii\n

13366
12:54:39,591 --> 12:54:42,631
Lalu, kurangi\njumlah modal A adalah 65.

13367
12:54:42,631 --> 12:54:46,951
Jadi seperti menghitung untuk mendapatkan\nkembali angka antara 0 dan 25.

13368
12:54:46,951 --> 12:54:50,091
Jadi begitulah cara kita sampai pada\npoin cerita ini.

13369
12:54:50,091 --> 12:54:54,921
Lalu, bagaimana kita dapat menyelesaikan\nmasalah tersebut lebih lanjut dan menggunakannya

13370
12:54:54,921 --> 12:54:56,542
gagasan hashing secara lebih umum?

13371
12:54:56,542 --> 12:54:58,417
Sekadar demonstrasi\ndemi sini, ini

13372
12:54:58,417 --> 12:55:00,772
sebenarnya beberapa ember, secara harfiah.

13373
12:55:00,771 --> 12:55:03,861
Dan kami telah memberi label, terlebih dahulu,\nember ini dengan setelannya

13374
12:55:07,252 --> 12:55:12,082
Dan kami punya berlian di sini.

13375
12:55:12,082 --> 12:55:15,592
Dan kita punya, apa lagi yang ada di sini?

13376
12:55:19,372 --> 12:55:22,074
Jadi kita punya setumpuk kartu\ndi sini, misalnya, kan.

13377
12:55:22,074 --> 12:55:24,531
Dan ini adalah sesuatu yang mungkin Anda\nAnda sendiri lakukan secara naluriah

13378
12:55:24,531 --> 12:55:26,902
jika Anda bersiap\nmulai bermain kartu.

13379
12:55:26,902 --> 12:55:29,069
Anda hanya membersihkan atau\nAnda ingin segala sesuatunya beres.

13380
12:55:29,069 --> 12:55:31,444
Seperti, ini sebenarnya\na setumpuk kartu jumbo.

13381
12:55:31,444 --> 12:55:33,862
Apa cara termudah\nbagi saya untuk menyelesaikan masalah ini?

13382
12:55:33,862 --> 12:55:36,569
Kami punya banyak\n

13383
12:55:36,569 --> 12:55:39,112
Jadi saya bisa berpikir,\ninilah 3 berliannya.

13384
12:55:39,112 --> 12:55:41,362
Dan saya bisa, izinkan saya\nmemunculkannya di layar.

13385
12:55:41,362 --> 12:55:43,052
Begitu pula jika Anda berada jauh di belakang.

13386
12:55:47,991 --> 12:55:49,612
Saya bisa melakukan ini secara berurutan di sini.

13387
12:55:49,612 --> 12:55:52,022
Namun banyak di antara kita, sejujurnya,\njika diberi setumpuk kartu.

13388
12:55:52,021 --> 12:55:54,771
Dan Anda hanya ingin membersihkan\nit dan mengurutkannya secara berurutan

13389
12:55:54,771 --> 12:55:56,101
kamu mungkin melakukan hal seperti ini.

13390
12:55:56,101 --> 12:55:59,512
Nah ini masukan dari saya, 3 diamond,\n

13391
12:56:03,122 --> 12:56:06,982
Dan jika Anda terus mempelajari kartunya,\n

13392
12:56:10,552 --> 12:56:12,502
Dan Anda masih\nmembutuhkan 52 langkah.

13393
12:56:12,502 --> 12:56:15,502
Namun pada akhirnya, Anda\nsudah melakukan hashing pada semua kartu

13394
12:56:17,091 --> 12:56:19,971
Dan sekarang Anda mempunyai masalah\nukuran 13, yang mana

13395
12:56:19,972 --> 12:56:23,512
sedikit lebih dapat dipertahankan daripada\menyelesaikan satu masalah besar dengan 52 kartu.

13396
12:56:23,512 --> 12:56:25,552
Anda sekarang dapat mengerjakan 4, 13 soal ukuran.

13397
12:56:25,552 --> 12:56:29,272
Jadi hashing adalah sesuatu yang genap\n

13398
12:56:29,271 --> 12:56:34,161
Dengan memasukkan beberapa kartu, beberapa nama,\n

13399
12:56:34,161 --> 12:56:39,441
Tumpukan sementara tempat Anda\ningin mementaskannya.

13400
12:56:39,442 --> 12:56:41,924
Namun tabrakan ini tidak bisa dihindari.

13401
12:56:41,923 --> 12:56:44,631
Dan sejujurnya, jika kita terus melanjutkan\n

13402
12:56:44,631 --> 12:56:47,432
beberapa dari rantai ini akan menjadi\nlebih panjang, lebih panjang, dan lebih panjang lagi.

13403
12:56:47,432 --> 12:56:50,811
Artinya, alih-alih\nmengetahui nama seseorang dengan cepat

13404
12:56:50,811 --> 12:56:53,659
dengan mencarinya\atau memasukkannya, mungkin

13405
12:56:53,660 --> 12:56:55,202
mulai meluangkan waktu yang cukup.

13406
12:56:55,201 --> 12:56:58,252
Jadi, apa yang bisa kami lakukan untuk\nmenyelesaikan situasi seperti ini?

13407
12:56:58,252 --> 12:57:01,851
Jika masalahnya, pada dasarnya, adalah\n

13408
12:57:01,851 --> 12:57:04,868
populer, H, kita perlu\nmenerima lebih banyak masukan.

13409
12:57:04,868 --> 12:57:07,201
Bukan hanya huruf pertama tapi\nmungkin 2 huruf pertama.

13410
12:57:07,201 --> 12:57:10,252
Jadi jika kita melakukan itu, kita\ndapat melanjutkan dari A sampai Z

13411
12:57:10,252 --> 12:57:16,682
ke sesuatu yang lebih ekstrem seperti mungkin\n

13412
12:57:16,682 --> 12:57:20,152
Sehingga sekarang Harry dan Hermione\nberada di lokasi berbeda.

13413
12:57:20,152 --> 12:57:23,072
Tapi sialnya, Hagrid\nmasih bertabrakan dengan Harry.

13414
12:57:24,862 --> 12:57:27,031
Rantainya tidak terlalu panjang.

13415
12:57:27,031 --> 12:57:28,891
Namun masalahnya belum\nsecara fundamental hilang.

13416
12:57:28,891 --> 12:57:32,122
Dan dalam kasus ini, siapa pun\tahu berapa banyak ember yang kita miliki

13417
12:57:32,122 --> 12:57:40,312
meningkat menjadi, jika sekarang kita melihat bukan hanya\n

13418
12:57:42,921 --> 12:57:46,461
Jadi jawaban mudahnya\n26 kuadrat adalah 676.

13419
12:57:46,461 --> 12:57:48,051
Jadi itu lebih banyak lagi.

13420
12:57:48,052 --> 12:57:50,522
Dan inilah mengapa saya hanya menampilkan\na sedikit saja di layar.

13421
12:57:51,411 --> 12:57:54,531
Dan itu menyebarkan banyak hal secara khusus.

13422
12:57:54,531 --> 12:57:56,121
Bagaimana jika kita mengambil satu langkah lebih jauh?

13423
12:57:56,122 --> 12:58:01,612
Daripada H-A, kami melakukan seperti H-A-A,\n

13424
12:58:01,612 --> 12:58:03,561
Sekarang, kita mempunyai\nsituasi yang lebih baik.

13425
12:58:03,561 --> 12:58:05,961
Karena Hermoine punya satu tempat untuknya.

13426
12:58:09,322 --> 12:58:11,362
Tapi ada trade off di sini.

13427
12:58:11,362 --> 12:58:14,722
Keuntungannya sekarang, secara hitung,\nkita dapat menemukan lokasinya

13428
12:58:17,512 --> 12:58:21,422
Namun 3 adalah konstan, tidak peduli berapa banyak\n

13429
12:58:21,421 --> 12:58:24,633
Tapi apa sisi buruknya di sini?

13430
12:58:27,771 --> 12:58:33,322
Kini kami memiliki hingga 17.576 keranjang, yang\n

13431
12:58:33,322 --> 12:58:35,222
Komputer mempunyai banyak\nmemori saat ini.

13432
12:58:35,222 --> 12:58:38,932
Namun seperti yang bisa Anda simpulkan,\nSaya tidak bisa berpikir

13433
12:58:38,932 --> 12:58:43,641
dari seseorang yang namanya dimulai dengan\n

13434
12:58:44,313 --> 12:58:46,521
Dan jika kita terus berjalan,\npasti tidak ada yang tahu

13435
12:58:46,521 --> 12:58:49,521
yang namanya dimulai dengan\nZ-Z-Z atau A-A-A. Ada

13436
12:58:49,521 --> 12:58:54,871
banyak kombinasi yang tidak berguna\n

13437
12:58:54,872 --> 12:58:58,522
sehingga Anda dapat melakukan sedikit perhitungan\n

13438
12:58:59,773 --> 12:59:01,231
Tapi mereka hanya akan kosong.

13439
12:59:01,232 --> 12:59:04,862
Jadi ini adalah array yang sangat jarang\npopulasinya.

13440
12:59:04,862 --> 12:59:08,122
Jadi, pada akhirnya, apa pengaruhnya\nterhadap kinerja?

13441
12:59:08,122 --> 12:59:10,882
Mari kita pertimbangkan lagi, di\n

13442
12:59:10,881 --> 12:59:14,271
Ternyata hash\ntable, secara teknis

13443
12:59:14,271 --> 12:59:18,351
masih akan memberi kita\nO Besar dari n dalam kasus terburuk.

13444
12:59:18,951 --> 12:59:21,921
Jika kamu mempunyai sifat jahat yang gila\n

13445
12:59:21,921 --> 12:59:25,432
memiliki nama yang dimulai dengan A, atau\n

13446
12:59:25,432 --> 12:59:26,722
kamu benar-benar tidak beruntung.

13447
12:59:26,722 --> 12:59:28,599
Dan rantai Anda sangat panjang.

13448
12:59:28,599 --> 12:59:30,682
Kalau begitu, pada saat itu,\itu hanyalah daftar tertaut.

13449
12:59:31,599 --> 12:59:33,862
Ini seperti situasi\nyang buruk dengan pohon, di mana

13450
12:59:33,862 --> 12:59:39,682
jika Anda memasukkannya tanpa memikirkan\n

13451
12:59:39,682 --> 12:59:43,881
Namun ada perbedaan\nantara kinerja teoritis

13452
12:59:45,502 --> 12:59:48,771
Jika Anda melihat kembali\ntabel hash di sini

13453
12:59:48,771 --> 12:59:55,371
dalam praktiknya, hal ini benar-benar berjalan\n

13454
12:59:55,372 --> 12:59:58,342
Secara matematis, secara asimtotik,\nnotasi O besar, tentu saja.

13455
13:00:00,112 --> 13:00:03,982
Namun jika yang benar-benar kita pedulikan\n

13456
13:00:03,982 --> 13:00:06,472
ada sesuatu yang bisa dikatakan\nuntuk menyusun struktur data.

13457
13:00:06,472 --> 13:00:09,052
Secara teknis, jika data\nterdistribusi secara merata

13458
13:00:09,052 --> 13:00:12,932
26 kali lebih cepat dibandingkan\na daftar tertaut saja.

13459
13:00:12,932 --> 13:00:18,201
Jadi, ada juga ketegangan\nantara sistem, jenis CS

13460
13:00:19,328 --> 13:00:21,411
Ya, secara teori,\nsemuanya sama.

13461
13:00:21,411 --> 13:00:24,141
Namun dalam praktiknya, untuk\npembuatan perangkat lunak dunia nyata

13462
13:00:24,141 --> 13:00:29,872
meningkatkan kecepatan ini sebanyak 26\n

13463
13:00:29,872 --> 13:00:31,652
mungkin benar-benar membuat perbedaan besar.

13464
13:00:31,652 --> 13:00:33,152
Tapi akan ada trade off.

13465
13:00:33,152 --> 13:00:37,022
Dan itu biasanya hal lain\n

13466
13:00:37,521 --> 13:00:40,581
Bagaimana dengan struktur\ndata lain yang dapat kita buat.

13467
13:00:40,582 --> 13:00:43,492
Izinkan saya mempercepat\nsesuatu yang disebut percobaan.

13468
13:00:43,491 --> 13:00:46,402
Jadi coba saja, nama\naneh dalam pengucapannya.

13469
13:00:46,402 --> 13:00:49,432
Singkatan dari pengambilan,\nbiasanya diucapkan trie.

13470
13:00:49,432 --> 13:00:55,162
Trie adalah pohon yang sebenarnya\ngmemberi kita pencarian waktu yang konstan

13471
13:00:59,572 --> 13:01:04,711
Dalam dunia percobaan, Anda\nmembuat pohon dari array.

13472
13:01:04,711 --> 13:01:07,042
Jadi kita benar-benar memasuki\nwilayah Frankenstein

13473
13:01:07,042 --> 13:01:09,802
hanya membangun berbagai hal dengan\nsuku cadang struktur data

13474
13:01:10,982 --> 13:01:13,942
Namun akar dari trie\nis itu sendiri adalah sebuah array.

13475
13:01:16,012 --> 13:01:22,281
Dimana setiap elemen dalam\ntrie tersebut menunjuk ke node lain

13476
13:01:22,281 --> 13:01:23,991
artinya array lain.

13477
13:01:23,991 --> 13:01:26,961
Dan masing-masing lokasi dalam\narray mewakili sebuah huruf

13478
13:01:26,961 --> 13:01:28,402
alfabet seperti A sampai Z.

13479
13:01:28,402 --> 13:01:32,452
Jadi misalnya, jika Anda ingin menyimpan\n

13480
13:01:32,451 --> 13:01:36,531
tidak di tabel hash, tidak di tautan\n

13481
13:01:36,531 --> 13:01:41,301
Apa yang akan Anda lakukan adalah hash pada setiap\n

13482
13:01:42,122 --> 13:01:45,532
Jadi trie itu seperti tabel\nhash multi-tingkat, dalam arti tertentu.

13483
13:01:45,531 --> 13:01:47,252
Tempat pertama kali Anda melihat\nahur huruf pertama

13484
13:01:47,252 --> 13:01:49,959
lalu huruf kedua, lalu\n

13485
13:01:49,959 --> 13:01:53,421
Misalnya, masing-masing\nlokasi ini mewakili huruf A

13486
13:01:53,421 --> 13:01:56,932
melalui Z. Misalkan saya ingin\ninmemasukkan nama seseorang ke dalamnya

13487
13:01:56,932 --> 13:02:01,012
yang dimulai dengan huruf\nH, seperti Hagrid misalnya.

13488
13:02:01,012 --> 13:02:03,842
Baiklah, saya pergi ke lokasi\nH. Saya melihatnya nol

13489
13:02:03,841 --> 13:02:06,921
yang berarti saya harus melakukan malloc sendiri\n

13490
13:02:08,451 --> 13:02:12,291
Lalu, misalkan saya ingin menyimpan\n

13491
13:02:12,292 --> 13:02:14,914
A. Jadi saya pergi ke\nlokasi itu di node kedua.

13492
13:02:14,913 --> 13:02:16,371
Dan begitu, oke, saat ini nol.

13493
13:02:17,413 --> 13:02:19,921
Jadi saya mengalokasikan node lain\nusing malloc atau sejenisnya.

13494
13:02:19,921 --> 13:02:24,171
Dan sekarang saya punya H-A-G. Dan\nSaya melanjutkan ini dengan R-I-D.

13495
13:02:24,171 --> 13:02:27,722
Dan kemudian, ketika saya sampai ke\nbagian bawah nama orang ini

13496
13:02:27,722 --> 13:02:30,322
Saya hanya perlu menunjukkan\ndi sini dengan warna, tapi mungkin

13497
13:02:30,322 --> 13:02:31,762
dengan nilai Boolean atau semacamnya.

13498
13:02:31,762 --> 13:02:35,672
Seperti nilai sebenarnya yang\nmengatakan, sebuah nama berhenti di sini.

13499
13:02:35,671 --> 13:02:41,222
Supaya jelas orang tersebut\n

13500
13:02:41,222 --> 13:02:45,752
atau H-A-G-R-I. Itu H-A-G-R-I-D.\nDan D berwarna hijau

13501
13:02:45,752 --> 13:02:49,082
hanya untuk menunjukkan ada beberapa\n

13502
13:02:49,082 --> 13:02:52,781
Ini adalah simpul\nyang namanya berhenti.

13503
13:02:52,781 --> 13:02:57,722
Dan jika saya melanjutkan logika ini, inilah\n

13504
13:02:57,722 --> 13:03:00,902
Dan inilah cara\nmemasukkan seseorang seperti Hermione.

13505
13:03:00,902 --> 13:03:05,491
Dan apa yang menarik tentang\n

13506
13:03:07,411 --> 13:03:10,471
Hal ini mulai menarik\nkarena Anda menggunakan kembali ruang.

13507
13:03:10,472 --> 13:03:15,391
Anda menggunakan node yang sama\nuntuk nama seperti H-A-G dan H-A-R

13508
13:03:15,391 --> 13:03:17,851
karena mereka mempunyai H dan A yang sama.

13509
13:03:17,851 --> 13:03:20,112
Dan mereka semua mempunyai huruf H yang sama.

13510
13:03:20,112 --> 13:03:23,822
Jadi, Anda memiliki struktur data ini\nyang berupa pohon.

13511
13:03:23,822 --> 13:03:27,572
Setiap node di pohon\nis, itu sendiri, adalah sebuah array.

13512
13:03:27,572 --> 13:03:31,171
Oleh karena itu, kami mungkin menerapkan\n

13513
13:03:31,171 --> 13:03:36,676
Setiap node berisi, saya akan\ndo melakukannya dalam urutan terbalik, sebuah array.

13514
13:03:36,677 --> 13:03:39,302
Saya akan menyebutnya anak-anak karena\nitulah yang sebenarnya diwakilinya.

13515
13:03:39,302 --> 13:03:41,612
Maksimal 26 anak untuk\nsetiap node ini.

13516
13:03:42,911 --> 13:03:45,841
Jadi saya mungkin menggunakan\na konstan untuk nomor 26

13517
13:03:45,841 --> 13:03:47,881
untuk memberi diriku 26\nhuruf alfabet.

13518
13:03:47,881 --> 13:03:52,112
Dan masing-masing array\nmenyimpan bintang simpul sebanyak itu.

13519
13:03:52,112 --> 13:03:54,031
Banyak sekali petunjuk ke node lain.

13520
13:03:54,031 --> 13:03:55,502
Dan inilah contoh Bool.

13521
13:03:55,502 --> 13:03:58,232
Ini adalah apa yang saya wakili dalam\nhijau pada slide beberapa saat yang lalu.

13522
13:03:58,232 --> 13:04:00,062
Saya juga membutuhkan data lain.

13523
13:04:00,061 --> 13:04:03,002
Hanya 0 atau 1, benar\atau salah, yang menyatakan ya.

13524
13:04:03,002 --> 13:04:08,292
Sebuah nama berhenti di node ini atau hanya\n

13525
13:04:08,292 --> 13:04:12,572
Namun kelebihannya adalah\ntingginya pohon ini

13526
13:04:12,572 --> 13:04:15,572
hanya setinggi\nnama terpanjang orang tersebut.

13527
13:04:15,572 --> 13:04:22,411
H-A-G-R-I-D atau H-E-R-M-O-I-N-E. Dan\n

13528
13:04:22,411 --> 13:04:26,221
orang-orang ada dalam struktur data ini,\nsaat ini ada 3 orang

13529
13:04:26,222 --> 13:04:30,632
jika ada 3 juta, itu akan\n

13530
13:04:31,982 --> 13:04:37,232
H-E-R-M-I-O-N-E. Jadi, totalnya 8 langkah.

13531
13:04:37,232 --> 13:04:42,062
Tidak masalah jika ada 2 orang lainnya,\n

13532
13:04:42,061 --> 13:04:46,141
Karena jalur menuju namanya\nselalu berada di jalur yang sama.

13533
13:04:46,141 --> 13:04:51,031
Dan jika Anda berasumsi bahwa ada\n

13534
13:04:51,902 --> 13:04:53,991
Mungkin 40, 100, terserah.

13535
13:04:53,991 --> 13:04:55,741
Apa pun nama\nyang terpanjang di dunia.

13536
13:04:56,641 --> 13:04:59,112
Mungkin 40, 100, tapi itu konstan.

13537
13:04:59,112 --> 13:05:02,322
Artinya dengan a\ntrie, secara teknis

13538
13:05:02,322 --> 13:05:06,961
ini adalah kasus pencarian Anda\n

13539
13:05:09,002 --> 13:05:12,061
Waktunya konstan, karena\ntidak seperti struktur data lainnya

13540
13:05:12,061 --> 13:05:16,921
kami telah melihat, dengan mencoba, jumlahnya\n

13541
13:05:16,921 --> 13:05:20,402
atau memasukkan satu orang\nsepenuhnya tidak bergantung pada caranya

13542
13:05:20,402 --> 13:05:24,692
banyak bagian data lain yang\nsudah ada dalam struktur data.

13543
13:05:24,692 --> 13:05:27,452
Dan hal ini berlaku meskipun satu\nnama merupakan awalan dari nama lain.

13544
13:05:27,451 --> 13:05:30,854
Menurutku tidak ada Daniel atau\n

13545
13:05:31,771 --> 13:05:35,881
Tapi, D-A-N-I-E-L bisa jadi satu nama.

13546
13:05:35,881 --> 13:05:38,470
Oleh karena itu, kami memiliki\na warna hijau di sana.

13547
13:05:38,470 --> 13:05:40,262
Dan jika ada nama\nyang lebih panjang seperti Danielle.

13548
13:05:40,262 --> 13:05:42,242
Lalu, teruskan perjalanan\nsampai tiba di E.

13549
13:05:42,241 --> 13:05:45,031
Jadi Anda masih dapat memiliki\na mencoba, satu nama saja

13550
13:05:45,031 --> 13:05:47,141
substring dari nama lain.

13551
13:05:47,141 --> 13:05:49,862
Jadi bukan berarti kami\nmenciptakan masalah di sana.

13552
13:05:49,862 --> 13:05:51,533
Hal itu juga masih mungkin terjadi.

13553
13:05:51,533 --> 13:05:54,241
Namun pada akhirnya, itu hanya\n

13554
13:05:54,241 --> 13:05:55,891
untuk menemukan salah satu dari orang-orang ini.

13555
13:05:55,891 --> 13:05:58,802
Dan sekali lagi, itulah\nyang paling menarik.

13556
13:05:58,802 --> 13:06:00,880
Bahwa Anda secara efektif memiliki\nwaktu pencarian yang konstan.

13557
13:06:01,921 --> 13:06:05,635
Kita telah melalui keseluruhan cerita ini\n

13558
13:06:05,635 --> 13:06:07,052
Dan kemudian, naik menjadi n kuadrat.

13559
13:06:07,832 --> 13:06:12,912
Dan sekarang waktu konstan, berapa harganya\n

13560
13:06:19,021 --> 13:06:21,451
Faktanya, percobaan sebenarnya tidak\sesering digunakan

13561
13:06:21,451 --> 13:06:24,981
luar biasa kedengarannya\bukan level CS di sini.

13562
13:06:28,216 --> 13:06:30,379
HADIRIN: Mirip seperti [TIDAK TERDENGAR].

13563
13:06:31,171 --> 13:06:33,091
Jika Anda menyimpan semua\narray sialan ini

13564
13:06:33,091 --> 13:06:36,351
ini, sekali lagi, merupakan struktur data\npopulasinya jarang.

13565
13:06:37,351 --> 13:06:41,281
Memang hanya ada 3 nama, tapi sebagian besar\n

13566
13:06:42,972 --> 13:06:46,022
Jadi ini adalah struktur data\nyang sangat luas, jika Anda mau.

13567
13:06:46,021 --> 13:06:48,521
Ini menggunakan\nmemori dalam jumlah besar untuk menyimpan nama.

13568
13:06:48,521 --> 13:06:50,341
Tapi sekali lagi, Anda harus memilih jalur.

13569
13:06:50,341 --> 13:06:53,461
Entah Anda akan meminimalkan ruang\n

13570
13:06:53,461 --> 13:06:56,722
Tidak mungkin mendapatkan\nyang terbaik dari kedua hal tersebut.

13571
13:06:56,722 --> 13:06:58,772
Anda harus memutuskan di mana\ntitik beloknya

13572
13:06:58,771 --> 13:07:01,591
untuk perangkat yang Anda tulis\n

13573
13:07:02,942 --> 13:07:06,461
Dan sekali lagi, dengan mempertimbangkan\nsemua hal ini.

13574
13:07:06,461 --> 13:07:08,881
Jadi yang terakhir, mari kita lakukan\nabstraksi lebih lanjut.

13575
13:07:08,881 --> 13:07:12,391
Jadi levelnya lebih tinggi lagi untuk membahas\nsesuatu yang bersifat umum

13576
13:07:12,391 --> 13:07:14,444
dikenal sebagai struktur data abstrak.

13577
13:07:14,444 --> 13:07:16,152
Ternyata kami bisa\nmenghabiskan waktu seharian penuh

13578
13:07:16,152 --> 13:07:17,732
sepanjang minggu, membicarakan\nberbagai hal yang kami lakukan

13579
13:07:17,732 --> 13:07:19,182
dapat dibangun dengan struktur data ini.

13580
13:07:19,182 --> 13:07:21,139
Namun sebagian besar,\nsekarang kita memiliki array.

13581
13:07:21,139 --> 13:07:23,911
Sekarang kita telah menautkan daftar\atau pohon sepupunya, yang mana

13582
13:07:24,910 --> 13:07:26,702
Dan lebih dari itu,\tidak ada grafik di mana

13583
13:07:26,701 --> 13:07:29,888
panahnya bisa masuk berkali-kali\n

13584
13:07:29,889 --> 13:07:32,222
Sekarang kita memiliki kemampuan\nuntuk menyatukan berbagai hal

13585
13:07:32,222 --> 13:07:34,272
kami dapat menyelesaikan semua\njenis masalah yang berbeda.

13586
13:07:34,271 --> 13:07:38,221
Jadi, misalnya, tipe struktur data yang sangat\numum

13587
13:07:38,222 --> 13:07:42,211
untuk digunakan dalam suatu program, atau bahkan\n

13588
13:07:42,211 --> 13:07:46,262
Antrean adalah struktur data\nseperti garis di luar penyimpanan.

13589
13:07:46,262 --> 13:07:48,332
Dimana ia memiliki apa yang\ndisebut properti FIFO.

13590
13:07:49,722 --> 13:07:52,141
Hal ini bagus untuk keadilan,\namun setidaknya di dunia manusia.

13591
13:07:52,141 --> 13:07:56,281
Dan jika Anda pernah menunggu di luar\n

13592
13:07:56,281 --> 13:07:58,472
atau restoran lain\nndi dekatnya, mungkin

13593
13:07:58,472 --> 13:08:01,262
jika Anda mengantri di\nkonter, Anda mau

13594
13:08:01,262 --> 13:08:03,752
mereka menyimpan untuk memelihara sistem FIFO.

13595
13:08:05,012 --> 13:08:08,641
Sehingga siapa pun yang berada di urutan pertama mendapat\n

13596
13:08:08,641 --> 13:08:12,192
Jadi antrian sebenarnya juga merupakan\nistilah ilmu komputer.

13597
13:08:12,192 --> 13:08:14,942
Dan meskipun Anda masih berada di\n

13598
13:08:14,942 --> 13:08:17,192
ada hal yang mungkin\npernah Anda dengar tentang printer

13599
13:08:17,192 --> 13:08:19,531
antrian, yang juga melakukan hal-hal secara berurutan.

13600
13:08:19,531 --> 13:08:21,949
Orang pertama yang mengirim\nesainya ke percetakan

13601
13:08:21,949 --> 13:08:24,031
idealnya, harus dicetak\nsebelum orang terakhir

13602
13:08:24,031 --> 13:08:26,402
untuk mengirim esai mereka ke percetakan.

13603
13:08:26,402 --> 13:08:28,202
Sekali lagi, demi keadilan.

13604
13:08:28,201 --> 13:08:29,851
Tapi bagaimana Anda bisa menerapkan antrian?

13605
13:08:29,851 --> 13:08:32,731
Biasanya Anda harus\nmenerapkan 2 operasi dasar

13606
13:08:34,292 --> 13:08:37,391
Jadi menambahkan sesuatu ke dalamnya dan\nmenghapus sesuatu darinya.

13607
13:08:37,391 --> 13:08:41,131
Dan yang menarik di sini adalah\n

13608
13:08:41,131 --> 13:08:44,131
Di dunia manusia, Anda akan\n

13609
13:08:44,131 --> 13:08:46,771
bagi manusia untuk berbaris dari kiri\nke kanan, atau kanan ke kiri.

13610
13:08:47,815 --> 13:08:50,732
Seperti antrian printer, jika Anda mengirim\n

13611
13:08:50,732 --> 13:08:52,832
sejumlah besar esai\atau dokumen, ya, Anda

13612
13:08:52,832 --> 13:08:54,912
membutuhkan sepotong memori seperti array.

13613
13:08:55,411 --> 13:08:57,631
Nah, kalau pakai\narray, apa masalahnya

13614
13:08:57,631 --> 13:09:01,241
hal itu bisa terjadi di dunia\nopercetakan misalnya?

13615
13:09:01,241 --> 13:09:04,502
Jika Anda menggunakan array untuk menyimpan semua\n

13616
13:09:04,502 --> 13:09:05,660
HADIRIN: Bisa diisi.

13617
13:09:05,660 --> 13:09:07,202
PEMBICARA 1 : Bisa diisi ya.

13618
13:09:07,201 --> 13:09:10,502
Jadi jika programmer memutuskan, HP atau\n

13619
13:09:10,502 --> 13:09:14,162
oh, Anda dapat mengirim senilai satu megabita\n

13620
13:09:14,161 --> 13:09:16,211
Pada titik tertentu Anda mungkin\nmendapatkan pesan kesalahan

13621
13:09:16,211 --> 13:09:17,582
yang berbunyi, maaf kehabisan ingatan.

13622
13:09:18,476 --> 13:09:20,851
Ini mungkin merupakan solusi\nyang masuk akal, namun sedikit mengganggu.

13623
13:09:20,851 --> 13:09:24,481
Atau HP dapat menulis kode yang mungkin\nsecara dinamis mengubah ukuran array

13624
13:09:25,152 --> 13:09:27,722
Namun pada saat itu, mungkin mereka\nsebaiknya menggunakan daftar tertaut saja.

13625
13:09:28,652 --> 13:09:32,372
Jadi di sana, Anda juga bisa\nmenerapkan gagasan antrean

13626
13:09:32,372 --> 13:09:33,720
menggunakan daftar tertaut sebagai gantinya.

13627
13:09:33,720 --> 13:09:35,762
Anda akan menghabiskan lebih banyak\nmemori, namun sebenarnya tidak

13628
13:09:35,762 --> 13:09:38,132
akan kehabisan ruang di array Anda.

13629
13:09:38,131 --> 13:09:39,974
Yang mana mungkin lebih menarik.

13630
13:09:39,974 --> 13:09:41,641
Hal ini terjadi bahkan di dunia fisik.

13631
13:09:41,641 --> 13:09:45,122
Anda pergi ke toko dan mulai memiliki\n

13632
13:09:45,122 --> 13:09:49,408
Dan misalnya, untuk toko yang sangat sibuk,\n

13633
13:09:49,408 --> 13:09:51,991
Namun dalam hal ini, ia cenderung\nlebih berupa array hanya karena

13634
13:09:51,991 --> 13:09:54,447
dari gagasan fisik\nmanusia berbaris.

13635
13:09:54,447 --> 13:09:56,072
Namun ada juga struktur data lainnya.

13636
13:09:56,072 --> 13:09:59,197
Jika Anda pernah pergi ke ruang makan\n

13637
13:09:59,197 --> 13:10:04,351
baki, biasanya Anda mengambil\n

13638
13:10:04,351 --> 13:10:06,211
bukan baki pertama yang dibersihkan.

13639
13:10:06,722 --> 13:10:10,652
Karena nampan kafetaria ini\nbertumpuk di atas satu sama lain.

13640
13:10:10,652 --> 13:10:13,891
Dan memang tumpukan adalah\ntipe lain dari struktur data abstrak.

13641
13:10:13,891 --> 13:10:16,351
Di dunia fisik, itu\nsecara harafiah merupakan sesuatu yang bersifat fisik

13642
13:10:18,512 --> 13:10:21,422
Yang memiliki apa\nyang kami sebut sebagai properti LIFO.

13643
13:10:22,942 --> 13:10:24,692
Sehingga benda-benda ini\nkeluar dari mesin cuci

13644
13:10:24,692 --> 13:10:27,002
mereka menempatkan yang terbaru\ndi atas.

13645
13:10:27,002 --> 13:10:30,722
Dan Anda, sebagai manusia, mungkin\n

13646
13:10:30,722 --> 13:10:33,182
Yang berarti\berikutnya, tidak ada seorang pun di kampus

13647
13:10:33,182 --> 13:10:36,616
mungkin pernah menggunakan baki pertama itu.

13648
13:10:36,616 --> 13:10:38,491
Yang mungkin baik-baik saja\nin dalam dunia baki

13649
13:10:38,491 --> 13:10:42,451
tapi akan sangat buruk di dunia\n

13650
13:10:42,451 --> 13:10:44,252
adalah properti yang sedang diimplementasikan.

13651
13:10:44,252 --> 13:10:46,322
Tapi di sini juga, bisa berupa array.

13652
13:10:47,432 --> 13:10:49,014
Dan Anda melihat ini, sejujurnya, setiap hari.

13653
13:10:49,014 --> 13:10:51,241
Jika Anda menggunakan Gmail\ndan kotak masuk Gmail Anda.

13654
13:10:51,241 --> 13:10:53,761
Itu sebenarnya adalah tumpukan,\namun setidaknya secara default

13655
13:10:53,762 --> 13:10:57,160
di mana pesan terbaru\nyang terakhir masuk adalah pesan pertama

13656
13:10:58,201 --> 13:11:00,061
Itu adalah struktur data LIFO.

13657
13:11:00,061 --> 13:11:02,191
Artinya, Anda akan melihat\nemail terbaru Anda.

13658
13:11:02,192 --> 13:11:04,650
Namun jika hari Anda sibuk,\nAnda menerima banyak email

13659
13:11:04,650 --> 13:11:05,912
itu mungkin bukan hal yang baik.

13660
13:11:05,911 --> 13:11:08,311
Karena sekarang Anda mengabaikan\norang yang menulis surat kepada Anda

13661
13:11:08,311 --> 13:11:10,621
jauh lebih awal pada hari atau minggu itu.

13662
13:11:10,622 --> 13:11:13,082
Jadi LIFO dan FIFO hanyalah\nhanya properti yang Anda miliki

13663
13:11:13,082 --> 13:11:15,842
dapat dicapai dengan\njenis struktur data yang sangat spesifik ini.

13664
13:11:15,841 --> 13:11:17,591
Dan parlemen\di dunia yang penuh tumpukan

13665
13:11:17,591 --> 13:11:21,451
adalah mendorong sesuatu ke\ntumpukan atau mengeluarkan sesuatu.

13666
13:11:21,451 --> 13:11:23,641
Berikut ini, misalnya,\sebagai contoh alasannya

13667
13:11:23,641 --> 13:11:24,932
semoga kamu selalu memakai warna yang sama.

13668
13:11:24,932 --> 13:11:27,192
Nah, jika Anda menyimpan semua\npakaian Anda dalam tumpukan

13669
13:11:27,192 --> 13:11:29,012
Anda mungkin tidak akan pernah mendapatkan\nwarna yang berbeda

13670
13:11:29,012 --> 13:11:30,452
pakaian di bagian bawah daftar.

13671
13:11:30,451 --> 13:11:35,371
Dan faktanya, untuk melukiskan gambaran ini,\n

13672
13:11:35,372 --> 13:11:38,372
Sekadar melukiskannya di sini, dibuat\noleh anggota fakultas di tempat lain.

13673
13:11:38,372 --> 13:11:41,312
Mari kita redupkan lampu\nsebentar atau 2 menit saja di sini.

13674
13:11:41,311 --> 13:11:45,466
Agar kita dapat melihat\nat Jack mempelajari beberapa fakta.

13675
13:11:46,091 --> 13:11:48,841
PEMBICARA 2: Pada suatu ketika,\nada seorang pria bernama Jack.

13676
13:11:48,841 --> 13:11:52,231
Kalau soal mencari teman\nJack tidak punya bakat.

13677
13:11:52,232 --> 13:11:55,202
Jadi Jack pergi untuk berbicara dengan\npria paling populer yang dia kenal.

13678
13:11:55,201 --> 13:11:57,871
Dia menghampiri Lou dan\bertanya, apa yang harus saya lakukan?

13679
13:11:57,872 --> 13:12:00,332
Lou melihat temannya\nsangat tertekan.

13680
13:12:00,332 --> 13:12:03,042
Baiklah, Lou memulai,\nlihat saja bagaimana kamu berpakaian.

13681
13:12:03,042 --> 13:12:05,612
Apakah Anda tidak punya pakaian\ndengan tampilan berbeda?

13682
13:12:08,012 --> 13:12:10,202
Datanglah ke rumah saya dan\nSaya akan menunjukkannya kepada Anda.

13683
13:12:10,201 --> 13:12:11,491
Jadi mereka pergi dari Jack's.

13684
13:12:11,491 --> 13:12:15,182
Dan Jack menunjukkan kotak itu kepada Lou, di mana dia\n

13685
13:12:16,232 --> 13:12:19,202
Lou berkata, aku lihat pakaianmu sudah bertumpuk.

13686
13:12:19,201 --> 13:12:21,781
Mengapa Anda tidak memakainya\nsekali-sekali?

13687
13:12:21,781 --> 13:12:24,932
Jack berkata, baiklah, saat aku\nmelepas pakaian dan kaus kaki

13688
13:12:24,932 --> 13:12:27,662
Saya mencucinya dan menyimpannya\ndi dalam kotak.

13689
13:12:27,661 --> 13:12:30,151
Kemudian datanglah\npagi berikutnya dan saya berangkat.

13690
13:12:30,152 --> 13:12:33,391
Aku pergi ke kotak dan melepaskan\npakaianku dari atas.

13691
13:12:33,391 --> 13:12:36,002
Lou segera menyadari\nmasalahnya dengan Jack.

13692
13:12:36,002 --> 13:12:38,972
Dia menyimpan pakaian, CD,\ndan buku di tumpukan.

13693
13:12:38,972 --> 13:12:41,402
Saat dia meraih\nsesuatu untuk dibaca atau dipakai

13694
13:12:41,402 --> 13:12:44,012
dia memilih buku teratas atau pakaian dalam.

13695
13:12:44,012 --> 13:12:46,402
Lalu setelah selesai dia\nakan mengembalikannya.

13696
13:12:46,402 --> 13:12:48,982
Kembali itu akan berada di atas tumpukan.

13697
13:12:48,982 --> 13:12:51,352
Saya tahu solusinya,\nkata Lou yang penuh kemenangan.

13698
13:12:51,351 --> 13:12:53,991
Anda perlu belajar\nmulai menggunakan antrean.

13699
13:12:53,991 --> 13:12:56,781
Lou mengambil pakaian Jack\ndan menggantungnya di lemari.

13700
13:12:56,781 --> 13:12:59,601
Dan setelah dia mengosongkan\nkotaknya, dia langsung melemparkannya.

13701
13:12:59,601 --> 13:13:03,472
Lalu dia berkata, sekarang Jack, di akhir\n

13702
13:13:04,951 --> 13:13:07,671
Lalu besok pagi saat\nAnda melihat sinar matahari, ambillah

13703
13:13:07,671 --> 13:13:10,402
pakaianmu dari kanan,\ndari akhir baris.

13704
13:13:10,402 --> 13:13:13,281
Tidakkah kamu lihat, kata\nLou, itu akan menyenangkan sekali.

13705
13:13:13,281 --> 13:13:16,612
Anda akan mengenakan semuanya satu kali\nsebelum mengenakan sesuatu dua kali.

13706
13:13:16,612 --> 13:13:19,552
Dan dengan semua yang ada di antrean\nin lemari dan raknya

13707
13:13:19,552 --> 13:13:22,162
Jack mulai merasa\ncukup yakin pada dirinya sendiri.

13708
13:13:22,161 --> 13:13:24,636
Semua berkat Lou dan\nantreannya yang luar biasa.

13709
13:13:26,701 --> 13:13:29,701
PEMBICARA 1: Jadi hanya untuk membantu Anda menyadari\n

13710
13:13:33,862 --> 13:13:35,542
Jika Anda pernah mengantri di tempat ini.

13711
13:13:37,461 --> 13:13:40,281
Oke, jadi sweetgreen, tempat salad\nkecil di alun-alun.

13712
13:13:40,281 --> 13:13:42,171
Ini jika Anda memesan\nonline atau terlebih dahulu

13713
13:13:42,171 --> 13:13:44,713
makanan Anda berakhir sesuai dengan\nhuruf pertama nama Anda.

13714
13:13:44,713 --> 13:13:46,963
Yang sebenarnya terdengar sangat\nmengingatkan pada sesuatu

13715
13:13:47,781 --> 13:13:50,841
Faktanya, tidak peduli apakah\n

13716
13:13:50,841 --> 13:13:52,611
melakukannya, dengan array dan daftar tertaut.

13717
13:13:52,612 --> 13:13:54,817
Atau dengan 3 rak seperti ini.

13718
13:13:54,817 --> 13:13:57,802
Ini sebenarnya adalah tipe data\nabstrak yang disebut kamus.

13719
13:13:57,802 --> 13:14:01,162
Dan kamus, seperti di\n kami

13720
13:14:01,161 --> 13:14:02,871
Kata-kata dan definisinya.

13721
13:14:02,872 --> 13:14:07,372
Ini hanya memiliki huruf\nalfabet dan salad sebagai nilainya.

13722
13:14:07,372 --> 13:14:09,742
Namun di sini juga, ada\na kendala dunia nyata.

13723
13:14:09,741 --> 13:14:13,222
Dalam skenario seperti apa\nsistem ini di sweetgreen

13724
13:14:13,222 --> 13:14:15,891
berubah menjadi suatu masalah, misalnya?

13725
13:14:15,891 --> 13:14:19,582
Karena mereka juga hanya menggunakan\nruangan terbatas, penyimpanan terbatas.

13726
13:14:22,012 --> 13:14:23,391
Jika mereka kehabisan ruang\bukan rak dan masih ada

13727
13:14:23,391 --> 13:14:25,862
banyak orang yang namanya\ndimulai dengan D, atau E, atau apa pun.

13728
13:14:26,781 --> 13:14:29,362
Dan kemudian, mungkin, mereka seperti\tidak mengalir ke huruf E atau F.

13729
13:14:29,362 --> 13:14:31,281
Dan mereka mungkin tidak\nterlalu peduli karena manusia mana pun

13730
13:14:31,281 --> 13:14:33,771
akan datang, dan\n

13731
13:14:33,771 --> 13:14:36,261
Namun dalam dunia\nkomputer, Andalah yang membuat kode

13732
13:14:36,262 --> 13:14:38,152
dan harus sangat tepat.

13733
13:14:38,152 --> 13:14:41,722
Kami pikir kami akan melakukan\melakukan satu hal terakhir di sini.

13734
13:14:41,722 --> 13:14:45,527
Sebelumnya, kami menyiapkan\nsemacam daftar tertaut di antara penonton.

13735
13:14:45,527 --> 13:14:47,152
Karena ini sudah menjadi hal kecil.

13736
13:14:47,152 --> 13:14:50,012
Saya mulai mewakili\nawal dari daftar tertaut ini.

13737
13:14:50,012 --> 13:14:54,592
Dan sejauh ini saya punya penunjuk\ndi sini dengan lokasi kursi G9.

13738
13:14:54,591 --> 13:14:57,981
Siapa pun yang tergabung dalam G9, maukah\nAnda berdiri?

13739
13:14:57,982 --> 13:15:00,652
Dan surat apa yang ada di lembarmu di sana?

13740
13:15:01,582 --> 13:15:04,132
PEMBICARA 1: Oke, jadi Anda\nmemiliki S15 dan surat Anda--

13741
13:15:07,161 --> 13:15:09,471
Jadi saya melihat Anda memegang\na C di node Anda.

13742
13:15:09,472 --> 13:15:12,982
Anda menunjuk ke, jika\nAnda bisa secara fisik, F15.

13743
13:15:15,262 --> 13:15:17,872
PEMBICARA 1: Anda mempunyai huruf S. Dan\nsiapa yang harus Anda tunjuk?

13744
13:15:26,302 --> 13:15:30,502
F12, jika Anda ingin berdiri sambil memegang\n

13745
13:16:54,512 --> 13:16:58,322
DAVID J. MALAN: Baiklah, ini\n

13746
13:16:58,322 --> 13:17:00,980
Dan ini adalah minggu di mana\nAnda belajar bahasa lain.

13747
13:17:00,980 --> 13:17:03,272
Namun tujuannya bukan hanya untuk\nmengajarkan Anda bahasa lain

13748
13:17:03,271 --> 13:17:06,002
demi bahasa,\namun kita melakukan transisi hari ini

13749
13:17:06,002 --> 13:17:09,302
dan dalam beberapa minggu mendatang dari C, di mana\n

13750
13:17:09,961 --> 13:17:14,051
Tujuan akhirnya adalah untuk mengajari Anda semua\n

13751
13:17:14,052 --> 13:17:16,542
sehingga pada akhir\nkursus ini, hal tersebut tidak lagi ada dalam pikiran Anda

13752
13:17:16,542 --> 13:17:19,232
fakta bahwa Anda mempelajari\ncara memprogram dalam C

13753
13:17:19,232 --> 13:17:21,482
atau mempelajari beberapa minggu yang lalu\ncara memprogram di Scratch

13754
13:17:21,482 --> 13:17:24,692
tapi sebenarnya bagaimana Anda mempelajari\ncara memprogram secara mendasar

13755
13:17:24,692 --> 13:17:27,152
dalam paradigma yang dikenal sebagai\npemrograman prosedural

13756
13:17:27,152 --> 13:17:29,972
serta beberapa selera\nhari ini, dan minggu-minggu mendatang

13757
13:17:29,972 --> 13:17:31,832
aspek lain\nbahasa pemrograman

13758
13:17:31,832 --> 13:17:34,531
seperti pemrograman\nberorientasi objek, dan banyak lagi.

13759
13:17:34,531 --> 13:17:36,701
Jadi ingat kembali, saat\nin minggu ke nol, Halo, dunia

13760
13:17:36,701 --> 13:17:38,201
terlihat seperti ini.

13761
13:17:38,201 --> 13:17:39,908
Dan dunia ini cukup sederhana.

13762
13:17:39,908 --> 13:17:42,241
Yang perlu Anda lakukan hanyalah menarik\nmelepaskan potongan puzzle ini.

13763
13:17:42,241 --> 13:17:45,481
Namun masih ada fungsi dan\n

13764
13:17:45,482 --> 13:17:47,552
dan semua jenis primitif itu.

13765
13:17:47,552 --> 13:17:50,822
Kami kemudian melakukan transisi, tentu saja,\n

13766
13:17:50,822 --> 13:17:52,362
terlihat seperti ini.

13767
13:17:52,362 --> 13:17:54,319
Dan bahkan sekarang, beberapa minggu\nkemudian, Anda mungkin masih melakukannya

13768
13:17:54,319 --> 13:17:56,991
mengalami kesulitan dengan beberapa\nsintaksis atau mendapatkan bug yang mengganggu

13769
13:17:56,991 --> 13:17:59,491
ketika Anda mencoba mengkompilasi\nkode Anda, dan itu tidak berhasil.

13770
13:17:59,491 --> 13:18:01,322
Namun di sana juga,\nbeberapa minggu terakhir, kami telah melakukannya

13771
13:18:01,322 --> 13:18:04,652
telah berfokus pada fungsi dan loop\n

13772
13:18:06,072 --> 13:18:10,232
Jadi apa yang mulai kami lakukan hari ini\n

13773
13:18:10,232 --> 13:18:15,362
yang kami gunakan, transisi dari C sekarang\n

13774
13:18:15,362 --> 13:18:18,722
program dengan Python, dan lihat\nat kesederhanaannya

13775
13:18:18,722 --> 13:18:20,461
namun juga bertransisi\nuntuk melihat bagaimana diri Anda

13776
13:18:20,461 --> 13:18:22,322
dapat mengimplementasikan\nfitur-fitur yang sama

13777
13:18:22,322 --> 13:18:23,951
hanya menggunakan bahasa yang berbeda.

13778
13:18:23,951 --> 13:18:25,771
Jadi kita akan melihat\na banyak kode hari ini.

13779
13:18:25,771 --> 13:18:29,671
Dan Anda tidak akan mendapatkan sebanyak itu\n

13780
13:18:29,671 --> 13:18:32,731
Tapi itu karena begitu banyak\n

13781
13:18:32,732 --> 13:18:35,102
Dan, sungguh, itu akan menjadi\n

13782
13:18:35,934 --> 13:18:38,281
Saya tahu cara melakukannya di C.\nBagaimana cara melakukannya dengan Python?

13783
13:18:38,281 --> 13:18:39,512
Bagaimana saya melakukan hal yang sama dengan kondisional?

13784
13:18:39,512 --> 13:18:41,232
Bagaimana cara mendeklarasikan\nvariabel, dan sejenisnya

13785
13:18:41,232 --> 13:18:43,982
dan bergerak maju, tidak hanya di\nCS50, namun dalam kehidupan secara umum

13786
13:18:43,982 --> 13:18:47,282
jika Anda melanjutkan pemrograman dan belajar\n

13787
13:18:47,281 --> 13:18:50,792
kalau 5-10 tahun lagi ada yang baru\n

13788
13:18:50,792 --> 13:18:53,042
ini hanya masalah\ngoogling dan mencari

13789
13:18:53,042 --> 13:18:54,932
di situs web seperti Stack\nOverflow dan sejenisnya

13790
13:18:54,932 --> 13:18:57,872
untuk melihat sekadar\nblok dasar bahasa pemrograman

13791
13:18:57,872 --> 13:19:01,202
karena Anda sudah berbicara,\nsetelah lebih dari 6 minggu terakhir ini

13792
13:19:01,201 --> 13:19:04,021
Anda sudah menguasai pemrograman\nsecara mendasar.

13793
13:19:04,021 --> 13:19:07,591
Baiklah, mari kita lakukan beberapa hal dengan cepat\n

13794
13:19:07,591 --> 13:19:09,481
sesuatu mungkin\nterlihat seperti di Scratch

13795
13:19:09,482 --> 13:19:11,342
dan seperti apa tampilannya\ndi C, tapi sekarang

13796
13:19:11,341 --> 13:19:13,291
mulai hari ini,\nakan terlihat seperti apa dengan Python.

13797
13:19:13,292 --> 13:19:15,375
Kemudian kita akan mengalihkan perhatian kita\nke baris perintah

13798
13:19:15,375 --> 13:19:19,031
pada akhirnya, untuk\nmengimplementasi beberapa program aktual.

13799
13:19:19,031 --> 13:19:22,262
Jadi di Scratch, kami memiliki\nfungsi seperti ini, ucapkan Halo

13800
13:19:23,792 --> 13:19:26,262
Di C tampilannya sedikit\nseperti ini

13801
13:19:26,262 --> 13:19:29,672
dan sedikit kekacauan pada\nminggu pertama, Anda mendapatkan printf

13802
13:19:30,811 --> 13:19:32,502
Anda memiliki titik koma, tanda kurung.

13803
13:19:32,502 --> 13:19:34,944
Jadi ada lebih banyak sintaks\nhanya untuk melakukan hal yang sama.

13804
13:19:34,944 --> 13:19:37,862
Kami tidak akan membuang semuanya\n

13805
13:19:37,862 --> 13:19:42,101
dengan Python, pernyataan yang sama berlaku\n

13806
13:19:42,101 --> 13:19:44,161
Dan mungkin hanya untuk menyebutkan\nyang sudah jelas, apa

13807
13:19:44,161 --> 13:19:48,572
berbeda atau, sekarang, lebih sederhana\nin Python versus C, bahkan

13808
13:19:48,572 --> 13:19:50,161
dalam contoh sederhana ini di sini?

13809
13:19:51,067 --> 13:19:53,942
AUDIENCE: Sekarang cetak, bukan\n

13810
13:19:53,942 --> 13:19:56,359
DAVID J. MALAN: Bagus, jadi\nsekarang print, bukan printf.

13811
13:19:56,358 --> 13:19:57,631
Dan juga tidak ada titik koma.

13812
13:19:57,631 --> 13:19:59,625
Dan ada satu lagi\nkehalusan di sini.

13813
13:20:00,542 --> 13:20:02,162
DAVID J. MALAN: Ya,\njadi tidak ada baris baru, dan itu

13814
13:20:02,161 --> 13:20:03,631
bukan berarti tidak\nakan dicetak.

13815
13:20:03,631 --> 13:20:05,923
Ternyata salah satu\nperbedaannya akan kita lihat

13816
13:20:05,923 --> 13:20:08,161
apakah dengan mencetak, Anda\nmendapatkan baris baru secara gratis.

13817
13:20:08,161 --> 13:20:11,471
Secara otomatis dikeluarkan oleh\n

13818
13:20:11,472 --> 13:20:13,711
Namun Anda dapat menggantinya,\nkita akan lihat nanti pada akhirnya.

13819
13:20:14,822 --> 13:20:18,603
Kami memiliki banyak fungsi seperti\n

13820
13:20:18,603 --> 13:20:20,311
di layar, namun\njuga mengajukan pertanyaan

13821
13:20:20,311 --> 13:20:23,822
dengan demikian menjadi fungsi lain yang\n

13822
13:20:23,822 --> 13:20:26,252
Di C kita melihat kode yang\nterlihat seperti sesuatu

13823
13:20:26,252 --> 13:20:29,942
seperti ini, dimana baris pertama\n

13824
13:20:29,942 --> 13:20:32,312
menyetelnya sama dengan\nnilai kembalian getString

13825
13:20:32,311 --> 13:20:34,261
salah satu fungsi\ndari perpustakaan CS50

13826
13:20:34,262 --> 13:20:37,502
lalu tanda kutip ganda\ndan tanda kurung dan titik koma yang sama.

13827
13:20:37,502 --> 13:20:41,912
Lalu kami memiliki kode format\nin C yang memungkinkan kami, dengan %S

13828
13:20:41,911 --> 13:20:44,281
untuk benar-benar mencetak nilai yang sama.

13829
13:20:44,281 --> 13:20:46,921
Dalam Python, ini juga akan\nterlihat sedikit lebih sederhana.

13830
13:20:46,921 --> 13:20:49,981
Sebaliknya, kita akan mendapatkan\njawaban yang sama dengan getString

13831
13:20:49,982 --> 13:20:52,592
kutip tanda kutip "Siapa\nnama Anda," lalu cetak

13832
13:20:52,591 --> 13:20:55,391
dengan tanda plus dan\nsedikit sintaks baru.

13833
13:20:55,391 --> 13:20:58,171
Namun mari kita lihat apakah kita tidak bisa menyimpulkan\ndari contoh ini apa saja

13834
13:20:59,381 --> 13:21:02,191
Nah, yang pertama hilang di sebelah kiri itu apa?

13835
13:21:02,192 --> 13:21:05,141
Di sebelah kiri tanda sama dengan,\nkali ini tidak ada apa?

13836
13:21:05,141 --> 13:21:06,391
Jangan ragu untuk menyebutnya saja.

13837
13:21:07,211 --> 13:21:07,981
DAVID J. MALAN: Jadi tidak ada tipenya.

13838
13:21:07,982 --> 13:21:10,292
Tidak ada tipe, seperti\nstring kata, yang mana

13839
13:21:10,292 --> 13:21:14,612
meskipun itu adalah tipe di\nCS50, semua variabel lain di C

13840
13:21:14,612 --> 13:21:17,959
apakah kita menggunakan Int atau string atau\nfloat, atau Bool atau yang lainnya.

13841
13:21:17,959 --> 13:21:20,042
Di Python, masih\nakan ada tipe data

13842
13:21:20,042 --> 13:21:22,502
hari ini dan seterusnya, tetapi Anda,\nsang programmer, tidak melakukannya

13843
13:21:22,502 --> 13:21:25,563
harus repot-repot memberi tahu\nkomputer jenis apa yang Anda gunakan.

13844
13:21:25,563 --> 13:21:27,271
Komputer akan\nmenjadi cukup pintar

13845
13:21:27,271 --> 13:21:29,761
bahasanya, sungguh, akan menjadi\n

13846
13:21:30,781 --> 13:21:32,671
Sementara itu, di sisi\nkanan, getString

13847
13:21:32,671 --> 13:21:34,379
akan menjadi\nfungsi yang akan kita gunakan hari ini

13848
13:21:34,379 --> 13:21:37,841
dan minggu ini, yang berasal dari a\n

13849
13:21:37,841 --> 13:21:40,891
Namun kami juga akan mulai lepas landas\n

13850
13:21:40,891 --> 13:21:44,192
lihat cara melakukan sesuatu tanpa\naning perpustakaan CS50 bergerak maju

13851
13:21:44,192 --> 13:21:45,812
menggunakan fungsi yang berbeda sebagai gantinya.

13852
13:21:45,811 --> 13:21:49,441
Seperti sebelumnya, tidak ada titik koma, tapi sisanya\n

13853
13:21:49,951 --> 13:21:52,534
Tentu saja, hal ini dimulai dengan\na sedikit berbeda.

13854
13:21:52,535 --> 13:21:54,172
Kami menggunakan print, bukan printf.

13855
13:21:54,171 --> 13:21:57,381
Namun kini, meskipun hal ini\nterlihat agak samar

13856
13:21:57,381 --> 13:21:59,631
mungkin, jika Anda belum pernah\nmemprogram sebelum CS50

13857
13:21:59,631 --> 13:22:03,651
apa yang mungkin dilakukannya,\nhanya berdasarkan kesimpulan di sini.

13858
13:22:04,402 --> 13:22:08,241
AUDIENCE: Menambahkan jawaban\nke string Halo.

13859
13:22:08,241 --> 13:22:11,511
DAVID J. MALAN: Ya, jadi tambahkan\njawaban ke string Halo

13860
13:22:11,512 --> 13:22:13,552
dan menambahkan, boleh dikatakan,\nbukan secara matematis

13861
13:22:13,552 --> 13:22:16,102
namun dalam bentuk menyatukan\nmereka bersama-sama, sama seperti kita

13862
13:22:16,101 --> 13:22:19,561
melihat blok yang digabungkan di Scratch, atau\n

13863
13:22:20,061 --> 13:22:23,331
Tanda tambah ini ditambahkan,\njika Anda mau, terserah

13864
13:22:23,332 --> 13:22:25,147
sebagai jawaban atas apa pun yang dikutip di sini.

13865
13:22:25,146 --> 13:22:27,771
Dan saya sengaja meninggalkan spasi\ndi sana, agar sesuai dengan tata bahasanya

13866
13:22:27,771 --> 13:22:29,943
terlihat bagus, setelah koma juga.

13867
13:22:29,944 --> 13:22:31,402
Sekarang ada cara lain untuk melakukan ini.

13868
13:22:31,402 --> 13:22:33,652
Dan itu juga akan\nterlihat samar pada pandangan pertama.

13869
13:22:33,652 --> 13:22:36,031
Namun seiring berjalannya waktu, hal ini menjadi lebih mudah dan\nlebih nyaman.

13870
13:22:36,031 --> 13:22:41,101
Anda juga dapat mengubah\nbaris kedua ini menjadi ini.

13871
13:22:42,292 --> 13:22:45,232
Ini sebenarnya merupakan hal yang relatif baru\n

13872
13:22:45,232 --> 13:22:47,542
bertahun-tahun, dan sekarang yang\nAnda lihat adalah, ya

13873
13:22:47,542 --> 13:22:50,101
sebuah string, di antara\ntanda kutip ganda yang sama

13874
13:22:50,101 --> 13:22:53,597
tapi inilah yang Python\nsebut sebagai format string, atau Fstring.

13875
13:22:53,597 --> 13:22:56,722
Dan secara harfiah dimulai dengan huruf\n

13876
13:22:57,502 --> 13:23:01,222
Tapi itu hanya menunjukkan\nbahwa Python seharusnya melakukannya

13877
13:23:01,222 --> 13:23:05,632
berasumsi bahwa apa pun di dalam\nkurung kurawal di dalam string

13878
13:23:05,631 --> 13:23:09,081
harus diinterpolasi, sehingga\n

13879
13:23:09,082 --> 13:23:12,682
gantikan nilai\nany variabel di dalamnya.

13880
13:23:12,682 --> 13:23:14,552
Dan itu juga dapat melakukan beberapa hal lainnya.

13881
13:23:14,552 --> 13:23:18,562
Jadi jawabannya adalah variabel, dideklarasikan,\n

13882
13:23:18,561 --> 13:23:22,822
Fstring ini kemudian berkata kepada Python,\n

13883
13:23:24,472 --> 13:23:28,912
Sebaliknya, jika Anda\tidak menggunakan kurung kurawal

13884
13:23:28,911 --> 13:23:30,561
coba tebak, apa yang akan terjadi?

13885
13:23:30,561 --> 13:23:33,441
Apa gejala\nbug itu, jika Anda tidak sengaja

13886
13:23:33,442 --> 13:23:36,531
lupa kurung kurawalnya, tapi\nmungkin masih ada huruf F di sana?

13887
13:23:36,531 --> 13:23:38,271
HADIRIN: Itu juga akan tercetak di bawahnya.

13888
13:23:38,271 --> 13:23:40,822
DAVID J. MALAN: Ya, secara harfiah\n

13889
13:23:41,722 --> 13:23:44,211
Jadi kurung kurawal hanya\tidak memungkinkan Anda untuk menyambungkannya.

13890
13:23:44,211 --> 13:23:45,872
Dan, sekali lagi, tampilannya\na sedikit lebih samar

13891
13:23:45,872 --> 13:23:47,789
tapi ini hanya akan\nmenghemat waktu kita dari waktu ke waktu.

13892
13:23:47,788 --> 13:23:50,641
Dan jika ada di antara Anda yang memprogram\n

13893
13:23:50,641 --> 13:23:53,152
Anda melihat plus dalam konteks itu,\ntjuga, untuk penggabungan.

13894
13:23:53,152 --> 13:23:56,277
Ini hanya membuat kode Anda menjadi\n

13895
13:23:56,277 --> 13:23:58,252
Jadi ini adalah fitur\nyang mudah digunakan sekarang di Python.

13896
13:23:58,252 --> 13:24:00,711
Baiklah, ini adalah contoh\nin Goresan sebuah variabel

13897
13:24:00,711 --> 13:24:03,262
menyetel variabel seperti\npenghitung sama dengan 0.

13898
13:24:03,262 --> 13:24:06,982
Di C tampilannya seperti ini, di mana\nAnda menentukan tipe, namanya

13899
13:24:06,982 --> 13:24:08,752
dan kemudian nilainya, dengan titik koma.

13900
13:24:08,752 --> 13:24:11,618
Di Python, akan terlihat seperti ini.

13901
13:24:11,618 --> 13:24:12,951
Dan saya akan menyatakan yang jelas di sini.

13902
13:24:12,951 --> 13:24:15,862
Anda tidak perlu menyebutkan\n

13903
13:24:15,862 --> 13:24:17,552
Dan Anda tidak memerlukan titik koma.

13904
13:24:18,652 --> 13:24:21,527
Jika Anda menginginkan variabel, cukup tulis\n

13905
13:24:21,527 --> 13:24:24,592
Namun tanda sama dengan tunggal\nmasih berperilaku sama seperti di C.

13906
13:24:24,591 --> 13:24:26,961
Misalkan kita ingin\nmenambah penghitung satu per satu.

13907
13:24:26,961 --> 13:24:29,271
Di Scratch, kami menggunakan\npotongan puzzle ini di sini.

13908
13:24:29,271 --> 13:24:31,771
Di C, sebenarnya kita dapat melakukan ini\dalam beberapa cara berbeda.

13909
13:24:31,771 --> 13:24:33,921
Ada cara ini, jika\npenghitung sudah ada

13910
13:24:33,921 --> 13:24:36,502
Anda cukup mengucapkan counter\nesama dengan counter ditambah 1.

13911
13:24:36,502 --> 13:24:41,362
Ada yang sedikit lebih bertele-tele\n

13912
13:24:41,362 --> 13:24:42,921
Izinkan saya mengerjakan kalimat pertama terlebih dahulu.

13913
13:24:42,921 --> 13:24:45,211
Dalam Python, hal yang sama\nseperti yang Anda duga

13914
13:24:45,211 --> 13:24:48,682
sebenarnya akan menjadi hampir\n

13915
13:24:48,682 --> 13:24:51,891
Dan matematika pada akhirnya\n

13916
13:24:51,891 --> 13:24:53,811
melalui operator penugasan.

13917
13:24:53,811 --> 13:24:56,091
Sekarang, ingat, di C,\nkita punya tulisan cepat ini

13918
13:24:56,091 --> 13:24:58,521
notasi, yang melakukan hal yang sama.

13919
13:24:58,521 --> 13:25:03,502
Dengan Python, Anda juga dapat melakukan hal yang sama\n

13920
13:25:03,502 --> 13:25:05,811
Satu-satunya langkah mundur\nyang kami ambil, jika Anda

13921
13:25:05,811 --> 13:25:10,311
adalah penggemar berat counter plus\n

13922
13:25:12,021 --> 13:25:16,731
Anda harus melakukan plus sama dengan 1\atau plus/minus atau minus sama dengan 1

13923
13:25:16,732 --> 13:25:20,242
untuk mencapai hasil yang sama. Baiklah\n, bagaimana dengan Python 2?

13924
13:25:20,241 --> 13:25:22,881
Di sini, di Scratch, ingat,\nadalah sebuah kondisi

13925
13:25:22,881 --> 13:25:26,511
menanyakan pertanyaan konyol seperti x kurang\n

13926
13:25:26,512 --> 13:25:30,502
Di C, tampilannya seperti ini\nseperti ini, printf dan if

13927
13:25:30,502 --> 13:25:33,832
dengan tanda kurung, keriting\n

13928
13:25:33,832 --> 13:25:37,132
Dalam Python, ini akan mendapatkan\n

13929
13:25:39,841 --> 13:25:42,981
Dan jika seseorang ingin menelepon\n

13930
13:25:42,982 --> 13:25:46,887
apa yang telah disederhanakan sekarang dengan Python\n

13931
13:25:46,887 --> 13:25:48,262
Ya, apa yang hilang, atau berubah?

13932
13:25:48,872 --> 13:25:49,927
DAVID J. MALAN: Jadi tidak ada kurung kurawal.

13933
13:25:51,891 --> 13:25:53,031
HADIRIN: Menggunakan titik dua sebagai gantinya.

13934
13:25:53,031 --> 13:25:55,114
DAVID J. MALAN: Dan kami\menggunakan titik dua sebagai gantinya.

13935
13:25:55,114 --> 13:25:57,141
Jadi saya menghilangkan\nkurung kurawal dengan Python.

13936
13:25:57,141 --> 13:25:58,714
Tapi saya menggunakan titik dua sebagai gantinya.

13937
13:25:58,714 --> 13:26:00,631
Dan meskipun ini bukan satu baris kode

13938
13:26:00,631 --> 13:26:04,971
selama Anda membuat indentasi\nbaris berikutnya bersama dengan printf

13939
13:26:04,972 --> 13:26:09,351
itu berarti semuanya,\n

13940
13:26:09,351 --> 13:26:13,491
harus dieksekusi di bawahnya, sampai Anda\n

13941
13:26:13,491 --> 13:26:14,991
baris kode yang berbeda sama sekali.

13942
13:26:14,991 --> 13:26:17,521
Jadi indentasi di Python itu penting.

13943
13:26:17,521 --> 13:26:21,621
Jadi inilah salah satu alasan\nkami menekankan sumbu seperti gaya

13944
13:26:21,622 --> 13:26:23,362
seberapa baik gaya kode Anda.

13945
13:26:23,362 --> 13:26:25,881
Dan sejujurnya, kami telah melihatnya,\ntentu saja, di jam kantor

13946
13:26:25,881 --> 13:26:28,521
dan Anda telah melihatnya dalam kode Anda sendiri,\nterkadang semacam kecenderungan

13947
13:26:28,521 --> 13:26:31,551
agak longgar\ndalam hal lekukan, bukan?

13948
13:26:31,552 --> 13:26:34,192
Jika Anda salah satu dari orang\nyang suka membuat indentasi segala sesuatu

13949
13:26:34,192 --> 13:26:37,732
di sisi kiri jendela,\n

13950
13:26:37,732 --> 13:26:41,392
Namun tidak terlalu\ndapat dibaca oleh Anda atau orang lain.

13951
13:26:41,391 --> 13:26:45,112
Python sebenarnya mengatasi masalah ini\ndengan hanya memerlukan indentasi

13952
13:26:46,311 --> 13:26:50,572
Jadi Python akan memaksa Anda untuk memulai\n

13953
13:26:50,572 --> 13:26:53,201
mungkin, ada kecenderungan sebaliknya.

13954
13:26:54,141 --> 13:26:55,572
Ya, kami tidak memiliki titik koma di sini.

13955
13:26:55,572 --> 13:26:57,671
Tentu saja, ini print, bukan printf.

13956
13:26:57,671 --> 13:27:00,341
Namun sebaliknya, tampaknya\nitulah perbedaan utamanya.

13957
13:27:00,341 --> 13:27:02,201
Bagaimana dengan sesuatu yang lebih besar di Scratch?

13958
13:27:02,201 --> 13:27:05,333
Jika if-else memblokir, seperti\nini, Anda mungkin bisa

13959
13:27:05,334 --> 13:27:06,792
tebak seperti apa jadinya.

13960
13:27:06,792 --> 13:27:10,061
Di C tampilannya seperti ini, kurung kurawal\ntanda titik koma, dan seterusnya.

13961
13:27:10,061 --> 13:27:14,051
Di Python, sekarang\nakan terlihat seperti ini, hampir sama

13962
13:27:14,052 --> 13:27:15,342
tapi lekukan itu penting.

13963
13:27:16,482 --> 13:27:19,332
Dan ada satu perbedaan lain\nyang kini terlihat lagi di sini

13964
13:27:19,332 --> 13:27:21,192
tapi kami tidak menyebutnya sedetik yang lalu.

13965
13:27:21,192 --> 13:27:24,281
Apa lagi yang berbeda dengan Python\n

13966
13:27:24,993 --> 13:27:27,641
AUDIENCE: Anda tidak memiliki\ntanda kurung di sekitar kondisi tersebut.

13967
13:27:28,222 --> 13:27:30,612
Kami tidak memiliki tanda kurung\ndi sekitar kondisi tersebut

13968
13:27:30,612 --> 13:27:32,232
ekspresi Boolean itu sendiri.

13969
13:27:33,088 --> 13:27:34,421
Ya, mengetiknya lebih mudah.

13970
13:27:35,472 --> 13:27:36,972
Anda masih bisa menggunakan tanda kurung.

13971
13:27:36,972 --> 13:27:39,072
Dan sebenarnya, Anda mungkin\ningin atau perlu melakukannya

13972
13:27:39,072 --> 13:27:43,991
jika Anda ingin menggabungkan pemikiran dan\n

13973
13:27:43,991 --> 13:27:47,441
Namun secara default, Anda tidak memerlukan\n lagi

13974
13:27:48,671 --> 13:27:50,961
Terakhir, dengan kondisional,\nkita mendapatkan sesuatu seperti ini

13975
13:27:50,961 --> 13:27:53,292
pernyataan if else if else.

13976
13:27:53,292 --> 13:27:55,362
Di C, tampilannya sedikit\nseperti ini.

13977
13:27:55,362 --> 13:27:57,402
Di Python, sekarang akan\nmenjadi lebih ketat.

13978
13:27:57,402 --> 13:28:02,351
Hanya saja jika, dan ini adalah\nkeingintahuan, elif x lebih besar dari y.

13979
13:28:02,351 --> 13:28:07,631
Jadi bukan sebaliknya jika, secara harafiah\n

13980
13:28:07,631 --> 13:28:09,836
tetap sekarang di masing-masing dari tiga baris.

13981
13:28:09,836 --> 13:28:11,211
Tapi lekukan itu penting.

13982
13:28:11,211 --> 13:28:13,002
Dan jika kami memang ingin\ndo melakukan banyak hal

13983
13:28:13,002 --> 13:28:16,760
kita juga dapat membuat indentasi di bawah masing-masing\npersyaratan ini.

13984
13:28:16,760 --> 13:28:18,552
Baiklah, izinkan saya berhenti dulu\ndi situ dulu, untuk melihat

13985
13:28:18,552 --> 13:28:21,012
jika ada pertanyaan tentang\nperbedaan sintaksis ini.

13986
13:28:21,769 --> 13:28:24,054
HADIRIN: Pikiran saya\nmungkin seperti, itu bagus

13987
13:28:24,053 --> 13:28:27,681
Namun, apakah penting jika ada\n

13988
13:28:28,692 --> 13:28:31,572
DAVID J. MALAN: Di antara,\nantara apa dan apa?

13989
13:28:31,572 --> 13:28:34,942
HADIRIN: Jadi seperti tangan kiri\n

13990
13:28:34,942 --> 13:28:38,352
DAVID J. MALAN: Ah, pertanyaan bagus\n, apakah Python sensitif

13991
13:28:38,351 --> 13:28:40,271
ke luar angkasa dan ke mana mereka pergi?

13992
13:28:40,271 --> 13:28:42,911
Terkadang tidak, terkadang\nyes, itulah jawaban singkatnya.

13993
13:28:42,911 --> 13:28:46,601
Namun secara gaya, Anda seharusnya\n

13994
13:28:46,601 --> 13:28:50,786
dimana Anda memiliki spasi pada\n

13995
13:28:50,786 --> 13:28:52,661
begitulah sebutannya,\nkira-kira kurang dari

13996
13:28:52,661 --> 13:28:54,869
atau lebih besar dari biner\nooperator, karena ada

13997
13:28:54,870 --> 13:28:57,102
dua operan di kiri\ndan di kanannya.

13998
13:28:57,101 --> 13:29:00,161
Dan faktanya, dalam Python,\nlebih dari dunia C

13999
13:29:00,161 --> 13:29:02,861
sebenarnya ada konvensi gaya\nformal.

14000
13:29:02,862 --> 13:29:07,209
Tidak hanya dalam CS50 kami memiliki\n

14001
13:29:07,209 --> 13:29:10,542
misalnya, itu hanya menentukan bagaimana Anda\n

14002
13:29:11,466 --> 13:29:13,841
Di komunitas Python, mereka\nmengambil satu langkah lebih jauh

14003
13:29:13,841 --> 13:29:17,781
dan ada standar aktual dimana\n

14004
13:29:17,781 --> 13:29:20,832
tapi secara umum, di dunia nyata\n

14005
13:29:20,832 --> 13:29:23,622
akan menolak kode Anda, jika Anda mencoba\n

14006
13:29:23,622 --> 13:29:25,252
jika Anda tidak mematuhi standar ini.

14007
13:29:25,252 --> 13:29:28,211
Jadi meskipun Anda mungkin lalai\ndengan beberapa ruang kosong ini

14008
13:29:29,381 --> 13:29:33,296
Dan itulah tema Python, untuk\n

14009
13:29:33,296 --> 13:29:35,921
Baiklah, jadi mari kita lihat\na beberapa konstruksi lainnya

14010
13:29:35,921 --> 13:29:37,881
sebelum bertransisi\nke beberapa kode sebenarnya.

14011
13:29:37,881 --> 13:29:40,631
Ini, tentu saja, di Scratch\nadalah sebuah lingkaran, mengeong selamanya.

14012
13:29:40,631 --> 13:29:44,862
Di C, terdekat yang bisa kita dapatkan adalah\n

14013
13:29:45,622 --> 13:29:48,582
Jadi ini semacam cara sederhana\tidak hanya mengatakan lakukan ini selamanya.

14014
13:29:48,582 --> 13:29:51,461
Dalam Python, hampir\nhampir sama

14015
13:29:51,461 --> 13:29:53,262
tetapi ada beberapa perbedaan kecil di sini.

14016
13:29:57,161 --> 13:30:00,784
Tidak ada titik koma, dan\tidak ada perbedaan halus lainnya.

14017
13:30:01,451 --> 13:30:02,441
HADIRIN: Benarkah yang menggunakan huruf kapital?

14018
13:30:02,442 --> 13:30:04,525
DAVID J. MALAN: Benar\ndikapitalisasi, hanya karena.

14019
13:30:04,525 --> 13:30:07,092
Baik benar maupun salah merupakan\nnilai Boolean dalam Python.

14020
13:30:07,091 --> 13:30:09,671
Namun Anda harus mulai\nmemanfaatkannya, hanya karena itu.

14021
13:30:09,671 --> 13:30:11,561
Baiklah, bagaimana dengan\nloop seperti ini, di mana

14022
13:30:11,561 --> 13:30:14,981
Anda mengulangi sesuatu dalam jumlah terbatas\n

14023
13:30:14,982 --> 13:30:17,572
Di C, kita dapat melakukan ini\na beberapa cara berbeda.

14024
13:30:17,572 --> 13:30:21,311
Ada cara yang sangat mekanis,\n

14025
13:30:22,091 --> 13:30:25,871
Anda kemudian menggunakan perulangan while dan\nperiksa apakah i kurang dari 3

14026
13:30:25,872 --> 13:30:27,709
jumlah total\nkali Anda ingin mengeong.

14027
13:30:27,709 --> 13:30:29,292
Kemudian Anda mencetak apa yang ingin Anda cetak.

14028
13:30:29,292 --> 13:30:32,891
Anda menambah i menggunakan sintaks ini,\n

14029
13:30:32,891 --> 13:30:34,402
dengan plus sama atau yang lainnya.

14030
13:30:34,402 --> 13:30:36,732
Lalu Anda melakukannya lagi\ndan lagi dan lagi.

14031
13:30:36,732 --> 13:30:40,692
Dengan Python, Anda dapat melakukannya\nsecara fungsional dengan cara yang sama, ide yang sama

14032
13:30:42,101 --> 13:30:44,711
Anda hanya tidak perlu repot-repot mengatakan\ntipe variabel apa yang Anda inginkan.

14033
13:30:44,711 --> 13:30:47,559
Python akan menyimpulkan dari fakta\nbahwa ada 0 di sana.

14034
13:30:47,559 --> 13:30:48,851
Anda tidak memerlukan tanda kurung.

14035
13:30:51,281 --> 13:30:54,432
Anda tidak dapat melakukan i plus plus, tapi\n

14036
13:30:54,432 --> 13:30:56,622
seperti yang bisa kita lakukan di C juga.

14037
13:30:56,622 --> 13:30:58,842
Namun, bagaimana lagi kita bisa melakukan hal ini?

14038
13:30:58,841 --> 13:31:01,061
Dengan baik. ternyata di\nC, kita bisa melakukan sesuatu

14039
13:31:01,061 --> 13:31:04,752
seperti ini, yang, sekali lagi, agak\ntidak jelas pada pandangan pertama

14040
13:31:04,752 --> 13:31:07,692
mungkin menjadi lebih familier,\ntempat Anda melakukan inisialisasi

14041
13:31:07,692 --> 13:31:11,442
kondisional, lalu pembaruan\n

14042
13:31:11,442 --> 13:31:14,472
Di Python, sebenarnya tidak ada analog.

14043
13:31:14,472 --> 13:31:17,022
Tidak ada analog di\nPython, jika Anda memilikinya

14044
13:31:17,021 --> 13:31:19,901
tanda kurung dan kelipatan\nstitik koma pada baris yang sama.

14045
13:31:19,902 --> 13:31:23,531
Sebaliknya, ada perulangan for, tetapi\n

14046
13:31:23,531 --> 13:31:27,072
seperti bahasa Inggris, untuk i di 0, 1, dan 2.

14047
13:31:27,072 --> 13:31:31,302
Jadi kita akan lihat sebentar lagi, persegi ini\n

14048
13:31:31,302 --> 13:31:33,612
untuk disebut daftar dengan Python.

14049
13:31:33,612 --> 13:31:37,811
Jadi daftar dengan Python lebih mirip\n

14050
13:31:38,902 --> 13:31:42,732
Jadi ini hanya berarti untuk i dan\ndaftar tiga nilai berikut.

14051
13:31:42,732 --> 13:31:46,342
Dan pada setiap iterasi dari loop ini,\n

14052
13:31:49,362 --> 13:31:54,402
Lalu ia menetapkan i menjadi dua, sehingga Anda\n

14053
13:31:54,402 --> 13:31:57,972
Namun hal ini belum tentu berskala,\n

14054
13:31:57,972 --> 13:32:01,662
Misalkan Anda mengambil\nat nilai nominal ini sebagai caranya

14055
13:32:01,661 --> 13:32:05,501
Anda mengulangi beberapa kali\nin Python, menggunakan for loop.

14056
13:32:05,502 --> 13:32:10,004
Pada titik manakah pendekatan ini\nmungkin menjadi buruk, atau desainnya buruk?

14057
13:32:10,004 --> 13:32:11,711
Izinkan saya memberi waktu\na waktu kepada orang-orang untuk berpikir.

14058
13:32:12,936 --> 13:32:15,603
AUDIENCE: Jika Anda tidak tahu berapa\nkali, terakhir kali, Anda tahu

14059
13:32:15,603 --> 13:32:17,604
Anda punya tautannya di sana.

14060
13:32:17,605 --> 13:32:20,022
DAVID J. MALAN: Tentu, jika Anda\ntidak tahu berapa kali Anda melakukannya

14061
13:32:20,021 --> 13:32:23,981
ingin mengulang atau mengulang, Anda tidak bisa\n

14062
13:32:26,845 --> 13:32:29,512
HADIRIN: Jadi, Anda ingin mengatakan menaikkan\na tunjangan dalam jumlah besar.

14063
13:32:29,512 --> 13:32:32,262
DAVID J. MALAN: Ya, jika Anda\n

14064
13:32:32,262 --> 13:32:34,162
daftar ini akan\nbertambah panjang dan panjang

14065
13:32:34,161 --> 13:32:36,453
dan Anda jadi\nsdengan bodohnya mengetik

14066
13:32:36,453 --> 13:32:40,182
seperti koma 3, koma 4, koma 5, koma\n

14067
13:32:40,182 --> 13:32:42,682
Maksud saya, kode Anda pada akhirnya akan\nterlihat jelek.

14068
13:32:44,031 --> 13:32:46,881
Di Python, ada fungsi,\atau secara teknis ada tipe

14069
13:32:46,881 --> 13:32:51,052
disebut jangkauan, yang pada dasarnya ajaib\n

14070
13:32:51,052 --> 13:32:54,121
dari 0 hingga, tetapi\ntidak melalui nilai.

14071
13:32:54,120 --> 13:32:58,131
Jadi efek dari baris\n

14072
13:32:58,131 --> 13:33:01,006
pada dasarnya mengembalikan\na daftar tiga nilai kepada Anda

14073
13:33:01,006 --> 13:33:02,881
sehingga memungkinkan Anda melakukan\nsesuatu tiga kali.

14074
13:33:02,881 --> 13:33:05,588
Dan jika Anda ingin melakukan sesuatu\n

14075
13:33:07,597 --> 13:33:11,612
AUDIENCE: Apakah ada cara untuk memulai\n

14076
13:33:11,612 --> 13:33:15,932
pada angka atau bilangan bulat yang lebih tinggi\n

14077
13:33:16,982 --> 13:33:18,062
DAVID J. MALAN: Pertanyaan yang bagus sekali, bisa

14078
13:33:18,061 --> 13:33:19,961
Anda mulai menghitung dengan angka yang lebih tinggi.

14079
13:33:19,961 --> 13:33:23,432
Jadi bukan 0, yang merupakan default tersirat,\n

14080
13:33:23,432 --> 13:33:28,082
Ya, jadi ternyata fungsi range\n

14081
13:33:28,082 --> 13:33:31,520
tapi mungkin dua atau bahkan tiga, itu\n

14082
13:33:31,519 --> 13:33:33,061
Jadi, Anda dapat menyesuaikan di mana dimulainya.

14083
13:33:33,061 --> 13:33:34,441
Anda dapat menyesuaikan kenaikannya.

14084
13:33:34,442 --> 13:33:36,234
Secara default, itu satu,\ntetapi jika Anda ingin melakukannya

14085
13:33:36,233 --> 13:33:39,103
setiap dua nilai, untuk kejadian serupa\n

14086
13:33:40,061 --> 13:33:42,451
Dan tak lama kemudian, kita akan melihat\nbeberapa dokumentasi Python

14087
13:33:42,451 --> 13:33:45,331
itu akan menjadi wewenangmu\n

14088
13:33:45,332 --> 13:33:47,312
Seperti, apa yang bisa dilakukan fungsi ini.

14089
13:33:47,311 --> 13:33:51,542
Pertanyaan lain sejauh ini?

14090
13:33:51,542 --> 13:33:56,502
Tidak melihat apa pun, jadi apa lagi\nyang bisa kita bandingkan dan kontraskan di sini.

14091
13:33:56,502 --> 13:34:00,841
Nah, di dunia C, ingat itu\n

14092
13:34:00,841 --> 13:34:04,831
jenis, seperti ini di sini, Bool dan char\n

14093
13:34:04,832 --> 13:34:08,192
string, yang kebetulan\nberasal dari perpustakaan CS50.

14094
13:34:08,192 --> 13:34:12,512
Tapi bahasa C itu sendiri tentu saja\n

14095
13:34:12,512 --> 13:34:17,222
karena garis miring terbalik 0, dukungan\n

14096
13:34:17,222 --> 13:34:19,891
dibangun ke dalam C, bukan penyederhanaan CS50.

14097
13:34:19,891 --> 13:34:22,141
Semua yang kami lakukan, dan ungkapkan,\nas dalam beberapa minggu

14098
13:34:22,141 --> 13:34:24,572
lalu, apakah string itu,\ntipe data ini, adil

14099
13:34:24,572 --> 13:34:29,252
sinonim untuk typedef untuk char star,\n

14100
13:34:29,252 --> 13:34:32,131
Dengan Python sekarang, daftar ini sebenarnya\n

14101
13:34:32,131 --> 13:34:33,964
untuk tipe data primitif umum ini.

14102
13:34:33,964 --> 13:34:36,631
Masih akan ada bulls, kita\n akan ada float, dan Int

14103
13:34:36,631 --> 13:34:39,121
dan kita akan memiliki string,\n

14104
13:34:39,122 --> 13:34:41,282
Dan ini bukan CS50\ndari perpustakaan

14105
13:34:41,281 --> 13:34:44,822
STR, S-T-R, sebenarnya adalah\na tipe data dalam Python

14106
13:34:44,822 --> 13:34:48,781
itu akan menghasilkan lebih dari\n

14107
13:34:48,781 --> 13:34:53,654
Sementara itu, int dan float tidak memerlukan\n

14108
13:34:53,654 --> 13:34:56,072
karena, faktanya, ini adalah salah satu\nmasalah yang dipecahkan Python untuk kita

14109
13:34:56,072 --> 13:34:58,862
juga, Int bisa menjadi sebesar yang Anda inginkan.

14110
13:34:58,862 --> 13:35:01,741
Kelebihan bilangan bulat tidak\nlagi menjadi masalah.

14111
13:35:01,741 --> 13:35:04,472
Per minggu pertama, bahasa\nmenyelesaikannya untuk kita.

14112
13:35:04,472 --> 13:35:06,311
Sayangnya, titik mengambang\ntidak tepat

14113
13:35:06,311 --> 13:35:07,711
masih merupakan masalah yang masih ada.

14114
13:35:07,711 --> 13:35:11,252
Tapi ada perpustakaan, kode itu\n

14115
13:35:11,252 --> 13:35:13,531
dibahas beberapa minggu yang lalu,\nmemungkinkan Anda melakukannya

14116
13:35:13,531 --> 13:35:16,771
komputasi ilmiah atau keuangan,\menggunakan perpustakaan yang membangun

14117
13:35:16,771 --> 13:35:19,146
di atas tipe data ini juga.

14118
13:35:19,146 --> 13:35:22,021
Jadi, ada tipe data lain juga,\n

14119
13:35:22,021 --> 13:35:25,231
memberi kita lebih banyak\nkekuatan dan kemampuan

14120
13:35:25,232 --> 13:35:28,022
sesuatu yang disebut rentang,\nseperti yang baru saja kita lihat, daftar

14121
13:35:28,021 --> 13:35:30,601
seperti yang saya serukan secara lisan,\ndengan tanda kurung siku

14122
13:35:30,601 --> 13:35:33,421
hal-hal yang disebut tupel, untuk\nhal-hal seperti x koma y

14123
13:35:33,421 --> 13:35:36,826
atau lintang, bujur,\ndictionaries, atau Dicts

14124
13:35:36,826 --> 13:35:40,261
yang memungkinkan Anda menyimpan kunci dan\n

14125
13:35:40,262 --> 13:35:43,495
dari terakhir kali, lalu set di\n

14126
13:35:43,495 --> 13:35:46,412
membuat duplikat untuk Anda, dan Anda bisa\n

14127
13:35:46,411 --> 13:35:50,431
sekumpulan kata atau yang lainnya,\n

14128
13:35:50,432 --> 13:35:52,921
akan memfilter duplikat untuk Anda.

14129
13:35:52,921 --> 13:35:56,506
Sekarang akan ada beberapa fungsi\n

14130
13:35:56,506 --> 13:35:59,131
roda latihan yang kemudian\nakan kami lepas landas dengan sangat cepat

14131
13:35:59,131 --> 13:36:02,581
hanya karena, seperti yang akan kita lihat hari ini, mereka\n

14132
13:36:02,582 --> 13:36:05,726
pengguna memasukkan dengan benar, tanpa\ntidak sengaja menulis kode yang bermasalah

14133
13:36:05,726 --> 13:36:08,851
tepat saat Anda mencoba menghubungi Halo,\n

14134
13:36:08,851 --> 13:36:12,572
Dan kami akan memberi Anda fungsinya, bukan\n

14135
13:36:12,572 --> 13:36:15,152
tapi subsetnya,\nget float, dapatkan Int

14136
13:36:15,152 --> 13:36:18,182
dan dapatkan string, itu akan\mengotomatiskan proses mendapatkan

14137
13:36:18,182 --> 13:36:21,932
masukan pengguna dengan cara yang lebih\n

14138
13:36:21,932 --> 13:36:23,792
Tapi kita akan lihat apa saja bugnya.

14139
13:36:23,792 --> 13:36:26,641
Dan cara yang akan kita lakukan\nini serupa dengan C.

14140
13:36:26,641 --> 13:36:30,902
Daripada melakukan include,\nCS50.h, seperti yang kita lakukan di C

14141
13:36:30,902 --> 13:36:33,812
Anda sekarang\nmulai mengucapkan import CS50.

14142
13:36:33,811 --> 13:36:37,081
Python mendukung,\nmirip dengan C, perpustakaan

14143
13:36:37,082 --> 13:36:38,822
tetapi tidak ada file header lagi.

14144
13:36:38,822 --> 13:36:41,612
Anda cukup menggunakan nama\nperpustakaan dengan Python.

14145
13:36:41,612 --> 13:36:44,972
Dan jika Anda ingin mengimpor CS50\n

14146
13:36:44,972 --> 13:36:48,991
Atau, jika Anda ingin lebih tepatnya, dan\n

14147
13:36:48,991 --> 13:36:52,381
bisa jadi lambat, jika Anda benar-benar\n

14148
13:36:52,381 --> 13:36:56,252
di dalamnya, Anda bisa lebih tepat dan\n

14149
13:36:56,252 --> 13:37:00,002
Dari impor CS50 dapatkan Int,\ndari impor CSM 50 dapatkan string

14150
13:37:00,002 --> 13:37:02,792
atau Anda dapat memisahkan\nnya dengan koma dan mengimpor 3

14151
13:37:02,792 --> 13:37:07,072
dan hanya 3 hal dari\nperpustakaan tertentu, seperti milik kami.

14152
13:37:07,072 --> 13:37:08,822
Namun mulai hari ini dan\nselanjutnya, kami akan melanjutkannya

14153
13:37:08,822 --> 13:37:11,972
untuk mulai memanfaatkan lebih banyak\nperpustakaan, kode

14154
13:37:11,972 --> 13:37:15,092
yang ditulis orang lain, sehingga\n

14155
13:37:15,091 --> 13:37:18,396
Kami tidak membuat daftar tertaut sendiri,\n

14156
13:37:18,396 --> 13:37:20,771
Kita akan mulai berdiri\di luar bahu orang lain

14157
13:37:20,771 --> 13:37:23,641
sehingga Anda dapat menyelesaikan pekerjaan nyata\ndengan lebih cepat

14158
13:37:23,641 --> 13:37:28,231
dengan membuat perangkat lunak Anda\ndi atas kode orang lain juga.

14159
13:37:28,232 --> 13:37:31,632
Baiklah, itu saja untuk\ntur bahasanya

14160
13:37:31,631 --> 13:37:32,881
dan jenis fitur inti.

14161
13:37:32,881 --> 13:37:34,841
Kami akan segera melakukan transisi\nke penerapannya.

14162
13:37:34,841 --> 13:37:40,561
Namun izinkan saya berhenti sejenak di sini untuk melihat apakah ada\n

14163
13:37:48,726 --> 13:37:52,685
HADIRIN: Mengapa Python\ntidak memiliki operator kenaikan.

14164
13:37:52,684 --> 13:37:54,851
DAVID J. MALAN: Maaf,\nucapkan lagi, kenapa tidak

14165
13:37:54,851 --> 13:37:56,309
Python punya operator seperti apa?

14166
13:37:56,309 --> 13:37:59,099
HADIRIN: Mengapa Python\ntidak memiliki operator kenaikan?

14167
13:37:59,099 --> 13:38:02,141
DAVID J. MALAN: Maaf, ada yang batuk\n

14168
13:38:03,470 --> 13:38:05,262
DAVID J. MALAN: Oh,\noperator kenaikan?

14169
13:38:05,262 --> 13:38:06,929
Sejujurnya, saya harus memeriksa sejarahnya.

14170
13:38:06,928 --> 13:38:09,431
Python cenderung menjadi\nbahasa yang cukup minim.

14171
13:38:09,432 --> 13:38:12,612
Dan jika Anda bisa melakukan sesuatu\ndengan cara itu, komunitas, bisa dibilang

14172
13:38:12,612 --> 13:38:16,667
cenderung tidak memberi Anda banyak\n

14173
13:38:16,667 --> 13:38:18,042
Mungkin ada jawaban yang lebih baik.

14174
13:38:18,042 --> 13:38:22,362
Dan saya akan melihat apakah saya dapat menggali lebih dalam dan memposting\n

14175
13:38:22,362 --> 13:38:26,391
Baiklah, jadi sebelum kita melakukan transisi\n

14176
13:38:26,391 --> 13:38:31,391
izinkan saya melanjutkan dan mempertimbangkannya\n

14177
13:38:31,391 --> 13:38:35,292
Di dunia C, ingat bahwa itu\n

14178
13:38:35,292 --> 13:38:40,752
Kami membuat file bernama Hello.c,\n

14179
13:38:41,921 --> 13:38:44,652
Atau, jika Anda mengingat kembali minggu\nkedua, saat kita mengupasnya kembali

14180
13:38:44,652 --> 13:38:47,622
lapisan dari apa yang Halo,\napa yang dilakukan merek tersebut

14181
13:38:47,622 --> 13:38:50,832
Anda dapat mengetik dengan lebih jelas\n

14182
13:38:50,832 --> 13:38:54,162
Dentang dalam kasus kami, baris perintah\nargumen seperti tanda hubung Oh, Halo

14183
13:38:54,161 --> 13:38:56,361
untuk menentukan nama apa yang ingin Anda buat.

14184
13:38:56,362 --> 13:38:58,182
Dan kemudian Anda dapat menentukan nama file.

14185
13:38:58,182 --> 13:39:01,572
Lalu Anda dapat menentukan\nperpustakaan apa yang ingin Anda tautkan.

14186
13:39:01,572 --> 13:39:03,072
Jadi itu adalah pendekatan yang sangat bertele-tele.

14187
13:39:03,072 --> 13:39:05,451
Tapi itu selalu merupakan pendekatan dua langkah.

14188
13:39:05,451 --> 13:39:08,201
Demikian pula, meskipun Anda sedang\menyelesaikan rangkaian masalah baru-baru ini

14189
13:39:08,201 --> 13:39:11,921
kemungkinan besar Anda menyadarinya, kapan saja\n

14190
13:39:11,921 --> 13:39:16,182
atau buat perubahan pada kode Anda\ndan coba dan uji kode Anda lagi

14191
13:39:16,182 --> 13:39:18,881
Anda terus-menerus melakukan dua langkah itu.

14192
13:39:18,881 --> 13:39:22,362
Ke depannya dengan Python,\nit akan menjadi lebih sederhana

14193
13:39:22,362 --> 13:39:24,131
dan itu akan menjadi hanya ini.

14194
13:39:24,131 --> 13:39:26,981
Nama file akan berubah,\n

14195
13:39:26,982 --> 13:39:31,782
Ini akan menjadi seperti\n

14196
13:39:31,781 --> 13:39:34,512
Dan itu hanya konvensi,\menggunakan ekstensi file yang berbeda.

14197
13:39:34,512 --> 13:39:37,302
Tapi tidak ada langkah kompilasi itu sendiri.

14198
13:39:37,302 --> 13:39:40,692
Anda langsung menuju\eksekusi kode Anda.

14199
13:39:40,692 --> 13:39:43,722
Dan ternyata Python adalah\n

14200
13:39:43,722 --> 13:39:48,671
kita akan mulai menggunakannya, itu juga\n

14201
13:39:48,671 --> 13:39:52,542
dengan asumsi sudah diinstal sebelumnya,\n

14202
13:39:52,542 --> 13:39:56,622
Artinya Python umumnya\n

14203
13:39:57,881 --> 13:40:01,691
Dan maksud saya, Anda boleh melewatinya,\n

14204
13:40:02,891 --> 13:40:07,391
Tidak ada langkah manual di dunia\n

14205
13:40:07,391 --> 13:40:11,052
lalu mengkompilasinya menjadi nol dan satu,\n

14206
13:40:11,052 --> 13:40:13,391
Sebaliknya,\ndua langkah ini malah diciutkan

14207
13:40:13,391 --> 13:40:19,091
ke dalam ilusi seseorang, dimana kamu,\n

14208
13:40:19,091 --> 13:40:22,721
dan biarkan komputer mengetahui\ncara mengonversinya

14209
13:40:22,722 --> 13:40:24,762
pada sesuatu yang dimengerti komputer.

14210
13:40:24,762 --> 13:40:28,372
Dan cara kami melakukannya adalah melalui ini\n

14211
13:40:28,372 --> 13:40:30,432
Namun sekarang, jika Anda memiliki\nkode sumber, kode tersebut akan berfungsi

14212
13:40:30,432 --> 13:40:33,372
untuk diteruskan ke\ninterpreter, bukan compiler.

14213
13:40:33,372 --> 13:40:35,922
Dan analogi terbaiknya mungkin hanya sekedar untuk ditunjukkan

14214
13:40:35,921 --> 13:40:38,472
itu, di dunia manusia, jika\nkamu berbicara, atau tidak berbicara

14215
13:40:38,472 --> 13:40:42,162
berbagai bahasa manusia, bisa\n

14216
13:40:42,161 --> 13:40:43,791
dari satu bahasa ke bahasa lain.

14217
13:40:43,792 --> 13:40:46,692
Misalnya, berikut adalah langkah demi langkah\n

14218
13:40:46,692 --> 13:40:49,062
di buku telepon,\nsayangnya, dalam bahasa Spanyol.

14219
13:40:49,061 --> 13:40:51,881
Sayangnya, jika Anda tidak\nsberbicara atau membaca bahasa Spanyol.

14220
13:40:53,082 --> 13:40:55,902
Anda dapat menjalankan algoritme ini, tetapi Anda\n

14221
13:40:55,902 --> 13:40:58,652
atau Anda harus membuka\n

14222
13:40:58,652 --> 13:40:59,982
ke bahasa Inggris dan konversikan ini.

14223
13:40:59,982 --> 13:41:03,582
Dan tantangannya adalah menerjemahkan\nbahasa apa pun, manusia atau komputer

14224
13:41:03,582 --> 13:41:07,372
atau sebaliknya, apakah Anda akan pergi\n

14225
13:41:07,372 --> 13:41:10,362
Dan mengonversi ini dalam\nSpanyol menjadi ini dalam bahasa Inggris

14226
13:41:10,362 --> 13:41:12,881
hanya akan memakan waktu\nlebih lama dibandingkan jika ini sudah terjadi

14227
13:41:14,974 --> 13:41:17,891
Dan itu akan menjadi salah satu\n

14228
13:41:17,891 --> 13:41:21,701
Ya, itu adalah fitur yang Anda bisa\n

14229
13:41:21,701 --> 13:41:24,401
repot mengkompilasinya secara manual terlebih dahulu.

14230
13:41:25,572 --> 13:41:27,336
Dan segalanya mungkin menjadi sedikit lebih lambat.

14231
13:41:27,336 --> 13:41:28,961
Sekarang, ada cara untuk menghilangkannya.

14232
13:41:28,961 --> 13:41:30,336
Tapi kita akan melihat contohnya.

14233
13:41:30,336 --> 13:41:33,222
Sebenarnya, izinkan saya beralih sekarang\nke beberapa contoh saja

14234
13:41:33,222 --> 13:41:37,182
yang menunjukkan bagaimana Python\ntidak hanya lebih mudah bagi banyak orang

14235
13:41:37,182 --> 13:41:39,762
untuk digunakan, mungkin Anda sendiri\ntjuga, karena akan dibuang

14236
13:41:39,762 --> 13:41:42,641
banyak sintaks yang mengganggu,\nit memperpendek jumlah baris

14237
13:41:42,641 --> 13:41:46,332
Anda harus menulis, dan itu juga\n

14238
13:41:46,332 --> 13:41:51,262
Anda dapat melakukan lebih banyak hal tanpa\n

14239
13:41:51,262 --> 13:41:54,192
Jadi, sebagai contohnya,\nizinkan saya beralih ke sini

14240
13:41:54,192 --> 13:42:00,612
ke gambar ini dari kumpulan masalah 4, yang mana\n

14241
13:42:01,811 --> 13:42:03,766
Dan ini foto\naslinya, cukup jelas

14242
13:42:03,766 --> 13:42:06,891
dan resolusinya bahkan lebih tinggi jika kita melihatnya\n

14243
13:42:06,891 --> 13:42:10,182
Tapi belum ada filternya, a\n

14244
13:42:10,182 --> 13:42:13,271
Ingat, untuk kumpulan soal keempat, Anda\n

14245
13:42:13,271 --> 13:42:14,981
Dan di antara mereka mungkin ada yang kabur.

14246
13:42:14,982 --> 13:42:18,132
Dan keburaman mungkin merupakan salah satu\nyang lebih menantang

14247
13:42:18,131 --> 13:42:20,711
karena Anda harus mengulangi\nsemua piksel

14248
13:42:20,711 --> 13:42:23,652
kamu harus memperhitungkan apa\n

14249
13:42:24,012 --> 13:42:25,970
Maksudku, ada banyak\no matematika dan aritmatika.

14250
13:42:25,970 --> 13:42:29,141
Dan jika pada akhirnya Anda mendapatkannya, itu adalah\n

14251
13:42:29,141 --> 13:42:31,302
Tapi itu mungkin\nbeberapa jam kemudian.

14252
13:42:31,302 --> 13:42:34,062
Dalam bahasa seperti\nPython, jika memungkinkan

14253
13:42:34,061 --> 13:42:37,691
menjadi perpustakaan yang telah ditulis\noleh orang lain, yang berada di pundaknya

14254
13:42:37,692 --> 13:42:40,402
kamu bisa berdiri, kami\nmungkin bisa melakukan hal seperti ini.

14255
13:42:40,402 --> 13:42:44,802
Izinkan saya menjalankan program, atau\n

14256
13:42:44,802 --> 13:42:48,652
Dan di Blur.py, di VS\nCode, izinkan saya melakukan ini.

14257
13:42:48,652 --> 13:42:51,891
Izinkan saya mengimpor dari perpustakaan,\nbukan perpustakaan CS50

14258
13:42:51,891 --> 13:42:56,141
tapi perpustakaan Bantal, jadi\nspeak, kata kuncinya disebut gambar

14259
13:42:56,141 --> 13:42:59,851
dan satu lagi bernama image\nfilter, biarkan saya melanjutkan

14260
13:42:59,851 --> 13:43:02,941
dan katakan, izinkan saya membuka\nversi terkini dari gambar ini, yang mana

14261
13:43:04,262 --> 13:43:06,781
Jadi versi sebelumnya\ngambarnya akan menjadi

14262
13:43:06,781 --> 13:43:11,072
hasil pemanggilan image.open\nquote unquote "Bridge.bmp

14263
13:43:11,072 --> 13:43:13,561
lalu, izinkan saya membuat\nan setelah versinya.

14264
13:43:13,561 --> 13:43:15,362
Jadi, Anda akan melihat sebelum dan sesudahnya.

14265
13:43:15,362 --> 13:43:21,531
Setelah sama dengan versi sebelum\n.filter filter gambar.

14266
13:43:21,531 --> 13:43:23,281
Dan memang ada, jika saya\nmembaca dokumentasinya

14267
13:43:23,281 --> 13:43:25,574
Saya akan melihat ada sesuatu\nyang disebut kotak buram, itu

14268
13:43:25,574 --> 13:43:28,682
memungkinkan Anda memburamkan dalam format\nkotak, seperti satu piksel di atas

14269
13:43:30,271 --> 13:43:31,888
Jadi saya akan membuat satu piksel di sana.

14270
13:43:31,889 --> 13:43:34,472
Lalu, setelah selesai, biarkan\nsaya melanjutkan dan menyimpan file tersebut

14271
13:43:38,701 --> 13:43:41,432
Dengan asumsi perpustakaan ini\nberfungsi seperti yang dijelaskan

14272
13:43:41,432 --> 13:43:44,582
Saya membuka file\nin Python, menggunakan baris 3.

14273
13:43:44,582 --> 13:43:46,202
Dan ini adalah sintaksis yang agak baru.

14274
13:43:46,201 --> 13:43:49,771
Di dunia Python, kita akan\n

14275
13:43:49,771 --> 13:43:51,841
lebih lagi, karena di\ndunia Python, Anda punya

14276
13:43:51,841 --> 13:43:56,221
apa yang disebut berorientasi objek\n

14277
13:43:56,222 --> 13:43:58,991
Artinya\nAnda masih memiliki fungsi

14278
13:43:58,991 --> 13:44:01,502
Anda masih memiliki variabel,\ntetapi terkadang fungsi tersebut

14279
13:44:01,502 --> 13:44:05,372
tertanam di dalam\nvariabel, atau, lebih khusus lagi

14280
13:44:05,372 --> 13:44:07,232
di dalam tipe data itu sendiri.

14281
13:44:07,232 --> 13:44:10,952
Pikirkan kembali C. Saat Anda menginginkan\n

14282
13:44:10,951 --> 13:44:15,103
ada fungsi ke atas yang membutuhkan\n

14283
13:44:15,103 --> 13:44:18,061
Dan Anda dapat meneruskan karakter apa pun yang Anda\n

14284
13:44:19,411 --> 13:44:22,681
Nah, tahukah Anda, jika itu\nparadigma yang umum, di mana

14285
13:44:22,682 --> 13:44:26,372
karakter huruf besar adalah hal yang berguna\n

14286
13:44:26,372 --> 13:44:30,992
apakah itu disematkan ke dalam tipe data string\n, atau char jika Anda mau

14287
13:44:30,991 --> 13:44:35,761
kemampuan untuk hanya menggunakan huruf besar pada karakter apa pun\n

14288
13:44:35,762 --> 13:44:38,672
seolah-olah itu adalah struct\nin C. Ingatlah bahwa struct

14289
13:44:38,671 --> 13:44:40,921
merangkum beberapa jenis nilai.

14290
13:44:40,921 --> 13:44:44,131
Dalam pemrograman berorientasi objek,\nin bahasa seperti Python

14291
13:44:44,131 --> 13:44:48,031
Anda tidak hanya dapat merangkum\nnilai, tetapi juga fungsionalitas.

14292
13:44:48,031 --> 13:44:50,339
Fungsi sekarang bisa berada di dalam struct.

14293
13:44:50,339 --> 13:44:52,381
Namun kami tidak akan\nmenyebutnya sebagai struct lagi.

14294
13:44:52,381 --> 13:44:53,792
Kita akan menyebutnya objek.

14295
13:44:53,792 --> 13:44:55,652
Tapi itu hanya bahasa daerah yang berbeda.

14296
13:44:57,391 --> 13:45:00,391
Di dalam perpustakaan gambar,\nada fungsi yang disebut terbuka

14297
13:45:00,391 --> 13:45:03,152
dan dibutuhkan argumen,\nnama file, untuk membukanya.

14298
13:45:03,152 --> 13:45:06,781
Setelah saya memanggil variabel sebelumnya,\n

14299
13:45:06,781 --> 13:45:09,811
sebuah objek, di dalam\nyang sekarang, karena itu

14300
13:45:09,811 --> 13:45:12,661
dikembalikan dari\nfungsi ini, sebuah fungsi

14301
13:45:12,661 --> 13:45:14,801
disebut filter, yang membutuhkan argumen.

14302
13:45:14,802 --> 13:45:18,182
Argumennya di sini\nadalah image.boxblur1

14303
13:45:19,351 --> 13:45:21,324
Tapi itu hanya mengembalikan filter untuk digunakan.

14304
13:45:21,324 --> 13:45:23,491
Lalu, setelahnya, simpan titik\ndo sesuai dengan apa yang mungkin Anda pikirkan.

14305
13:45:24,671 --> 13:45:27,991
Jadi daripada menggunakan fopen dan\nfwrite, cukup ucapkan dot save

14306
13:45:27,991 --> 13:45:31,031
dan itu membuat\nsemua pekerjaan berantakan itu bagi Anda.

14307
13:45:31,031 --> 13:45:33,752
Jadi hanya total empat\nbaris kode?

14308
13:45:33,752 --> 13:45:36,762
Biarkan saya melanjutkan\nke jendela terminal saya.

14309
13:45:36,762 --> 13:45:40,055
Izinkan saya menunjukkannya kepada Anda\ndengan LS saat ini

14310
13:45:40,055 --> 13:45:41,972
ups, maaf, izinkan saya\ntidak repot-repot menunjukkannya

14311
13:45:41,972 --> 13:45:43,682
karena saya punya contoh lain yang akan datang.

14312
13:45:43,682 --> 13:45:50,832
Saya akan melanjutkan dan menggunakan Python\n

14313
13:45:50,832 --> 13:45:52,092
Saya memang perlu membuat perintah.

14314
13:45:52,802 --> 13:45:55,862
Oke, izinkan saya mengetik LS\n

14315
13:45:55,862 --> 13:45:58,082
adalah salah satu contoh kode online hari ini.

14316
13:45:58,082 --> 13:46:01,322
Hanya ada satu file\nbernama Bridge.bmp, sial

14317
13:46:01,322 --> 13:46:04,152
Saya mencoba menyiapkan\nhal-hal ini pada saat yang bersamaan.

14318
13:46:05,252 --> 13:46:08,641
Biarkan saya memindahkan kode ini ke tempatnya.

14319
13:46:08,641 --> 13:46:11,231
Baiklah, saya sudah lanjutkan\ndan pindahkan file ini, Blur.py

14320
13:46:11,232 --> 13:46:13,712
ke dalam folder bernama\nfilter, di dalamnya

14321
13:46:13,711 --> 13:46:18,601
ada file lain bernama Bridge.bmp,\n

14322
13:46:18,601 --> 13:46:20,911
Izinkan saya menjalankan\ndan menjalankan Python, yang mana

14323
13:46:20,911 --> 13:46:23,221
adalah penerjemah saya, dan juga\nnama bahasanya

14324
13:46:23,222 --> 13:46:25,512
dan jalankan Python pada file ini.

14325
13:46:25,512 --> 13:46:27,870
Mirip seperti menjalankan\nalgoritma Spanyol

14326
13:46:27,870 --> 13:46:29,912
melalui Google Terjemahan,\atau semacamnya

14327
13:46:29,911 --> 13:46:32,171
sebagai masukan, untuk mendapatkan kembali\nkeluaran bahasa Inggris

14328
13:46:32,171 --> 13:46:36,061
ini akan menerjemahkan\nbahasa Python menjadi sesuatu

14329
13:46:36,061 --> 13:46:38,281
komputer ini, atau\nlingkungan berbasis cloud ini

14330
13:46:38,281 --> 13:46:41,591
mengerti, lalu jalankan\nkode yang sesuai, dari atas ke bawah

14331
13:46:42,228 --> 13:46:43,561
Saya akan melanjutkan dan Masuk.

14332
13:46:43,561 --> 13:46:45,451
Tidak ada pesan kesalahan\numumnya merupakan hal yang baik.

14333
13:46:45,451 --> 13:46:48,481
Jika saya mengetik LS, Anda sekarang akan melihat out.bmp.

14334
13:46:48,482 --> 13:46:49,817
Biarkan saya membukanya.

14335
13:46:49,817 --> 13:46:52,442
Dan tahukah Anda, hanya untuk memperjelas\napa yang sebenarnya terjadi

14336
13:46:52,442 --> 13:46:53,609
izinkan saya mengaburkannya lebih jauh.

14337
13:46:53,608 --> 13:46:57,072
Mari kita buat kotak yang ukurannya bukan\nhanya satu piksel, tapi 10 piksel.

14338
13:46:58,472 --> 13:47:01,351
Dan izinkan saya melanjutkan dan\nmenjalankannya kembali dengan Python dari Blur.py.

14339
13:47:03,841 --> 13:47:08,621
Izinkan saya membuka Out.bmp\ndan menunjukkan kepada Anda terlebih dahulu sebelumnya

14340
13:47:11,072 --> 13:47:14,341
Dan sekarang, semoga saja,\nempat baris kode nanti

14341
13:47:14,341 --> 13:47:16,279
hasil dari pengaburannya juga.

14342
13:47:16,279 --> 13:47:18,572
Jadi perpustakaan melakukan semua\nkerja keras yang sama

14343
13:47:18,572 --> 13:47:20,641
yang Anda semua lakukan untuk\ntugasnya, tapi ternyata

14344
13:47:20,641 --> 13:47:24,824
merangkum semuanya menjadi satu\n

14345
13:47:24,824 --> 13:47:27,241
Bagi Anda yang mungkin\nmerasa lebih nyaman

14346
13:47:27,241 --> 13:47:29,116
mungkin telah melakukan\nsesuatu seperti ini.

14347
13:47:29,116 --> 13:47:33,421
Biarkan saya melanjutkan dan membuka satu\file lain, bernama Edges.py.

14348
13:47:33,421 --> 13:47:36,811
Dan di Edges.py, saya kembali lagi\n

14349
13:47:36,811 --> 13:47:39,531
kata kunci gambar, dan filter gambar.

14350
13:47:39,531 --> 13:47:42,031
Lalu saya akan melanjutkan dan\nmembuat gambar sebelumnya, itu saja

14351
13:47:42,031 --> 13:47:46,112
hasil dari pemanggilan image.open\nhal yang sama, Bridge.bmp

14352
13:47:46,112 --> 13:47:53,432
maka saya akan melanjutkan dan menjalankan\n

14353
13:47:53,432 --> 13:47:58,372
filter gambar.temukan tepian, yang\nseperti konten, jika Anda mau

14354
13:47:58,372 --> 13:48:00,230
didefinisikan di dalam perpustakaan ini untuk kita.

14355
13:48:00,230 --> 13:48:02,272
Lalu saya akan melakukan\nafter.save quote unquote

14356
13:48:02,271 --> 13:48:04,731
Out.bmp," menggunakan nama file yang sama.

14357
13:48:04,732 --> 13:48:13,012
Saya sekarang akan menjalankan Python\n

14358
13:48:13,012 --> 13:48:15,452
Kita akan segera melihat apa arti kesalahan sintaksis.

14359
13:48:15,451 --> 13:48:17,991
Biarkan saya menjalankan\nkodenya sekarang, Edges.py.

14360
13:48:17,991 --> 13:48:21,351
Sekarang izinkan saya membuka file baru itu, Out.bmp.

14361
13:48:21,351 --> 13:48:26,031
Dan sebelum kita memiliki ini, dan sekarang,\n

14362
13:48:26,031 --> 13:48:28,731
jika kita melakukan versi\nyang lebih nyaman dari P set 4

14363
13:48:28,732 --> 13:48:31,862
kita sekarang mendapatkan ini, setelah\nhanya empat baris kode.

14364
13:48:31,862 --> 13:48:34,641
Jadi sekali lagi, kami menyarankan kekuatan\nmenggunakan bahasa yang lebih baik

14365
13:48:34,641 --> 13:48:36,082
dioptimalkan untuk alat yang ada.

14366
13:48:36,082 --> 13:48:39,472
Dan dengan risiko\nmembuat orang sedih, mari kita lanjutkan

14367
13:48:39,472 --> 13:48:43,342
dan menerapkannya kembali, jika kami bisa,\n

14368
13:48:43,341 --> 13:48:47,601
Izinkan saya membuka\nversi lain dari kode ini

14369
13:48:47,601 --> 13:48:50,828
dimana saya memiliki versi C\n, hanya dari masalah

14370
13:48:50,828 --> 13:48:52,911
setel lima, di mana Anda\nmenerapkan pemeriksa ejaan

14371
13:48:52,911 --> 13:48:55,161
memuat 100.000 lebih kata ke dalam memori.

14372
13:48:55,161 --> 13:48:58,911
Lalu Anda terus memantau\n

14373
13:48:58,911 --> 13:49:00,861
Dan penerapannya mungkin memakan waktu\nawaktu

14374
13:49:00,862 --> 13:49:03,052
semua fungsi itu di Dictionary.c.

14375
13:49:03,052 --> 13:49:08,762
Biarkan saya masuk ke\nfile baru, bernama Dictionary.py.

14376
13:49:08,762 --> 13:49:11,722
Dan izinkan saya menetapkannya, demi\ndemi diskusi

14377
13:49:11,722 --> 13:49:14,182
yang sudah kami tulis\nin sebelumnya, Speller.py

14378
13:49:14,182 --> 13:49:16,372
yang sesuai dengan Speller.c.

14379
13:49:16,372 --> 13:49:17,902
Anda tidak menulis keduanya.

14380
13:49:17,902 --> 13:49:20,122
Ingat untuk kumpulan masalah\nlima, kami memberi Anda Speller.c.

14381
13:49:20,122 --> 13:49:22,080
Asumsikan kami akan\nmemberi Anda Speller.py.

14382
13:49:22,080 --> 13:49:28,552
Jadi tanggung jawab kita saat ini hanyalah\n

14383
13:49:28,552 --> 13:49:31,462
Baiklah, jadi saya akan melanjutkan\naju dan mendefinisikan beberapa fungsi.

14384
13:49:31,461 --> 13:49:34,521
Dan sekarang kita akan melihat sintaksnya\n

14385
13:49:34,521 --> 13:49:38,752
Saya ingin melanjutkan dan mendefinisikan\npertama, tabel hash, yang mana

14386
13:49:38,752 --> 13:49:41,362
adalah hal pertama\nyang Anda definisikan di Dictionary.c.

14387
13:49:41,362 --> 13:49:46,491
Kalau begitu, saya akan melanjutkan dan mengatakan\n

14388
13:49:46,491 --> 13:49:48,205
atau dikenal sebagai tabel hash.

14389
13:49:48,205 --> 13:49:50,122
Baiklah, sekarang izinkan saya\nmendefinisikan fungsi yang dipanggil

14390
13:49:50,122 --> 13:49:53,152
periksa, fungsi mana yang pertama\nAnda mungkin implementasikan.

14391
13:49:53,152 --> 13:49:55,522
Pemeriksaan akan mengambil satu kata,\ndan Anda akan melihatnya dengan Python

14392
13:49:55,521 --> 13:49:56,896
sintaksnya sedikit berbeda.

14393
13:49:56,896 --> 13:49:58,401
Anda tidak menentukan tipe pengembalian.

14394
13:49:58,402 --> 13:50:01,132
Anda menggunakan kata Def sebagai gantinya untuk mendefinisikan.

14395
13:50:01,131 --> 13:50:05,061
Anda masih menentukan nama\n

14396
13:50:05,061 --> 13:50:07,731
Tapi Anda menghilangkan penyebutan tipe apa pun.

14397
13:50:07,732 --> 13:50:09,802
Tapi Anda menggunakan titik dua dan indentasi.

14398
13:50:09,802 --> 13:50:14,302
Jadi bagaimana cara memeriksa apakah ada kata di\n

14399
13:50:14,302 --> 13:50:17,962
Nah, dengan Python, saya bisa\nhanya mengucapkan kata dalam kata-kata

14400
13:50:17,961 --> 13:50:23,091
lanjutkan dan kembalikan benar, jika tidak\nlanjutkan dan kembalikan salah, selesai

14401
13:50:24,470 --> 13:50:26,161
Baiklah, sekarang saya ingin melakukan seperti memuat.

14402
13:50:26,161 --> 13:50:29,161
Itu adalah pekerjaan berat, di mana Anda\n

14403
13:50:29,161 --> 13:50:30,828
Jadi izinkan saya mendefinisikan fungsi yang disebut memuat.

14404
13:50:30,828 --> 13:50:33,171
Dibutuhkan sebuah string,\nnama file yang akan dimuat.

14405
13:50:33,171 --> 13:50:36,502
Jadi saya akan menyebutnya Kamus,\nseperti di C, tetapi tidak ada tipe datanya.

14406
13:50:36,502 --> 13:50:40,701
Izinkan saya membuka file dengan\n

14407
13:50:40,701 --> 13:50:43,261
dengan membuka Kamus itu dalam mode baca.

14408
13:50:43,262 --> 13:50:46,882
Jadi ini sedikit mirip dengan fopen,\n

14409
13:50:46,881 --> 13:50:49,401
Lalu izinkan saya mengulangi\tidak semua baris dalam file.

14410
13:50:49,402 --> 13:50:54,322
Dalam Python, ini cukup menyenangkan,\n

14411
13:50:54,322 --> 13:50:59,031
Bagaimana, sekarang, cara saya mengetahui arus\n

14412
13:50:59,031 --> 13:51:02,091
karena dalam file\nkata ini, 140.000 kata

14413
13:51:02,091 --> 13:51:05,273
ada kata backslash n,\nkata backslash n, oke?

14414
13:51:05,273 --> 13:51:07,731
Baiklah, izinkan saya melanjutkan dan mendapatkan\na kabar dari baris saat ini

14415
13:51:07,732 --> 13:51:11,362
tapi lepaskan, dari ujung kanan\n

14416
13:51:11,362 --> 13:51:14,061
fungsi Rstrip\nin Python melakukannya untuk saya.

14417
13:51:14,061 --> 13:51:18,891
Kalau begitu izinkan saya melanjutkan dan menambahkan ke\n

14418
13:51:19,552 --> 13:51:22,057
Biarkan saya melanjutkan dan menutup\nfile tersebut untuk pengukuran yang lebih baik.

14419
13:51:22,057 --> 13:51:24,682
Lalu izinkan saya melanjutkan dan\nmengembalikan kenyataan, karena semuanya baik-baik saja.

14420
13:51:24,682 --> 13:51:26,842
Itu saja untuk fungsi load\n dengan Python.

14421
13:51:26,841 --> 13:51:28,101
Bagaimana dengan fungsi ukuran?

14422
13:51:28,101 --> 13:51:31,341
Ini tidak memerlukan argumen apa pun, itu\n

14423
13:51:32,512 --> 13:51:36,502
Saya bisa melakukannya dengan mengembalikan\n

14424
13:51:36,502 --> 13:51:41,182
Dan yang terakhir, pergi dari\n

14425
13:51:42,612 --> 13:51:45,472
Jadi apa pun yang saya lakukan,\ntidak ada yang perlu dibongkar.

14426
13:51:45,472 --> 13:51:47,342
Komputer akan melakukan itu untuk saya.

14427
13:51:47,341 --> 13:51:51,381
Jadi saya memberi Anda, dalam fungsi-fungsi ini,\nmasalah ditetapkan lima dengan Python.

14428
13:51:51,381 --> 13:51:53,542
Jadi, maaf, kami membuat\nAnda menulisnya dalam C terlebih dahulu.

14429
13:51:53,542 --> 13:51:57,141
Namun implikasinya sekarang adalah,\napa yang Anda dapatkan secara gratis

14430
13:51:58,372 --> 13:52:00,891
Ya, terangkum dalam\nsatu baris kode ini

14431
13:52:00,891 --> 13:52:04,792
adalah sebagian besar dari apa yang Anda tulis untuk\nkumpulan masalah kelima, implementasi

14432
13:52:04,792 --> 13:52:07,792
array Anda untuk semua\nhuruf alfabet atau lebih

14433
13:52:07,792 --> 13:52:10,912
semua daftar tertaut yang Anda\niimplementasikan untuk membuat rantai

14434
13:52:10,911 --> 13:52:12,451
untuk menyimpan semua kata-kata itu.

14435
13:52:13,582 --> 13:52:16,612
Hanya saja ada orang lain\ndi dunia yang menulis kode itu untuk Anda.

14436
13:52:16,612 --> 13:52:19,582
Dan kini Anda dapat menggunakannya\nmelalui kamus.

14437
13:52:19,582 --> 13:52:22,072
Dan sebenarnya, saya bisa\nmengubahnya sedikit

14438
13:52:22,072 --> 13:52:25,192
karena add secara teknis bukan\nfungsi yang tepat untuk digunakan di sini.

14439
13:52:25,192 --> 13:52:28,141
Saya sebenarnya sedang mengerjakan kamus\n

14440
13:52:28,141 --> 13:52:31,942
Jadi saya akan membuat satu penyesuaian, set\n

14441
13:52:31,942 --> 13:52:34,222
Namun set hanya mengizinkannya\nmenangani duplikat

14442
13:52:34,222 --> 13:52:36,952
dan itu memungkinkan saya untuk membuang\nsesuatu ke dalamnya secara harfiah

14443
13:52:36,951 --> 13:52:38,841
menggunakan fungsi yang sederhana seperti menambahkan.

14444
13:52:38,841 --> 13:52:41,691
Dan saya tidak akan membuat\tidak ada perubahan lain di sini

14445
13:52:41,692 --> 13:52:46,312
karena, ketika saya sedang memeriksa sebuah kata,\n

14446
13:52:46,311 --> 13:52:49,042
bagi saya dalam huruf besar atau kapital.

14447
13:52:49,042 --> 13:52:52,402
Itu belum tentu akan datang\n

14448
13:52:53,991 --> 13:52:58,911
Saya bisa memaksa setiap kata menjadi\nhuruf kecil dengan menggunakan word.lower.

14449
13:52:58,911 --> 13:53:01,021
Dan saya tidak perlu melakukannya\nkarakter demi karakter

14450
13:53:01,021 --> 13:53:06,322
Saya bisa melakukan keseluruhan string di\n

14451
13:53:06,322 --> 13:53:09,381
Baiklah, izinkan saya melanjutkan dan\tidak membuka jendela terminal di sini.

14452
13:53:09,381 --> 13:53:12,639
Dan izinkan saya masuk ke, pertama,\nversi C saya, di sebelah kiri.

14453
13:53:12,639 --> 13:53:15,682
Dan sebenarnya saya akan melanjutkan\n

14454
13:53:15,682 --> 13:53:20,529
Dan di sebelah kanan, saya akan masuk ke\n

14455
13:53:20,529 --> 13:53:23,362
Namun ini juga tersedia online, jika\n

14456
13:53:23,362 --> 13:53:26,692
Saya akan lanjutkan dan\nmembuat ejaan dalam C di sebelah kiri

14457
13:53:26,692 --> 13:53:28,792
dan perhatikan bahwa kompilasi memerlukan waktu\na saat.

14458
13:53:28,792 --> 13:53:33,052
Lalu saya akan siap\nmenjalankan ejaan kamus

14459
13:53:33,052 --> 13:53:35,852
mari kita lakukan seperti teks Sherlock\nHolmes, yang cukup besar.

14460
13:53:35,851 --> 13:53:40,491
Lalu di sini, izinkan saya\nsiap menjalankan Python speller

14461
13:53:44,254 --> 13:53:46,671
Jadi sintaksnya sedikit\nberbeda pada command prompt.

14462
13:53:46,671 --> 13:53:49,402
Saya hanya, di sebelah kiri, harus\nmengkompilasi kodenya, dengan make

14463
13:53:49,402 --> 13:53:51,171
lalu jalankan dengan ./seller.

14464
13:53:51,171 --> 13:53:52,891
On the right, I don't\nneed to compile it.

14465
13:53:52,891 --> 13:53:54,381
Tapi saya perlu menggunakan penerjemah.

14466
13:53:54,381 --> 13:53:56,752
Jadi meskipun garisnya\nsedikit terbungkus di sini

14467
13:53:56,752 --> 13:53:58,701
biarkan saya melanjutkan dan menjalankannya di sebelah kanan.

14468
13:53:58,701 --> 13:54:00,826
Dan saya akan menghitung berapa\nlamanya waktu yang dibutuhkan, secara lisan

14469
13:54:02,091 --> 13:54:05,241
Satu Mississippi, dua Mississippi,\ntiga Mississippi, oke

14470
13:54:05,241 --> 13:54:07,711
jadi ini seperti tiga\ndetik, memberi atau menerima.

14471
13:54:07,711 --> 13:54:10,042
Sekarang jalankan di\nPython, ingatlah

14472
13:54:10,042 --> 13:54:13,625
Saya menghabiskan waktu lebih sedikit untuk mengimplementasikan\na pemeriksa ejaan dengan Python

14473
13:54:13,625 --> 13:54:15,292
daripada yang mungkin Anda alami di kumpulan masalah lima.

14474
13:54:15,292 --> 13:54:18,529
Tapi apa untungnya,\n

14475
13:54:18,529 --> 13:54:20,362
apakah kita semua sekarang perlu\nberbuat secara sadar?

14476
13:54:20,362 --> 13:54:22,822
Ini dia, di sebelah kanan, dengan Python.

14477
13:54:22,822 --> 13:54:26,542
Satu Mississippi, dua Mississippi,\n

14478
13:54:26,542 --> 13:54:30,592
lima Mississippi, enam Mississippi,\n

14479
13:54:30,591 --> 13:54:33,621
sembilan Mississippi, 10\nMississippi, 11 Mississippi

14480
13:54:33,622 --> 13:54:36,512
baiklah, jadi 10 atau 11 detik.

14481
13:54:38,502 --> 13:54:43,072
Ayo masuk ke grup di sini, yang mana\n

14482
13:54:43,072 --> 13:54:47,302
Bagaimana Anda menjawab pertanyaan itu,\n

14483
13:54:48,052 --> 13:54:50,260
HADIRIN: Saya pikir Python\nlebih baik untuk programmer

14484
13:54:50,260 --> 13:54:54,368
lebih nyaman bagi programmer,\n

14485
13:54:54,368 --> 13:54:56,201
DAVID J. MALAN: Oke, jadi\nPython, untuk meringkas

14486
13:54:56,201 --> 13:54:59,981
lebih baik bagi pemrogram,\n

14487
13:54:59,982 --> 13:55:02,982
tapi C mungkin lebih baik untuk komputer,\n

14488
13:55:02,982 --> 13:55:04,649
Saya rasa itu adalah rumusan yang masuk akal.

14489
13:55:07,110 --> 13:55:09,402
HADIRIN: Saya pikir itu tergantung\non ukuran proyeknya

14490
13:55:10,432 --> 13:55:12,807
Jadi jika itu akan menjadi sesuatu\nitu relatif cepat

14491
13:55:12,807 --> 13:55:15,232
Saya mungkin tidak peduli bahwa\nbutuhkan 10 detik untuk melakukannya.

14492
13:55:15,232 --> 13:55:17,432
Dan bisa lebih cepat\nmelakukannya dengan Python.

14493
13:55:17,432 --> 13:55:20,592
Sedangkan dengan C, jika saya berurusan\n

14494
13:55:20,591 --> 13:55:24,822
set atau sesuatu yang besar, lalu itu\n

14495
13:55:24,822 --> 13:55:29,262
mungkin layak untuk dimasukkan ke dalam\n

14496
13:55:29,262 --> 13:55:32,781
sehingga proses terus berjalan\n

14497
13:55:32,781 --> 13:55:33,951
DAVID J. MALAN: Tentu saja,\na jawaban yang sangat bagus.

14498
13:55:33,951 --> 13:55:36,822
Dan izinkan saya meringkas, apakah itu tergantung\n

14499
13:55:36,822 --> 13:55:40,572
Jika Anda memiliki kumpulan\ndata yang sangat besar, Anda mungkin bisa melakukannya

14500
13:55:40,572 --> 13:55:43,650
ingin mengoptimalkan kode Anda menjadi seperti\n

14501
13:55:43,650 --> 13:55:45,942
terutama jika Anda menjalankan\nkode itu berulang kali.

14502
13:55:45,942 --> 13:55:47,472
Mungkin Anda adalah perusahaan seperti Google.

14503
13:55:47,472 --> 13:55:49,632
Orang-orang menelusuri\ndatabase yang besar sepanjang waktu.

14504
13:55:49,631 --> 13:55:52,271
Anda benar-benar ingin memaksimalkan\kinerja sedikit pun

14505
13:55:52,271 --> 13:55:53,743
sebisa mungkin dari komputer.

14506
13:55:53,743 --> 13:55:56,201
Anda mungkin ingin seseorang\nsmart mengambil bahasa seperti C

14507
13:55:56,201 --> 13:55:57,971
dan menulisnya pada tingkat yang sangat rendah.

14508
13:55:59,921 --> 13:56:02,671
Mereka harus berurusan dengan\n

14509
13:56:02,671 --> 13:56:06,011
Namun jika berfungsi dengan benar, itu\n

14510
13:56:06,012 --> 13:56:08,802
Sebaliknya, jika Anda memiliki\na kumpulan data, itu berarti besar

14511
13:56:08,802 --> 13:56:12,342
dan 140.000 kata bukanlah hal yang kecil, tetapi Anda tidak

14512
13:56:12,341 --> 13:56:15,461
ingin menghabiskan waktu Anda sekitar 5 jam,\n10 jam, seminggu

14513
13:56:15,461 --> 13:56:17,584
membuat pemeriksa ejaan\natau kamus

14514
13:56:17,584 --> 13:56:20,502
Anda dapat memanfaatkan\n yang lain

14515
13:56:20,502 --> 13:56:25,211
dan membangun di atasnya, untuk\n

14516
13:56:27,362 --> 13:56:29,310
HADIRIN: Maukah Anda,\nkarena dengan Python

14517
13:56:29,311 --> 13:56:33,450
bukankah itu juga suka\nmengonversi kata-katanya, atau suka

14518
13:56:33,449 --> 13:56:35,060
ubah kata-katanya, untuk pelajaran?

14519
13:56:35,061 --> 13:56:37,103
Saat kami mengubahnya menjadi\nversi yang sama lagi

14520
13:56:37,103 --> 13:56:40,670
apakah kita hanya mempertimbangkannya?

14521
13:56:40,669 --> 13:56:43,461
DAVID J. MALAN: Itu sempurna\n

14522
13:56:43,461 --> 13:56:45,862
ingin dibuat, yang mana, apakah\nada sesuatu di antaranya?

14523
13:56:46,881 --> 13:56:49,491
Saya terlalu menyederhanakan apa\nyang sebenarnya dilakukan bahasa ini.

14524
13:56:49,491 --> 13:56:51,801
Perbedaannya tidak terlalu mencolok\namun mengatakan, seperti, hei

14525
13:56:51,802 --> 13:56:54,862
Python empat kali lebih lambat dibandingkan C.\n

14526
13:56:54,862 --> 13:56:57,982
Pasti ada cara\ninsinyur dapat mengoptimalkan bahasa

14527
13:56:57,982 --> 13:56:59,752
seperti yang telah mereka lakukan untuk Python.

14528
13:56:59,752 --> 13:57:02,362
Dan faktanya, saya telah mengonfigurasi\npengaturan saya sedemikian rupa

14529
13:57:02,362 --> 13:57:05,298
yang telah saya dramatisasi\nseberapa besar perbedaannya.

14530
13:57:05,298 --> 13:57:07,131
Ini akan menjadi lebih lambat,\nPython, biasanya

14531
13:57:07,131 --> 13:57:08,451
daripada program C yang setara.

14532
13:57:08,451 --> 13:57:10,461
Namun kesenjangannya tidak harus terlalu besar

14533
13:57:10,461 --> 13:57:14,241
seperti yang terjadi di sini, karena, memang, di antara\n

14534
13:57:14,241 --> 13:57:16,641
adalah untuk menyimpan beberapa hasil antara.

14535
13:57:16,641 --> 13:57:19,881
Secara teknis, ya,\nPython sedang menafsirkan

14536
13:57:19,881 --> 13:57:23,211
Dictionary.py dan file\nlainnya, menerjemahkannya

14537
13:57:23,211 --> 13:57:24,724
dari satu bahasa ke bahasa lain.

14538
13:57:24,724 --> 13:57:27,891
Namun bukan berarti harus melakukan hal itu\n

14539
13:57:27,891 --> 13:57:33,542
Saat Anda mengusulkan, Anda dapat menyimpan, atau menyimpan dalam cache,\n

14540
13:57:33,542 --> 13:57:36,961
Sehingga yang kedua dan ketiga\n

14541
13:57:36,961 --> 13:57:39,951
Dan faktanya, Python sendiri adalah\n

14542
13:57:39,951 --> 13:57:42,502
daripadanya, itu sendiri\sebenarnya diimplementasikan di C.

14543
13:57:42,502 --> 13:57:45,811
Jadi, Anda dapat memastikan bahwa\n

14544
13:57:45,811 --> 13:57:47,871
Lalu apa yang mungkin\ndapat diambil dari tingkat tinggi?

14545
13:57:47,872 --> 13:57:50,842
Ya, jika Anda ingin mencoba\nmeningkatkan setiap kinerja

14546
13:57:50,841 --> 13:57:54,231
keluar dari kode Anda, dan\nmungkin kode dibatasi.

14547
13:57:54,232 --> 13:57:55,672
Mungkin Anda memiliki perangkat yang sangat kecil.

14548
13:57:55,671 --> 13:57:57,292
Mungkin seperti jam tangan saat ini.

14549
13:57:57,292 --> 13:58:02,842
Atau mungkin sensor yang terpasang\n

14550
13:58:02,841 --> 13:58:06,231
atau di infrastruktur, di mana Anda\ntidak mempunyai banyak daya tahan baterai

14551
13:58:06,232 --> 13:58:08,152
dan Anda tidak punya banyak\nukuran, Anda mungkin menginginkannya

14552
13:58:08,152 --> 13:58:10,232
untuk meminimalkan berapa\nbanyak pekerjaan yang sedang dilakukan.

14553
13:58:10,232 --> 13:58:13,265
Dan semakin cepat kode tersebut dijalankan,\n

14554
13:58:13,264 --> 13:58:14,932
jika itu menerapkan sesuatu tingkat rendah.

14555
13:58:14,932 --> 13:58:18,832
Jadi C masih sangat umum digunakan\n

14556
13:58:18,832 --> 13:58:22,101
Namun, sekali lagi, jika Anda hanya ingin\nmenyelesaikan masalah dunia nyata

14557
13:58:22,101 --> 13:58:26,362
dan menyelesaikan pekerjaan nyata, serta waktu Anda\n

14558
13:58:26,362 --> 13:58:28,522
daripada perangkat tempat Anda\nmenjalankannya, dalam jangka panjang

14559
13:58:28,521 --> 13:58:31,879
tahukah Anda, Python termasuk di antara\n

14560
13:58:31,879 --> 13:58:34,671
Dan sejujurnya, jika saya menerapkan\n

14561
13:58:34,671 --> 13:58:36,231
Saya mungkin mulai dengan Python.

14562
13:58:36,232 --> 13:58:38,065
Dan saya tidak akan\nmembuang waktu untuk menerapkannya

14563
13:58:38,065 --> 13:58:41,452
semua hal tingkat rendah itu, karena\n

14564
13:58:41,451 --> 13:58:45,981
bahasa modern adalah dengan menggunakan abstraksi\n

14565
13:58:45,982 --> 13:58:49,432
Dan yang saya maksud dengan abstraksi adalah sesuatu\n

14566
13:58:49,432 --> 13:58:51,891
itu hanya memberi Anda\kamus, atau tabel hash

14567
13:58:51,891 --> 13:58:55,747
atau versi setara yang saya\n

14568
13:58:55,747 --> 13:58:59,242
Baiklah, ada pertanyaan\ntentang Python sejauh ini?

14569
13:59:04,232 --> 13:59:06,442
AUDIENCE: Bisakah Anda\nmengkompilasi kode Python

14570
13:59:06,442 --> 13:59:11,132
atau ada, menurutku\n

14571
13:59:11,131 --> 13:59:14,701
tapi rasanya jika Anda bisa\n

14572
13:59:14,701 --> 13:59:16,614
itu akan memberi Anda\nyang terbaik dari kedua hal tersebut.

14573
13:59:16,614 --> 13:59:18,781
DAVID J. MALAN: Pertanyaan atau observasi yang sangat bagus

14574
13:59:18,781 --> 13:59:20,239
bisakah Anda mengkompilasi kode Python?

14575
13:59:20,239 --> 13:59:23,701
Ya, tentu saja, gagasan tentang\n

14576
13:59:23,701 --> 13:59:26,011
bukan bahasa asli dari bahasa itu sendiri.

14577
13:59:26,012 --> 13:59:28,932
Hal ini cenderung berasal dari\nkonvensi yang kita sebagai manusia gunakan.

14578
13:59:28,932 --> 13:59:31,252
Jadi Anda sebenarnya bisa\nmenulis penerjemah untuk C

14579
13:59:31,252 --> 13:59:34,502
yang akan membacanya dari atas ke bawah, kiri\n

14580
13:59:34,502 --> 13:59:38,162
sesuatu yang dimengerti komputer, tapi\n

14581
13:59:38,161 --> 13:59:40,081
C umumnya merupakan bahasa yang dikompilasi.

14582
13:59:41,192 --> 13:59:44,531
Apa sebenarnya Python saat ini\n

14583
13:59:44,531 --> 13:59:46,741
Secara teknis, hal ini terjadi\ntanpa sepengetahuan kami

14584
13:59:46,741 --> 13:59:50,491
mengkompilasi kode, secara teknis\n

14585
13:59:50,491 --> 13:59:54,031
menjadi sesuatu yang disebut kode byte,\n

14586
13:59:54,031 --> 13:59:58,031
hanya saja tidak memakan banyak waktu\n

14587
13:59:58,031 --> 14:00:00,898
Dan ini adalah bidang penelitian\nuntuk pekerjaan para ilmuwan komputer

14588
14:00:00,898 --> 14:00:03,481
dalam bahasa pemrograman, untuk\nimeningkatkan paradigma semacam ini.

14589
14:00:04,021 --> 14:00:07,261
Sejujurnya, bagi Anda dan saya,\n

14590
14:00:07,262 --> 14:00:10,322
pertama, jalankan kodenya dan jangan khawatir\ntentang langkah bodoh kedua

14591
14:00:10,322 --> 14:00:11,622
mengkompilasinya sepanjang waktu.

14592
14:00:12,122 --> 14:00:14,742
Ini sebenarnya hanya separuh\nlangkah bagi saya, manusia.

14593
14:00:14,741 --> 14:00:17,021
Dan itu hal yang bagus untuk dioptimalkan.

14594
14:00:17,021 --> 14:00:20,851
Dan pada akhirnya, Anda juga mungkin\n

14595
14:00:20,851 --> 14:00:22,441
datang dengan bahasa lain ini.

14596
14:00:22,442 --> 14:00:24,482
Jadi, Anda harus benar-benar\nmenyesuaikan caranya

14597
14:00:24,482 --> 14:00:28,322
Anda dapat mengaktifkan fitur ini, seperti\n

14598
14:00:28,322 --> 14:00:31,112
Dan, faktanya, satu-satunya saat\nsaya pribadi menggunakan C

14599
14:00:31,112 --> 14:00:34,472
adalah dari bulan September hingga Oktober\nsetiap tahun, selama CS50.

14600
14:00:34,472 --> 14:00:36,872
Hampir setiap dua bulan\ndo saya menggunakan Python

14601
14:00:36,872 --> 14:00:40,211
atau bahasa lain yang disebut JavaScript,\n

14602
14:00:40,211 --> 14:00:44,161
yang bukan untuk meragukan C. Hanya saja\n

14603
14:00:44,161 --> 14:00:47,551
cocok untuk jumlah waktu yang saya miliki\n

14604
14:00:48,427 --> 14:00:50,927
Baiklah, mari kita lanjutkan\nistirahat lima menit di sini.

14605
14:00:50,927 --> 14:00:53,912
Dan saat kami kembali, kami akan mulai\n

14606
14:00:54,822 --> 14:00:58,262
Jadi mari kita lanjutkan dan mulai menulis\nbeberapa kode dari awal

14607
14:00:58,262 --> 14:01:01,232
di sini, kita memulai dari yang kecil\ndengan beberapa contoh sederhana

14608
14:01:01,232 --> 14:01:04,564
lalu kita akan membangunnya hingga\n

14609
14:01:04,563 --> 14:01:06,271
Namun yang akan kami lakukan\nsepanjang perjalanan adalah yang pertama

14610
14:01:06,271 --> 14:01:08,386
lihat secara berdampingan\nseperti apa tampilan kode C

14611
14:01:08,387 --> 14:01:11,162
seperti di minggu 1\atau 2 atau 3 dan seterusnya

14612
14:01:11,161 --> 14:01:13,411
lalu tulis\nkode Python yang sesuai di sebelah kanan.

14613
14:01:13,411 --> 14:01:16,051
Dan kemudian kita akan bertransisi\nuntuk fokus pada Python itu sendiri.

14614
14:01:16,052 --> 14:01:18,844
Apa yang telah saya lakukan sebelumnya hari ini adalah\n

14615
14:01:18,843 --> 14:01:21,451
dari situs kursus,\ndirektori sumber saya 6, yang mana

14616
14:01:21,451 --> 14:01:24,346
berisi semua kode\nC yang telah ditulis sebelumnya dari beberapa minggu yang lalu.

14617
14:01:24,347 --> 14:01:26,222
Namun ia juga akan memiliki\nsalinan kode Python

14618
14:01:26,222 --> 14:01:28,182
kita akan menulis di sini bersama-sama dan melihat.

14619
14:01:28,182 --> 14:01:31,967
Jadi pertama-tama, ini\nHalo.c kembali dari minggu 0.

14620
14:01:31,966 --> 14:01:33,844
Dan ini adalah versi 0-nya.

14621
14:01:33,845 --> 14:01:35,262
Saya akan melanjutkan dan melakukan ini.

14622
14:01:35,262 --> 14:01:38,762
Saya akan melanjutkan dan\nmembagi jendela kode saya di sini.

14623
14:01:38,762 --> 14:01:41,564
Saya akan melanjutkan dan membuat\na file baru bernama Hello.py.

14624
14:01:41,563 --> 14:01:43,771
Dan ini bukan sesuatu\nyang biasanya harus Anda lakukan

14625
14:01:43,771 --> 14:01:45,331
meletakkan kode Anda secara berdampingan.

14626
14:01:45,332 --> 14:01:47,402
Tapi saya baru saja mengklik\nikon kecil di VS Code

14627
14:01:47,402 --> 14:01:50,851
itu terlihat seperti dua kolom, itu\n

14628
14:01:50,851 --> 14:01:53,851
sehingga kita sebenarnya bisa melihat\nsegala sesuatu, untuk saat ini, secara berdampingan

14629
14:01:53,851 --> 14:01:55,309
dengan jendela terminal saya di bawah.

14630
14:01:55,309 --> 14:01:58,269
Baiklah, sekarang saya lanjutkan\n

14631
14:01:58,269 --> 14:02:01,082
program di sebelah kanan, yang\ningat hanya berupa cetakan, kutipan

14632
14:02:01,082 --> 14:02:03,692
tanda kutip, "Halo, dunia," dan selesai.

14633
14:02:03,692 --> 14:02:05,942
Sekarang di jendela\nterminal saya, saya berangkat

14634
14:02:05,942 --> 14:02:09,602
untuk melanjutkan dan menjalankan Python\nHello.py, Enter, dan voila

14635
14:02:10,972 --> 14:02:13,472
Jadi sekali lagi, saya tidak akan bermain\nanlebih jauh lagi dengan kode C.

14636
14:02:13,472 --> 14:02:15,452
Itu ada di sana hanya untuk menggerakkan\ningatan Anda ke kiri dan ke kanan.

14637
14:02:15,451 --> 14:02:17,761
Jadi sekarang mari kita lihat versi kedua\nHalo Dunia

14638
14:02:17,762 --> 14:02:20,974
sejak minggu pertama itu, saat\njika saya membuka Hello1.c

14639
14:02:20,974 --> 14:02:22,682
Saya akan menyeretnya\nover ke kanan.

14640
14:02:22,682 --> 14:02:25,502
Ups, saya lanjutkan dan\n

14641
14:02:25,502 --> 14:02:28,472
Dan sekarang, di sebelah kanan,\nmari kita ubah Hello.py

14642
14:02:28,472 --> 14:02:32,222
agar terlihat lebih seperti ini\nversi kedua di C, oke?

14643
14:02:32,222 --> 14:02:36,389
Saya ingin mendapatkan jawaban dari\npengguna sebagai nilai kembalian

14644
14:02:36,389 --> 14:02:38,222
tapi saya juga ingin mendapat\nmasukan dari mereka.

14645
14:02:38,222 --> 14:02:41,942
Jadi dari CS50, saya akan mengimpor\n

14646
14:02:41,942 --> 14:02:43,692
Kami akan menghapus\nitu pada akhirnya

14647
14:02:43,692 --> 14:02:45,484
namun untuk saat ini, ini merupakan\nroda pelatihan yang berguna.

14648
14:02:45,483 --> 14:02:47,701
Lalu di sini, saya\nakan berkata, jawab

14649
14:02:47,701 --> 14:02:51,031
sama dengan getString quote\nunquote, "Siapa nama Anda"?

14650
14:02:52,502 --> 14:02:53,974
Tapi tidak ada titik koma, tidak ada tipe data.

14651
14:02:53,974 --> 14:02:55,891
Lalu saya akan\nmelanjutkan dan mencetaknya

14652
14:02:55,891 --> 14:03:01,639
seperti contoh pertama pada slide,\n

14653
14:03:01,639 --> 14:03:03,182
Dan sekarang izinkan saya melanjutkan dan menjalankan ini.

14654
14:03:03,182 --> 14:03:06,182
Python, dari Hello.py, baiklah,\ni menanyakan siapa nama saya.

14655
14:03:07,891 --> 14:03:13,029
Namun perlu diperhatikan\n

14656
14:03:13,029 --> 14:03:15,362
Bukan hanya\nfungsi individualnya yang lebih sederhana.

14657
14:03:15,362 --> 14:03:18,991
Apa yang sekarang juga secara mencolok dihilangkan\ndari kode Python saya di sebelah kanan

14658
14:03:18,991 --> 14:03:21,178
baik di versi ini,\ndan versi sebelumnya.

14659
14:03:21,178 --> 14:03:22,636
Apa yang tidak ingin saya terapkan?

14660
14:03:23,788 --> 14:03:26,371
DAVID J. MALAN: Ya, jadi saya tidak\nperlu mengimplementasikan main.

14661
14:03:26,372 --> 14:03:29,732
Kita akan meninjau kembali fungsi main,\nkarena mempunyai fungsi utama

14662
14:03:29,732 --> 14:03:31,382
sebenarnya kadang-kadang memecahkan masalah.

14663
14:03:31,381 --> 14:03:32,612
Tapi itu tidak lagi diperlukan.

14664
14:03:32,612 --> 14:03:36,272
Di C Anda harus memilikinya untuk memulai\n

14665
14:03:36,858 --> 14:03:39,691
Dan faktanya, jika Anda hilang\n

14666
14:03:39,692 --> 14:03:42,555
jika Anda secara tidak sengaja mengkompilasi\nHelpers.c alih-alih file tersebut

14667
14:03:42,555 --> 14:03:44,972
yang berisi main, Anda akan\nmelihat kesalahan kompiler.

14668
14:03:44,972 --> 14:03:46,180
Di Python itu tidak perlu.

14669
14:03:46,180 --> 14:03:48,932
Dengan Python Anda bisa langsung melompat ke kanan\n

14670
14:03:49,872 --> 14:03:51,747
Apalagi jika itu adalah\nprogram kecil seperti ini

14671
14:03:51,747 --> 14:03:54,732
Anda tidak memerlukan biaya tambahan\n

14672
14:03:54,732 --> 14:03:56,382
Jadi itulah satu perbedaan lainnya di sini.

14673
14:03:56,381 --> 14:03:59,911
Baiklah, ada beberapa\ncara lain yang bisa kita lakukan untuk mengucapkan Halo, dunia.

14674
14:03:59,911 --> 14:04:02,681
Ingatlah bahwa saya bisa menggunakan format string.

14675
14:04:02,682 --> 14:04:06,881
Jadi saya bisa memasukkan semuanya ke dalam\n

14676
14:04:06,881 --> 14:04:09,771
Lalu biarkan saya melanjutkan dan\nmenjalankan Python dari Hello.py lagi.

14677
14:04:09,771 --> 14:04:11,771
Anda mungkin dapat melihat ke mana\nkita akan mengarahkan hal ini.

14678
14:04:11,771 --> 14:04:13,691
Izinkan saya mengetikkan nama saya,\nDavid, dan ini dia.

14679
14:04:13,692 --> 14:04:16,092
Oke, itu kesalahan yang\nseseorang identifikasi sebelumnya

14680
14:04:17,561 --> 14:04:21,461
Jika tidak, tidak ada variabel yang\ndiinterpolasi, melainkan diganti

14681
14:04:22,911 --> 14:04:26,681
Jadi jika saya masuk kembali dan menambahkan\nkurung kurawal itu ke string F

14682
14:04:26,682 --> 14:04:31,154
sekarang izinkan saya menjalankan Python dari Hello.py,\n

14683
14:04:33,701 --> 14:04:37,061
Namun secara umum, membuat\nkode lebih pendek dan ringkas

14684
14:04:38,391 --> 14:04:42,972
Jadi secara gaya, string F adalah\n

14685
14:04:42,972 --> 14:04:45,802
Baiklah, apa lagi\nyang bisa kita lakukan selain ini?

14686
14:04:45,802 --> 14:04:48,702
Baiklah, izinkan saya melanjutkan ke sini dan\n

14687
14:04:51,701 --> 14:04:54,671
Izinkan saya menyingkirkan\nlibrary CS50, yang pada akhirnya akan kami hapus

14688
14:04:54,671 --> 14:04:56,141
dalam beberapa minggu.

14689
14:04:56,141 --> 14:04:59,082
Saya tidak bisa menggunakan getString,\ntetapi saya bisa menggunakan suatu fungsi

14690
14:04:59,082 --> 14:05:01,252
yang disertakan dengan Python disebut input.

14691
14:05:01,252 --> 14:05:04,572
Dan sebenarnya, ini sebenarnya adalah\n

14692
14:05:04,572 --> 14:05:07,902
Tidak ada ruginya\menggunakan input daripada getString.

14693
14:05:07,902 --> 14:05:09,942
Kami menerapkan getString\nhanya untuk konsistensi

14694
14:05:09,942 --> 14:05:14,322
dengan apa yang Anda lihat di C. Python dari\n

14695
14:05:14,322 --> 14:05:15,832
Sebenarnya masih berfungsi sama.

14696
14:05:15,832 --> 14:05:17,749
Jadi hilanglah roda pelatihan khusus CS50\n.

14697
14:05:17,749 --> 14:05:19,749
Namun kami akan segera mengembalikannya\nmereka kembali

14698
14:05:19,749 --> 14:05:21,762
untuk menangani bilangan bulat atau\nfloat atau nilai lainnya

14699
14:05:21,762 --> 14:05:24,012
juga, karena ini akan membuat\hidup kita sedikit lebih sederhana

14700
14:05:25,031 --> 14:05:28,871
Baiklah, ada pertanyaan, sebelum kita\n

14701
14:05:28,872 --> 14:05:32,802
dari minggu 1, tapi sekarang dengan Python?

14702
14:05:32,802 --> 14:05:34,632
Baiklah, izinkan saya\na lanjutkan dan buka sekarang.

14703
14:05:34,631 --> 14:05:39,761
Katakanlah Kalkulator0.c, yang tadinya satu\n

14704
14:05:39,762 --> 14:05:43,391
matematika dan operator seperti itu, serta\nfungsi seperti getInt

14705
14:05:43,391 --> 14:05:48,341
izinkan saya melanjutkan dan membuat\nfile baru yang sekarang bernama Kalkulator.py

14706
14:05:48,341 --> 14:05:51,881
di sebelah kanan, sehingga saya masih memiliki\nkode C di sebelah kiri

14707
14:05:51,881 --> 14:05:53,471
dan kode Python saya di sebelah kanan.

14708
14:05:53,472 --> 14:05:57,132
Baiklah, izinkan saya mendalami\n

14709
14:05:57,131 --> 14:05:59,621
Saya akan menggunakan getInt\ndari perpustakaan CS50.

14710
14:06:01,482 --> 14:06:03,862
Saya akan melanjutkan sekarang\ndan mendapatkan Int dari pengguna.

14711
14:06:03,862 --> 14:06:07,522
Jadi x sama dengan getInt, dan saya akan\menanyakannya untuk nilai x

14712
14:06:08,951 --> 14:06:14,322
Tidak perlu menentukan titik koma\natau Int untuk x.

14713
14:06:15,461 --> 14:06:18,612
Y akan mendapatkan\nanother Int melalui y titik dua

14714
14:06:18,612 --> 14:06:23,351
lalu di sini, saya akan\n

14715
14:06:23,351 --> 14:06:25,241
Jadi ini sudah agak baru.

14716
14:06:25,241 --> 14:06:29,921
Ingat, versi C mengharuskan\n

14717
14:06:30,949 --> 14:06:32,741
Python sedikit\nlebih mudah digunakan.

14718
14:06:32,741 --> 14:06:36,191
Jika yang ingin Anda lakukan hanyalah mencetak\n

14719
14:06:36,192 --> 14:06:39,132
Jangan bingung dengan tanda\npersen atau kode format apa pun.

14720
14:06:39,131 --> 14:06:41,682
Ini bukan printf, ini\nsebenarnya baru saja dicetak sekarang.

14721
14:06:41,682 --> 14:06:45,131
Baiklah, izinkan saya melanjutkan\nmenjalankan Python dari Kalkulator.py

14722
14:06:45,131 --> 14:06:50,141
Masuk, lakukan contoh singkat saja,\n1 ditambah 2 memang sama dengan 3.

14723
14:06:50,141 --> 14:06:52,932
Selain itu, misalkan saya\mengambil pendekatan yang berbeda

14724
14:06:52,932 --> 14:06:56,029
untuk mengimpor seluruh pustaka CS50,\n

14725
14:06:56,029 --> 14:06:58,072
Anda tidak akan melihat\ndampak kinerja apa pun di sini.

14726
14:06:59,211 --> 14:07:02,201
Namun perhatikan apa yang tidak\nberhasil saat ini, padahal sudah berhasil

14727
14:07:02,201 --> 14:07:07,631
dalam C. Python dari Kalkulator.py, Enter,\n

14728
14:07:08,211 --> 14:07:10,091
Jadi penelusuran balik hanyalah\na istilah seni itu

14729
14:07:10,091 --> 14:07:13,731
mengatakan, berikut adalah penelusuran kembali\nseluruh fungsi

14730
14:07:14,771 --> 14:07:16,691
Di dunia C, Anda\nmungkin menyebutnya tumpukan

14731
14:07:16,692 --> 14:07:19,459
jejak, tumpukan menjadi kata kunci.

14732
14:07:19,459 --> 14:07:21,792
Ingat kembali saat kita berbicara\ntentang tumpukan dan heap

14733
14:07:21,792 --> 14:07:24,599
tumpukan, seperti tumpukan baki,\nadalah semua fungsi itu

14734
14:07:24,599 --> 14:07:26,182
mungkin akan dipanggil, satu demi satu.

14735
14:07:26,182 --> 14:07:30,851
Kita main, kita tukar, lalu tukar lagi\n

14736
14:07:30,851 --> 14:07:34,542
Jadi, inilah jejak semua\n

14737
14:07:34,542 --> 14:07:37,402
Sebenarnya tidak ada fungsi apa pun\selain file saya itu sendiri.

14738
14:07:37,402 --> 14:07:38,872
Kalau tidak, akan ada lebih banyak detail.

14739
14:07:38,872 --> 14:07:42,102
Namun meskipun agak samar,\n

14740
14:07:42,101 --> 14:07:46,481
di sini, kesalahan nama, jadi ada hubungannya\n

14741
14:07:47,472 --> 14:07:50,711
Dan ini tentu saja terjadi\bukan baris 3 di sana.

14742
14:07:52,042 --> 14:07:55,692
Ya, Python pada dasarnya\nmemungkinkan kita untuk namespace

14743
14:07:55,692 --> 14:07:58,272
fungsi kami yang berasal dari perpustakaan.

14744
14:07:58,271 --> 14:08:01,811
Ada masalah di C. Jika\nAnda menggunakan perpustakaan CS50

14745
14:08:01,811 --> 14:08:03,701
dan dengan demikian memiliki akses\nke getInt, getString

14746
14:08:03,701 --> 14:08:06,371
dan seterusnya, Anda\ntidak dapat menggunakan perpustakaan lain

14747
14:08:06,372 --> 14:08:08,112
yang memiliki nama fungsi yang sama.

14748
14:08:08,112 --> 14:08:10,031
Mereka akan bertabrakan, dan\nkompiler tidak akan bertabrakan

14749
14:08:10,031 --> 14:08:12,551
tahu cara menautkannya\ndengan benar.

14750
14:08:12,552 --> 14:08:18,042
Dalam Python, dan bahasa lain\nseperti JavaScript, dan dalam Java

14751
14:08:18,042 --> 14:08:21,792
Anda mendapat dukungan secara efektif\n

14752
14:08:21,792 --> 14:08:26,891
Anda dapat mengisolasi variabel dan\n

14753
14:08:26,891 --> 14:08:29,112
seperti wadahnya sendiri di memori.

14754
14:08:29,112 --> 14:08:32,082
Artinya,\njika Anda mengimpor semua CS50

14755
14:08:32,082 --> 14:08:36,252
Anda harus mengatakan bahwa getInt Anda\n

14756
14:08:36,252 --> 14:08:39,701
Jadi sama seperti gambar\nblur, dan tepi gambar

14757
14:08:39,701 --> 14:08:44,951
sebelumnya, di mana saya harus menentukan titik gambar\n

14758
14:08:44,951 --> 14:08:48,491
apakah saya menentukannya dengan operator titik,\n

14759
14:08:48,491 --> 14:08:50,932
ingin CS50.getInt di kedua tempat.

14760
14:08:50,932 --> 14:08:54,641
Dan sekarang jika saya menjalankan kembali Python\nof Kalkulator.py, 1 dan 2

14761
14:08:57,311 --> 14:09:01,311
Secara umum, hal ini bergantung\bukan pada berapa banyak fungsi

14762
14:09:01,311 --> 14:09:02,561
Anda menggunakan dari perpustakaan.

14763
14:09:02,561 --> 14:09:05,561
Jika Anda menggunakan sejumlah besar\n

14764
14:09:05,561 --> 14:09:09,854
Jika Anda hanya menggunakan satu\atau dua, impor baris demi baris.

14765
14:09:09,855 --> 14:09:12,272
Baiklah, mari kita lanjutkan\ndan lakukan sedikit penyesuaian di sini.

14766
14:09:12,271 --> 14:09:15,438
Mari kita singkirkan perpustakaan ini\dan lepaskan roda pelatihan ini

14767
14:09:15,438 --> 14:09:18,271
juga, secepat kami memperkenalkan\n

14768
14:09:18,271 --> 14:09:20,831
Anda akan dapat menggunakan semua\nfungsi yang sama.

14769
14:09:20,832 --> 14:09:24,632
Misalkan saya menghilangkan ini, dan\nSaya hanya menggunakan fungsi input

14770
14:09:24,631 --> 14:09:28,231
seperti yang saya lakukan dengan\nmengganti getString sebelumnya.

14771
14:09:28,232 --> 14:09:31,232
Izinkan saya menjalankan\nversi kode ini sekarang.

14772
14:09:31,232 --> 14:09:37,486
Python dari Kalkulator.py, Oke,\nbagaimana kalau 1 tambah 2 sama dengan 3.

14773
14:09:39,182 --> 14:09:41,851
Baiklah, jelas salah, salah.

14774
14:09:41,851 --> 14:09:46,411
Adakah yang bisa menjelaskan apa yang baru saja\nterjadi, berdasarkan naluri?

14775
14:09:47,911 --> 14:09:49,141
HADIRIN: Anda ingin jawaban?

14776
14:09:49,141 --> 14:09:50,266
DAVID J. MALAN: Tentu, ya.

14777
14:09:50,266 --> 14:09:54,451
AUDIENCE: Katakanlah Anda memiliki sejumlah\nstring yang tidak memiliki Int

14778
14:09:54,451 --> 14:09:57,841
jadi Anda akan berpisah dengannya dan\nmisalnya, mencetak satu, dua, lebih baik.

14779
14:09:57,841 --> 14:10:01,171
DAVID J. MALAN: Tepatnya, Python\nis menafsirkan, atau mengobati

14780
14:10:01,171 --> 14:10:03,332
baik x dan y sebagai string,\nyang sebenarnya

14781
14:10:03,332 --> 14:10:05,641
apa yang fungsi input\nkembalikan secara default.

14782
14:10:05,641 --> 14:10:08,671
Dan nilai plus kini sedang ditafsirkan\n

14783
14:10:09,182 --> 14:10:12,302
Jadi x ditambah y bukan x\nplus y secara matematis

14784
14:10:12,302 --> 14:10:15,002
tetapi dalam hal penggabungan string\n, sama seperti di Scratch.

14785
14:10:15,002 --> 14:10:18,211
Jadi itu sebabnya kita mendapatkan\n12, atau sebenarnya satu dua

14786
14:10:18,211 --> 14:10:19,561
yang bukan merupakan angka.

14787
14:10:20,701 --> 14:10:22,471
Jadi, entah bagaimana, kita perlu mengubah keadaan.

14788
14:10:22,472 --> 14:10:25,561
Dan kami tidak memiliki\nkemampuan ini dengan mudah di C.

14789
14:10:25,561 --> 14:10:29,191
Kami memang memiliki fungsi A hingga i\n, ASCII hingga integer

14790
14:10:29,192 --> 14:10:30,792
yang memungkinkan Anda melakukan ini.

14791
14:10:30,792 --> 14:10:35,912
Analog dalam Python sebenarnya hanya\n

14792
14:10:35,911 --> 14:10:39,271
Jadi sama seperti di C, Anda\nbisa menggunakan kata kunci Int

14793
14:10:39,271 --> 14:10:41,021
tetapi Anda menggunakannya sedikit berbeda.

14794
14:10:41,021 --> 14:10:45,822
Perhatikan bahwa saya tidak melakukan tanda kurung\n

14795
14:10:45,822 --> 14:10:47,531
Saya menggunakan Int sebagai fungsi.

14796
14:10:47,531 --> 14:10:49,951
Jadi memang, dalam Python, Int adalah sebuah fungsi.

14797
14:10:49,951 --> 14:10:53,131
Float adalah sebuah fungsi, di mana\nAnda dapat meneruskan nilai ke dalamnya

14798
14:10:53,131 --> 14:10:54,792
untuk melakukan konversi semacam ini.

14799
14:10:54,792 --> 14:10:58,531
Jadi sekarang, jika saya menjalankan Python\nof Kalkulator.py, 1 dan 2

14800
14:10:58,531 --> 14:11:01,951
sekarang kita kembali berbisnis,\ndan mendapatkan jawaban nomor 3.

14801
14:11:01,951 --> 14:11:03,761
Tapi ada semacam hambatan di sini.

14802
14:11:03,762 --> 14:11:04,952
Akan selalu ada trade-off.

14803
14:11:04,951 --> 14:11:07,081
Kedengarannya luar biasa\nbekerja dengan cara ini.

14804
14:11:07,082 --> 14:11:08,972
Kita sudah bisa membuang perpustakaan\nCS50.

14805
14:11:08,972 --> 14:11:13,652
Namun bagaimana jika pengguna secara tidak sengaja\n

14806
14:11:13,652 --> 14:11:15,557
seperti kucing, bukan angka.

14807
14:11:15,557 --> 14:11:17,432
Sial, ada salah satu\no jejak ini.

14808
14:11:17,432 --> 14:11:19,302
Seperti, sekarang program saya mogok.

14809
14:11:19,302 --> 14:11:21,864
Semangatnya serupa\ndengan jenis segfault

14810
14:11:21,864 --> 14:11:23,072
yang mungkin Anda miliki di C.

14811
14:11:23,072 --> 14:11:24,362
Tapi itu bukan segfault itu sendiri.

14812
14:11:24,362 --> 14:11:26,029
Itu belum tentu berhubungan dengan ingatan.

14813
14:11:26,029 --> 14:11:31,812
Kali ini berkaitan dengan\n sebenarnya

14814
14:11:31,811 --> 14:11:34,771
Jadi kali ini bukan kesalahan nama\n, melainkan kesalahan nilai

14815
14:11:34,771 --> 14:11:39,101
literal tidak valid untuk Int dengan\nbase 10 kutipan tanda kutip "cat.

14816
14:11:39,101 --> 14:11:43,322
Jadi, sekali lagi, ini ditulis untuk seorang programmer, lebih dari sekedar sortir

14817
14:11:43,322 --> 14:11:46,171
dari orang biasa, karena itu\n

14818
14:11:46,171 --> 14:11:47,421
Tapi mari kita coba menafsirkannya.

14819
14:11:47,421 --> 14:11:51,383
Literal tidak valid, literal hanya\n

14820
14:11:51,383 --> 14:11:52,841
adalah nama fungsinya, dengan basis 10.

14821
14:11:52,841 --> 14:11:54,691
Itu hanya default ke angka desimal.

14822
14:11:54,692 --> 14:11:56,937
Cat rupanya bukan angka desimal.

14823
14:11:56,936 --> 14:11:59,561
Kelihatannya tidak seperti itu, oleh karena itu\ntidak dapat diperlakukan seperti itu.

14824
14:11:59,561 --> 14:12:01,451
Oleh karena itu, ada kesalahan nilai.

14825
14:12:03,271 --> 14:12:06,721
Sayangnya, Anda\ntidak dapat menangkap kesalahan ini.

14826
14:12:06,722 --> 14:12:08,972
Dan satu-satunya cara untuk melakukan\nitu dengan Python

14827
14:12:08,972 --> 14:12:11,491
adalah melalui\nfitur lain yang tidak dimiliki C

14828
14:12:11,491 --> 14:12:13,921
yaitu, apa yang disebut pengecualian.

14829
14:12:13,921 --> 14:12:18,601
Pengecualian adalah apa yang baru saja\n

14830
14:12:18,601 --> 14:12:22,112
Itu adalah hal-hal yang bisa menyebabkan kesalahan\n

14831
14:12:22,112 --> 14:12:27,192
itu belum tentu akan terjadi\n

14832
14:12:27,192 --> 14:12:32,762
Jadi dengan Python, dan JavaScript, dan di\n

14833
14:12:32,762 --> 14:12:35,762
ada kemampuan untuk\nbenarnya mencoba melakukan sesuatu

14834
14:12:35,762 --> 14:12:37,537
kecuali jika terjadi kesalahan.

14835
14:12:37,536 --> 14:12:39,661
Dan sebenarnya, saya akan\ninmemperkenalkan sedikit sintaksis

14836
14:12:39,661 --> 14:12:42,078
di sini, meskipun kita tidak\nharus menggunakan sebanyak ini dulu.

14837
14:12:42,078 --> 14:12:46,502
Daripada hanya mengonversi\nx ke Int secara membabi buta, izinkan saya melanjutkan

14838
14:12:48,491 --> 14:12:51,902
Dan jika ada pengecualian,\nsilakan katakan sesuatu

14839
14:12:51,902 --> 14:12:58,802
seperti print, itu bukan Int.

14840
14:12:58,802 --> 14:13:02,060
Lalu saya akan melakukan\nsesuatu seperti keluar, di sana.

14841
14:13:02,059 --> 14:13:03,601
Dan izinkan saya melanjutkan dan melakukan ini di sini.

14842
14:13:03,601 --> 14:13:07,891
Izinkan saya mencoba mendapatkan y, kecuali\njika ada pengecualian.

14843
14:13:07,891 --> 14:13:12,519
Kalau begitu izinkan saya melanjutkan dan berkata, sekali lagi,\n

14844
14:13:12,519 --> 14:13:14,851
Lalu saya akan keluar\ndari sana, kalau tidak saya akan keluar

14845
14:13:14,851 --> 14:13:16,381
silakan cetak x plus y.

14846
14:13:16,381 --> 14:13:22,981
Jika saya menjalankan Python of\nCalculator.py sekarang, ups, oh

14847
14:13:22,982 --> 14:13:25,202
lupa kutipan dekat saya, maaf.

14848
14:13:25,201 --> 14:13:31,081
Baiklah, kutipan yang sangat dekat, Python dari\n

14849
14:13:31,082 --> 14:13:34,322
Namun jika saya mencoba mengetik\nsesuatu yang salah seperti cat, sekarang

14850
14:13:34,322 --> 14:13:35,832
itu benar-benar mendeteksi kesalahan.

14851
14:13:35,832 --> 14:13:38,372
Jadi apa yang dilakukan perpustakaan CS50\n dengan Python?

14852
14:13:38,372 --> 14:13:42,122
Ini sebenarnya melakukan hal itu, coba dan terima\n

14853
14:13:42,122 --> 14:13:45,062
jika tidak, program Anda untuk\nsesuatu yang sederhana, seperti kalkulator

14854
14:13:45,061 --> 14:13:46,421
mulai menjadi lebih lama dan lebih lama.

14855
14:13:46,421 --> 14:13:49,682
Jadi kami memperhitungkan\nlogika semacam itu ke getInt CS50

14856
14:13:49,682 --> 14:13:51,211
fungsi dan dapatkan fungsi float.

14857
14:13:51,211 --> 14:13:55,305
Namun dibalik itu semua, mereka\n

14858
14:13:55,305 --> 14:13:56,972
tapi mereka menjadi sedikit lebih tepat.

14859
14:13:56,972 --> 14:14:00,972
Mereka mendeteksi kesalahan tertentu,\n

14860
14:14:00,972 --> 14:14:03,572
sehingga fungsi-fungsi ini akan\ndieksekusi berulang kali.

14861
14:14:03,572 --> 14:14:07,232
Faktanya, cara terbaik untuk melakukan hal ini adalah dengan\n

14862
14:14:07,232 --> 14:14:10,600
lalu cetak pesan kesalahan itu\nkepada pengguna.

14863
14:14:10,599 --> 14:14:13,391
Dan sekali lagi, jangan terlalu membahas\n

14864
14:14:13,391 --> 14:14:15,281
Kita sudah memasukkannya ke dalam perpustakaan CS50.

14865
14:14:15,281 --> 14:14:17,582
Namun itulah sebabnya, misalnya,\nkita melakukan bootstrap

14866
14:14:17,582 --> 14:14:20,942
dengan hanya menggunakan\nfungsi-fungsi ini secara langsung.

14867
14:14:20,942 --> 14:14:24,132
Baiklah, mari kita lakukan\nlebih banyak lagi dengan kalkulator kita di sini.

14868
14:14:25,531 --> 14:14:28,411
Di dunia C, kami\nmemiliki versi lain

14869
14:14:28,411 --> 14:14:33,511
dari kode ini, yang sebenarnya\ndid beberapa pembagian dengan cara--

14870
14:14:33,512 --> 14:14:38,202
yang sebenarnya melakukan pembagian\n

14871
14:14:38,201 --> 14:14:42,511
Jadi izinkan saya melanjutkan dan menutup C\n

14872
14:14:42,512 --> 14:14:44,463
sekarang, lakukan beberapa\nbaris kode yang sama.

14873
14:14:44,463 --> 14:14:46,171
Namun saya akan melanjutkan\nadan berasumsi saja

14874
14:14:46,171 --> 14:14:48,661
bahwa pengguna akan\nbekerja sama dan menggunakan masukan yang tepat.

14875
14:14:48,661 --> 14:14:52,831
Jadi dari CS50, impor getInt, itu\n

14876
14:14:52,832 --> 14:15:00,162
X mendapat getInt, minta pengguna\nuntuk Int x, y sama dengan getInt

14877
14:15:01,692 --> 14:15:03,531
Lalu, mari kita lanjutkan dan lakukan ini.

14878
14:15:03,531 --> 14:15:07,631
Mari kita mendeklarasikan variabel bernama\n

14879
14:15:07,631 --> 14:15:09,371
Kalau begitu mari kita lanjutkan dan cetak z.

14880
14:15:09,372 --> 14:15:13,762
Masih tidak memerlukan format string, I\n

14881
14:15:13,762 --> 14:15:15,762
Biarkan saya menjalankan\nPython dari Kalkulator.py.

14882
14:15:15,762 --> 14:15:20,172
Biarkan saya melakukan 1, 10, dan saya mendapatkan 0,1.

14883
14:15:20,171 --> 14:15:25,781
Apa yang saya dapatkan di C,\njika Anda mengingatnya kembali.

14884
14:15:25,781 --> 14:15:28,597
Apa yang akan terjadi di C?

14885
14:15:29,942 --> 14:15:32,162
DAVID J. MALAN: Ya, kami\nakan mendapatkan nol di C.

14886
14:15:32,161 --> 14:15:34,519
Namun mengapa, di C, saat Anda\nmembagi satu Int dengan Int lainnya

14887
14:15:34,519 --> 14:15:36,436
dan Int tersebut masing-masing seperti\n1 dan 10?

14888
14:15:36,436 --> 14:15:38,199
AUDIENCE: Ini akan mengembalikan\nAnda bilangan bulat.

14889
14:15:38,199 --> 14:15:39,781
DAVID J. MALAN: Ini akan memberi Anda apa?

14890
14:15:40,864 --> 14:15:44,432
DAVID J. MALAN: Ini akan memberi Anda\n

14891
14:15:44,432 --> 14:15:46,381
bagian bilangan bulatnya memang nol.

14892
14:15:46,381 --> 14:15:48,491
Jadi ini adalah contoh pemotongan.

14893
14:15:48,491 --> 14:15:51,061
Jadi pemotongan merupakan\nmasalah di C. Namun hal itu akan terjadi

14894
14:15:51,061 --> 14:15:53,972
sepertinya ini bukan\nlagi menjadi masalah di Python

14895
14:15:53,972 --> 14:15:57,811
sejauh operator pembagian\sebenarnya menanganinya untuk kita.

14896
14:15:57,811 --> 14:16:00,752
Selain itu, jika Anda menginginkan perilaku\nyang lama, karena memang demikian

14897
14:16:00,752 --> 14:16:03,542
terkadang berguna untuk\nnilai pembulatan atau lantai

14898
14:16:03,542 --> 14:16:06,092
Anda sebenarnya bisa menggunakan dua garis miring.

14899
14:16:06,091 --> 14:16:08,141
Dan sekarang Anda mendapatkan perilaku C.

14900
14:16:08,141 --> 14:16:10,231
Sehingga sekarang 1 dibagi 10 adalah nol.

14901
14:16:10,232 --> 14:16:12,752
Jadi Anda tidak menyerah\nkemampuan itu, tapi setidaknya itu

14902
14:16:12,752 --> 14:16:14,131
melakukan default yang lebih masuk akal.

14903
14:16:14,131 --> 14:16:17,551
Kebanyakan orang, terutama programmer baru,\n

14904
14:16:17,552 --> 14:16:20,522
ingin mendapatkan 0,1,\nbukan 0, karena alasan

14905
14:16:20,521 --> 14:16:22,621
itu memang sudah kami jelaskan beberapa minggu yang lalu.

14906
14:16:22,622 --> 14:16:26,461
Namun bagaimana dengan masalah lain yang kita\n

14907
14:16:26,461 --> 14:16:28,561
dimana ada ketidaktepatan?

14908
14:16:28,561 --> 14:16:31,502
Izinkan saya melanjutkan dan, sedikit\n

14909
14:16:32,381 --> 14:16:34,862
Saya akan memformat\nit menggunakan f-string.

14910
14:16:34,862 --> 14:16:39,241
Dan saya akan melanjutkan dan memformatnya,\n

14911
14:16:39,972 --> 14:16:43,141
Perhatikan ini, jika saya menggunakan Python\nof Kalkulator.py, 1 dan 10

14912
14:16:43,141 --> 14:16:46,292
Saya mendapatkan, secara default, hanya\tidak ada angka signifikan.

14913
14:16:46,292 --> 14:16:50,442
Tetapi jika saya menggunakan sintaks ini dengan Python,\n

14914
14:16:50,442 --> 14:16:53,072
Saya sebenarnya bisa melakukannya di\nC seperti yang saya lakukan sebelumnya

14915
14:16:53,072 --> 14:16:56,171
50 digit penting\nsetelah koma desimal.

14916
14:16:56,171 --> 14:17:00,542
Jadi sekarang izinkan saya menjalankan kembali Python\nof Kalkulator.py 1 dan 10

14917
14:17:00,542 --> 14:17:03,512
dan mari kita lihat apakah floating point\nketidakpresisian masih ada pada kita.

14918
14:17:04,802 --> 14:17:07,472
Dan Anda dapat melihat banyak hal di sini,\nf-string, format string

14919
14:17:07,472 --> 14:17:10,512
sekarang hanya menunjukkan kepada kita 50 digit\bukan yang default.

14920
14:17:10,512 --> 14:17:12,632
Jadi kita belum menyelesaikan semua masalah.

14921
14:17:12,631 --> 14:17:15,366
Tapi kami telah memecahkan setidaknya beberapa.

14922
14:17:15,366 --> 14:17:18,241
Baiklah, sebelum kita beralih dari\n

14923
14:17:18,241 --> 14:17:21,871
sekarang tentang sintaksis atau konsep atau sejenisnya?

14924
14:17:22,591 --> 14:17:25,841
HADIRIN: Menurut Anda\ngaris miring ganda yang Anda dapatkan

14925
14:17:25,841 --> 14:17:28,458
memiliki manfaat, bagaimana Anda mengomentarinya?

14926
14:17:28,459 --> 14:17:29,792
DAVID J. MALAN: Bagaimana kabarmu?

14927
14:17:30,750 --> 14:17:33,932
Pertanyaan yang sangat bagus, jika Anda\menggunakan garis miring ganda untuk pembagian

14928
14:17:33,932 --> 14:17:36,391
dengan lantai atau pemotongan,\nseperti yang saya jelaskan

14929
14:17:36,391 --> 14:17:38,372
bagaimana Anda melakukan komentar dengan Python.

14930
14:17:39,902 --> 14:17:42,452
Dan konvensinya sebenarnya\nmenggunakan kalimat lengkap

14931
14:17:42,451 --> 14:17:43,994
seperti dengan huruf kapital T di sini.

14932
14:17:43,995 --> 14:17:46,412
Anda tidak memerlukan titik kecuali\nada beberapa kalimat.

14933
14:17:46,411 --> 14:17:49,361
Dan secara teknis, seharusnya di atas\n

14934
14:17:49,362 --> 14:17:51,641
Jadi, Anda akan menggunakan simbol hash sebagai gantinya.

14935
14:17:53,942 --> 14:17:57,272
Baiklah, ayo lanjutkan dan buat\n

14936
14:17:57,271 --> 14:17:59,951
Izinkan saya melanjutkan dan\tidak membukanya, misalnya

14937
14:17:59,951 --> 14:18:05,612
sebuah contoh bernama Poin1.c,\nyang kita lihat beberapa minggu lalu.

14938
14:18:05,612 --> 14:18:10,052
Dan izinkan saya melanjutkan ke sisi yang lain\n

14939
14:18:10,052 --> 14:18:13,412
Ingat, ini adalah program\n

14940
14:18:13,411 --> 14:18:15,909
hilang pada tugas pertama.

14941
14:18:15,910 --> 14:18:17,702
Lalu dilanjutkan\ndan dicetak

14942
14:18:17,701 --> 14:18:20,311
apakah mereka kehilangan poin lebih sedikit\ntdari saya, karena saya kehilangan dua poin

14943
14:18:20,311 --> 14:18:23,638
jika Anda mengingat fotonya, poin lebih banyak\n

14944
14:18:23,639 --> 14:18:26,222
Izinkan saya memperkecil tampilannya agar\nkita dapat melihat lebih banyak lagi.

14945
14:18:26,222 --> 14:18:30,730
Dan izinkan saya sekarang, di kanan atas,\n

14946
14:18:30,730 --> 14:18:33,272
Jadi saya ingin meminta\pengguna terlebih dahulu untuk sejumlah poin.

14947
14:18:33,271 --> 14:18:37,061
Jadi dari CS50 mari impor getInt,\n

14948
14:18:37,061 --> 14:18:39,932
Mari kita lakukan points\nequals getInt, dan tanyakan

14949
14:18:39,932 --> 14:18:43,951
pengguna, berapa poin\nAnda kehilangan, tanda tanya.

14950
14:18:43,951 --> 14:18:48,511
Lalu mari kita lanjutkan dan katakan, jika ada poin\n

14951
14:18:48,512 --> 14:18:52,322
cetak, Anda kehilangan poin lebih sedikit daripada saya.

14952
14:18:52,322 --> 14:18:59,792
Sebaliknya, jika sebaliknya jika poin\n

14953
14:18:59,792 --> 14:19:03,592
kamu kehilangan poin lebih banyak dariku.

14954
14:19:03,591 --> 14:19:07,322
Kalau tidak, mari kita lanjutkan dan tangani\nskenario terakhir, yaitu Anda

14955
14:19:07,322 --> 14:19:11,122
kehilangan jumlah poin yang sama denganku.

14956
14:19:11,122 --> 14:19:15,752
Sebelum saya menjalankan ini, apakah ada yang mau\n

14957
14:19:16,252 --> 14:19:17,912
HADIRIN: Lain lagi kalau harus elif.

14958
14:19:17,911 --> 14:19:21,211
DAVID J. MALAN: Ya, jadi lain kalau di\n

14959
14:19:22,302 --> 14:19:26,312
Jadi izinkan saya mengubahnya menjadi elif, dan sekarang\n

14960
14:19:26,311 --> 14:19:29,851
misalkan Anda kehilangan tiga\npoin pada suatu tugas.

14961
14:19:29,851 --> 14:19:31,711
Anda kehilangan lebih banyak poin daripada dua poin saya.

14962
14:19:31,711 --> 14:19:34,330
Jika Anda hanya kehilangan satu poin,\nAnda kehilangan poin lebih sedikit dari saya.

14963
14:19:35,372 --> 14:19:37,562
Namun perhatikan kodenya jauh lebih ketat.

14964
14:19:37,561 --> 14:19:41,222
Dalam total 10 baris, kami melakukan\nberapa 24 baris, karena kami sudah melakukannya

14965
14:19:41,222 --> 14:19:42,872
membuang banyak sintaks.

14966
14:19:42,872 --> 14:19:44,891
Tanda kurung kurawal\ntidak diperlukan lagi.

14967
14:19:44,891 --> 14:19:46,752
Tanda kurungnya\nghilang, titik koma.

14968
14:19:46,752 --> 14:19:50,192
Inilah sebabnya mengapa hal ini cenderung\nmenjadi lebih menyenangkan dengan cukup cepat

14969
14:19:52,832 --> 14:19:55,292
Baiklah, mari kita\tidak melakukan contoh lain di sini.

14970
14:19:55,292 --> 14:19:59,522
Di C, ingat bahwa kita dapat\n

14971
14:19:59,521 --> 14:20:01,111
jika ada sesuatu yang genap atau ganjil.

14972
14:20:01,112 --> 14:20:05,522
Baiklah, dengan Python, izinkan saya melanjutkan\n

14973
14:20:05,521 --> 14:20:09,331
dan mari kita lihat sebentar\nat versi C di sebelah kiri.

14974
14:20:09,332 --> 14:20:13,202
Berikut adalah kode dalam C yang kami gunakan\n

14975
14:20:13,201 --> 14:20:16,322
Dan, sungguh, kunci\nyang dapat diambil dari semua lini ini

14976
14:20:16,322 --> 14:20:17,811
hanyalah operator sisanya.

14977
14:20:17,811 --> 14:20:19,061
Dan yang itu masih bersama kita.

14978
14:20:19,061 --> 14:20:21,519
Jadi ini adalah demonstrasi sederhana,\nhanya untuk menegaskan hal tersebut

14979
14:20:21,519 --> 14:20:25,291
jika dengan Python, saya ingin menentukan\n

14980
14:20:25,292 --> 14:20:29,671
Baiklah, mari kita lanjutkan dari CS50,\n

14981
14:20:29,671 --> 14:20:35,131
dan dapatkan nomor seperti n dari pengguna,\n

14982
14:20:35,131 --> 14:20:40,741
Lalu mari kita katakan,\njika n tanda persen 2 sama dengan 0

14983
14:20:40,741 --> 14:20:44,792
lalu mari kita lanjutkan dan\ncetak kutipan tanda kutip "Genap.

14984
14:20:44,792 --> 14:20:50,275
Kalau tidak, mari kita lanjutkan dan mencetak\nout Aneh, tapi sebelum saya menjalankan ini

14985
14:20:50,275 --> 14:20:53,192
siapa pun ingin secara naluriah, bahkan\n

14986
14:20:57,332 --> 14:20:58,957
DAVID J. MALAN: Ya, jadi dua kali lipat sama.

14987
14:20:58,957 --> 14:21:02,372
Sekali lagi, meskipun beberapa hal\n

14988
14:21:02,951 --> 14:21:05,041
Jadi ini juga harus\nmenjadi tanda sama dengan ganda

14989
14:21:05,042 --> 14:21:07,141
karena saya membandingkan kesetaraan di sini.

14990
14:21:07,141 --> 14:21:08,675
Dan mengapa ini merupakan matematika yang tepat?

14991
14:21:08,675 --> 14:21:10,592
Nah, kalau kamu membagi\nbilangan dengan 2, hasilnya juga sama

14992
14:21:10,591 --> 14:21:12,811
akan memiliki 0 atau 1 sebagai sisanya.

14993
14:21:12,811 --> 14:21:15,551
Dan itu akan menentukan\napakah itu genap atau ganjil bagi kita.

14994
14:21:15,552 --> 14:21:18,722
Jadi mari kita jalankan Python dari Parity.py,\nketik angka seperti 50

14995
14:21:18,722 --> 14:21:21,182
dan mudah-mudahan kita mendapatkan hasil yang seimbang.

14996
14:21:21,182 --> 14:21:23,432
Jadi sekali lagi, idenya sama, tapi sekarang\nkita hanya tinggal delapan baris

14997
14:21:25,082 --> 14:21:27,332
Baiklah, sekarang mari kita lakukan sesuatu\na sedikit lebih interaktif

14998
14:21:27,332 --> 14:21:31,202
dan sedikit perwakilan alat\n

14999
14:21:31,201 --> 14:21:36,841
Di C, ingat bahwa kita mempunyai\naprogram perjanjian ini, Agree.c.

15000
14:21:36,841 --> 14:21:40,801
Lalu mari kita lanjutkan dan terapkan\n

15001
14:21:42,391 --> 14:21:45,091
Dan mari kita lihat versi C terlebih dahulu.

15002
14:21:45,091 --> 14:21:47,221
Di sebelah kiri, kami menggunakan get char di sini.

15003
14:21:47,222 --> 14:21:49,711
Lalu kita menggunakan\nbilah vertikal ganda

15004
14:21:49,711 --> 14:21:52,951
untuk memeriksa apakah C sama dengan\nhuruf besar Y atau huruf kecil y.

15005
14:21:52,951 --> 14:21:55,021
Dan kemudian kami melakukan\nhal yang sama untuk n untuk tidak.

15006
14:21:55,021 --> 14:22:00,901
Jadi mari kita ke sini dan\nlakukan dari CS50, impor get--

15007
14:22:00,902 --> 14:22:03,092
Oke, dapatkan char bukanlah suatu hal.

15008
14:22:03,091 --> 14:22:05,611
Dan inilah perbedaan\nlainnya dengan Python.

15009
14:22:05,612 --> 14:22:09,031
Tidak ada tipe data untuk\nkarakter individual.

15010
14:22:09,031 --> 14:22:11,161
Anda punya string, STR,\ndan, sejujurnya, itu

15011
14:22:11,161 --> 14:22:13,141
baik-baik saja, karena jika\nAnda memiliki STR, itu saja

15012
14:22:13,141 --> 14:22:15,481
hanya satu karakter, untuk\namun maksud dan tujuan

15013
14:22:15,482 --> 14:22:17,232
itu hanya satu karakter.

15014
14:22:17,232 --> 14:22:18,482
Jadi itu hanya penyederhanaan saja.

15015
14:22:18,482 --> 14:22:19,722
Anda tidak perlu berpikir terlalu banyak.

15016
14:22:19,722 --> 14:22:22,180
Anda tidak perlu khawatir tentang\ntanda kutip ganda, tanda kutip tunggal.

15017
14:22:22,180 --> 14:22:25,872
Faktanya, dengan Python, Anda dapat menggunakan\ntanda kutip ganda atau tanda kutip tunggal

15018
14:22:25,872 --> 14:22:27,452
selama Anda konsisten.

15019
14:22:27,451 --> 14:22:29,491
Selama Anda\nkonsisten, gunakan tanda kutip tunggal

15020
14:22:29,491 --> 14:22:32,191
tidak bermaksud sesuatu\nberbeda, seperti yang mereka lakukan di C.

15021
14:22:32,192 --> 14:22:34,862
Jadi saya akan melanjutkan\ndan menggunakan getString di sini

15022
14:22:34,862 --> 14:22:37,741
meskipun, sebenarnya, aku\n

15023
14:22:39,002 --> 14:22:43,771
Saya akan mengambil string dari\n

15024
14:22:43,771 --> 14:22:47,078
quote tanda kutip, "Apakah Anda setuju," seperti a\n

15025
14:22:47,078 --> 14:22:50,161
di mana kamu harus mengatakan ya atau tidak, kamu\n

15026
14:22:51,101 --> 14:22:54,631
Dan sekarang mari kita terjemahkan\nkondisionalnya ke Python.

15027
14:22:54,631 --> 14:23:02,371
Jadi jika S sama dengan tanda kutip-tanda kutip\n

15028
14:23:02,372 --> 14:23:08,702
ayo kita print out setuju,\n

15029
14:23:08,701 --> 14:23:12,061
sama dengan N atau S sama dengan n kecil.

15030
14:23:12,061 --> 14:23:14,579
Mari kita lanjutkan,\ndan print out tidak disetujui.

15031
14:23:14,580 --> 14:23:17,372
Dan Anda mungkin sudah bisa melihatnya,\n

15032
14:23:17,372 --> 14:23:20,222
Apakah Python sedikit lebih\nmirip bahasa Inggris, dalam hal itu

15033
14:23:20,222 --> 14:23:24,132
Anda cukup menggunakan kata bahasa Inggris\n

15034
14:23:24,131 --> 14:23:26,891
Namun pada akhirnya\melakukan hal yang sama.

15035
14:23:26,891 --> 14:23:29,911
Bisakah kita menyederhanakan kode ini sedikit.

15036
14:23:29,911 --> 14:23:31,861
Ini akan sedikit\nanmengganggu jika kita menginginkannya

15037
14:23:31,862 --> 14:23:34,322
untuk menambahkan dukungan, bukan hanya\nuntuk Y besar dan y kecil

15038
14:23:34,322 --> 14:23:40,752
tapi Ya atau Ya besar atau ya kecil atau\n

15039
14:23:40,752 --> 14:23:43,652
Ada banyak permutasi\ndari Y-E-S atau hanya y

15040
14:23:43,652 --> 14:23:45,241
yang idealnya harus kita toleransi.

15041
14:23:45,241 --> 14:23:47,991
Jika tidak, pengguna akan\n

15042
14:23:47,991 --> 14:23:49,292
yang tidak terlalu ramah pengguna.

15043
14:23:49,292 --> 14:23:51,572
Intuisi apa pun tentang bagaimana\nkita bisa melakukannya secara logis

15044
14:23:51,572 --> 14:23:54,792
bahkan jika Anda tidak tahu cara\ndo melakukannya dalam kode, jadikan ini lebih baik?

15045
14:23:55,292 --> 14:23:58,057
AUDIENCE: Tulis jauh di atas\ndaftar, lalu ke atas

15046
14:23:58,057 --> 14:23:59,432
itu seperti hal-hal dalam daftar.

15047
14:23:59,432 --> 14:24:03,572
DAVID J. MALAN: Bagus, ya, kami melihat\n

15048
14:24:03,572 --> 14:24:06,421
Mengapa kita tidak mengambil\nide yang sama dan mengajukan pertanyaan serupa.

15049
14:24:06,421 --> 14:24:11,341
Jika S ada dalam daftar\nnilai berikut, Y atau y kecil

15050
14:24:11,341 --> 14:24:15,122
atau izinkan saya menambahkannya ke dalam daftar\n

15051
14:24:15,122 --> 14:24:17,300
Dan memang, hal ini akan sedikit mengganggu

15052
14:24:17,300 --> 14:24:20,271
tapi ini masih lebih baik daripada\n

15053
14:24:20,271 --> 14:24:22,161
Saya bisa melakukan hal-hal seperti\nini, dan sebagainya.

15054
14:24:22,161 --> 14:24:24,261
Masih banyak lagi permutasi.

15055
14:24:24,262 --> 14:24:26,992
Tapi biarkan saja,\ndbiarkan saya masuk ke sini saja

15056
14:24:26,991 --> 14:24:33,800
dan ubah ini menjadi, jika S ada di\n

15057
14:24:33,800 --> 14:24:36,981
dan aku tidak akan melakukan itu, jangan\n

15058
14:24:39,322 --> 14:24:42,472
Python dari Agree.py, apakah saya setuju?

15059
14:24:45,262 --> 14:24:46,881
Baiklah, bagaimana kalau yang besar Ya.

15060
14:24:46,881 --> 14:24:48,372
Oke, sepertinya itu tidak berhasil.

15061
14:24:48,372 --> 14:24:50,872
Perhatikan bahwa tidak dikatakan setuju,\dan tidak dikatakan tidak setuju.

15062
14:24:53,701 --> 14:24:57,291
Ya, Anda tahu apa yang saya bisa\lakukan, dan apa yang sebenarnya tidak bisa saya lakukan

15063
14:24:57,292 --> 14:24:58,762
perlu huruf besar dan kecil.

15064
14:24:58,762 --> 14:25:00,711
Izinkan saya memperketat\ndaftar ini sedikit.

15065
14:25:00,711 --> 14:25:04,162
Dan kenapa saya tidak\nmemaksa S menjadi huruf kecil saja.

15066
14:25:04,161 --> 14:25:07,521
S.turunkan, ingat, apakah itu satu karakter atau lebih

15067
14:25:07,521 --> 14:25:10,701
adalah fungsi yang dibangun ke dalam\nSTR sekarang, string dengan Python

15068
14:25:10,701 --> 14:25:12,471
yang memaksa seluruh\nnya menjadi huruf kecil.

15069
14:25:13,972 --> 14:25:19,222
Python dari Agree.py, y kecil,\nberhasil, Y besar, berhasil.

15070
14:25:19,222 --> 14:25:24,362
Besar Ya, berhasil, Y besar,\ne kecil, S besar, itu juga berhasil.

15071
14:25:24,362 --> 14:25:27,432
Jadi sekarang kita telah menanganinya, dalam satu kesempatan\n

15072
14:25:27,432 --> 14:25:29,432
Dan tahukah Anda, kami bisa\nmemperketatnya sedikit.

15073
14:25:29,432 --> 14:25:32,872
Inilah peluang, dengan Python,\nuntuk desain yang sedikit lebih baik.

15074
14:25:32,872 --> 14:25:36,592
Apa yang telah saya lakukan di sini\nyang sedikit berlebihan?

15075
14:25:36,591 --> 14:25:40,701
Adakah yang melihat peluang\nuntuk menghilangkan redundansi

15076
14:25:40,701 --> 14:25:43,341
melakukan sesuatu lebih\nkali dari yang Anda perlukan.

15077
14:25:45,052 --> 14:25:47,685
HADIRIN: Anda dapat melakukan titik S di bawah, di atas.

15078
14:25:47,684 --> 14:25:49,851
DAVID J. MALAN: Kita bisa\nmemindahkan titik S lebih rendah ke atas.

15079
14:25:49,851 --> 14:25:51,832
Perhatikan bahwa saya menggunakan titik S lebih rendah dua kali.

15080
14:25:51,832 --> 14:25:54,391
Tapi itu akan memberi saya\njawaban yang sama kedua kali.

15081
14:25:54,391 --> 14:25:56,601
Jadi saya bisa melakukan beberapa hal di sini.

15082
14:25:56,601 --> 14:26:01,222
Pertama-tama, saya bisa menyingkirkan\n

15083
14:26:01,222 --> 14:26:05,241
dan lebih dari itu, mungkin saya bisa\n

15084
14:26:05,241 --> 14:26:08,121
Saya tidak bisa melakukan ini begitu saja, karena\nitu membuang nilainya.

15085
14:26:08,122 --> 14:26:10,762
Ia melakukan perhitungan, tetapi tidak\nmengonversi string itu sendiri.

15086
14:26:10,762 --> 14:26:12,362
Ini akan mengembalikan nilai.

15087
14:26:12,362 --> 14:26:14,781
Jadi saya harus mengatakan S sama dengan s.lebih rendah.

15088
14:26:15,862 --> 14:26:18,362
Atau, sejujurnya, saya bisa menyatukan\nsemuanya.

15089
14:26:18,362 --> 14:26:22,592
Dan ini bukan sesuatu yang kami lihat di\n

15090
14:26:22,591 --> 14:26:25,761
dan string memiliki fungsi\nseperti yang lebih rendah di dalamnya

15091
14:26:25,762 --> 14:26:28,851
Anda dapat merangkai fungsi-fungsi ini\n

15092
14:26:28,851 --> 14:26:30,309
beri titik itu, beri titik pada hal lainnya.

15093
14:26:30,309 --> 14:26:33,351
Dan pada akhirnya Anda ingin berhenti,\n

15094
14:26:33,351 --> 14:26:35,332
Tapi ini wajar,\nmasih pas di layar.

15095
14:26:36,082 --> 14:26:38,211
Itu terjadi di satu tempat\napa yang saya lakukan di dua tempat.

15096
14:26:39,531 --> 14:26:42,502
Izinkan saya melanjutkan dan melakukan Python\nof Agree.py untuk terakhir kalinya.

15097
14:26:43,641 --> 14:26:46,881
Dan itu masih berfungsi sebagaimana mestinya.

15098
14:26:46,881 --> 14:26:49,221
Juga jika saya mencoba\input lainnya juga.

15099
14:26:49,957 --> 14:26:55,812
HADIRIN: Bisakah Anda menambahkan seperti untuk\n

15100
14:26:55,811 --> 14:26:59,222
lalu mencakup semua fungsi di mana\n

15101
14:26:59,222 --> 14:27:01,972
yang juga menggunakan huruf besar, atau\n

15102
14:27:05,616 --> 14:27:06,991
DAVID J. MALAN: Izinkan saya meringkasnya.

15103
14:27:06,991 --> 14:27:09,862
Bisakah kita menangani huruf besar dan\nhuruf kecil secara bersamaan dalam beberapa bentuk?

15104
14:27:09,862 --> 14:27:11,542
Sebenarnya aku sudah melakukan hal itu.

15105
14:27:12,891 --> 14:27:15,828
Saya harus menggunakan huruf kecil\nin logika saya atau huruf besar semua

15106
14:27:15,828 --> 14:27:17,661
dan tidak khawatir tentang\njenis manusia apa yang ada di dalamnya

15107
14:27:17,661 --> 14:27:19,761
karena tidak peduli\ntipe manusia apa pun, aku tetaplah demikian

15108
14:27:19,762 --> 14:27:21,472
memaksa input mereka menjadi huruf kecil.

15109
14:27:21,472 --> 14:27:24,802
Dan kemudian saya menggunakan\ndaftar nilai huruf kecil.

15110
14:27:24,802 --> 14:27:26,042
Jika saya ingin membaliknya, baiklah.

15111
14:27:26,042 --> 14:27:27,561
Saya hanya harus konsisten pada diri sendiri.

15112
14:27:27,561 --> 14:27:28,941
Tapi saya sudah menanganinya.

15113
14:27:29,745 --> 14:27:33,475
AUDIENCE: Apakah string bukan lagi berupa array karakter?

15114
14:27:33,474 --> 14:27:35,391
DAVID J. MALAN: Pertanyaan yang sangat\nbagus

15115
14:27:35,391 --> 14:27:38,601
apakah string bukan lagi\nan array karakter?

15116
14:27:38,601 --> 14:27:40,641
Secara konseptual, ya,\ndi balik terpalnya, tidak.

15117
14:27:40,641 --> 14:27:42,711
Mereka sedikit lebih\ncanggih dari itu

15118
14:27:42,711 --> 14:27:45,112
karena dengan string,\nAnda mempunyai beberapa perubahan.

15119
14:27:45,112 --> 14:27:47,122
Mereka tidak hanya memiliki\nfungsi bawaan di dalamnya

15120
14:27:47,122 --> 14:27:49,102
karena string sekarang\nkita sebut objek

15121
14:27:49,101 --> 14:27:51,021
dalam apa yang disebut\pemrograman berorientasi objek.

15122
14:27:51,021 --> 14:27:53,563
Dan kita akan terus melihat\contoh operator titik ini.

15123
14:27:53,563 --> 14:27:58,072
Mereka juga tidak dapat diubah, jadi\nbisa dikatakan, I-M-M-U-T-A-B-L-E.

15124
14:27:58,072 --> 14:28:01,701
Tidak dapat diubah artinya tidak dapat\ndiubah, yang artinya, tidak seperti C

15125
14:28:01,701 --> 14:28:05,271
Anda tidak dapat memasukkan string dan\nmengubah karakter individualnya.

15126
14:28:05,271 --> 14:28:08,002
Anda dapat membuat salinan\nstring yang membuat perubahan

15127
14:28:08,002 --> 14:28:10,220
tetapi Anda tidak dapat mengubah\nstring asli itu sendiri.

15128
14:28:10,220 --> 14:28:12,262
Ini mungkin sedikit\nanmengganggu, kadang-kadang.

15129
14:28:12,262 --> 14:28:14,887
Namun ini juga cukup protektif,\nkarena Anda tidak dapat melakukan kesalahan

15130
14:28:14,887 --> 14:28:18,202
seperti yang saya lakukan beberapa minggu yang lalu, ketika saya\nmencoba menyalin S dan menyebutnya T.

15131
14:28:18,201 --> 14:28:19,791
Dan kemudian yang satu mempengaruhi yang lain.

15132
14:28:19,792 --> 14:28:23,601
Python, di balik terpalnya, adalah\n

15133
14:28:23,601 --> 14:28:25,072
dan petunjuk dan semua itu.

15134
14:28:25,072 --> 14:28:27,561
Tidak ada petunjuk di Python.

15135
14:28:27,561 --> 14:28:32,362
Jadi Jika itu tidak jelas, itu saja\n

15136
14:28:32,362 --> 14:28:36,802
sekarang ditangani oleh bahasa\n

15137
14:28:36,802 --> 14:28:38,962
Baiklah, jadi mari\ninperkenalkan beberapa loop

15138
14:28:38,961 --> 14:28:40,911
seperti yang sudah biasa kita lakukan.

15139
14:28:40,911 --> 14:28:44,691
Izinkan saya membuka Meow.c, yang merupakan\nan contoh di C, hanya mengeong

15140
14:28:46,252 --> 14:28:49,322
Biarkan saya membuat file bernama\nMeow.py di sini di sebelah kanan.

15141
14:28:49,322 --> 14:28:51,711
Dan perhatikan di sebelah kiri,\nini adalah kode yang benar di C

15142
14:28:51,711 --> 14:28:53,192
tapi itu dirancang dengan buruk.

15143
14:28:53,692 --> 14:28:55,972
Karena itu adalah peluang yang terlewatkan\nuntuk satu putaran.

15144
14:28:55,972 --> 14:28:58,982
Mengapa mengatakan sesuatu tiga kali\nkalau Anda bisa mengatakannya sekali saja?

15145
14:28:58,982 --> 14:29:02,512
Jadi dengan Python, izinkan saya melakukannya\ndengan cara yang dirancang dengan buruk terlebih dahulu.

15146
14:29:03,921 --> 14:29:07,731
Dan, seperti biasanya saya tidak seharusnya melakukannya,\n

15147
14:29:07,732 --> 14:29:10,192
jalankan Python dari Meow.py, dan itu berhasil.

15148
14:29:11,839 --> 14:29:13,881
Jadi izinkan saya melanjutkan dan\nmemperbaikinya sedikit.

15149
14:29:13,881 --> 14:29:15,511
Dan ada beberapa cara untuk melakukan ini.

15150
14:29:15,512 --> 14:29:20,572
Jika saya ingin melakukan ini tiga kali, saya\n

15151
14:29:20,572 --> 14:29:24,531
Untuk i dalam rentang 3, ingatlah bahwa\nitu adalah versi yang lebih baik

15152
14:29:24,531 --> 14:29:27,891
daripada sembarangan menyebutkan\n

15153
14:29:27,891 --> 14:29:30,012
dan mencetak kutipan tanda kutip "Meong.

15154
14:29:30,012 --> 14:29:32,599
Sekarang jika saya menjalankan Python of\nMeow, sepertinya masih berfungsi.

15155
14:29:32,599 --> 14:29:34,432
Jadi ini sedikit lebih ketat,\ndan, ya Tuhan, sepertinya

15156
14:29:34,432 --> 14:29:36,474
program tidak bisa\nlebih pendek dari ini.

15157
14:29:36,474 --> 14:29:40,822
Kita hanya punya dua baris kode, tidak\n

15158
14:29:40,822 --> 14:29:43,101
Sekarang mari kita tingkatkan\ndesainnya lebih lanjut, seperti kita

15159
14:29:43,101 --> 14:29:46,072
lakukan di C, dengan memperkenalkan\na fungsi yang dipanggil

15160
14:29:46,072 --> 14:29:47,752
meong, itu sebenarnya mengeong.

15161
14:29:47,752 --> 14:29:49,521
Jadi ini adalah\natraksi pertama kami, ingat

15162
14:29:49,521 --> 14:29:54,621
baik di Scratch maupun di C. Biarkan saya fokus\n

15163
14:29:55,281 --> 14:30:00,006
Biarkan saya melanjutkan dan\nmendefinisikan fungsi terlebih dahulu.

15164
14:30:03,411 --> 14:30:06,771
Izinkan saya melakukan\nini terlebih dahulu, karena i berada dalam kisaran 3

15165
14:30:06,771 --> 14:30:09,951
mari kita asumsikan untuk saat ini\nada fungsi meow

15166
14:30:09,951 --> 14:30:11,241
bahwa aku hanya akan menelepon.

15167
14:30:11,241 --> 14:30:14,841
Sekarang mari kita lanjutkan dan definisikan menggunakan\n

15168
14:30:14,841 --> 14:30:17,691
dengan speller\ndemonstration, sebuah fungsi

15169
14:30:17,692 --> 14:30:19,402
disebut meong yang tidak memerlukan argumen.

15170
14:30:19,402 --> 14:30:21,982
Dan yang dilakukannya saat ini hanyalah mencetak meong.

15171
14:30:21,982 --> 14:30:27,142
Sekarang izinkan saya menjalankan\nPython dari Meow.py Enter, ya, satu

15172
14:30:28,472 --> 14:30:30,601
Jadi ini adalah kesalahan nama lain.

15173
14:30:30,601 --> 14:30:33,601
Dan, sekali lagi, nama meong tidak ditentukan.

15174
14:30:33,601 --> 14:30:35,601
Apa naluri Anda di sini,\padahal kami belum melakukannya

15175
14:30:35,601 --> 14:30:37,281
tersandung ini dengan Python?

15176
14:30:37,281 --> 14:30:39,652
Kemana perginya pikiran Anda di sini?

15177
14:30:40,192 --> 14:30:42,602
AUDIENCE: Apakah terbaca dari atas\nke bawah, kiri ke kanan?

15178
14:30:42,601 --> 14:30:46,121
Saya kira kita bisa menemukan kasus baru.

15179
14:30:46,122 --> 14:30:49,542
DAVID J. MALAN: Sempurna, cerdas,\n

15180
14:30:49,542 --> 14:30:51,292
itu masih membuat asumsi tertentu.

15181
14:30:51,292 --> 14:30:54,531
Dan jika belum melihat kata kunci\nyet, maka kata kunci tersebut tidak ada.

15182
14:30:54,531 --> 14:30:57,521
Jadi kalau mau ada, kita\nharus sedikit pintar di sini.

15183
14:30:57,521 --> 14:31:00,611
Saya bisa meletakkannya, membalik\nitnya, seperti ini.

15184
14:31:00,612 --> 14:31:02,991
Tapi sejujurnya ini bukan\ndesain yang bagus.

15185
14:31:03,491 --> 14:31:06,911
Karena sekarang, jika Anda, pembaca\nkode Anda, apakah Anda

15186
14:31:06,911 --> 14:31:09,491
menulisnya atau orang lain, Anda\nharus pergi memancing sekarang.

15187
14:31:09,491 --> 14:31:11,081
Seperti di mana program ini dimulai?

15188
14:31:11,082 --> 14:31:14,652
Meskipun begitu, ya, sudah jelas\n

15189
14:31:14,652 --> 14:31:17,232
misalnya, jika filenya lebih panjang,\nAnda akan kesal

15190
14:31:17,232 --> 14:31:19,702
dan memancing secara visual\nbaris kode yang tepat.

15191
14:31:20,919 --> 14:31:22,752
Dan memang, ini\nmenjadi paradigma umum.

15192
14:31:22,752 --> 14:31:25,902
Saat Anda ingin mulai memiliki\n

15193
14:31:25,902 --> 14:31:29,982
cukup masukkan kode Anda sendiri di main, sehingga,\n

15194
14:31:29,982 --> 14:31:32,172
Anda dapat menyelesaikan masalah\nyang baru saja kami temui.

15195
14:31:32,171 --> 14:31:35,381
Jadi izinkan saya mendefinisikan fungsi bernama\nmain yang memiliki loop yang sama

15196
14:31:38,561 --> 14:31:43,871
Biarkan saya masuk ke terminal saya dan\njalankan Python dari Meow.py, Enter.

15197
14:31:47,021 --> 14:31:50,572
Baiklah, selidiki ini.

15198
14:31:50,572 --> 14:31:52,811
Apa yang bisa menjelaskan gejala ini.

15199
14:31:52,811 --> 14:31:54,542
Saya belum memberi tahu Anda jawabannya.

15200
14:31:54,542 --> 14:31:56,292
Jadi yang Anda miliki hanyalah\nnaluri Anda, dengan asumsi

15201
14:31:56,292 --> 14:31:58,241
Anda belum pernah menyentuh Python sebelumnya.

15202
14:31:58,241 --> 14:32:03,322
Apa yang mungkin menjelaskan gejala ini,\nsaat tidak ada yang mengeong?

15203
14:32:03,822 --> 14:32:05,491
AUDIENCE: Tidak menjalankan fungsi utama.

15204
14:32:05,491 --> 14:32:07,699
DAVID J. MALAN: Ya, saya\nditidak menjalankan fungsi utama.

15205
14:32:07,699 --> 14:32:09,911
Jadi di C, ini adalah fungsionalitas\nyang Anda dapatkan secara gratis.

15206
14:32:09,911 --> 14:32:11,286
Anda harus memiliki fungsi utama.

15207
14:32:11,286 --> 14:32:14,101
Tapi, selama Anda berhasil\nit, itu akan dipanggil untuk Anda.

15208
14:32:14,101 --> 14:32:17,911
Dalam Python, ini hanyalah sebuah konvensi,\nuntuk membuat fungsi utama

15209
14:32:17,911 --> 14:32:19,721
meminjam nama yang sangat umum untuk itu.

15210
14:32:19,722 --> 14:32:22,842
Namun jika Anda ingin memanggil\nfungsi utama itu, Anda harus melakukannya.

15211
14:32:22,841 --> 14:32:24,631
Jadi memang terlihat sedikit\naneh

15212
14:32:24,631 --> 14:32:26,551
bahwa Anda harus memanggil\fungsi utama Anda sekarang

15213
14:32:26,552 --> 14:32:28,382
dan itu harus berada di\nbagian bawah file

15214
14:32:28,381 --> 14:32:31,561
karena hanya sekali penerjemah\n

15215
14:32:31,561 --> 14:32:34,981
apakah semua fungsi Anda\ntelah ditentukan, di tingkat yang lebih tinggi.

15216
14:32:34,982 --> 14:32:36,512
Tapi ini memecahkan kedua masalah tersebut.

15217
14:32:36,512 --> 14:32:38,972
Itu menyimpan kode Anda, itulah\nbagian utama kode Anda

15218
14:32:38,972 --> 14:32:40,182
di bagian paling atas file.

15219
14:32:40,182 --> 14:32:43,502
Jadi sudah jelas bagi Anda, dan\n

15220
14:32:43,502 --> 14:32:45,662
di mana program secara logis dimulai.

15221
14:32:45,661 --> 14:32:49,831
Namun hal ini juga memastikan bahwa main tidak\n

15222
14:32:52,182 --> 14:32:54,169
Jadi ini adalah\ncontoh sempurna lainnya dari kami

15223
14:32:54,169 --> 14:32:55,961
belajar bahasa baru\nuntuk pertama kalinya.

15224
14:32:55,961 --> 14:32:57,542
Anda belum pernah mendengar\nsemua jawabannya sebelumnya.

15225
14:32:57,542 --> 14:33:01,351
Terapkan saja logika, seperti, semua\n

15226
14:33:01,351 --> 14:33:04,711
Mulailah menyimpulkan bagaimana\nbahasa tersebut berfungsi atau tidak.

15227
14:33:04,711 --> 14:33:08,972
Jika sekarang saya menjalankan ini, Python dari\n

15228
14:33:08,972 --> 14:33:11,882
Dan asal Anda\nmelihatnya, ada sebuah kutipan

15229
14:33:11,881 --> 14:33:15,362
tanda kutip cara yang "lebih baik" untuk melakukan ini,\n

15230
14:33:15,362 --> 14:33:18,572
tidak akan kita temui,\ntentunya pada hari-hari awal ini.

15231
14:33:18,572 --> 14:33:21,961
Biasanya, Anda akan melihat di\tutorial atau buku nonline

15232
14:33:21,961 --> 14:33:25,921
sesuatu yang terlihat seperti ini, di mana\n

15233
14:33:27,332 --> 14:33:30,992
Fungsinya sama,\n

15234
14:33:30,991 --> 14:33:34,362
jika kita sendiri yang menerapkan\n

15235
14:33:34,362 --> 14:33:37,404
Namun kami akan menyederhanakannya\n

15236
14:33:37,404 --> 14:33:39,877
karena kami belum\nenmenghadapi masalah itu.

15237
14:33:39,877 --> 14:33:42,752
Baiklah, mari kita lakukan satu perubahan pada\n

15238
14:33:42,752 --> 14:33:47,942
Di C, versi terakhir meow juga\n

15239
14:33:47,942 --> 14:33:50,432
mengambil argumen ke fungsi meong.

15240
14:33:50,432 --> 14:33:53,012
Jadi misalkan saya ingin\nmemperhitungkan hal ini.

15241
14:33:53,012 --> 14:33:55,772
Dan aku hanya ingin memanggil meong sebagai\n

15242
14:33:55,771 --> 14:33:57,601
ucapkan mengeong beberapa kali.

15243
14:33:57,601 --> 14:34:00,811
Dan saya mencari tahu berapa kali\n

15244
14:34:00,811 --> 14:34:03,511
atau menggunakan getInt atau semacamnya\nseperti itu, untuk mencari tahu

15245
14:34:05,072 --> 14:34:08,341
Nah, sekarang, saya harus mendefinisikan\nindi dalam fungsi meow saya, sebagai input

15246
14:34:08,341 --> 14:34:14,851
sebut saja n, lalu gunakan itu,\n

15247
14:34:14,851 --> 14:34:18,161
izinkan saya melanjutkan dan mencetak\ntidak mengeong berkali-kali.

15248
14:34:18,161 --> 14:34:20,341
Jadi sekali lagi, satu-satunya hal\nyang berbeda di C

15249
14:34:20,341 --> 14:34:24,151
apakah kita tidak perlu repot-repot menentukan return\n

15250
14:34:24,152 --> 14:34:28,752
dan kami tidak perlu repot menentukan\n

15251
14:34:28,752 --> 14:34:31,451
Jadi idenya sama, lebih sederhana dalam beberapa hal.

15252
14:34:31,451 --> 14:34:33,182
Kami hanya membuang penekanan tombol.

15253
14:34:33,182 --> 14:34:35,972
Baiklah, izinkan saya menjalankan\nterakhir kali ini, Python dari Meow.py

15254
14:34:35,972 --> 14:34:38,912
dan kami masih memiliki program yang sama.

15255
14:34:38,911 --> 14:34:40,631
Baiklah, izinkan saya berhenti sejenak di sini.

15256
14:34:41,302 --> 14:34:42,552
Dan saya tahu ini berjalan cepat.

15257
14:34:42,552 --> 14:34:47,877
Tapi mudah-mudahan, kode C\nimasih familiar.

15258
14:34:48,377 --> 14:34:54,052
HADIRIN: Apakah ada perbedaan\n

15259
14:34:54,052 --> 14:34:55,302
DAVID J. MALAN: Pertanyaan bagus.

15260
14:34:55,302 --> 14:34:57,760
Apakah ada perbedaan antara\ngvariabel global dan lokal?

15261
14:34:57,760 --> 14:35:00,372
Jawaban singkatnya, ya, dan kita akan\nmengalami masalah yang sama

15262
14:35:00,372 --> 14:35:01,842
jika kita mendeklarasikan suatu variabel\ndalam satu fungsi

15263
14:35:01,841 --> 14:35:03,966
fungsi lain tidak\nakan memiliki akses ke sana.

15264
14:35:03,966 --> 14:35:07,181
Kita dapat mengatasinya dengan\nmeletakkan variabel secara global.

15265
14:35:07,182 --> 14:35:09,281
Namun kami tidak memiliki semua\nfitur yang kami miliki di C

15266
14:35:09,281 --> 14:35:11,682
seperti tidak ada yang namanya konstanta di Python.

15267
14:35:11,682 --> 14:35:13,421
Mentalitas dalam\nkomunitas Python adalah

15268
14:35:13,421 --> 14:35:16,002
jika Anda tidak ingin suatu nilai\nberubah, jangan sentuh itu.

15269
14:35:17,152 --> 14:35:18,762
Jadi ada trade-off di sini juga.

15270
14:35:18,762 --> 14:35:21,522
Beberapa bahasa lebih kuat\atau lebih defensif dari itu.

15271
14:35:21,521 --> 14:35:25,511
Namun itu juga merupakan bagian dari pola pikir\n

15272
14:35:27,167 --> 14:35:29,459
HADIRIN: Sebenarnya\hanya ada satu garis hijau, di--

15273
14:35:29,459 --> 14:35:30,959
DAVID J. MALAN: Oh, maaf, di mana--

15274
14:35:31,601 --> 14:35:34,864
HADIRIN: Hanya\tidak ada satu pun garis hijau yang dicetak dalam satu waktu.

15275
14:35:34,864 --> 14:35:36,572
DAVID J. MALAN: Itu merupakan segmen yang luar biasa.

15276
14:35:36,572 --> 14:35:37,891
Mari kita membahasnya sebentar lagi, karena memang demikian

15277
14:35:37,891 --> 14:35:40,141
akan membuat ulang juga\ncontoh Mario itu, di mana

15278
14:35:40,141 --> 14:35:43,447
kami punya tanda tanya untuk\n

15279
14:35:43,447 --> 14:35:45,072
Jadi mari kita kembali ke hal itu sebentar lagi.

15280
14:35:46,177 --> 14:35:49,883
AUDIENCE: Jika string tidak dapat diubah,\n

15281
14:35:49,883 --> 14:35:51,841
DAVID J. MALAN: Benar,\nstring tidak dapat diubah.

15282
14:35:51,841 --> 14:35:55,741
Kapan pun Anda tampak memodifikasi\n

15283
14:35:57,002 --> 14:35:59,461
Jadi ini memerlukan sedikit\nlebih banyak memori di suatu tempat.

15284
14:35:59,461 --> 14:36:02,667
Namun Anda tidak harus berurusan dengan\nit Python yang melakukan hal itu untuk Anda.

15285
14:36:02,667 --> 14:36:05,414
HADIRIN: Jadi, Anda tidak membebaskan apa pun.

15286
14:36:05,413 --> 14:36:06,621
DAVID J. MALAN: Katakan lagi?

15287
14:36:07,747 --> 14:36:11,184
AUDIENCE: Anda tidak punya waktu luang\nsuka mengambil cuti.

15288
14:36:11,184 --> 14:36:12,851
DAVID J. MALAN: Anda tidak membebaskan apa pun.

15289
14:36:12,851 --> 14:36:15,391
Jadi jika Anda bukan penggemar beratnya,\nselama beberapa minggu terakhir

15290
14:36:15,391 --> 14:36:19,381
malloc atau gratis atau\nmemori atau alamat, atau semuanya

15291
14:36:19,381 --> 14:36:21,511
detail\nimplementasi tingkat rendah tersebut

15292
14:36:21,512 --> 14:36:23,912
Python adalah bahasa untuk\nAnda, karena semua itu

15293
14:36:23,911 --> 14:36:25,861
ditangani untuk Anda secara otomatis.

15294
14:36:28,982 --> 14:36:34,766
AUDIENCE: Masing-masing untuk variabelnya, Anda\n

15295
14:36:36,222 --> 14:36:40,307
Nah, jika tidak ada fungsi utama di\n

15296
14:36:40,307 --> 14:36:42,432
DAVID J. MALAN: Bagaimana Anda\nmendefinisikan variabel global

15297
14:36:42,432 --> 14:36:44,014
jika tidak ada fungsi utama di Python?

15298
14:36:44,014 --> 14:36:48,002
Variabel global, menurut definisinya, selalu\n

15299
14:36:49,002 --> 14:36:51,822
Jika saya ingin memiliki\nfungsi di luar

15300
14:36:51,822 --> 14:36:56,224
dan, oleh karena itu, bersifat global terhadap\na semua hal ini, seperti global--

15301
14:36:56,224 --> 14:36:59,141
sebenarnya, jangan gunakan kata global,\n

15302
14:36:59,141 --> 14:37:03,972
variabel sama dengan Foo, F-O-O,\nhanya sebagai string arbitrer

15303
14:37:03,972 --> 14:37:07,932
nilai yang akan dimiliki oleh ilmuwan komputer\n

15304
14:37:07,932 --> 14:37:10,521
Namun, ada beberapa peringatan\nat cara Anda mengaksesnya.

15305
14:37:10,521 --> 14:37:12,531
Namun mari kita kembali\nmembahasnya lain kali.

15306
14:37:12,531 --> 14:37:14,551
Namun masalah itu juga bisa dipecahkan.

15307
14:37:15,052 --> 14:37:16,302
Jadi mari kita lanjutkan dan lakukan ini.

15308
14:37:16,302 --> 14:37:19,572
Untuk kembali ke pertanyaan tentang\n

15309
14:37:19,572 --> 14:37:21,822
dan buat file sekarang bernama Mario.py.

15310
14:37:21,822 --> 14:37:24,222
Tidak perlu repot menampilkan kode C lagi.

15311
14:37:24,222 --> 14:37:26,112
Kami hanya akan fokus pada\nbahasa baru di sini.

15312
14:37:26,112 --> 14:37:31,061
Namun ingat, dengan Python, di Mario, kami\n

15313
14:37:31,061 --> 14:37:34,121
Ini adalah layar acak dari\npenggulung samping versi 1

15314
14:37:35,322 --> 14:37:39,341
Dan kami hanya ingin mencetak seperti tiga\n

15315
14:37:39,341 --> 14:37:41,471
Nah, dengan Python, kita bisa\melakukan sesuatu seperti ini

15316
14:37:41,472 --> 14:37:47,802
cetak, oh, maaf, untuk i di kisaran\n

15317
14:37:48,349 --> 14:37:50,141
Dan menurut saya ini\ncukup mudah.

15318
14:37:50,141 --> 14:37:52,781
Python dari Mario.py, kami\nmendapatkan tiga hash kami.

15319
14:37:52,781 --> 14:37:55,371
Anda dapat membayangkan\nmemparameterisasi hal ini sekarang

15320
14:37:55,372 --> 14:37:56,872
dan mendapatkan masukan pengguna yang sebenarnya.

15321
14:37:58,252 --> 14:38:03,942
Biarkan aku naik ke sini dan biarkan aku pergi\n

15322
14:38:03,942 --> 14:38:07,612
lalu mari kita ambil\ninput dari pengguna.

15323
14:38:07,612 --> 14:38:09,732
Jadi sebenarnya itu adalah\nnilai n, seperti, baiklah

15324
14:38:09,732 --> 14:38:14,712
dapatkan tinggi kolom\nbata yang ingin Anda buat.

15325
14:38:14,711 --> 14:38:18,792
Lalu, mari kita lanjutkan dan mencetak\n

15326
14:38:20,082 --> 14:38:21,906
Mari kita cetak seperti lima hash.

15327
14:38:21,906 --> 14:38:24,281
Oke, satu, dua, tiga, empat,\nlima, sepertinya berhasil juga.

15328
14:38:24,281 --> 14:38:26,199
Dan itu akan berhasil\nuntuk nilai positif apa pun.

15329
14:38:26,199 --> 14:38:29,921
Tapi itu tidak akan berhasil\n, bagaimana dengan negatif 1?

15330
14:38:29,921 --> 14:38:31,182
Itu tidak menghasilkan apa-apa.

15331
14:38:32,269 --> 14:38:35,351
Namun ingat juga bahwa hal itu tidak akan terjadi\n

15332
14:38:35,351 --> 14:38:40,512
aneh, seperti, oh, maaf, ini akan terjadi\n

15333
14:38:42,311 --> 14:38:45,341
Kami menggunakan fungsi\ngetInt CS50, yaitu

15334
14:38:45,341 --> 14:38:48,231
menangani semua sakit kepala itu untuk kami.

15335
14:38:48,232 --> 14:38:51,702
But, what if the user indeed\ntypes a negative number?

15336
14:38:52,631 --> 14:38:54,381
Jadi itulah bug yang ingin saya soroti.

15337
14:38:54,381 --> 14:38:56,771
Akan menyenangkan untuk meminta ulang\ntmereka dan meminta mereka kembali.

15338
14:38:56,771 --> 14:38:59,081
Dan di C, apa\nkonstruksi pemrograman kita

15339
14:38:59,082 --> 14:39:01,542
digunakan ketika kami ingin\najukan pertanyaan kepada pengguna.

15340
14:39:01,542 --> 14:39:05,802
Lalu, jika mereka tidak bekerja sama,\n

15341
14:39:07,271 --> 14:39:08,621
DAVID J. MALAN: Ya,\ndo while loop, kan?

15342
14:39:08,622 --> 14:39:11,352
Itu berguna, karena\hampir sama dengan perulangan while.

15343
14:39:11,351 --> 14:39:14,621
Namun alih-alih memeriksa\nkondisi, lalu melakukan sesuatu

15344
14:39:14,622 --> 14:39:16,470
Anda melakukan sesuatu dan\nkemudian memeriksa suatu kondisi

15345
14:39:16,470 --> 14:39:18,762
yang masuk akal bagi pengguna\ninput, karena siapa Anda

15346
14:39:18,762 --> 14:39:21,137
bahkan akan memeriksa apakah\pengguna belum melakukan apa pun?

15347
14:39:21,137 --> 14:39:22,722
Anda memerlukan logika terbalik itu.

15348
14:39:22,722 --> 14:39:26,531
Sayangnya di Python,\ntidak ada perulangan do while.

15349
14:39:29,262 --> 14:39:32,112
Dan sejujurnya, itu\cukup untuk menciptakan kembali ide ini.

15350
14:39:32,112 --> 14:39:35,682
Dan cara melakukan ini dalam\nPython, cara Pythonic, yang mana

15351
14:39:35,682 --> 14:39:38,682
adalah istilah lain dari seni di\nkomunitas, yaitu begini.

15352
14:39:38,682 --> 14:39:42,822
Sengaja menimbulkan putaran tak terbatas,\n

15353
14:39:42,822 --> 14:39:46,451
Lalu lakukan apa yang harus Anda lakukan,\nseperti mendapatkan Int dari pengguna

15354
14:39:46,451 --> 14:39:48,581
menanyakan\nketinggian benda ini kepada mereka.

15355
14:39:48,582 --> 14:39:54,792
Lalu, jika itu yang Anda inginkan, sukai\n

15356
14:39:56,542 --> 14:40:01,961
Jadi, dengan Python, Anda bisa\n

15357
14:40:01,961 --> 14:40:03,836
Anda sengaja menginduksi\nan putaran tak terbatas.

15358
14:40:03,836 --> 14:40:05,711
Jadi sesuatu akan\nterjadi setidaknya sekali.

15359
14:40:05,711 --> 14:40:08,801
Lalu, jika Anda mendapatkan jawaban\nyang Anda inginkan, Anda keluar dari situ

15360
14:40:08,802 --> 14:40:10,852
secara efektif mencapai logika yang sama.

15361
14:40:10,851 --> 14:40:13,601
Jadi ini adalah cara Pythonic\nuntuk melakukan perulangan do while.

15362
14:40:13,601 --> 14:40:18,281
Biarkan saya menjalankan Python\nof Mario.py, kali ini ketik 3.

15363
14:40:18,281 --> 14:40:21,192
Dan sekarang saya hanya mendapatkan\n3 hashnya juga.

15364
14:40:21,192 --> 14:40:26,832
Namun, bagaimana jika saya ingin\nmenyingkirkannya, bagaimana kalau pada akhirnya

15365
14:40:26,832 --> 14:40:31,580
fungsi perpustakaan CS50 itu, dan\n

15366
14:40:31,580 --> 14:40:33,622
Baiklah, mari kita lanjutkan dan\ntmelemahkannya sedikit.

15367
14:40:33,622 --> 14:40:35,592
Izinkan saya melanjutkan dan\nmenghapusnya untuk sementara.

15368
14:40:35,591 --> 14:40:38,201
Berikan diri saya fungsi utama agar\nSaya tidak melakukan kesalahan yang sama

15369
14:40:39,881 --> 14:40:43,631
Dan izinkan saya memberi diri saya sebuah fungsi bernama\n

15370
14:40:43,631 --> 14:40:47,141
Dan di dalam fungsi itu\nisakan ada kode yang sama.

15371
14:40:47,141 --> 14:40:50,802
Tapi saya tidak ingin membobol\ndalam hal ini, saya ingin mengembalikan n.

15372
14:40:50,802 --> 14:40:53,815
Jadi, ingat kembali, jika Anda kembali\ndari suatu fungsi, Anda sudah selesai

15373
14:40:53,815 --> 14:40:55,732
Anda akan keluar\ndari titik itu.

15374
14:40:56,841 --> 14:40:59,201
Anda cukup mengucapkan return\nn di dalam loop

15375
14:40:59,201 --> 14:41:01,841
atau, jika Anda lebih memilih\nuntuk keluar, Anda

15376
14:41:01,841 --> 14:41:03,461
bisa melakukan hal seperti ini sebagai gantinya.

15377
14:41:03,461 --> 14:41:09,222
Istirahat, lalu ke sini,\nkamu bisa kembali, ke sini

15378
14:41:11,152 --> 14:41:13,812
Dan izinkan saya menjelaskan satu hal di sini\nsebelum kita kembali ke topik utama.

15379
14:41:13,811 --> 14:41:18,011
Ini sedikit berbeda\ndari C. Dan yang ini lebih halus.

15380
14:41:18,012 --> 14:41:23,772
Apa yang telah saya lakukan di sini sehingga di C akan\n

15381
14:41:27,381 --> 14:41:28,741
Ini sangat halus, yang ini.

15382
14:41:29,241 --> 14:41:32,432
AUDIENCE: Jadi bukankah kita suka\nmendefinisikan sebagian besar objek

15383
14:41:32,432 --> 14:41:35,991
seperti kita menggunakannya\npertama, mendefinisikan sebuah objek?

15384
14:41:40,796 --> 14:41:43,671
DAVID J. MALAN: Mirip sekali,\n

15385
14:41:43,671 --> 14:41:47,502
Jadi tidak apa-apa untuk tidak mendeklarasikan\nvariabel dengan tipe data yang sama.

15386
14:41:47,502 --> 14:41:51,942
Kami telah membahasnya sebelumnya, namun secara online\n

15387
14:41:51,942 --> 14:41:55,122
Dan kemudian kita kembali n pada baris 12.

15388
14:41:56,711 --> 14:42:01,932
Di dunia C, jika kita telah mendeklarasikannya\n

15389
14:42:01,932 --> 14:42:04,722
itu akan dimasukkan\nke dalam loop itu, yang mana

15390
14:42:04,722 --> 14:42:08,052
artinya segera setelah Anda keluar dari situ\n

15391
14:42:09,862 --> 14:42:12,612
Ini akan menjadi lokal untuk\nkurung kurawal di dalamnya.

15392
14:42:12,612 --> 14:42:16,241
Di sini, secara logis, kurung kurawal\na sudah hilang, namun lekukannya

15393
14:42:16,241 --> 14:42:20,771
memperjelas bahwa n masih berada di dalam\n

15394
14:42:20,771 --> 14:42:23,801
Namun n sebenarnya masih\ncakupan dalam Python.

15395
14:42:23,802 --> 14:42:26,902
Saat Anda membuat variabel\n

15396
14:42:26,902 --> 14:42:30,281
Ini tersedia di mana saja dalam\nfungsi tersebut, bahkan di luar

15397
14:42:30,281 --> 14:42:32,211
dari loop tempat Anda mendefinisikannya.

15398
14:42:32,211 --> 14:42:35,591
Jadi logika ini sebenarnya OK di Python.

15399
14:42:35,591 --> 14:42:38,659
Di C, ingat, untuk memecahkan\nmasalah yang sama

15400
14:42:38,660 --> 14:42:41,202
kami harus melakukan sesuatu\nasedikit hackish seperti ini

15401
14:42:41,201 --> 14:42:46,121
seperti definisikan n di sini pada baris 8,\n

15402
14:42:46,122 --> 14:42:48,522
dan agar ada pada baris 13.

15403
14:42:48,521 --> 14:42:52,221
Itu bukan lagi\nmasalah atau kebutuhan, dengan Python.

15404
14:42:52,222 --> 14:42:54,222
Setelah Anda membuat variabel,\bahkan jika variabel tersebut disarangkan

15405
14:42:54,222 --> 14:42:56,389
bersarang, bersarang di dalam\nbeberapa loop atau kondisional

15406
14:42:56,389 --> 14:43:00,042
itu masih ada di dalam\nfungsi itu sendiri.

15407
14:43:00,042 --> 14:43:04,391
Baiklah, ada pertanyaan tentang ini,\n

15408
14:43:04,391 --> 14:43:08,201
hapus perpustakaan CS50 lagi?

15409
14:43:08,201 --> 14:43:10,822
Oke, jadi izinkan saya melanjutkan dan\nmengetahui ketinggiannya dari pengguna.

15410
14:43:10,822 --> 14:43:13,279
Mari lanjutkan dan buat\nvariabel di main yang disebut tinggi.

15411
14:43:13,279 --> 14:43:14,981
Sebut saja fungsi get height ini.

15412
14:43:14,982 --> 14:43:19,902
Lalu mari kita gunakan nilai ketinggian itu,\n

15413
14:43:19,902 --> 14:43:21,522
Dan biarkan saya melihat apakah ini semua berhasil sekarang.

15414
14:43:22,932 --> 14:43:25,631
Mudah-mudahan, saya tidak\nmengbuat kesalahan, namun saya melakukannya.

15415
14:43:25,631 --> 14:43:27,981
Tapi ini adalah perbaikan yang mudah sekarang.

15416
14:43:28,482 --> 14:43:29,607
HADIRIN: Harus menelepon utama.

15417
14:43:29,607 --> 14:43:31,065
DAVID J. MALAN: Saya harus menelepon utama.

15418
14:43:31,065 --> 14:43:32,502
Jadi sekali lagi, saya menghapusnya sebelumnya.

15419
14:43:33,442 --> 14:43:34,650
Jadi saya sebenarnya menelepon utama.

15420
14:43:34,650 --> 14:43:38,711
Izinkan saya menjalankan kembali Python dari\nMario.py, ini dia, tinggi 3.

15421
14:43:40,402 --> 14:43:42,402
Jadi mari kita lakukan\nhal terakhir dengan Mario

15422
14:43:42,402 --> 14:43:45,502
untuk menyatukan gagasan itu sekarang\npengecualian dari sebelumnya.

15423
14:43:45,502 --> 14:43:47,591
Sekali lagi, pengecualian adalah\na fitur Python

15424
14:43:47,591 --> 14:43:49,581
dimana Anda dapat mencoba melakukan sesuatu.

15425
14:43:49,582 --> 14:43:53,232
Dan jika ada masalah, Anda bisa\n

15426
14:43:53,232 --> 14:43:56,592
Sebelumnya saya mengatasinya hanya dengan berteriak\n

15427
14:43:56,591 --> 14:43:59,981
Namun mari kita gunakan ini untuk\nmengimplementasikan kembali getInt CS50 sendiri

15428
14:44:00,762 --> 14:44:03,652
Izinkan saya membuang fungsi getInt\nCS50.

15429
14:44:03,652 --> 14:44:09,402
Dan sekarang izinkan saya melanjutkan dan\nmengganti getInt dengan input.

15430
14:44:09,402 --> 14:44:12,192
Namun itu tidak cukup\nhanya menggunakan input.

15431
14:44:12,192 --> 14:44:16,002
Apa yang harus saya tambahkan ke\nbaris kode ini di baris 8?

15432
14:44:16,002 --> 14:44:17,262
Jika saya ingin mendapatkan kembali Int?

15433
14:44:18,311 --> 14:44:20,353
DAVID J. MALAN: Ya, saya\nharus mengirimkannya ke Int

15434
14:44:20,353 --> 14:44:23,021
dengan memanggil fungsi Int\n di sekitar nilai itu

15435
14:44:23,021 --> 14:44:25,271
atau saya dapat melakukannya di jalur\nterpisah, agar lebih jelas.

15436
14:44:25,271 --> 14:44:28,631
Saya juga bisa melakukan n sama dengan Int dari n.

15437
14:44:28,631 --> 14:44:31,542
Itu juga bisa digunakan, tapi itu\nsemacam garis tambahan yang tidak diperlukan.

15438
14:44:31,542 --> 14:44:34,512
Ini tidak cukup, karena\nitu tidak mengubah nilainya.

15439
14:44:35,457 --> 14:44:36,582
Tapi kemudian ia membuangnya.

15440
14:44:37,713 --> 14:44:40,421
Jadi cara konvensional untuk melakukan ini\n

15441
14:44:40,421 --> 14:44:41,879
hanya untuk menjaga semuanya tetap bagus dan ketat.

15442
14:44:43,302 --> 14:44:47,992
Jika saya menjalankan Python Mario.py, saya bisa\n

15443
14:44:47,991 --> 14:44:52,241
Saya masih bisa mengetik negatif 1, karena\n

15444
14:44:52,241 --> 14:44:55,271
Apa yang belum saya tangani\nismasukan aneh seperti kucing

15445
14:44:55,271 --> 14:44:58,281
atau string yang\nbukan bilangan berbasis 10.

15446
14:44:58,281 --> 14:45:00,402
Jadi, sekali lagi, ini adalah penelusuran balik saya.

15447
14:45:00,402 --> 14:45:03,522
Dan perhatikan di sini, izinkan\nsaya menggulir ke atas sedikit

15448
14:45:03,521 --> 14:45:08,141
di sini kita sebenarnya bisa melihat\nlebih detail di traceback.

15449
14:45:08,141 --> 14:45:13,421
Perhatikan itu, seperti di C, atau hanya\n

15450
14:45:14,622 --> 14:45:18,012
Anda dapat melihat penyebutan modul, itu\n

15451
14:45:18,012 --> 14:45:19,535
adalah fungsi utama saya, dan mendapatkan tinggi badan.

15452
14:45:19,535 --> 14:45:20,952
Jadi perhatikan, ini agak terbalik.

15453
14:45:20,951 --> 14:45:23,241
Bentuknya dari atas ke bawah, bukan\tidak dari bawah ke atas, seperti yang kita gambar

15454
14:45:23,241 --> 14:45:25,241
di papan tulis\npada hari lain, dan seperti yang kita bayangkan

15455
14:45:25,241 --> 14:45:27,042
tumpukan nampan di kafetaria.

15456
14:45:27,042 --> 14:45:29,202
Tapi ini tumpukan Anda,\noof berfungsi itu

15457
14:45:29,201 --> 14:45:30,851
telah dipanggil, dari atas ke bawah.

15458
14:45:30,851 --> 14:45:33,881
Dapatkan tinggi badan adalah yang terbaru,\nmain adalah yang pertama

15459
14:45:35,722 --> 14:45:40,262
Jadi mari kita coba lakukan, mari kita coba lakukan ini\n

15460
14:45:41,262 --> 14:45:46,242
Aku akan masuk ke sini, dan aku\n

15461
14:45:46,241 --> 14:45:53,591
Ups, coba lakukan hal berikut, kecuali\n

15462
14:45:53,591 --> 14:45:57,161
lalu lanjutkan dan ucapkan sesuatu,\nseperti sebelumnya, cetak

15463
14:45:57,161 --> 14:46:00,351
itu bukan tanda seru bilangan bulat.

15464
14:46:00,351 --> 14:46:03,281
Namun perbedaannya kali ini adalah\nkarena saya berada dalam satu lingkaran, pengguna

15465
14:46:03,281 --> 14:46:05,722
akan memiliki kesempatan\nuntuk pulih dari masalah ini.

15466
14:46:05,722 --> 14:46:08,862
Jadi jika saya menjalankan Mario.py, 3\nmasih berfungsi seperti sebelumnya.

15467
14:46:08,862 --> 14:46:12,402
Jika saya menjalankan Mario.py dan mengetik\nin cat, saya mendeteksinya sekarang

15468
14:46:12,402 --> 14:46:15,762
dan karena saya masih dalam lingkaran itu,\n

15469
14:46:15,762 --> 14:46:19,572
karena saya telah menangkap, boleh dikatakan,\n

15470
14:46:19,572 --> 14:46:23,472
di sini, itulah cara Python\nmendeteksi kesalahan semacam ini

15471
14:46:23,472 --> 14:46:26,202
yang jika tidak, akan berakhir\ndi layar pengguna sendiri.

15472
14:46:26,201 --> 14:46:28,061
Jika saya mengetik kucing, anjing,\nitu tidak berhasil.

15473
14:46:28,061 --> 14:46:33,341
Namun jika saya mengetik, 2, saya mendapatkan dua\n

15474
14:46:33,341 --> 14:46:35,261
Apakah ada pertanyaan tentang\nini, dan kami tidak akan hadir

15475
14:46:35,262 --> 14:46:37,272
menghabiskan terlalu banyak waktu pada\npengecualian, tapi hanya ingin

15476
14:46:37,271 --> 14:46:40,201
untuk menunjukkan kepada Anda apa yang terlibat dengan\n

15477
14:46:40,701 --> 14:46:42,284
AUDIENCE: Kemudian tanda pagar sejajar.

15478
14:46:42,285 --> 14:46:43,827
DAVID J. MALAN: Oke, jadi mari kita lakukan ini.

15479
14:46:43,826 --> 14:46:45,661
Itu sebenarnya muncul pada\npertanyaan sebelumnya

15480
14:46:45,661 --> 14:46:47,581
tentang mencetak\nhash pada baris yang sama

15481
14:46:47,582 --> 14:46:50,330
atau mungkin sesuatu seperti ini,\ndimana kita mempunyai batu bata kecilnya

15482
14:46:50,330 --> 14:46:51,872
di langit, atau sedikit tanda tanya.

15483
14:46:51,872 --> 14:46:54,247
Mari kita ciptakan kembali ide ini,\nkarena ada masalah dengan pencetakan

15484
14:46:54,247 --> 14:46:57,452
seperti disebutkan sebelumnya, apakah Anda\n

15485
14:46:57,451 --> 14:46:58,981
Namun bagaimana jika kita tidak menginginkan hal tersebut.

15486
14:46:58,982 --> 14:47:01,262
Baiklah, mari kita ubah\nprogram ini sepenuhnya.

15487
14:47:01,262 --> 14:47:02,832
Biarkan saya membuang semua fungsinya.

15488
14:47:02,832 --> 14:47:05,742
Mari kita beralih ke dunia yang lebih sederhana,\ndimana kita hanya melakukan hal ini.

15489
14:47:05,741 --> 14:47:07,434
Jadi izinkan saya memulai dari awal di Mario.py.

15490
14:47:07,434 --> 14:47:09,641
Saya tidak akan mempermasalahkan\npengecualian atau fungsi.

15491
14:47:09,641 --> 14:47:15,932
Mari kita lakukan program yang sangat sederhana, untuk\n

15492
14:47:15,932 --> 14:47:19,381
kali ini, karena ada\nempat hal ini di langit.

15493
14:47:19,381 --> 14:47:21,752
Mari kita lanjutkan\ncetak tanda tanya

15494
14:47:21,752 --> 14:47:23,972
untuk mewakili masing-masing batu bata tersebut.

15495
14:47:23,972 --> 14:47:27,662
Kemungkinan besar Anda tahu ini tidak akan berakhir\n

15496
14:47:27,661 --> 14:47:30,971
seperti yang Anda prediksi, pada baris terpisah.

15497
14:47:30,972 --> 14:47:33,902
Jadi ternyata fungsi\nprint sebenarnya

15498
14:47:33,902 --> 14:47:36,842
menerima banyak argumen, bukan\n

15499
14:47:36,841 --> 14:47:40,171
namun juga beberapa argumen tambahan,\nyang memungkinkan Anda menentukannya

15500
14:47:40,171 --> 14:47:42,691
apa yang seharusnya menjadi akhiran baris default.

15501
14:47:42,692 --> 14:47:45,632
Namun yang menarik\ntentang hal ini adalah, jika Anda

15502
14:47:45,631 --> 14:47:49,151
ingin mengubah baris\nakhirannya menjadi seperti ini

15503
14:47:49,152 --> 14:47:53,312
kutipan tanda kutip, "itu bukan apa-apa", bukan garis miring terbalik n

15504
14:47:53,311 --> 14:47:55,831
ini tidak cukup,\nkarena dengan Python, Anda

15505
14:47:55,832 --> 14:47:58,292
dapat memiliki dua jenis\nargumen, atau parameter.

15506
14:47:58,292 --> 14:48:01,682
Beberapa argumen bersifat posisional, yang mana\n

15507
14:48:01,682 --> 14:48:03,211
daftar argumen yang dipisahkan koma.

15508
14:48:03,211 --> 14:48:06,061
Dan itulah yang kami lakukan sepanjang waktu\n

15509
14:48:06,061 --> 14:48:08,186
koma, sesuatu, kami melakukan\nit di printf sepanjang waktu

15510
14:48:08,186 --> 14:48:10,502
dan dalam fungsi lain yang\nmembutuhkan banyak argumen.

15511
14:48:10,502 --> 14:48:14,402
Dalam Python, Anda tidak hanya mempunyai argumen posisional

15512
14:48:14,402 --> 14:48:18,182
di mana Anda tinggal memisahkannya dengan koma,\n

15513
14:48:19,171 --> 14:48:22,741
Ada juga argumen bernama,\nyang terlihat aneh namun nyatanya memang demikian

15514
14:48:22,741 --> 14:48:24,661
berguna untuk alasan seperti ini.

15515
14:48:24,661 --> 14:48:27,421
Jika Anda membaca\ndodokumentasinya, Anda akan melihatnya

15516
14:48:27,421 --> 14:48:31,261
bahwa ada argumen bernama\nyang diterima Python, disebut end.

15517
14:48:31,262 --> 14:48:34,202
Dan jika Anda menyetelnya\nesama dengan sesuatu, itu

15518
14:48:34,201 --> 14:48:36,721
akan digunakan sebagai akhir\nsetiap baris

15519
14:48:36,722 --> 14:48:39,272
dari default, yang juga akan disebutkan dalam\ndodokumentasi

15520
14:48:39,271 --> 14:48:41,221
adalah kutipan tanda kutip garis miring terbalik n.

15521
14:48:41,222 --> 14:48:45,522
Jadi baris ini tidak berpengaruh\non logika saya saat ini.

15522
14:48:45,521 --> 14:48:49,801
Tetapi jika saya mengubahnya menjadi hanya quote\nunquote, pada dasarnya override

15523
14:48:49,802 --> 14:48:54,992
karakter baris baru default, dan\n

15524
14:48:55,800 --> 14:48:57,092
Tapi ada sedikit bug.

15525
14:48:57,091 --> 14:49:00,131
Perintah saya tidak dimaksudkan\nberada di jalur yang sama.

15526
14:49:00,131 --> 14:49:02,161
Jadi saya bisa memperbaikinya dengan\nhanya mencetak apa pun.

15527
14:49:02,161 --> 14:49:05,161
Tapi, sungguh, itu bukan apa-apa,\n

15528
14:49:05,161 --> 14:49:09,451
Jadi izinkan saya menjalankan Python of\nMario.py lagi, dan sekarang kita

15529
14:49:09,451 --> 14:49:12,661
mendapatkan apa yang kuinginkan pada awalnya\n

15530
14:49:13,692 --> 14:49:17,432
Dan ini hanyalah salah satu contoh\nargumen yang mempunyai nama.

15531
14:49:17,432 --> 14:49:19,802
Tapi ini adalah\nparadigma umum di Python 2

15532
14:49:19,802 --> 14:49:22,772
untuk tidak hanya memisahkan hal-hal dengan\nkoma, namun menjadi sangat spesifik

15533
14:49:22,771 --> 14:49:27,331
karena fungsi pencetakan mungkin memakan waktu\n

15534
14:49:27,332 --> 14:49:31,150
Ya Tuhan, jika Anda harus\numerasi seperti 10 atau 20 koma

15535
14:49:32,192 --> 14:49:34,109
Anda akan mendapatkan\nurutan yang salah.

15536
14:49:34,108 --> 14:49:37,121
Argumen bernama memungkinkan Anda\nbertahan terhadap hal tersebut.

15537
14:49:37,122 --> 14:49:39,211
Jadi Anda hanya menentukan\nargumen berdasarkan nama, dan itu

15538
14:49:39,211 --> 14:49:42,525
tidak peduli apa urutannya.

15539
14:49:42,525 --> 14:49:46,682
Baiklah, jika ada pertanyaan, silakan\n

15540
14:49:46,682 --> 14:49:50,792
Dan untuk lebih jelasnya, Anda dapat melakukan\nsesuatu yang sangat aneh

15541
14:49:50,792 --> 14:49:56,432
tapi secara logis diharapkan, seperti ini, pada\n

15542
14:49:56,432 --> 14:49:58,351
Namun cara yang tepat untuk\nmenyelesaikan masalah Mario

15543
14:49:58,351 --> 14:50:02,173
hanya akan menimpa\nit menjadi tidak seperti ini.

15544
14:50:02,173 --> 14:50:03,631
Baiklah, bagaimana kalau ini keren.

15545
14:50:03,631 --> 14:50:05,521
Dan inilah sebabnya banyak\norang menyukai Python.

15546
14:50:05,521 --> 14:50:06,961
Misalkan Anda tidak terlalu menyukai loop.

15547
14:50:06,961 --> 14:50:08,491
Anda tidak terlalu menyukai\nprogram tiga baris

15548
14:50:08,491 --> 14:50:11,158
karena itu memakan waktu tiga\nkali lebih lama dari yang seharusnya.

15549
14:50:11,158 --> 14:50:15,722
Bagaimana jika Anda baru saja mencetak\na tanda tanya sebanyak empat kali?

15550
14:50:15,722 --> 14:50:19,902
Python, ups, Python dari\nMario.py, itu juga berfungsi.

15551
14:50:19,902 --> 14:50:23,072
Jadi ternyata, sama seperti\noperator plus di Python

15552
14:50:23,072 --> 14:50:27,091
dapat menggabungkan berbagai hal,\noperator perkaliannya tidak

15553
14:50:28,362 --> 14:50:32,592
Artinya, ambil ini dan\ngabungkan empat kali lipat.

15554
14:50:32,591 --> 14:50:35,521
Jadi itulah cara\menyaringnya menjadi satu baris apa

15555
14:50:35,521 --> 14:50:39,271
jika tidak, akan memakan waktu beberapa kali\n

15556
14:50:39,271 --> 14:50:43,651
baris dengan Python, namun\nsekarang agak ringkas dengan Python

15557
14:50:44,906 --> 14:50:48,031
Mari kita lakukan satu contoh Mario terakhir, yang mana\n

15558
14:50:48,031 --> 14:50:50,612
Jika ini adalah bagian lain\nantarmuka Mario

15559
14:50:50,612 --> 14:50:53,322
ini seperti kisi-kisi berukuran\n3 kali 3 bata, misalnya.

15560
14:50:53,322 --> 14:50:57,211
Jadi sekarang dua dimensi, bukan hanya\n

15561
14:50:57,211 --> 14:50:59,652
Ayo cetak sesuatu\nseperti itu, menggunakan hash.

15562
14:50:59,652 --> 14:51:02,592
Nah, bagaimana caranya, bagaimana cara melakukan ini.

15563
14:51:02,591 --> 14:51:05,731
Jadi bagaimana dengan i di kisaran 3.

15564
14:51:05,732 --> 14:51:10,802
Lalu saya bisa melakukan untuk j dalam rentang\n

15565
14:51:10,802 --> 14:51:12,332
dan itu masuk akal untuk dihitung.

15566
14:51:12,332 --> 14:51:17,522
Saya sekarang dapat mencetak simbol hash,\n

15567
14:51:17,521 --> 14:51:24,182
Python dari Mario.py, Oke, itu\nhanya satu kolom yang sangat panjang.

15568
14:51:24,182 --> 14:51:27,762
Apa yang perlu saya perbaiki dan di mana\n

15569
14:51:27,762 --> 14:51:32,372
Jadi 3 kali 3 bata, bukan\nsatu kolom panjang.

15570
14:51:32,972 --> 14:51:37,022
HADIRIN: Mengapa kita tidak membuat\na garis lalu kita lewati saja.

15571
14:51:37,021 --> 14:51:39,971
DAVID J. MALAN: Oke, jadi setelah\nmencetak 3, kami ingin melewati satu baris.

15572
14:51:39,972 --> 14:51:42,272
Jadi mungkin seperti mencetak\nkeluar baris kosong di sini.

15573
14:51:43,262 --> 14:51:46,442
Saya suka naluri itu, kan, cetak\n

15574
14:51:46,442 --> 14:51:48,781
Mari kita jalankan\nPython dari Mario.py.

15575
14:51:48,781 --> 14:51:53,101
Oke, lebih terlihat apa\nyang saya lakukan, tapi tetap saja salah.

15576
14:51:53,101 --> 14:51:55,631
Apa yang bisa saya lakukan, apa\nperbaikan yang tersisa?

15577
14:51:56,131 --> 14:51:59,311
HADIRIN: Jadi tepat di belakang keduanya.

15578
14:51:59,311 --> 14:52:02,201
DAVID J. MALAN: Ya, saya\nmendapatkan baris tambahan baru di sini

15579
14:52:02,201 --> 14:52:04,391
yang tidak saya inginkan\nsaat saya berada di baris ini.

15580
14:52:04,391 --> 14:52:08,372
Jadi izinkan saya melakukan n sama dengan kutipan, tanda kutip,\n

15581
14:52:10,472 --> 14:52:13,866
Python Mario.py, voila, sekarang\nkita sudah mendapatkannya, dalam dua dimensi.

15582
14:52:13,866 --> 14:52:15,241
Dan bahkan ini pun, kita bisa memperketatnya.

15583
14:52:15,241 --> 14:52:17,741
Misalnya, kita bisa menggunakan\ntrik kecil yang kita pelajari.

15584
14:52:17,741 --> 14:52:21,752
Jadi kita bisa mengatakan,\ncetak hash kali 3 kali

15585
14:52:21,752 --> 14:52:24,332
dan kita bisa menghilangkan salah satu\nodari perulangan itu sama sekali.

15586
14:52:24,332 --> 14:52:27,452
Yang dilakukannya hanyalah, ups, itu saja\n

15587
14:52:27,451 --> 14:52:29,581
Tapi, tidak, aku tidak ingin melakukan itu.

15588
14:52:29,582 --> 14:52:31,353
Apa yang harus saya lakukan, bagaimana cara memperbaikinya di sini.

15589
14:52:31,353 --> 14:52:33,061
Sepertinya saya tidak menginginkan\nini lagi, bukan?

15590
14:52:33,061 --> 14:52:34,871
Karena itu memberi\nsaya baris tambahan baru.

15591
14:52:34,872 --> 14:52:37,782
Jadi sekarang program ini\ndiperketat banget.

15592
14:52:37,781 --> 14:52:39,572
Hal yang sama, dua baris kode.

15593
14:52:39,572 --> 14:52:43,741
Namun kami sekarang menerapkannya\n

15594
14:52:43,741 --> 14:52:46,961
Baiklah, ada pertanyaan tentang ini?

15595
14:52:47,461 --> 14:52:53,311
HADIRIN: Apakah ada alasan praktis\n

15596
14:52:53,311 --> 14:52:56,371
fungsi cetak, Anda\ntidak memberi spasi apa pun di dalamnya.

15597
14:52:56,372 --> 14:52:58,952
DAVID J. MALAN: Jika saya\nmencetak n, spasi apa saja.

15598
14:52:59,822 --> 14:53:01,961
AUDIENCE: Setiap kali kita\nmenulis n, misalnya

15599
14:53:01,961 --> 14:53:05,372
fungsi cetaknya\nis, lho, secara berurutan

15600
14:53:05,372 --> 14:53:10,342
untuk menghentikannya berpindah ke\nbaris baru, sepertinya ada spasi

15601
14:53:10,341 --> 14:53:14,322
kami menyukai n sama dengan dan kemudian terlalu dekat.

15602
14:53:20,764 --> 14:53:24,552
Jadi di versi sebelumnya, izinkan saya\n

15603
14:53:25,692 --> 14:53:28,242
Konvensi dalam Python\tidak melakukan itu.

15604
14:53:28,872 --> 14:53:30,785
Itu mulai menambah terlalu banyak ruang.

15605
14:53:30,785 --> 14:53:32,952
Dan ini sedikit\ninkonsisten, karena, sebelumnya

15606
14:53:32,951 --> 14:53:34,991
ketika kita berbicara tentang\nseperti plus atau spasi

15607
14:53:34,991 --> 14:53:37,271
di sekitar tanda\nkurang dari atau sama, saya bilang tambahkan.

15608
14:53:37,271 --> 14:53:39,531
Ini sebenarnya\nlebih jelas dan direkomendasikan

15609
14:53:39,531 --> 14:53:40,781
untuk membuat mereka lebih erat bersama-sama.

15610
14:53:40,781 --> 14:53:44,082
Jika tidak, akan menjadi lebih sulit\nuntuk membaca di mana letak kesenjangannya.

15611
14:53:45,341 --> 14:53:50,878
Baiklah, mari kita lakukan, bagaimana kalau\nan istirahat lima menit lagi.

15612
14:53:51,461 --> 14:53:54,254
Lalu kita akan mendalami\n

15613
14:53:54,254 --> 14:53:57,682
dan akhirnya membangun dengan beberapa\n

15614
14:53:59,652 --> 14:54:04,781
Baiklah, jadi hampir semua\ncontoh baru saja kita lakukan

15615
14:54:04,781 --> 14:54:07,061
adalah rekreasi dari\napa yang kami lakukan di minggu ke-1.

15616
14:54:07,061 --> 14:54:09,641
Dan ingatlah bahwa minggu 1 adalah seperti\minggu yang paling padat sintaksisnya.

15617
14:54:09,641 --> 14:54:13,451
Saat itulah kami pertama kali belajar\n

15618
14:54:13,451 --> 14:54:16,421
kami mulai sedikit\nlebih fokus pada ide, seperti array

15619
14:54:16,421 --> 14:54:18,161
dan konstruksi tingkat tinggi lainnya.

15620
14:54:18,161 --> 14:54:21,401
Dan kita akan melakukannya lagi di sini, melakukan kondensasi\n

15621
14:54:21,402 --> 14:54:23,772
menjadi lebih sedikit kumpulan contoh dengan Python.

15622
14:54:23,771 --> 14:54:26,541
Dan kita akan mencapai puncaknya dengan\nmengikuti Python

15623
14:54:26,542 --> 14:54:28,822
dan melakukan hal-hal yang\nlebih sulit dilakukan

15624
14:54:28,822 --> 14:54:33,351
dan lebih memakan waktu untuk dilakukan di C,\n

15625
14:54:33,351 --> 14:54:36,311
Namun bagaimana cara Anda mencari tahu\nfungsi apa saja yang ada

15626
14:54:36,311 --> 14:54:39,491
jika Anda tidak mendengarnya di\nkelas, Anda tidak akan melihatnya secara online

15627
14:54:39,491 --> 14:54:43,002
tapi kamu ingin melihatnya secara resmi, kamu\n

15628
14:54:44,741 --> 14:54:47,862
Dan sejujurnya, saya akan menyangkal hal itu,\n

15629
14:54:49,271 --> 14:54:51,761
Google akan sering menjadi\nteman Anda, jadi carilah sesuatu di Google

15630
14:54:51,762 --> 14:54:55,872
Anda tertarik, untuk menemukan jalan Anda\n

15631
14:54:55,872 --> 14:54:58,932
atau StackOverflow.com adalah\nansitus web populer lainnya.

15632
14:54:58,932 --> 14:55:01,302
Namun, seperti biasa,\nline-nya harus dicari di Google

15633
14:55:01,302 --> 14:55:04,122
hal-hal seperti, bagaimana cara mengubah\na string menjadi huruf kecil.

15634
14:55:04,122 --> 14:55:05,592
Sepertinya itu masuk akal bagi Google.

15635
14:55:05,591 --> 14:55:09,681
Atau cara mengonversi ke huruf besar atau\n

15636
14:55:09,682 --> 14:55:14,472
Tapi googling, tentu saja, hal-hal seperti\n

15637
14:55:14,472 --> 14:55:15,641
tentu saja, melewati batas.

15638
14:55:15,641 --> 14:55:18,599
Namun bergerak maju, dan sungguh bersama\n

15639
14:55:18,599 --> 14:55:20,741
dan Stack Overflow adalah\nteman Anda, tetapi garisnya

15640
14:55:20,741 --> 14:55:23,061
berada di antara wajar\ndan tidak masuk akal.

15641
14:55:23,061 --> 14:55:26,411
Jadi izinkan saya secara resmi menggunakan\npencarian dokumentasi Python

15642
14:55:26,411 --> 14:55:29,051
untuk mencari sesuatu\nseperti fungsi huruf kecil.

15643
14:55:29,052 --> 14:55:31,062
Seperti, saya tahu saya bisa\nmengubah huruf kecil dengan Python.

15644
14:55:32,502 --> 14:55:34,391
Jadi izinkan saya menelusuri\nkata yang lebih rendah.

15645
14:55:34,391 --> 14:55:37,332
Anda akan sering mendapatkan\jumlah hasil yang luar biasa

15646
14:55:37,332 --> 14:55:40,200
karena Python cukup besar\n

15647
14:55:40,199 --> 14:55:42,491
Dan Anda pasti ingin\nmencari pola yang familier.

15648
14:55:42,491 --> 14:55:45,581
Untuk alasan apa pun,\nstring.lower, yang mungkin terjadi

15649
14:55:45,582 --> 14:55:48,942
lebih populer atau lebih umum digunakan daripada\n

15650
14:55:48,942 --> 14:55:51,982
Tapi warnanya ungu, karena saya mengklik\n

15651
14:55:51,982 --> 14:55:54,972
Jadi str.lower mungkin\nyang saya inginkan, karena saya

15652
14:55:54,972 --> 14:55:57,582
Saya tertarik saat ini\nstring casing bawah.

15653
14:55:57,582 --> 14:56:01,779
Ketika saya mengkliknya, ini adalah contoh\n

15654
14:56:02,322 --> 14:56:03,862
Itu dalam format umum ini.

15655
14:56:03,862 --> 14:56:05,862
Inilah fungsi str.lower saya.

15656
14:56:05,862 --> 14:56:08,061
Ini mengembalikan salinan\nstring, dengan semuanya

15657
14:56:08,061 --> 14:56:10,271
dari karakter yang diberi huruf besar/kecil\ndikonversi menjadi huruf kecil

15658
14:56:10,271 --> 14:56:12,191
dan \nalgoritma huruf kecil, titik titik titik.

15659
14:56:12,192 --> 14:56:13,690
Jadi itu tidak memberi saya banyak.

15660
14:56:13,690 --> 14:56:14,982
Itu tidak memberi saya kode sampel.

15661
14:56:14,982 --> 14:56:16,732
Namun di situ tertulis apa fungsinya.

15662
14:56:16,732 --> 14:56:20,412
Dan jika kami terus mencari, Anda akan melihat\n

15663
14:56:20,411 --> 14:56:24,641
Saya dulu pakai analognya, Rstrip, kan\n

15664
14:56:24,641 --> 14:56:27,521
yaitu strip, dari akhir a\n

15665
14:56:27,521 --> 14:56:29,451
seperti baris baru, atau bahkan yang lain.

15666
14:56:29,451 --> 14:56:32,932
Dan jika Anda menelusuri\nstring, halaman web ini ada di sini.

15667
14:56:32,932 --> 14:56:34,631
Dan kita sudah sampai setengah halaman.

15668
14:56:34,631 --> 14:56:36,701
Jika Anda melihat\nbilah gulir saya, kecil di sebelah kanan

15669
14:56:36,701 --> 14:56:41,771
ada banyak sekali fungsi\n

15670
14:56:41,771 --> 14:56:44,981
Dan ini hanyalah bukti\n

15671
14:56:44,982 --> 14:56:49,142
Namun hal ini juga merupakan alasan untuk\nmeyakinkan bahwa tujuannya, kapan

15672
14:56:49,141 --> 14:56:51,391
bermain-main dengan\nbahasa baru dan mempelajarinya

15673
14:56:51,391 --> 14:56:53,120
bukanlah mempelajarinya secara mendalam.

15674
14:56:53,120 --> 14:56:54,912
Sama seperti dalam bahasa Inggris\atau bahasa manusia lainnya

15675
14:56:54,911 --> 14:56:57,161
akan selalu ada\nvocab kata yang tidak Anda ketahui

15676
14:56:57,161 --> 14:57:00,084
cara menyajikan\ninformasi yang sama dalam beberapa bahasa.

15677
14:57:00,084 --> 14:57:01,752
Hal itulah yang akan terjadi pada Python.

15678
14:57:01,752 --> 14:57:05,141
Dan apa yang akan kita lakukan hari ini dan\nminggu ini di kumpulan soal 6 adalah sebenarnya

15679
14:57:05,141 --> 14:57:06,641
dapatkan pijakan Anda dengan bahasa ini.

15680
14:57:06,641 --> 14:57:09,822
Namun Anda tidak akan mengetahui seluruh Python,\n

15681
14:57:09,822 --> 14:57:12,822
Dan sejujurnya, Anda tidak akan mengetahui semuanya\n

15682
14:57:12,822 --> 14:57:15,322
kecuali Anda, mungkin, menggunakannya penuh waktu secara profesional

15683
14:57:15,322 --> 14:57:18,891
dan meskipun demikian, ada lebih banyak perpustakaan\n

15684
14:57:18,891 --> 14:57:21,942
Jadi sekarang mari kita\nberalih ke beberapa ide lainnya

15685
14:57:21,942 --> 14:57:24,082
yang akan kita implementasikan\nin Python, sebentar lagi.

15686
14:57:24,082 --> 14:57:26,531
Izinkan saya beralih kembali ke VS Code di sini.

15687
14:57:26,531 --> 14:57:31,781
Dan izinkan saya menyiapkan, katakanlah, sebuah rekreasi\n

15688
14:57:31,781 --> 14:57:34,404
saat kami membuat rata-rata\ntiga skor secara bersamaan.

15689
14:57:34,404 --> 14:57:36,822
Dan itu adalah kesempatan\sembilan minggu ke-2 untuk bermain-main dengan array

15690
14:57:36,822 --> 14:57:38,951
untuk menyadari betapa terbatasnya array.

15691
14:57:40,241 --> 14:57:41,561
Anda harus memutuskan terlebih dahulu.

15692
14:57:41,561 --> 14:57:43,631
Tapi mari kita lihat apa\nyang berbeda di sini dengan Python.

15693
14:57:43,631 --> 14:57:48,101
Jadi izinkan saya mengerjakan Scores.py, dan biarkan\n

15694
14:57:48,101 --> 14:57:52,301
disebut skor, maaf, izinkan saya memberikan diri saya\n

15695
14:57:52,302 --> 14:57:54,462
Tetapkan sama dengan daftar\ntiga skor, yang mana

15696
14:57:54,461 --> 14:57:59,082
sama dengan yang kita gunakan\nsebelumnya, 72, 73, 33, dalam konteks ini

15697
14:57:59,082 --> 14:58:01,152
dimaksudkan sebagai skor, bukan nilai ASCII.

15698
14:58:01,152 --> 14:58:03,042
Lalu mari kita lakukan\nrata-ratanya.

15699
14:58:03,042 --> 14:58:05,152
Jadi rata-rata akan menjadi variabel lain.

15700
14:58:05,152 --> 14:58:09,432
Dan ternyata saya bisa melakukannya,\nbagaimana saya menjumlahkannya sebelumnya?

15701
14:58:09,432 --> 14:58:13,101
Saya mungkin memiliki loop for untuk ditambahkan\n

15702
14:58:13,101 --> 14:58:16,101
Ternyata dengan Python, Anda\ncukup menyebutkan jumlah skor

15703
14:58:16,101 --> 14:58:18,051
dibagi dengan panjang skor.

15704
14:58:18,052 --> 14:58:19,652
Itu akan memberi saya rata-rata saya.

15705
14:58:19,652 --> 14:58:22,732
Jadi sum adalah fungsi yang mengambil\na daftar, dalam hal ini, sebagai input

15706
14:58:22,732 --> 14:58:25,522
dan itu hanya melakukan penjumlahan untuk\nAnda, dengan perulangan for atau apa pun

15707
14:58:26,451 --> 14:58:30,002
Len memberi Anda panjang\ndaftarnya, berapa banyak hal yang ada di dalamnya.

15708
14:58:30,002 --> 14:58:31,762
Jadi saya bisa mengetahuinya secara dinamis.

15709
14:58:31,762 --> 14:58:36,862
Sekarang izinkan saya mencetaknya,\n

15710
14:58:36,862 --> 14:58:40,150
dalam kurung kurawal, kutipan aktual\naverage dan tutup.

15711
14:58:40,150 --> 14:58:42,442
Baiklah, mari kita jalankan\nkode ini, Python dari Scores.py.

15712
14:58:42,442 --> 14:58:47,572
Dan itulah rata-rata saya, dalam\nkasus ini, 59,33333 dan seterusnya

15713
14:58:48,832 --> 14:58:51,022
Baiklah, sekarang,\nkita ubah ini sedikit

15714
14:58:51,021 --> 14:58:54,146
dan membuatnya sedikit lebih menarik,\n

15715
14:58:54,146 --> 14:58:55,711
daripada mengkodekan ini dengan keras.

15716
14:58:55,711 --> 14:58:59,089
Biarkan saya kembali ke sini dan\nuse dari CS50 impor getInt

15717
14:58:59,089 --> 14:59:01,881
karena saya tidak ingin berurusan dengan\n

15718
14:59:01,881 --> 14:59:04,341
Misalnya, saya hanya ingin menggunakan\nfungsi orang lain di sini.

15719
14:59:04,341 --> 14:59:08,121
Izinkan saya memberi diri saya\daftar kosong yang disebut skor.

15720
14:59:08,122 --> 14:59:11,002
Dan ini bukan sesuatu yang\ndapat kami lakukan di C, bukan?

15721
14:59:11,002 --> 14:59:13,131
Karena di C, jika Anda mencoba\nmembuat array kosong

15722
14:59:13,131 --> 14:59:16,112
wah, itu cukup bodoh,\nkarena Anda tidak bisa menambahkan apa pun ke dalamnya.

15723
14:59:17,432 --> 14:59:19,171
Jadi itu bahkan tidak membiarkan Anda melakukan itu.

15724
14:59:19,171 --> 14:59:22,161
Tapi saya bisa membuat\nan daftar kosong dengan Python

15725
14:59:22,161 --> 14:59:24,861
karena daftar, tidak seperti array,\nbenar-benar tidak panjang.

15726
14:59:26,271 --> 14:59:29,391
Namun Anda dan saya tidak berurusan dengan\n

15727
14:59:31,292 --> 14:59:34,957
Jadi sekarang, mari kita lanjutkan dan dapatkan\n

15728
14:59:34,957 --> 14:59:36,332
Bagaimana kalau totalnya ada tiga.

15729
14:59:36,332 --> 14:59:41,872
Jadi untuk i di rentang 3, ayo\n

15730
14:59:41,872 --> 14:59:44,332
menggunakan getInt, menanyakan skor mereka.

15731
14:59:44,332 --> 14:59:51,362
Lalu mari kita lanjutkan dan menambahkan, ke\n

15732
14:59:51,362 --> 14:59:53,722
Jadi ternyata ada daftarnya,\ndan saya bisa membaca Python

15733
14:59:53,722 --> 14:59:57,802
dokumentasi untuk mengonfirmasi sebanyak mungkin,\n

15734
14:59:57,802 --> 15:00:01,677
dan fungsi yang dibangun ke dalam objek\na umumnya dikenal sebagai metode

15735
15:00:01,677 --> 15:00:03,052
jika Anda pernah mendengar istilah itu sebelumnya.

15736
15:00:03,052 --> 15:00:05,842
Gagasan yang sama, tetapi suatu fungsi\nberdiri sendiri

15737
15:00:05,841 --> 15:00:09,951
metode adalah fungsi yang dibangun\ninke dalam objek, seperti daftar di sini.

15738
15:00:09,951 --> 15:00:12,438
Itu akan mencapai\nhasil yang sama. Sebenarnya

15739
15:00:13,521 --> 15:00:17,125
Sama seperti di C, saya bisa mengencangkannya\n

15740
15:00:17,125 --> 15:00:19,042
Tapi, entahlah, aku\nsuka seperti ini.

15741
15:00:19,042 --> 15:00:22,491
Setidaknya bagi saya, lebih jelas\n

15742
15:00:22,491 --> 15:00:24,360
dan kemudian menambahkannya ke daftar.

15743
15:00:24,360 --> 15:00:26,152
Kini\nkode lainnya akan tetap sama.

15744
15:00:26,152 --> 15:00:31,222
Python dari Scores.py,\nscore akan menjadi 72, 73, 33.

15745
15:00:32,341 --> 15:00:35,361
Namun sekarang programnya sedikit\nlebih dinamis, dan itu bagus.

15746
15:00:35,362 --> 15:00:37,461
Tapi ada\nsintaks lain yang bisa saya gunakan di sini.

15747
15:00:37,461 --> 15:00:40,851
Asal Anda melihatnya, Python melakukannya\n

15748
15:00:40,851 --> 15:00:43,371
dimana, jika Anda tidak\ningin melakukan skor.tambahkan

15749
15:00:43,372 --> 15:00:47,812
Anda sebenarnya bisa mengatakan skor\nplus sama dengan skor ini.

15750
15:00:47,811 --> 15:00:52,252
Jadi Anda sebenarnya dapat menggabungkan\ndaftar bersama-sama dengan Python 2.

15751
15:00:52,252 --> 15:00:54,862
Sama seperti kita menggunakan plus untuk\nmenggabungkan dua string menjadi satu

15752
15:00:54,862 --> 15:00:57,921
Anda dapat menggunakan plus untuk\nmenggabungkan dua daftar secara bersamaan.

15753
15:00:57,921 --> 15:01:00,561
Masalahnya adalah, Anda harus\nmenempatkan satu skor untuk saya

15754
15:01:00,561 --> 15:01:03,292
menambahkan di sini dalam daftarnya\yang diketahui, dan itu agak konyol.

15755
15:01:03,292 --> 15:01:07,851
Tapi itu perlu, agar ini\n

15756
15:01:07,851 --> 15:01:10,491
Untuk melakukan hal ini secara lebih jelas,\nyang tidak akan dilakukan oleh sebagian besar pemrogram

15757
15:01:10,491 --> 15:01:12,831
lakukan, tapi hanya untuk kejelasan,\nini sama saja

15758
15:01:12,832 --> 15:01:15,472
seperti mengatakan skor ditambah skor ini.

15759
15:01:15,472 --> 15:01:19,432
Jadi sekarang mungkin lebih dari itu\n

15760
15:01:19,432 --> 15:01:24,201
jamak, maaf, tunggal, keduanya\n

15761
15:01:25,381 --> 15:01:28,261
Jadi dua cara berbeda, tidak yakin\tidak ada yang lebih baik dari yang lain.

15762
15:01:28,262 --> 15:01:34,162
Cara ini cukup umum, tetapi .append\n

15763
15:01:34,161 --> 15:01:36,861
Baiklah, bagaimana dengan\contoh lain dari minggu kedua.

15764
15:01:36,862 --> 15:01:39,592
Yang ini disebut huruf besar.

15765
15:01:39,591 --> 15:01:42,841
Jadi izinkan saya melakukan ini di\nUppercase.py, kali ini.

15766
15:01:42,841 --> 15:01:46,701
Dan izinkan saya mengimpor dari\nCS50, mendapatkan string lagi.

15767
15:01:46,701 --> 15:01:50,541
Dan izinkan saya melanjutkan dan berkata,\nsebelum akan menjadi variabel pertama saya.

15768
15:01:50,542 --> 15:01:54,022
Biarkan saya mendapatkan string dari pengguna,\n

15769
15:01:54,021 --> 15:01:59,182
Lalu izinkan saya melanjutkan dan berkata,\n

15770
15:01:59,182 --> 15:02:01,711
huruf besar untuk string ini.

15771
15:02:01,711 --> 15:02:04,372
Biarkan saya mengubah akhiran baris saya menjadi\nmenjadi seperti itu, menggunakan trik baru kami.

15772
15:02:04,372 --> 15:02:08,012
Dan di sinilah segalanya menjadi keren\n

15773
15:02:08,012 --> 15:02:11,572
Jika saya ingin mengulangi semua\nkarakter dalam sebuah string

15774
15:02:11,572 --> 15:02:14,661
dan mencetaknya dalam huruf besar,\n

15775
15:02:14,661 --> 15:02:22,553
Untuk c pada string sebelumnya, lanjutkan dan\n

15776
15:02:22,553 --> 15:02:25,761
tapi jangan akhiri dulu, karena aku\n

15777
15:02:28,012 --> 15:02:31,492
Python dari Huruf Besar.py, izinkan saya\nmengetik Halo dengan huruf kecil semua.

15778
15:02:31,491 --> 15:02:33,531
Saya baru saja menggunakan huruf besar pada seluruh string.

15779
15:02:34,222 --> 15:02:36,652
Saya pertama kali mendapatkan string, memanggilnya sebelumnya.

15780
15:02:36,652 --> 15:02:39,202
Saya kemudian mencetak beberapa\nteks halus yang bertuliskan setelah titik dua

15781
15:02:39,201 --> 15:02:41,362
dan saya menghilangkan akhiran barisnya,\n

15782
15:02:41,362 --> 15:02:43,154
Perhatikan saya menekan spasi\na beberapa kali

15783
15:02:43,154 --> 15:02:45,141
supaya huruf-hurufnya berbaris menjadi cantik.

15784
15:02:45,141 --> 15:02:47,302
Untuk c dan sebelumnya, ini baru.

15785
15:02:47,302 --> 15:02:51,022
Ini sangat berguna di C,\nmaaf, dengan Python

15786
15:02:51,021 --> 15:02:54,111
Anda tidak perlu melakukan seperti Int i\nequals 0 dan i kurang dari ini

15787
15:02:54,112 --> 15:02:58,832
Anda cukup mengatakan, untuk c di\n

15788
15:02:58,832 --> 15:03:02,031
Dan ini hanya huruf besar\nkarakter spesifik itu

15789
15:03:02,031 --> 15:03:04,222
dan memastikan kami tidak\nmengeluarkan baris baru terlalu cepat.

15790
15:03:04,222 --> 15:03:06,442
Namun ini sebenarnya lebih\npekerjaan daripada yang perlu saya lakukan.

15791
15:03:06,442 --> 15:03:10,522
Berdasarkan apa yang telah kita lihat sejauh ini,\n

15792
15:03:10,521 --> 15:03:12,141
bisakah aku memperketatnya lebih lanjut?

15793
15:03:12,141 --> 15:03:16,862
Bisakah saya menciutkan baris 5 dan 6,\nbahkan mungkin 7, semuanya?

15794
15:03:16,862 --> 15:03:23,072
Jika tujuan dari program ini hanyalah\n

15795
15:03:27,002 --> 15:03:28,809
HADIRIN: Apakah str.upper?

15796
15:03:28,809 --> 15:03:31,141
DAVID J. MALAN: Str.upper,\nyeah, jadi saya bisa melakukan sesuatu

15797
15:03:31,141 --> 15:03:34,021
seperti ini, setelah menjadi sebelumnya.atas.

15798
15:03:34,021 --> 15:03:36,271
Jadi bukan aduk\nsecara harafiah titik atas, aduk

15799
15:03:36,271 --> 15:03:38,021
hanya mewakili string yang dimaksud.

15800
15:03:38,021 --> 15:03:41,141
Jadi itu akan menjadi sebelumnya.atas,\ntapi idenya benar sebaliknya.

15801
15:03:41,141 --> 15:03:44,652
Jadi izinkan saya melanjutkan dan melakukan penyesuaian\n

15802
15:03:44,652 --> 15:03:49,332
Biarkan saya langsung mencetak\n

15803
15:03:49,332 --> 15:03:51,961
Jadi baris ini sama, saya\nmendapatkan string yang dipanggil sebelumnya.

15804
15:03:51,961 --> 15:03:55,051
Saya membuat variabel lain\ndipanggil setelahnya, dan, seperti yang Anda usulkan

15805
15:03:55,052 --> 15:03:58,482
Saya menelepon bagian atas secara keseluruhan\n

15806
15:03:59,881 --> 15:04:03,871
Dan, sekali lagi, di Python, tidak ada\n

15807
15:04:03,872 --> 15:04:05,282
Hanya ada string.

15808
15:04:05,281 --> 15:04:07,121
Jadi sebaiknya saya melakukan semuanya sekaligus.

15809
15:04:07,122 --> 15:04:10,742
Jadi jika saya menjalankan kembali kodenya sekarang,\nPython dari Huruf Besar.py.

15810
15:04:10,741 --> 15:04:15,601
Sekarang saya akan mengetik Halo dengan huruf kecil\\semua, dan, oh, hampir saja

15811
15:04:15,601 --> 15:04:18,631
Saya pikir saya bisa menghilangkan\npengabaian ini, karena saya memang demikian

15812
15:04:18,631 --> 15:04:22,031
mencetak semuanya di\n

15813
15:04:22,031 --> 15:04:26,402
Jadi sekarang jika saya mengetik Halo sebelumnya,\n

15814
15:04:28,601 --> 15:04:32,432
Baiklah, ada pertanyaan,\nlalu, tentang daftar atau string

15815
15:04:32,432 --> 15:04:37,762
dan apa fungsinya,\n

15816
15:04:38,262 --> 15:04:41,281
Baiklah, jadi beberapa\nblok penyusun lainnya sebelum kita mulai.

15817
15:04:44,531 --> 15:04:46,572
DAVID J. MALAN: Ke kanan, kanan.

15818
15:04:47,561 --> 15:04:53,723
HADIRIN: Bisakah Anda menulis, hampir\n

15819
15:04:53,724 --> 15:04:55,779
Anda mulai membuat variabel atas.

15820
15:04:55,779 --> 15:04:58,362
DAVID J. MALAN: Ya, apakah saya harus\nmembuat variabel ini, atas?

15821
15:04:59,112 --> 15:05:01,391
Saya sebenarnya bisa memperketat\nini, dan, jika Anda benar-benar melakukannya

15822
15:05:01,391 --> 15:05:04,692
ingin melihat sesuatu yang rapi,\nindi dalam kurung kurawal

15823
15:05:04,692 --> 15:05:07,572
Anda tidak perlu hanya memasukkan\nnama variabel.

15824
15:05:07,572 --> 15:05:10,122
Anda dapat memasukkan sedikit\nlogika, begitu lama

15825
15:05:10,122 --> 15:05:13,302
karena tidak mulai terlihat bodoh dan\n

15826
15:05:13,302 --> 15:05:15,462
bahwa desainnya agak buruk\npada saat itu.

15827
15:05:15,461 --> 15:05:17,061
Saya bisa mengencangkannya seperti ini.

15828
15:05:17,061 --> 15:05:21,131
Dan sekarang kita menggunakan Python\nUppercase.py, menulis Hello lagi.

15829
15:05:22,252 --> 15:05:23,802
But I would be careful about this.

15830
15:05:23,802 --> 15:05:27,005
Anda ingin menahan godaan\n

15831
15:05:27,004 --> 15:05:29,921
di dalam kurung kurawal, karena\n

15832
15:05:29,921 --> 15:05:32,411
Namun, tentu saja, Anda\nmemang bisa melakukannya juga.

15833
15:05:32,411 --> 15:05:35,471
Baiklah, bagaimana dengan baris perintah\nargumen, yang merupakan satu hal

15834
15:05:35,472 --> 15:05:39,552
kami juga memperkenalkannya di minggu kedua, jadi\n

15835
15:05:39,552 --> 15:05:43,272
untuk mengambil masukan dari pengguna, ups.

15836
15:05:43,271 --> 15:05:46,791
Jadi kami sebenarnya bisa mengambil masukan\n

15837
15:05:46,792 --> 15:05:49,732
sehingga dapat memahami\nargumen baris perintah secara harfiah.

15838
15:05:49,732 --> 15:05:52,542
Ini sedikit berbeda,\nnamun mengikuti paradigma yang sama.

15839
15:05:52,542 --> 15:05:56,381
Tidak ada main secara default.\nDan tidak ada int utama Def

15840
15:05:56,381 --> 15:06:02,572
arg c char, atau kita menyebutnya string,\n

15841
15:06:02,572 --> 15:06:07,031
Jadi jika Anda ingin akses ke\n

15842
15:06:07,031 --> 15:06:11,621
Dan ternyata, ada lagi\n

15843
15:06:11,622 --> 15:06:15,702
called CIS, and you can import from\n

15844
15:06:15,701 --> 15:06:17,879
Jadi ide yang sama, tempat yang berbeda.

15845
15:06:17,879 --> 15:06:19,461
Sekarang saya akan melanjutkan dan melakukan ini.

15846
15:06:19,461 --> 15:06:24,341
Mari kita menulis sebuah program yang hanya membutuhkan\n

15847
15:06:24,341 --> 15:06:26,572
setelah\nnama program, atau tidak sama sekali.

15848
15:06:26,572 --> 15:06:33,192
Jadi jika panjang argv sama dengan 2,\n

15849
15:06:33,192 --> 15:06:41,610
Halo koma argv braket 1 kutipan penutup,\n

15850
15:06:41,610 --> 15:06:44,652
total saat diminta, katakan saja\n

15851
15:06:45,682 --> 15:06:48,701
Jadi satu-satunya hal yang baru di sini\n

15852
15:06:48,701 --> 15:06:51,971
dan kami menggunakan f-string mewah ini\n

15853
15:06:51,972 --> 15:06:55,031
juga, ini menempatkan logika\nyang lebih kompleks dalam kurung kurawal.

15854
15:06:55,792 --> 15:07:00,412
Dalam hal ini, daftarnya disebut argv,\n

15855
15:07:00,411 --> 15:07:04,301
Mari kita lakukan Python dari Argv.py,\nMasuk, Halo, dunia.

15856
15:07:04,302 --> 15:07:08,002
Bagaimana jika saya melakukan Argv.py\nDavid di baris perintah.

15857
15:07:09,252 --> 15:07:11,201
Jadi ada satu rasa ingin tahu di sini.

15858
15:07:11,201 --> 15:07:15,896
Python tidak disertakan dalam\nargv, sedangkan di C, titik

15859
15:07:15,896 --> 15:07:18,461
potong apa pun yang pertama.

15860
15:07:18,461 --> 15:07:22,031
Jika analog dalam Python adalah\nnama program Python Anda

15861
15:07:22,031 --> 15:07:26,322
adalah hal pertama, dalam tanda kurung 0,\n

15862
15:07:26,322 --> 15:07:32,262
kata Python tidak muncul di\n

15863
15:07:32,262 --> 15:07:34,512
Namun sebaliknya,\nide dari argumen ini

15864
15:07:34,512 --> 15:07:36,904
sama persis dengan sebelumnya.

15865
15:07:36,904 --> 15:07:39,072
Dan faktanya, apa yang bisa Anda\lakukan, itu keren

15866
15:07:39,072 --> 15:07:42,252
adalah, karena argv adalah sebuah daftar,\nAnda dapat melakukan hal seperti ini.

15867
15:07:42,252 --> 15:07:47,412
Untuk arg di argv, silakan\nd cetak setiap argumen.

15868
15:07:47,411 --> 15:07:49,511
Jadi, alih-alih menggunakan loop\nfor dan i dan semuanya

15869
15:07:49,512 --> 15:07:53,742
dari ini, jika saya menggunakan Python dari argv Enter,\n

15870
15:07:53,741 --> 15:07:58,481
Jika saya menggunakan Python dari argv Foo,\nit masukkan Argv.py dan Foo.

15871
15:07:58,482 --> 15:08:03,042
Jika ya, maaf, jika saya melakukan Foo dan\nbar, kata-kata itu akan tercetak semua.

15872
15:08:03,042 --> 15:08:05,292
Jika saya membuat Foobar baz, itu juga akan dicetak.

15873
15:08:05,292 --> 15:08:08,351
Dan Foo dan bar atau baz seperti\na matematikawan x, y, dan z

15874
15:08:08,351 --> 15:08:11,722
untuk ilmuwan komputer, saat Anda\n

15875
15:08:12,942 --> 15:08:16,542
Bunyinya agak mirip bahasa Inggris, dan\n

15876
15:08:16,542 --> 15:08:20,052
memungkinkan Anda melakukan iterasi dengan sangat cepat\n

15877
15:08:20,052 --> 15:08:22,692
Misalkan saya hanya menginginkan\nkata asli yang diketik manusia

15878
15:08:23,771 --> 15:08:26,981
Misalnya, saya ingin mengabaikan Argv.py.

15879
15:08:26,982 --> 15:08:30,162
Maksudku, aku bisa melakukan sesuatu\nhackish seperti ini.

15880
15:08:30,161 --> 15:08:35,626
Jika arg sama dengan Argv.py,\nSaya bisa mengabaikannya saja

15881
15:08:35,627 --> 15:08:37,002
lho, mari kita balikkan logikanya.

15882
15:08:37,002 --> 15:08:39,052
Saya bisa melakukan ini, misalnya.

15883
15:08:39,052 --> 15:08:41,622
Jadi jika argumennya tidak\sama dengan nama program

15884
15:08:41,622 --> 15:08:44,412
lalu lanjutkan dan cetak kata tersebut.

15885
15:08:44,411 --> 15:08:46,361
Jadi saya hanya mendapatkan Foobar dan baz.

15886
15:08:46,362 --> 15:08:50,921
Atau, ini yang rapi\n

15887
15:08:50,921 --> 15:08:54,921
Dan izinkan saya mengambil sepotong\narray dari daftar saja.

15888
15:08:54,921 --> 15:08:59,332
Jadi ternyata, jika argv adalah\na daftar, sebenarnya saya bisa mengatakannya

15889
15:08:59,332 --> 15:09:03,582
tahukah kamu, masuklah ke dalam daftar itu,\n

15890
15:09:03,582 --> 15:09:05,722
dan kemudian lanjutkan sampai akhir.

15891
15:09:05,722 --> 15:09:08,322
Dan kami belum melihat\nsintaksis ini di C. Tapi ini

15892
15:09:08,322 --> 15:09:10,932
adalah cara mengiris daftar dengan Python.

15893
15:09:12,341 --> 15:09:17,381
Jika saya menjalankan Python dari\nArgv.py, Foo bar baz Enter

15894
15:09:17,381 --> 15:09:21,252
Saya hanya mendapatkan sebagian dari\ndaftar, mulai dari posisi 1

15895
15:09:21,252 --> 15:09:23,413
berjalan terus hingga akhir.

15896
15:09:23,413 --> 15:09:25,121
Dan Anda bahkan dapat melakukan\nhal sebaliknya.

15897
15:09:25,122 --> 15:09:27,852
Jika, karena alasan apa pun, Anda\ningin mengabaikan elemen terakhir

15898
15:09:27,851 --> 15:09:33,551
bisa dibilang titik dua, kita\nbisa bilang titik dua negatif 1

15899
15:09:33,552 --> 15:09:36,082
dan gunakan angka negatif,\nyang belum pernah kita lihat sebelumnya

15900
15:09:36,082 --> 15:09:38,992
yang juga memotong bagian akhir\ndaftar.

15901
15:09:38,991 --> 15:09:42,521
Jadi ada beberapa trik sintaksis\n

15902
15:09:42,521 --> 15:09:46,661
meskipun pada pandangan pertama, Anda mungkin\n

15903
15:09:46,661 --> 15:09:49,319
Baiklah, mari kita lakukan satu\contoh lain dengan exit

15904
15:09:49,319 --> 15:09:51,612
lalu kita akan mulai\nmenerapkan beberapa algoritme

15905
15:09:51,612 --> 15:09:52,737
untuk membuat hal-hal menjadi menarik.

15906
15:09:52,737 --> 15:09:56,991
Jadi dalam satu program terakhir di sini, ayo lakukan\n

15907
15:09:56,991 --> 15:09:58,731
sebelum kami memperkenalkan beberapa algoritma.

15908
15:10:00,741 --> 15:10:05,421
Ayo impor dari CIS, impor argv.

15909
15:10:07,012 --> 15:10:09,722
Mari pastikan pengguna memberikan\nsaya satu argumen baris perintah.

15910
15:10:09,722 --> 15:10:16,101
Jadi jika panjang argv tidak\n

15911
15:10:16,101 --> 15:10:19,311
dan mencetak sesuatu seperti\nargumen baris perintah yang hilang

15912
15:10:19,311 --> 15:10:21,112
hanya untuk menjelaskan apa masalahnya.

15913
15:10:25,101 --> 15:10:27,231
Namun saya akan menggunakan\nversi keluar yang lebih baik di sini.

15914
15:10:27,232 --> 15:10:29,422
Izinkan saya mengimpor dua fungsi dari CIS.

15915
15:10:29,421 --> 15:10:33,561
Ternyata cara yang lebih baik untuk melakukan ini adalah\n

15916
15:10:33,561 --> 15:10:36,514
khusus 2, dengan kode keluar ini.

15917
15:10:36,514 --> 15:10:38,932
Jika tidak, di sini, saya akan\nmencetaknya

15918
15:10:38,932 --> 15:10:43,340
sesuatu seperti Halo, koma\nargv bracket 1, sama seperti sebelumnya.

15919
15:10:43,339 --> 15:10:44,881
Dan kemudian saya akan keluar dengan nol.

15920
15:10:44,881 --> 15:10:46,932
Jadi, sekali lagi, ini adalah\nhal halus yang kami perkenalkan

15921
15:10:46,932 --> 15:10:49,432
di minggu kedua, saat Anda\nbenarnya dapat keluar dari program Anda

15922
15:10:49,432 --> 15:10:51,951
dengan beberapa angka, dimana\n0 menandakan kesuksesan

15923
15:10:51,951 --> 15:10:53,871
dan hal lainnya menandakan kesalahan.

15924
15:10:53,872 --> 15:10:55,762
Ini adalah ide yang sama dengan Python.

15925
15:10:55,762 --> 15:11:00,442
Jadi kalau saya misalnya jalankan saja\n

15926
15:11:00,442 --> 15:11:03,141
Maksudku keluar dari sini dan keluar dari sini.

15927
15:11:04,232 --> 15:11:07,022
Jika saya menjalankan ini seperti ini, saya\nkehilangan argumen baris perintah.

15928
15:11:07,021 --> 15:11:09,721
Jadi izinkan saya menjalankannya kembali dengan\nseperti nama saya saat diminta.

15929
15:11:09,722 --> 15:11:13,552
Jadi saya punya dua baris perintah\n

15930
15:11:14,572 --> 15:11:16,864
Dan jika saya melakukan David Malan, itu\ntidak akan berhasil juga

15931
15:11:16,864 --> 15:11:18,682
karena sekarang argv tidak sama dengan 2.

15932
15:11:18,682 --> 15:11:21,381
Namun perbedaannya di sini adalah\nkita keluar dengan 1

15933
15:11:21,381 --> 15:11:26,421
sehingga program khusus dapat mendeteksi\n

15934
15:11:26,421 --> 15:11:28,701
Dan sekarang ada satu\ncara lain untuk melakukan hal ini juga.

15935
15:11:28,701 --> 15:11:30,981
Misalkan Anda\nmengimpor banyak fungsi

15936
15:11:30,982 --> 15:11:33,465
dan Anda sebenarnya tidak ingin\nmembuat kekacauan

15937
15:11:33,464 --> 15:11:35,631
dan sediakan semua\nnama fungsi ini

15938
15:11:35,631 --> 15:11:38,151
tanpa jelas\ndari mana asalnya.

15939
15:11:38,152 --> 15:11:39,982
Mari kita impor seluruh CIS.

15940
15:11:39,982 --> 15:11:43,702
Dan mari kita ubah sintaksis kita,\n

15941
15:11:43,701 --> 15:11:46,491
di mana kita hanya menambahkan semua\nofungsi perpustakaan ini

15942
15:11:46,491 --> 15:11:49,941
CIS, agar lebih eksplisit\ndari mana mereka berasal

15943
15:11:49,942 --> 15:11:55,359
dan jika ada nilai\nexit atau argv lainnya

15944
15:11:55,358 --> 15:11:58,441
yang ingin kita impor dari perpustakaan,\n

15945
15:11:58,442 --> 15:12:01,672
Jadi jika saya melakukannya untuk terakhir kalinya di sini,\nargumen baris perintah tidak ada.

15946
15:12:01,671 --> 15:12:03,711
Tapi David sebenarnya masih bekerja.

15947
15:12:03,711 --> 15:12:06,771
Baiklah, hanya untuk menunjukkan caranya\n

15948
15:12:06,771 --> 15:12:09,651
Sekarang mari kita lakukan sesuatu yang lebih\ncanggih, seperti algoritme penelusuran

15949
15:12:10,553 --> 15:12:13,011
Saya akan melanjutkan dan membuka\nfile bernama Numbers.py

15950
15:12:13,012 --> 15:12:16,942
dan mari kita lakukan penelusuran\atau penelusuran linier saja

15951
15:12:20,582 --> 15:12:23,572
Bagaimana kalau impor CIS seperti sebelumnya.

15952
15:12:23,572 --> 15:12:29,362
Izinkan saya memberi diri saya daftar\number, seperti 4, 6, 8, 2, 7, 5, 0

15953
15:12:29,362 --> 15:12:31,192
jadi hanya sekumpulan bilangan bulat.

15954
15:12:32,692 --> 15:12:36,112
Jika Anda ingat dari minggu ketiga,\nkita menelusuri angka 0

15955
15:12:36,112 --> 15:12:38,402
di ujung loker di atas panggung.

15956
15:12:38,402 --> 15:12:40,641
Jadi mari kita ajukan\npertanyaan itu dengan Python.

15957
15:12:40,641 --> 15:12:42,381
Tidak perlu loop atau\nhal seperti itu.

15958
15:12:42,381 --> 15:12:46,072
Jika angkanya 0, lanjutkan\nahead dan cetak ditemukan.

15959
15:12:46,072 --> 15:12:49,942
Lalu kita berhasil keluar,\n

15960
15:12:49,942 --> 15:12:52,192
anggap saja cetakan tidak ditemukan.

15961
15:12:52,192 --> 15:12:55,732
Dan kemudian kita akan keluar dari CIS dengan 1.

15962
15:12:55,732 --> 15:12:58,342
Jadi di sinilah Python\nmulai menjadi kuat lagi.

15963
15:12:59,572 --> 15:13:02,254
Inilah loop Anda, yang melakukan\nsemua pemeriksaan untuk Anda.

15964
15:13:02,254 --> 15:13:04,671
Di balik terpalnya, Python\nakan menggunakan pencarian linier.

15965
15:13:04,671 --> 15:13:06,338
Anda tidak harus menerapkannya sendiri.

15966
15:13:06,338 --> 15:13:08,841
Tanpa perulangan while, tanpa perulangan for,\nAnda cukup mengajukan pertanyaan.

15967
15:13:08,841 --> 15:13:12,752
Jika 0 dalam angka,\nlakukan hal berikut.

15968
15:13:12,752 --> 15:13:14,872
Jadi itulah salah satu fitur\nyang sekarang kita dapatkan dengan Python

15969
15:13:14,872 --> 15:13:16,862
dan membuang\na banyak kode itu.

15970
15:13:16,862 --> 15:13:18,351
Kita juga bisa melakukannya dengan string.

15971
15:13:18,351 --> 15:13:21,362
Izinkan saya membuka file\nbernama Names.py

15972
15:13:21,362 --> 15:13:23,512
dan melakukan sesuatu yang\bahkan lebih terlibat dalam C

15973
15:13:23,512 --> 15:13:26,542
karena kita memerlukan Str Comp dan\nperulangan for, dan seterusnya.

15974
15:13:26,542 --> 15:13:28,522
Izinkan saya mengimpor CIS untuk file ini.

15975
15:13:28,521 --> 15:13:30,981
Mari beri diri saya banyak\nnama seperti yang kita lakukan di C.

15976
15:13:30,982 --> 15:13:38,152
Dan mereka adalah Bill dan Charlie\nand Fred dan George dan Ginny

15977
15:13:38,152 --> 15:13:41,961
dan dua lagi, Percy, dan terakhir Ron.

15978
15:13:41,961 --> 15:13:43,911
Dan ingat, pada\nwaktu itu, kami mencari Ron.

15979
15:13:43,911 --> 15:13:45,953
Jadi kami harus mengulangi\nseluruhnya

15980
15:13:45,953 --> 15:13:48,331
melakukan Str Comp dan i plus\nplus dan semua itu.

15981
15:13:48,332 --> 15:13:55,281
Sekarang ajukan saja pertanyaannya, apakah Ron\n

15982
15:13:55,281 --> 15:13:56,961
dan, ups, biarkan aku menyembunyikannya.

15983
15:13:58,771 --> 15:14:02,701
Izinkan saya melanjutkan dan mengatakan\ncetak, ditemukan, seperti sebelumnya.

15984
15:14:02,701 --> 15:14:06,231
Pintu keluar CIS 1, hanya untuk menunjukkan\nkeberhasilan, lalu turun ke sini

15985
15:14:06,232 --> 15:14:09,362
jika kita sampai pada titik ini,\nkita dapat mengatakan tidak ditemukan.

15986
15:14:09,362 --> 15:14:12,692
Dan kemudian kita hanya akan keluar dari CIS 1 saja.

15987
15:14:12,692 --> 15:14:17,482
Jadi, sekali lagi, ini hanya melakukan penelusuran linear\n

15988
15:14:17,482 --> 15:14:20,932
kami menemukan Ron, karena, memang, dia\n

15989
15:14:20,932 --> 15:14:24,711
Namun kita tidak perlu membahas\semua mekanismenya.

15990
15:14:24,711 --> 15:14:27,051
Baiklah, mari kita\nselangkah lebih maju.

15991
15:14:27,052 --> 15:14:29,362
Pada minggu ketiga, kami juga\nmengimplementasikan ide tersebut

15992
15:14:29,362 --> 15:14:33,502
dari buku telepon, yang sebenarnya\mengaitkan kunci dengan nilai.

15993
15:14:33,502 --> 15:14:36,531
Tapi ingat, buku telepon di\nC, agak diretas, bukan?

15994
15:14:36,531 --> 15:14:40,042
Karena pertama-tama kita mempunyai dua array,\n

15995
15:14:40,042 --> 15:14:43,851
Lalu kami memperkenalkan struct, dan\n

15996
15:14:43,851 --> 15:14:47,421
Dan kemudian kami memiliki sejumlah orang.

15997
15:14:47,421 --> 15:14:51,561
Anda dapat melakukan ini dengan Python, menggunakan\n

15998
15:14:51,561 --> 15:14:54,191
Namun kita juga bisa menggunakan\nkamus tujuan umum

15999
15:14:54,192 --> 15:14:57,942
karena sama seperti di P set 5, kamu\n

16000
15:14:59,622 --> 15:15:02,922
Demikian pula, bisakah\nPython melakukan ini untuk kita.

16001
15:15:02,921 --> 15:15:05,771
Dari CS50, mari impor get string.

16002
15:15:05,771 --> 15:15:09,281
Dan sekarang mari kita beri diri saya\na kamus orang

16003
15:15:09,281 --> 15:15:13,061
D-I-C-T () buka paren tertutup\nparen memberi Anda kamus.

16004
15:15:13,061 --> 15:15:15,822
Atau sebenarnya Anda dapat menyederhanakan\nsintaksnya

16005
15:15:15,822 --> 15:15:18,881
dan kamus lagi-lagi hanyalah kunci\n

16006
15:15:18,881 --> 15:15:21,581
Anda juga bisa menggunakan\nkurung kurawal saja.

16007
15:15:21,582 --> 15:15:23,542
Itu memberi saya kamus kosong.

16008
15:15:23,542 --> 15:15:26,921
Tapi jika saya tahu apa yang ingin saya masukkan ke dalamnya\n

16009
15:15:26,921 --> 15:15:34,311
dengan nomor plus 1-617-495-1000,\n

16010
15:15:34,311 --> 15:15:40,298
David, dengan plus 1-949-468-2750.

16011
15:15:40,298 --> 15:15:42,881
Dan hal itu menarik perhatian saya,\ntragisnya, setelah kelas hari itu

16012
15:15:42,881 --> 15:15:44,673
bahwa kami mempunyai bug di\no telur Paskah kecil kami.

16013
15:15:44,673 --> 15:15:47,711
Jika hari ini, Anda ingin menelepon\nsaya atau mengirim pesan kepada saya, di nomor itu

16014
15:15:47,711 --> 15:15:50,652
kami telah memperbaiki kode yang\nmendasari telur Paskah kecil itu.

16015
15:15:51,612 --> 15:15:53,561
Baiklah, jadi ini sekarang\ngmemberi saya sebuah variabel

16016
15:15:53,561 --> 15:15:57,641
disebut orang, itu\mengasosiasikan kunci dengan nilai.

16017
15:15:57,641 --> 15:16:01,752
Ada beberapa sintaks baru di sini di\n

16018
15:16:01,752 --> 15:16:04,811
tapi titik dua, dan tanda kutip\bukan kiri dan kanan.

16019
15:16:04,811 --> 15:16:07,901
Ini adalah cara, dalam Python,\nuntuk mengasosiasikan kunci

16020
15:16:07,902 --> 15:16:11,872
dengan nilai, kata dengan definisi,\n

16021
15:16:11,872 --> 15:16:15,072
Dan ini akan menjadi hal yang sangat umum\n

16022
15:16:15,072 --> 15:16:18,972
ketika kita melihat CSS dan HTML dan\n

16023
15:16:18,972 --> 15:16:22,362
seperti ide yang ada di mana-mana di\n

16024
15:16:22,362 --> 15:16:25,822
karena ini hanya cara yang sangat berguna\n

16025
15:16:25,822 --> 15:16:29,211
Jadi, pada bagian cerita ini, kami\n

16026
15:16:29,211 --> 15:16:32,711
jika Anda mau, tentu saja, mengasosiasikan\nnama dengan nomor telepon

16027
15:16:32,711 --> 15:16:34,197
seperti buku telepon dunia nyata.

16028
15:16:34,197 --> 15:16:37,722
Jadi mari kita menulis sebuah program yang mendapatkan\n

16029
15:16:37,722 --> 15:16:39,912
nomor siapa yang ingin mereka cari.

16030
15:16:39,911 --> 15:16:46,031
Kalau begitu, mari kita lanjutkan dan katakan, jika itu\n

16031
15:16:46,031 --> 15:16:48,612
silakan cetak\nnomor orang itu

16032
15:16:48,612 --> 15:16:51,252
dengan masuk ke kamus\masyarakat dan pergi

16033
15:16:51,252 --> 15:16:56,002
ke nama spesifik itu, di dalamnya,\n

16034
15:16:56,002 --> 15:16:58,482
Jadi semangatnya serupa dengan sebelumnya.

16035
15:16:58,482 --> 15:17:02,652
Penelusuran linier dan pencarian kamus\n

16036
15:17:02,652 --> 15:17:05,802
dengan Python, hanya dengan mengajukan\npertanyaan, apakah nama dan orang.

16037
15:17:05,802 --> 15:17:07,692
Dan baris ini\nakan dicetak

16038
15:17:07,692 --> 15:17:12,232
siapa pun yang ada di kamus\masyarakat, atas nama itu.

16039
15:17:12,232 --> 15:17:16,722
Jadi saya menggunakan tanda kurung siku, karena\n

16040
15:17:16,722 --> 15:17:19,842
sama seperti Anda dapat mengindeks ke\nan array, atau daftar dengan Python

16041
15:17:19,841 --> 15:17:24,671
menggunakan angka, 0, 1, 2, Anda\ndapat dengan mudah mengindeks

16042
15:17:24,671 --> 15:17:29,601
ke dalam kamus dengan Python,\menggunakan tanda kurung siku, juga.

16043
15:17:29,601 --> 15:17:32,591
Dan untuk memperjelas apa\nyang terjadi di sini, izinkan saya pergi

16044
15:17:32,591 --> 15:17:37,002
dan buat variabel sementara,\n

16045
15:17:37,002 --> 15:17:41,531
Lalu ayo, atau, maaf, ayo\n

16046
15:17:41,531 --> 15:17:44,411
Dan itu hanya akan mencetak\nout nomor yang dimaksud.

16047
15:17:44,411 --> 15:17:48,371
Di C, dan sebelumnya di Python,\n

16048
15:17:48,372 --> 15:17:53,472
akan pergi ke suatu lokasi di\n

16049
15:17:53,472 --> 15:17:57,311
Tapi itu sebenarnya bisa berupa string,\n

16050
15:17:57,311 --> 15:17:59,351
Dan inilah yang menakjubkan\ntentang kamus

16051
15:17:59,351 --> 15:18:02,411
ini bukan seperti garis\nbesar, hal linier yang besar.

16052
15:18:02,411 --> 15:18:05,261
Tabel inilah yang dapat\nAnda cari dalam satu kolom namanya

16053
15:18:05,262 --> 15:18:07,582
dan kembali ke\kolom lain nomornya.

16054
15:18:07,582 --> 15:18:09,641
Jadi mari kita jalankan\nPython dari Phonebook.py

16055
15:18:14,622 --> 15:18:18,402
Bukan itu yang\nseharusnya terjadi.

16056
15:18:18,402 --> 15:18:19,961
Saya pikir saya berada di permainan yang salah.

16057
15:18:32,351 --> 15:18:36,491
Python dari Phonebook.py, apa--

16058
15:18:55,661 --> 15:18:57,776
Apa yang tidak saya pahami di sini?

16059
15:19:00,701 --> 15:19:03,869
Oke, Roxanne, Carter, apa kamu\nmelihat kesalahanku?

16060
15:19:10,752 --> 15:19:14,631
SPEAKER 47: Ketika Anda menemukan tes\n

16061
15:19:14,631 --> 15:19:19,911
DAVID J. MALAN: Oh, ya, sudah ketemu,\nOke, kita akan melakukan ini.

16062
15:19:31,881 --> 15:19:33,792
Semua ini keluar dari video.

16063
15:19:42,805 --> 15:19:44,722
Saya akan mencoba mencari tahu\napa yang salah.

16064
15:19:44,722 --> 15:19:47,322
Yang terbaik yang saya tahu, itu\nmenjalankan program yang salah.

16065
15:19:47,322 --> 15:19:49,341
Saya tidak begitu mengerti alasannya.

16066
15:19:49,341 --> 15:19:50,691
Jadi kami akan mendiagnosisnya nanti.

16067
15:19:50,692 --> 15:19:53,484
Saya hanya memasukkan file tersebut ke dalam file sementara\n

16068
15:19:53,483 --> 15:19:59,231
Jadi izinkan saya menjalankan\nini, Python dari Phonebook.py

16069
15:19:59,232 --> 15:20:00,762
ketik, misalnya, nama saya.

16070
15:20:00,762 --> 15:20:02,940
Dan itu nomor saya yang sesuai.

16071
15:20:02,940 --> 15:20:04,482
Tidak tahu apa yang baru saja terjadi.

16072
15:20:04,482 --> 15:20:06,582
Namun saya akan membahas\ndasarnya dan mengabari Anda

16073
15:20:06,582 --> 15:20:07,882
jika kita bisa menunjukkannya.

16074
15:20:07,881 --> 15:20:11,411
Jadi ini hanyalah sebuah contoh,\npengimplementasian buku telepon.

16075
15:20:11,411 --> 15:20:14,111
Sekarang mari kita pertimbangkan apa yang\ndapat kita lakukan lebih lanjut

16076
15:20:14,112 --> 15:20:16,932
canggih, dalam contoh ini,\nseperti buku telepon itu

16077
15:20:16,932 --> 15:20:18,671
sebenarnya menyimpan informasi ini.

16078
15:20:18,671 --> 15:20:22,031
Sejauh ini, buku telepon sederhana ini\n

16079
15:20:22,031 --> 15:20:25,301
Namun menggunakan file CSV,\nnilai dipisahkan koma

16080
15:20:25,302 --> 15:20:28,077
mungkin kita sebenarnya bisa menyimpan\nnama dan nomornya

16081
15:20:28,076 --> 15:20:29,951
sehingga, seperti di\nponsel Anda, Anda sebenarnya bisa

16082
15:20:29,951 --> 15:20:32,301
pertahankan kontak Anda dalam jangka panjang.

16083
15:20:32,302 --> 15:20:35,582
Jadi saya akan lanjutkan sekarang dan\n

16084
15:20:35,582 --> 15:20:39,762
Dan izinkan saya menyembunyikan\ndetail ini, agar tidak membingungkan.

16085
15:20:39,762 --> 15:20:43,152
Ups, saya akan mengubah\nperintah saya untuk sementara.

16086
15:20:43,152 --> 15:20:47,062
Jadi izinkan saya melanjutkan sekarang dan\nmemperbaiki contoh ini sebagai berikut.

16087
15:20:47,061 --> 15:20:50,351
Saya akan masuk ke\nPhonebook.py, dan saya masuk

16088
15:20:50,351 --> 15:20:52,811
akan mengimpor seluruh\nperpustakaan bernama CSV.

16089
15:20:52,811 --> 15:20:54,671
Dan ini adalah cara yang ampuh\tidak ada, karena Python

16090
15:20:54,671 --> 15:20:58,391
dilengkapi dengan perpustakaan yang hanya\nmenangani file CSV untuk Anda.

16091
15:20:58,391 --> 15:21:02,122
File CSV hanyalah sebuah file\ndengan nilai yang dipisahkan koma.

16092
15:21:02,122 --> 15:21:06,102
Dan sebenarnya, untuk mendemonstrasikan\nhal ini, izinkan saya memeriksa satu hal

16093
15:21:06,101 --> 15:21:08,981
di sini, hanya untuk membuat ini\na sedikit lebih nyata.

16094
15:21:08,982 --> 15:21:15,532
Untuk mendemonstrasikannya, ayo\nlakukan ini.

16095
15:21:15,531 --> 15:21:18,491
Izinkan saya mengimpor perpustakaan CSV dari CS50.

16096
15:21:20,351 --> 15:21:24,072
Izinkan saya membuka file,\menggunakan fungsi buka

16097
15:21:24,072 --> 15:21:28,932
buka file bernama\nPhonebook.csv, dalam format tambahan

16098
15:21:28,932 --> 15:21:31,421
berbeda dengan format baca\ndan format tulis.

16099
15:21:31,421 --> 15:21:34,972
Write akan membuangnya jika memang ada,\n

16100
15:21:34,972 --> 15:21:37,452
Jadi saya menyimpan buku telepon ini\nseperti Anda

16101
15:21:37,451 --> 15:21:39,389
terus tambahkan kontak ke ponsel Anda.

16102
15:21:39,389 --> 15:21:41,932
Sekarang izinkan saya melanjutkan dan mendapatkan\nbeberapa nilai dari pengguna.

16103
15:21:41,932 --> 15:21:45,342
Izinkan saya mengucapkan getString dan\menanyakan nama pada pengguna.

16104
15:21:45,341 --> 15:21:50,681
Lalu izinkan saya mendapatkanString lagi, dan\menanyakan nomor pengguna kepada pengguna.

16105
15:21:50,682 --> 15:21:52,707
Dan sekarang, izinkan saya melanjutkan dan melakukan ini.

16106
15:21:52,707 --> 15:21:54,582
Dan ini baru, dan\nini khusus untuk Python.

16107
15:21:54,582 --> 15:21:57,342
Dan Anda hanya akan mengetahuinya\ndengan mengikuti tutorial

16108
15:21:57,341 --> 15:21:59,002
atau membaca dokumentasi.

16109
15:21:59,002 --> 15:22:01,391
Izinkan saya memberi diri saya\nvariabel yang disebut penulis

16110
15:22:01,391 --> 15:22:06,472
dan minta perpustakaan CSV\nuntuk penulis file tersebut.

16111
15:22:06,472 --> 15:22:09,912
Kalau begitu, izinkan saya melanjutkan dan\nmenggunakan variabel penulis itu

16112
15:22:09,911 --> 15:22:13,241
gunakan fungsi atau metode\nindi dalamnya, yang disebut baris tulis

16113
15:22:13,241 --> 15:22:17,722
untuk menulis daftar yang berisi\nnama dan nomor orang tersebut.

16114
15:22:17,722 --> 15:22:20,832
Perhatikan tanda kurung siku\di dalam tanda kurung

16115
15:22:20,832 --> 15:22:25,872
karena saya hanya mencetak daftar\n

16116
15:22:25,872 --> 15:22:27,622
Lalu saya akan\nmenutup file tersebut.

16117
15:22:27,622 --> 15:22:29,264
Lalu apa dampak dari semua ini?

16118
15:22:29,264 --> 15:22:31,722
Baiklah, izinkan saya menjalankan\nversi Phonebook.py ini

16119
15:22:31,722 --> 15:22:33,202
dan aku diminta menyebutkan nama.

16120
15:22:33,201 --> 15:22:41,651
Mari kita lakukan yang Carter dulu, ditambah\n1-617-495-1000, lalu

16121
15:22:44,292 --> 15:22:47,482
Perhatikan di direktori saya saat ini,\n

16122
15:22:47,482 --> 15:22:50,952
yang saya tulis, dan\nampaknya Buku Telepon.csv.

16123
15:22:50,951 --> 15:22:53,351
CSV hanya singkatan dari\nnilai yang dipisahkan koma.

16124
15:22:53,351 --> 15:22:56,902
Dan ini seperti cara yang sangat sederhana\n

16125
15:22:56,902 --> 15:23:00,192
jika Anda mau, koma mewakili\n

16126
15:23:00,192 --> 15:23:02,891
Hanya ada dua kolom\ndi sini, nama dan nomor.

16127
15:23:02,891 --> 15:23:06,101
Namun, karena saya menulis ke\nfile ini dalam mode penambahan

16128
15:23:06,101 --> 15:23:09,741
izinkan saya menjalankannya sekali lagi,\nPython dari Phonebook.py

16129
15:23:09,741 --> 15:23:18,011
dan izinkan saya melanjutkan dan melakukan David\ndan plus 1-949-468-2750, Enter.

16130
15:23:18,012 --> 15:23:19,872
Dan perhatikan apa yang terjadi\nin file CSV.

16131
15:23:19,872 --> 15:23:22,902
Ini diperbarui secara otomatis,\nkarena saya sekarang bertahan

16132
15:23:22,902 --> 15:23:25,522
data ini ke file yang dimaksud.

16133
15:23:25,521 --> 15:23:27,881
Jadi jika saya ingin\nmembaca file ini sekarang, saya

16134
15:23:27,881 --> 15:23:32,201
sebenarnya dapat melanjutkan dan\ndo melakukan penelusuran linier pada data

16135
15:23:32,201 --> 15:23:35,171
menggunakan fungsi baca untuk\membaca sebenarnya dari CSV.

16136
15:23:35,171 --> 15:23:37,871
Namun, untuk saat ini, kami hanya akan meninggalkan\nit sedikit seperti menulis.

16137
15:23:37,872 --> 15:23:39,792
Dan izinkan saya membuat satu perbaikan di sini.

16138
15:23:39,792 --> 15:23:43,542
Ternyata, jika Anda memiliki\nkebiasaan membuka kembali sebuah file

16139
15:23:43,542 --> 15:23:45,851
Anda bahkan tidak perlu\nmenutupnya secara eksplisit.

16140
15:23:47,442 --> 15:23:52,572
Anda bisa mengucapkannya dengan pembukaan\n

16141
15:23:52,572 --> 15:23:57,822
dalam mode penambahan, memanggil file benda,\n

16142
15:23:58,872 --> 15:24:00,899
Jadi kata kunci with adalah\na hal baru di Python.

16143
15:24:00,898 --> 15:24:03,731
Dan itu digunakan dalam beberapa\n yang berbeda

16144
15:24:03,732 --> 15:24:04,857
adalah memperketat kode di sini.

16145
15:24:04,857 --> 15:24:06,940
Dan saya akan memindahkan\nvariabel saya ke luar

16146
15:24:06,940 --> 15:24:09,432
karena mereka tidak perlu berada\di dalam pernyataan with

16147
15:24:10,389 --> 15:24:12,974
Ini hanya mempunyai efek\nmeyakinkan Anda, sang pemrogram

16148
15:24:12,974 --> 15:24:15,312
jangan mengacau, dan secara tidak sengaja\njangan menutup file Anda.

16149
15:24:15,311 --> 15:24:17,201
Faktanya, Anda mungkin\ningat, dari C, Valgrind

16150
15:24:17,201 --> 15:24:21,758
mungkin akan mengeluh padamu, jika kamu punya\n

16151
15:24:21,758 --> 15:24:24,341
Anda mungkin mengalami kebocoran memori\nas sebagai akibatnya. Kata kunci dengan

16152
15:24:24,341 --> 15:24:28,361
juga mengurus semua\nitu untuk Anda.

16153
15:24:28,362 --> 15:24:31,192
Bagaimana kalau mari kita lakukan, ingin melakukan ini.

16154
15:24:31,192 --> 15:24:34,482
Mari kita lakukan satu hal lagi.

16155
15:24:35,752 --> 15:24:38,802
Izinkan saya mengusulkan\nitu di ponsel atau laptop Anda

16156
15:24:38,802 --> 15:24:43,992
di sini, atau online, buka URL ini di sini,\n

16157
15:24:43,991 --> 15:24:46,811
Dan hanya untuk menunjukkan bahwa CSV ini\n

16158
15:24:46,811 --> 15:24:48,371
dan jika Anda pernah\nsuka menggunakan Google Formulir

16159
15:24:48,372 --> 15:24:50,082
atau mengelola grup pelajar,\atau sesuatu yang pernah Anda lakukan

16160
15:24:50,082 --> 15:24:52,272
mengumpulkan data melalui Google\nForms, Anda sebenarnya bisa

16161
15:24:52,271 --> 15:24:55,161
ekspor semua data itu melalui file CSV.

16162
15:24:55,161 --> 15:24:57,671
Jadi lanjutkan ke URL ini di sini.

16163
15:24:57,671 --> 15:24:59,472
Dan bagi Anda\nyang menonton sesuai permintaan nanti

16164
15:24:59,472 --> 15:25:01,061
akan menemukan bahwa formulir\nis tidak lagi berfungsi

16165
15:25:01,061 --> 15:25:02,551
karena kami hanya melakukan ini secara live.

16166
15:25:02,552 --> 15:25:04,302
Tapi itu akan mengarah ke\na Google Formulir itu

16167
15:25:04,302 --> 15:25:07,272
akan membiarkan semua orang memasukkan\njawaban mereka terhadap sebuah pertanyaan

16168
15:25:07,271 --> 15:25:10,182
seperti rumah apa yang\nkamu inginkan

16169
15:25:10,182 --> 15:25:13,152
semacam perkiraan\ntopi seleksi di Harry Potter.

16170
15:25:13,152 --> 15:25:17,202
Dan melalui formulir ini, apakah kami\nakan dapat mengekspor

16171
15:25:20,302 --> 15:25:24,132
Jadi, mari beri Anda waktu sejenak untuk melakukan itu.

16172
15:25:24,131 --> 15:25:26,981
Sebentar lagi, saya akan membagikan\nversi layar saya, yang mana

16173
15:25:26,982 --> 15:25:30,852
akan membiarkan saya\membuka file, formulir itu sendiri.

16174
15:25:30,851 --> 15:25:35,591
Dan sebentar lagi, saya akan beralih.

16175
15:25:35,591 --> 15:25:37,541
Oke, jadi ini sekarang\nformulir versi saya

16176
15:25:37,542 --> 15:25:40,811
di sini, kami memiliki lebih dari 200 tanggapan\n

16177
15:25:40,811 --> 15:25:44,531
rumah tempatmu berada, Gryffindor,\n

16178
15:25:44,531 --> 15:25:49,322
Jika saya membuka tanggapan, saya akan melihat semuanya\n

16179
15:25:49,322 --> 15:25:51,822
Jadi antarmuka pengguna grafis,\ndan kita bisa menelusurinya.

16180
15:25:51,822 --> 15:25:56,531
Dan menariknya,\n40% mahasiswa Harvard

16181
15:25:56,531 --> 15:26:00,745
ingin berada di Gryffindor, 22%\nin Slytherin, dan yang lainnya

16182
15:26:01,661 --> 15:26:03,791
Namun Anda mungkin menyadarinya,\njika pernah menggunakan Google Formulir

16183
15:26:03,792 --> 15:26:05,241
tautan Google Spreadsheet ini.

16184
15:26:05,241 --> 15:26:06,531
Jadi saya akan melanjutkan dan mengkliknya.

16185
15:26:06,531 --> 15:26:08,981
Dan itu akan terbuka secara otomatis,\n

16186
15:26:08,982 --> 15:26:11,812
Namun Anda juga dapat melakukan hal yang sama\ndengan Office 365.

16187
15:26:11,811 --> 15:26:14,561
Dan sekarang Anda melihat\ndata mentah sebagai spreadsheet.

16188
15:26:14,561 --> 15:26:19,421
Namun di Google Spreadsheets, jika saya membuka\n

16189
15:26:19,421 --> 15:26:23,322
perhatikan saya dapat mengunduh ini sebagai\nan file Excel, PDF, dan juga

16190
15:26:23,322 --> 15:26:25,432
CSV, nilai yang dipisahkan koma.

16191
15:26:25,432 --> 15:26:27,141
Jadi izinkan saya melanjutkan dan melakukan itu.

16192
15:26:27,141 --> 15:26:30,442
Itu memberi saya file di folder\nUnduhan di komputer saya.

16193
15:26:30,442 --> 15:26:34,492
Sekarang saya akan kembali\nke editor kode saya di sini.

16194
15:26:34,491 --> 15:26:36,701
Dan yang akan saya\nalakukan adalah mengunggah

16195
15:26:36,701 --> 15:26:40,841
file ini, dari folder\nUnduhan saya ke VS Code

16196
15:26:40,841 --> 15:26:43,131
sehingga kita bisa\nmelihatnya di sini.

16197
15:26:43,131 --> 15:26:44,741
Dan sekarang Anda dapat melihat file yang terbuka ini.

16198
15:26:44,741 --> 15:26:47,741
Dan saya akan menyingkat namanya,\n

16199
15:26:47,741 --> 15:26:52,511
Saya akan mengganti namanya menggunakan\n

16200
15:26:52,512 --> 15:26:55,889
Dan kemudian kita bisa melihat, di file, itu\n

16201
15:26:55,889 --> 15:26:57,972
rumah, di mana kamu mempunyai\nbanyak stempel waktu

16202
15:26:57,972 --> 15:27:00,792
saat orang mengisi formulir,\n

16203
15:27:00,792 --> 15:27:02,502
Lalu semua orang\nbeberapa saat yang lalu.

16204
15:27:02,502 --> 15:27:05,832
Dan nilai kedua, setelah masing-masing\n

16205
15:27:05,832 --> 15:27:08,562
Baiklah, izinkan saya melanjutkan\nmengimplementasi sebuah program

16206
15:27:08,561 --> 15:27:12,621
dalam file bernama Hogwarts.py,\nyang memproses data ini.

16207
15:27:12,622 --> 15:27:14,802
Jadi di Hogwarts.py, ayo\ntulis saja sebuah program

16208
15:27:14,802 --> 15:27:17,962
yang sekarang membaca CSV,\ndalam hal ini bukan buku telepon

16209
15:27:17,961 --> 15:27:19,932
tapi semua orang sedang memilah informasi.

16210
15:27:19,932 --> 15:27:21,972
Dan saya akan melanjutkan\naju dan Mengimpor CSV.

16211
15:27:21,972 --> 15:27:25,182
Dan misalkan saya ingin menjawab\npertanyaan yang masuk akal, mengabaikannya

16212
15:27:25,182 --> 15:27:28,991
fakta bahwa GUI atau grafis Google\n

16213
15:27:28,991 --> 15:27:31,841
Saya hanya ingin menghitung siapa\nyang akan berada di rumah mana.

16214
15:27:31,841 --> 15:27:36,161
Jadi izinkan saya memberikan kamus untuk diri saya sendiri\n

16215
15:27:37,302 --> 15:27:39,312
Dan izinkan saya membuat beberapa kunci terlebih dahulu.

16216
15:27:39,311 --> 15:27:44,021
Izinkan saya mengatakan Gryffindor\nakan diinisialisasi ke 0

16217
15:27:44,021 --> 15:27:48,341
Hufflepuff akan diinisialisasi\nke 0 juga, Ravenclaw

16218
15:27:49,722 --> 15:27:53,292
Dan terakhir, Slytherin\nakan diinisialisasi ke 0.

16219
15:27:53,292 --> 15:27:56,472
Jadi inilah contoh lain dari\na kamus, atau tabel hash

16220
15:27:56,472 --> 15:27:58,662
hanya menjadi\nbagian data yang bertujuan umum.

16221
15:27:58,661 --> 15:28:00,281
Anda dapat memiliki kunci dan nilai.

16222
15:28:00,281 --> 15:28:01,991
Kuncinya dalam hal ini adalah rumah.

16223
15:28:01,991 --> 15:28:05,021
Nilai awalnya nol,\ntapi saya akan menggunakan ini

16224
15:28:05,021 --> 15:28:10,121
alih-alih seperti empat variabel terpisah,\n

16225
15:28:12,252 --> 15:28:19,701
Dengan membuka Hogwarts.csv, dalam mode baca,\n

16226
15:28:19,701 --> 15:28:22,961
Saya hanya ingin membacanya, sebagai\nfile sebagai nama variabel saya.

16227
15:28:22,961 --> 15:28:26,051
Mari lanjutkan dan buat\na pembaca kali ini

16228
15:28:26,052 --> 15:28:31,232
yaitu menggunakan fungsi pembaca di\n

16229
15:28:31,232 --> 15:28:33,732
Saya akan melanjutkan dan mengabaikan\nbaris pertama file tersebut

16230
15:28:33,732 --> 15:28:36,792
karena, ingat, itu yang pertama\n

16231
15:28:36,792 --> 15:28:37,972
Saya ingin mendapatkan data sebenarnya.

16232
15:28:37,972 --> 15:28:40,061
Jadi fungsi selanjutnya ini\nhanyalah sebuah trik kecil

16233
15:28:40,061 --> 15:28:43,252
karena mengabaikan baris pertama file.

16234
15:28:44,322 --> 15:28:48,701
Untuk setiap baris lain di\npembaca, itu adalah baris demi baris

16235
15:28:48,701 --> 15:28:51,941
dapatkan rumah orang saat ini,\nyang ada di baris kurung 1.

16236
15:28:51,942 --> 15:28:54,735
Inilah yang dilakukan perpustakaan\npembaca CSV untuk kami.

16237
15:28:54,735 --> 15:28:56,652
Ini menangani semua\npembacaan file ini.

16238
15:28:56,652 --> 15:29:00,281
Ini mengetahui letak koma,\n

16239
15:29:00,281 --> 15:29:02,771
itu memberi Anda kembali daftar ukuran 2.

16240
15:29:02,771 --> 15:29:07,611
Dalam kurung 0 adalah cap waktu,\nin dalam kurung 1 adalah nama rumah.

16241
15:29:07,612 --> 15:29:11,351
Jadi, dalam kode saya, saya dapat mengatakan\nrumah sama dengan braket baris 1.

16242
15:29:11,351 --> 15:29:13,491
Saya tidak peduli dengan waktu\nstamp untuk program ini.

16243
15:29:13,491 --> 15:29:17,591
Lalu mari kita buka kamusku\n

16244
15:29:17,591 --> 15:29:23,891
ke dalamnya di lokasi rumah, oleh\n

16245
15:29:23,891 --> 15:29:26,802
Dan sekarang, di akhir\noblok kode ini

16246
15:29:26,802 --> 15:29:29,562
yang memiliki efek mengulangi\nover setiap baris file

16247
15:29:29,561 --> 15:29:31,991
memperbarui kamusku\nin di empat tempat berbeda

16248
15:29:31,991 --> 15:29:35,711
berdasarkan apakah seseorang mengetik\n

16249
15:29:36,222 --> 15:29:40,332
Dan perhatikan bahwa saya menggunakan nama\n

16250
15:29:40,332 --> 15:29:44,022
pada dasarnya mencapai\n kecil ini

16251
15:29:44,021 --> 15:29:46,541
1 ke 2, 2 ke\na 3, bukannya memiliki

16252
15:29:46,542 --> 15:29:48,522
seperti empat\nvariabel terpisah, yang akan saja

16253
15:29:48,521 --> 15:29:50,591
menjadi jauh lebih menjengkelkan untuk dipertahankan.

16254
15:29:50,591 --> 15:29:52,811
Di bagian bawah, ayo\ncetak saja hasilnya.

16255
15:29:52,811 --> 15:29:56,141
Untuk setiap rumah di\nrumah tersebut, lakukan iterasi

16256
15:29:56,141 --> 15:29:58,271
kunci yang ada\nsecara default di Python

16257
15:29:58,271 --> 15:30:01,151
ayo lanjutkan dan cetak\nf-string yang bertuliskan

16258
15:30:01,152 --> 15:30:05,982
rumah saat ini memiliki hitungan saat ini.

16259
15:30:05,982 --> 15:30:11,592
Dan hitungannya akan menjadi hasil pengindeksan\n

16260
15:30:13,332 --> 15:30:18,461
Jadi mari kita jalankan ini untuk meringkas\ndatanya, Hogwarts.py, 140 dari Anda

16261
15:30:18,461 --> 15:30:22,722
jawab Gryffindor, Hufflepuff 54,\n

16262
15:30:22,722 --> 15:30:25,092
Dan itu hanya cara\nokode saya sekarang, dan ini adalah, oh

16263
15:30:25,091 --> 15:30:28,748
Ya Tuhan, jauh lebih mudah daripada C, untuk\n

16264
15:30:28,749 --> 15:30:32,082
Dan salah satu alasan mengapa Python demikian\n

16265
15:30:32,082 --> 15:30:36,432
secara lebih umum, apakah itu sebenarnya\n

16266
15:30:37,461 --> 15:30:38,891
Dan izinkan saya membersihkannya sedikit.

16267
15:30:38,891 --> 15:30:41,682
Agak menjengkelkan karena\nSaya hanya harus tahu dan percaya

16268
15:30:41,682 --> 15:30:46,932
bahwa nama rumah ada dalam tanda kurung\n

16269
15:30:47,961 --> 15:30:53,051
Ada sesuatu yang disebut\nPembaca Kamus di perpustakaan CSV

16270
15:30:54,402 --> 15:30:58,991
Kapital D, kapital R, artinya\n

16271
15:30:58,991 --> 15:31:01,421
karena apa yang dilakukan pembaca\nkamus adalah itu

16272
15:31:01,421 --> 15:31:05,411
masih kembali ke saya setiap baris dari\n

16273
15:31:05,411 --> 15:31:09,081
tapi itu tidak hanya memberiku daftar\n

16274
15:31:10,482 --> 15:31:15,522
Dan ia menggunakan, sebagai kunci di dalamnya\n

16275
15:31:15,521 --> 15:31:17,981
untuk setiap baris di\nfile, maksudnya saja

16276
15:31:17,982 --> 15:31:20,472
itu membuat kode saya sedikit\nlebih mudah dibaca, karena

16277
15:31:20,472 --> 15:31:23,112
melakukan tipu muslihat kecil ini, tanda kurung 1

16278
15:31:23,112 --> 15:31:26,022
Saya dapat mengucapkan kutipan tanda kutip "Bracket\nHouse" dengan huruf kapital H

16279
15:31:26,021 --> 15:31:28,881
karena menggunakan huruf besar\npada Google Formulir itu sendiri.

16280
15:31:28,881 --> 15:31:31,319
Jadi kodenya sekarang\nhanya sedikit berbeda

16281
15:31:31,319 --> 15:31:34,362
tapi ini jauh lebih tangguh, terutama\n

16282
15:31:34,362 --> 15:31:36,912
dan saya memindahkan kolom\atau melakukan hal seperti itu

16283
15:31:36,911 --> 15:31:38,494
di mana angka-angkanya mungkin menjadi kacau.

16284
15:31:38,495 --> 15:31:41,781
Sekarang saya dapat menjalankannya di Hogwarts.py\n

16285
15:31:41,781 --> 15:31:46,481
Tapi sekarang saya tidak perlu khawatir tentang\n

16286
15:31:46,482 --> 15:31:51,402
Baiklah, ada pertanyaan tentang\nkemampuan tersebut.

16287
15:31:51,402 --> 15:31:53,921
Dan itu semacam teaser,\nuntuk beberapa manipulasi

16288
15:31:56,141 --> 15:32:00,076
Baiklah, jadi beberapa contoh\nakhir dan bakat, yang membuat penasaran

16289
15:32:00,076 --> 15:32:01,451
dengan apa yang dapat Anda lakukan dengan Python.

16290
15:32:01,451 --> 15:32:05,231
Saya akan benar-benar beralih\n

16291
15:32:05,232 --> 15:32:08,422
sehingga saya bisa menggunakan\naudio sedikit lebih efektif.

16292
15:32:08,421 --> 15:32:10,451
Jadi ini hanyalah jendela\nterminal pada Mac OS.

16293
15:32:10,451 --> 15:32:14,471
Saya sebelum kelas sudah menginstal sebelumnya\n

16294
15:32:14,472 --> 15:32:16,900
itu tidak akan berfungsi\nin VS Code di cloud

16295
15:32:16,900 --> 15:32:20,057
karena memerlukan audio yang\n

16296
15:32:20,057 --> 15:32:22,182
Namun saya akan melanjutkan\ndan menulis contoh di sini

16297
15:32:22,182 --> 15:32:26,080
yang melibatkan penulisan pidato berbasis\n

16298
15:32:26,733 --> 15:32:28,691
Dan saya akan melanjutkan\nmengimpor perpustakaan

16299
15:32:28,692 --> 15:32:32,230
itu, sekali lagi, saya pra-instal,\ndisebut teks ke ucapan Python

16300
15:32:32,230 --> 15:32:34,781
dan saya akan melanjutkan\ndan, sesuai dokumentasinya

16301
15:32:34,781 --> 15:32:39,400
berikan diriku mesin bicara, oleh\n

16302
15:32:40,601 --> 15:32:43,451
Saya kemudian akan menggunakan fungsi simpan\nengine ini

16303
15:32:43,451 --> 15:32:45,701
untuk melakukan sesuatu yang menyenangkan, seperti Halo dunia.

16304
15:32:45,701 --> 15:32:49,002
Lalu saya akan melanjutkan dan\n

16305
15:32:50,377 --> 15:32:52,002
Baiklah, saya akan menyimpan file ini.

16306
15:32:52,002 --> 15:32:53,502
Saya tidak menggunakan VS Code saat ini.

16307
15:32:53,502 --> 15:32:56,591
Saya menggunakan program populer lainnya\n

16308
15:32:56,591 --> 15:32:59,351
disebut Vim, yang merupakan\nprogram baris perintah

16309
15:32:59,351 --> 15:33:01,311
hanya di jendela hitam putih ini.

16310
15:33:01,311 --> 15:33:05,370
Izinkan saya menjalankan\nPython of Speech.py, dan--

16311
15:33:07,266 --> 15:33:09,641
DAVID J. MALAN: Baiklah, jadi\ini sedikit terkomputerisasi

16312
15:33:09,641 --> 15:33:12,635
namun ucapan itulah yang\ndisintesis dari contoh ini.

16313
15:33:12,635 --> 15:33:14,802
Mari kita ubah sedikit\nmenjadi lebih menarik.

16314
15:33:14,802 --> 15:33:16,010
Mari kita lakukan sesuatu seperti ini.

16315
15:33:16,010 --> 15:33:20,472
Mari kita tanyakan namanya kepada pengguna,\n

16316
15:33:20,472 --> 15:33:24,372
Lalu, mari kita gunakan F\n kecil

16317
15:33:24,372 --> 15:33:26,532
tapi Halo untuk nama orang itu.

16318
15:33:26,531 --> 15:33:30,792
Biarkan saya menyimpan file saya, jalankan\nPython of Speech.py, Enter.

16319
15:33:33,881 --> 15:33:36,161
DAVID J. MALAN: Baiklah,\njadi kita ucapkan nama saya Oke

16320
15:33:36,161 --> 15:33:38,828
mungkin kesulitan dengan\nnama yang berbeda, bergantung pada fonetiknya.

16321
15:33:38,828 --> 15:33:40,092
Tapi yang itu sepertinya baik-baik saja.

16322
15:33:40,091 --> 15:33:42,371
Mari kita lakukan hal lain dengan\nPython, dengan menggunakan cara serupa

16323
15:33:44,302 --> 15:33:49,062
Izinkan saya membahas contoh hari ini.

16324
15:33:49,061 --> 15:33:54,851
Dan saya akan masuk ke folder\n

16325
15:33:57,311 --> 15:33:59,891
Dan di folder ini, itu\nsudah saya tulis sebelumnya

16326
15:33:59,891 --> 15:34:02,400
ada beberapa file,\nDetect.py, Recognize.py

16327
15:34:02,400 --> 15:34:06,851
dan dua foto penuh,\nOffice.jpeg dan Toby.jpeg.

16328
15:34:06,851 --> 15:34:09,320
Jika Anda familiar dengan\nacaranya, berikut ini misalnya

16329
15:34:09,321 --> 15:34:11,331
adalah foto pemeran dari The Office di sini.

16330
15:34:12,821 --> 15:34:15,161
Misalkan saya ingin melakukan\nsesuatu yang sangat bergaya Facebook

16331
15:34:15,161 --> 15:34:17,381
tempat saya ingin menganalisis\nsemua wajah

16332
15:34:17,381 --> 15:34:19,391
atau mendeteksi semua wajah di sana.

16333
15:34:19,391 --> 15:34:21,461
Baiklah, izinkan saya melanjutkan\ndan menunjukkan sebuah program kepada Anda

16334
15:34:21,461 --> 15:34:24,400
Saya menulis sebelumnya,\nitu tidak terlalu panjang.

16335
15:34:24,400 --> 15:34:25,900
Sebagian besar sebenarnya adalah komentar.

16336
15:34:25,900 --> 15:34:27,161
Tapi mari kita lihat apa yang saya lakukan.

16337
15:34:27,161 --> 15:34:30,521
Saya mengimpor perpustakaan Bantal,\n

16338
15:34:30,521 --> 15:34:34,002
Saya mengimpor perpustakaan bernama face\n

16339
15:34:36,650 --> 15:34:39,480
Menurut dokumentasinya,\nAnda masuk ke perpustakaan itu

16340
15:34:39,480 --> 15:34:41,281
dan Anda memanggil fungsi\nyang disebut memuat gambar

16341
15:34:41,281 --> 15:34:43,891
file, untuk memuat sesuatu\nseperti Office.jpeg

16342
15:34:43,891 --> 15:34:46,561
dan kemudian Anda dapat menggunakan\nbaris kode seperti ini.

16343
15:34:46,561 --> 15:34:50,641
Panggil fungsi bernama face\nlocations, dengan meneruskan masukan gambar

16344
15:34:50,641 --> 15:34:53,641
dan Anda mendapatkan kembali daftar\semua wajah dalam gambar.

16345
15:34:53,641 --> 15:34:57,271
Dan kemudian di sini, perulangan for,\nyang mengulangi semua itu

16346
15:34:58,561 --> 15:35:01,320
Dan di dalam putaran ini, saya\nhanya melakukan sedikit tipu daya.

16347
15:35:01,321 --> 15:35:06,102
Saya mencari tahu bagian atas, kanan, bawah,\n

16348
15:35:06,101 --> 15:35:08,461
Lalu, gunakan\nbaris kode ini di sini

16349
15:35:08,461 --> 15:35:11,355
Saya menggunakan perpustakaan gambar itu,\nhanya untuk menggambar sebuah kotak.

16350
15:35:11,355 --> 15:35:12,480
Dan kodenya terlihat samar.

16351
15:35:12,480 --> 15:35:14,671
Sejujurnya, saya harus mencari\nini untuk menulisnya lagi.

16352
15:35:14,671 --> 15:35:17,171
Namun berdasarkan dokumentasi, ini\nhanya menggambar kotak kecil yang bagus

16353
15:35:18,131 --> 15:35:24,721
Jadi izinkan saya memperkecil tampilannya di sini,\n

16354
15:35:24,722 --> 15:35:29,912
Baiklah, itu menganalisis, menganalisis,\n

16355
15:35:30,902 --> 15:35:35,702
Dan inilah setiap wajah yang saya,\napa, 10 baris kode Python

16356
15:35:37,932 --> 15:35:40,711
Agaknya perpustakaan\sedang mencari sesuatu

16357
15:35:40,711 --> 15:35:43,622
mungkin tanpa topeng, yang mempunyai\ndua mata, satu hidung, dan satu mulut

16358
15:35:43,622 --> 15:35:45,942
dalam beberapa jenis susunan,\nbeberapa jenis pola.

16359
15:35:45,942 --> 15:35:48,961
Jadi tampaknya cukup dapat diandalkan, pada\n

16360
15:35:49,891 --> 15:35:52,182
Bagaimana jika kita ingin mencari\nseseorang yang spesifik

16361
15:35:52,182 --> 15:35:53,701
misalnya, seseorang yang\selalu diganggu.

16362
15:35:53,701 --> 15:35:55,284
Ya, kita bisa melakukan hal seperti ini.

16363
15:35:55,285 --> 15:35:59,582
Kenali.py, yang mengambil dua file\n

16364
15:35:59,582 --> 15:36:01,141
dari satu orang secara khusus.

16365
15:36:01,141 --> 15:36:03,421
Dan jika Anda mencoba\nmenemukan Toby di tengah keramaian

16366
15:36:03,421 --> 15:36:06,091
di sini saya menggabungkan programnya,\nmaaf, ini versinya

16367
15:36:06,091 --> 15:36:08,072
menggambar sebuah kotak di sekeliling wajah yang diberikan.

16368
15:36:08,072 --> 15:36:10,201
Di sini kita memiliki Toby yang teridentifikasi.

16369
15:36:10,741 --> 15:36:14,972
Karena program itu, Recognize.py,\n

16370
15:36:14,972 --> 15:36:19,322
tapi singkat cerita, ini juga\ndimuat sebagai masukan Toby.jpeg

16371
15:36:19,322 --> 15:36:21,932
untuk mengenali\nwajah tertentu.

16372
15:36:21,932 --> 15:36:24,872
Dan wajah tertentu itu adalah\nfoto yang sangat berbeda

16373
15:36:24,872 --> 15:36:29,492
tapi kelihatannya cukup mirip dengan\n

16374
15:36:29,491 --> 15:36:32,341
Mari kita lakukan satu lagi yang\nsedikit sensitif terhadap mikrofon.

16375
15:36:32,341 --> 15:36:37,171
Izinkan saya membahasnya, bagaimana kalau saya mendengarkan\n

16376
15:36:38,131 --> 15:36:40,901
Dan mari kita jalankan Python dari Listen0.py.

16377
15:36:40,902 --> 15:36:43,952
Saya akan mengetik seperti David.

16378
15:36:43,951 --> 15:36:47,041
Oh, maaf, tidak, aku akan--

16379
15:36:52,567 --> 15:36:53,942
Oh tidak, itu versi yang salah.

16380
15:36:53,942 --> 15:36:55,772
[Terkekeh] Oke, aku terlihat seperti orang idiot.

16381
15:36:58,832 --> 15:37:02,822
Dan jika saya mengucapkan selamat tinggal, saya sedang berbicara\n

16382
15:37:02,822 --> 15:37:05,112
Sekarang ia mendeteksi apa yang saya katakan di sini.

16383
15:37:05,112 --> 15:37:08,652
Jadi versi pertama dari program ini adalah\n

16384
15:37:08,652 --> 15:37:12,993
elif elif, dan itu hanya bertanya\n

16385
15:37:12,993 --> 15:37:14,951
Dan itu adalah kesalahan saya\ndengan contoh pertama.

16386
15:37:14,951 --> 15:37:17,881
Lalu, saya hanya memeriksa,\nis Halo dalam kata-kata pengguna?

16387
15:37:17,881 --> 15:37:19,339
Apakah bagaimana kabarmu dalam kata-kata pengguna?

16388
15:37:19,339 --> 15:37:20,673
Tidak melihatnya, tapi itu ada.

16389
15:37:20,673 --> 15:37:21,991
Apakah selamat tinggal ada dalam kata-kata pengguna?

16390
15:37:21,991 --> 15:37:25,801
Sekarang mari kita buat versi yang lebih keren, menggunakan\n

16391
15:37:33,241 --> 15:37:40,691
Mari kita lakukan versi 2 ini, itu\n

16392
15:37:43,682 --> 15:37:46,232
Oke, sekarang adalah kecerdasan buatan.

16393
15:37:46,232 --> 15:37:48,332
Sekarang mari kita lakukan sesuatu\nsedikit lebih menarik.

16394
15:37:48,332 --> 15:37:51,752
Versi ketiga dari program ini yang\n

16395
15:37:53,402 --> 15:37:55,322
Halo dunia, nama saya David.

16396
15:37:59,281 --> 15:38:02,521
Oke, jadi saat itu, ia tidak\hanya menganalisis apa yang saya katakan

16397
15:38:02,521 --> 15:38:04,451
tapi itu mencabut namaku dari situ.

16398
15:38:04,451 --> 15:38:07,002
Mari kita lakukan dua contoh terakhir.

16399
15:38:07,002 --> 15:38:09,671
Yang ini akan menghasilkan kode QR.

16400
15:38:09,671 --> 15:38:11,641
Biarkan saya melanjutkan dan\nmenulis sebuah program bernama

16401
15:38:11,641 --> 15:38:15,552
QR.py, itu sangat sederhana.

16402
15:38:15,552 --> 15:38:17,342
Izinkan saya mengimpor perpustakaan bernama OS.

16403
15:38:17,341 --> 15:38:19,752
Izinkan saya mengimpor perpustakaan bernama kode QR.

16404
15:38:19,752 --> 15:38:24,521
Biarkan saya mengambil gambar\ndi sini, itu QRcode.make.

16405
15:38:24,521 --> 15:38:27,961
Dan izinkan saya memberi Anda URL seperti\n

16406
15:38:31,561 --> 15:38:36,362
Biar saya ketik saja,\nagar saya tidak salah.

16407
15:38:36,362 --> 15:38:41,822
Oke, jadi jika sekarang saya menggunakan URL ini di sini,\nvideo di YouTube sedang dibuat

16408
15:38:41,822 --> 15:38:44,334
yakin saya belum membuat\nkesalahan apa pun, sekarang saya berangkat

16409
15:38:44,334 --> 15:38:46,292
untuk melanjutkan dan melakukan dua\nbaris kode dengan Python.

16410
15:38:46,292 --> 15:38:49,982
Pertama-tama saya akan menyimpannya sebagai\na file bernama QR.png

16411
15:38:49,982 --> 15:38:52,012
kode batang dua dimensi, kode QR.

16412
15:38:52,012 --> 15:38:53,762
Dan tentu saja, saya akan\nmenggunakan format ini.

16413
15:38:53,762 --> 15:39:00,312
Dan saya akan menggunakan OS.system\n

16414
15:39:00,311 --> 15:39:02,612
Dan jika Anda ingin mengeluarkan\nponsel Anda saat ini

16415
15:39:02,612 --> 15:39:08,792
kamu bisa melihat hasil barcode-ku,\n

16416
15:39:08,792 --> 15:39:10,307
Mudah-mudahan dari jauh itu bisa memindai.

16417
15:39:16,671 --> 15:39:18,981
Dan menurutku itu adalah jalur yang\pantas untuk diakhiri.

16418
15:40:43,362 --> 15:40:45,372
DAVID J. MALAN: Ini CS50.

16419
15:40:45,372 --> 15:40:48,702
Dan ini minggu ke 7,\nminggu Halloween.

16420
15:40:48,701 --> 15:40:51,851
Tentu saja, terima kasih khusus kepada Valerie\nCS50 dan ibunya

16421
15:40:51,851 --> 15:40:55,932
karena telah menciptakan acara yang sangat meriah ini\n

16422
15:40:55,932 --> 15:40:58,671
Hari ini, kita melanjutkan\nyang terakhir kali kita lakukan

16423
15:40:58,671 --> 15:41:00,521
yang, ingat, kami memperkenalkan Python.

16424
15:41:00,521 --> 15:41:03,581
Dan itulah transisi besar kami\ndari C, yang tiba-tiba terjadi sesuatu

16425
15:41:03,582 --> 15:41:06,192
mulai terlihat baru lagi,\nmungkin secara sintaksis.

16426
15:41:06,192 --> 15:41:09,732
Namun, mungkin segalanya\nmudah-mudahan mulai terasa lebih mudah.

16427
15:41:09,732 --> 15:41:13,422
Nah, dengan demikian, kumpulan masalah\n

16428
15:41:14,722 --> 15:41:18,432
Namun semoga Anda sudah mulai menghargai\n

16429
15:41:19,631 --> 15:41:22,301
Anda mendapatkan lebih banyak manfaat\ndengan bahasa itu sendiri.

16430
15:41:22,302 --> 15:41:24,792
Dan itu akan sangat\nberguna selama beberapa minggu mendatang

16431
15:41:24,792 --> 15:41:29,322
saat kami bertransisi lebih jauh ke pengenalan\n

16432
15:41:29,322 --> 15:41:31,612
pemrograman web minggu depan\ndan minggu berikutnya.

16433
15:41:31,612 --> 15:41:34,241
Sehingga pada akhir semester, dan mungkin\nbahkan untuk proyek akhir Anda

16434
15:41:34,241 --> 15:41:37,211
Anda benar-benar sedang membangun\nsesuatu dari awal

16435
15:41:37,211 --> 15:41:40,756
menggunakan semua berbagai\nalat ini secara bersamaan.

16436
15:41:40,756 --> 15:41:42,881
Jadi sebelum kita melakukannya,\nhari ini, mari kita pertimbangkan

16437
15:41:42,881 --> 15:41:47,951
apa yang sebenarnya tidak bisa kami lakukan\ndo minggu lalu, yang sebenarnya bisa dilakukan

16438
15:41:47,951 --> 15:41:50,831
membuat dan menyimpan data sendiri.

16439
15:41:50,832 --> 15:41:56,052
Di Python, kami telah bermain-main dengan\n

16440
15:41:56,052 --> 15:41:59,152
Dan Anda sudah dapat\nmembaca dalam CSV dari disk

16441
15:41:59,152 --> 15:42:03,222
bisa dikatakan, yaitu, dari file\n

16442
15:42:03,222 --> 15:42:06,796
Namun kami belum memulainya\n

16443
15:42:06,796 --> 15:42:09,671
Dan itu merupakan batasan yang sangat besar, karena\n

16444
15:42:09,671 --> 15:42:11,629
sejauh ini kita telah melakukannya dengan\na beberapa pengecualian

16445
15:42:11,629 --> 15:42:14,891
telah melibatkan saya dalam memberikan masukan\n

16446
15:42:14,891 --> 15:42:16,849
Tapi kemudian tidak terjadi apa-apa.

16447
15:42:16,849 --> 15:42:18,641
Ini akan hilang saat\nprogram ditutup

16448
15:42:18,641 --> 15:42:20,752
karena hanya\ndisimpan di memori.

16449
15:42:20,752 --> 15:42:24,432
Namun hari ini, kami akan mulai fokus pada semuanya\n

16450
15:42:24,432 --> 15:42:27,442
yaitu, menyimpan berbagai\nin file dan folder

16451
15:42:27,442 --> 15:42:30,281
sehingga Anda dapat\nmenulis program yang mengingatnya

16452
15:42:30,281 --> 15:42:31,961
apa yang dilakukan manusia terakhir kali.

16453
15:42:31,961 --> 15:42:34,661
Dan pada akhirnya, Anda\nbenarnya dapat membuat aplikasi seluler atau web

16454
15:42:34,661 --> 15:42:37,391
yang benar-benar mulai bertumbuh, dan\ngbertumbuh, serta mengembangkan kumpulan datanya

16455
15:42:37,391 --> 15:42:40,991
seperti yang mungkin terjadi jika Anda mendapatkan lebih banyak dan\n

16456
15:42:40,991 --> 15:42:44,741
Maka, untuk bermain dengan kemampuan baru ini\n

16457
15:42:44,741 --> 15:42:47,559
ayo lanjutkan dan\nkumpulkan saja beberapa data.

16458
15:42:47,559 --> 15:42:49,391
Faktanya, Anda\ndi sini secara langsung, jika Anda

16459
15:42:49,391 --> 15:42:52,302
ingin mengambil URL ini\di luar ponsel atau laptop Anda

16460
15:42:52,302 --> 15:42:54,402
itu akan mengarahkan\nAnda ke Google Formulir.

16461
15:42:54,402 --> 15:42:59,472
Dan Google Formulir itu akan\n

16462
15:43:00,661 --> 15:43:02,411
Dan ia akan meminta\nAnda untuk mengkategorikannya

16463
15:43:02,411 --> 15:43:06,611
menurut genre, misalnya komedi,\n

16464
15:43:07,802 --> 15:43:09,552
Dan ini berguna,\nkarena jika Anda pernah

16465
15:43:09,552 --> 15:43:12,862
menggunakan Google Formulir sebelumnya, atau\n

16466
15:43:12,862 --> 15:43:15,612
ini adalah mekanisme yang sangat berguna di\n

16467
15:43:15,612 --> 15:43:19,342
dan terakhir, memasukkan\nit ke dalam formulir spreadsheet.

16468
15:43:19,341 --> 15:43:23,502
Jadi ini adalah screenshot\nbentuknya untuk anda

16469
15:43:23,502 --> 15:43:26,421
di sini secara langsung atau menonton di\nZoom sedang diisi.

16470
15:43:26,421 --> 15:43:27,761
Itu hanya menanyakan dua pertanyaan.

16471
15:43:27,762 --> 15:43:29,891
Apa judul\nacara TV favorit Anda?

16472
15:43:29,891 --> 15:43:34,811
Dan apa saja satu atau beberapa genre\nyang termasuk dalam acara TV Anda?

16473
15:43:34,811 --> 15:43:38,201
Dan saya akan lanjutkan dan\nberputar sekarang ke tampilan

16474
15:43:38,201 --> 15:43:41,008
yang dapat saya lihat sebagai\n

16475
15:43:41,008 --> 15:43:42,550
hanyalah sebuah spreadsheet Google.

16476
15:43:42,550 --> 15:43:45,050
Google Formulir memiliki\nfitur bagus ini, jika Anda belum pernah menyadarinya

16477
15:43:45,050 --> 15:43:47,991
yang memungkinkan Anda mengekspor\ndata Anda ke Google Spreadsheet.

16478
15:43:47,991 --> 15:43:50,472
Lalu dari sana, kita\ndapat mengambil file tersebut

16479
15:43:50,472 --> 15:43:52,842
dan mengunduhnya ke\Mac saya yang sekarang atau PC Anda sendiri

16480
15:43:52,841 --> 15:43:55,661
agar kita bisa bermain-main\n

16481
15:43:55,661 --> 15:43:57,911
Jadi sebenarnya, izinkan saya\naju dan geser ke atas

16482
15:43:57,911 --> 15:44:01,881
untuk ini, Google Spreadsheet langsung.

16483
15:44:01,881 --> 15:44:05,831
Dan Anda mungkin akan melihat, mungkin, secara keseluruhan\n

16484
15:44:06,701 --> 15:44:09,161
Dan jika kita terus menggulir, dan\nsmenggulir, dan menggulir--

16485
15:44:10,631 --> 15:44:12,771
Ini dia, sudah mencapai 50 lebih.

16486
15:44:12,771 --> 15:44:15,761
Jika Anda memerlukan URL itu lagi\ndi sini, jika Anda baru saja mendengarkannya

16487
15:44:15,762 --> 15:44:18,192
Anda dapat membuka URL ini di sini.

16488
15:44:18,192 --> 15:44:21,102
Dan sebentar lagi,\nkita akan memiliki banyak data

16489
15:44:21,101 --> 15:44:24,792
yang dengannya kita bisa mulai bereksperimen.

16490
15:44:24,792 --> 15:44:26,412
Saya akan memberi Anda waktu sebentar di sana.

16491
15:44:33,760 --> 15:44:35,302
Biarkan aku bertahan di sana lebih lama lagi.

16492
15:44:35,302 --> 15:44:36,760
Oke, kami punya lebih dari 100 kiriman.

16493
15:44:37,732 --> 15:44:40,612
Bagus, bahkan lebih banyak lagi yang masuk sekarang.

16494
15:44:40,612 --> 15:44:42,232
Dan kita bisa melihatnya datang secara langsung.

16495
15:44:42,232 --> 15:44:44,092
Di sini, izinkan saya beralih\nkembali ke spreadsheet.

16496
15:44:44,091 --> 15:44:46,431
Daftarnya terus bertambah,\nbertambah, dan terus bertambah.

16497
15:44:48,241 --> 15:44:51,831
izinkan saya memberi Carter waktu untuk\nmembantu saya mengekspornya secara real-time.

16498
15:44:51,832 --> 15:44:54,982
Carter, beri tahu saja\njika itu masuk akal bagi saya

16499
15:44:58,222 --> 15:45:00,482
Baiklah, dan saya akan mulai\nmelakukannya perlahan-lahan.

16500
15:45:00,482 --> 15:45:03,062
Jadi saya akan pergi ke File\n

16501
15:45:03,061 --> 15:45:05,451
Unduh-- Anda dapat mengunduh keseluruhan\n

16502
15:45:05,451 --> 15:45:07,401
Namun yang lebih sederhana, dan yang\nkita akan mulai mainkan di sini

16503
15:45:08,972 --> 15:45:12,351
Jadi file CSV yang kami gunakan\nminggu terakhir ini, mengapa berguna?

16504
15:45:12,351 --> 15:45:15,531
Sekarang Anda sudah bermain dengan mereka\n

16505
15:45:15,531 --> 15:45:20,601
apa kegunaan file CSV versus\n

16506
15:45:26,199 --> 15:45:28,072
HADIRIN: Karena itu hanya file teks?

16507
15:45:28,072 --> 15:45:29,947
DAVID J. MALAN: Oke, jadi\npenyimpanannya menarik.

16508
15:45:29,947 --> 15:45:33,052
File teks sederhana dengan ASCII atau\n

16509
15:45:36,525 --> 15:45:37,860
DAVID J. MALAN: Ya, kata yang bagus.

16510
15:45:37,860 --> 15:45:40,101
Ini hanya format teks\nsederhana, namun menggunakan konvensi

16511
15:45:40,101 --> 15:45:43,671
seperti koma, Anda dapat mewakili\n

16512
15:45:43,671 --> 15:45:45,771
garis miring terbalik berakhir tanpa terlihat\nat di akhir baris Anda

16513
15:45:45,771 --> 15:45:47,341
Anda dapat membuat ide baris.

16514
15:45:47,341 --> 15:45:49,341
Jadi ini adalah cara\nyang sangat sederhana untuk mengimplementasikannya

16515
15:45:49,341 --> 15:45:51,951
kita mungkin menyebutnya database file datar.

16516
15:45:51,951 --> 15:45:54,201
Itu adalah cara menyimpan\ndata di sebuah flat

16517
15:45:54,201 --> 15:45:57,651
file yang sangat sederhana yang hanya\nteks ASCII atau Unicode murni.

16518
15:45:57,652 --> 15:46:00,682
Dan yang lebih menarik, saya berani\nmengatakannya dengan file CSV

16519
15:46:02,203 --> 15:46:04,161
Sesuatu bersifat portabel dalam\ndunia komputasi

16520
15:46:04,161 --> 15:46:07,251
jika itu berarti Anda dapat menggunakannya di Mac\n

16521
15:46:08,091 --> 15:46:10,822
Dan portabilitasnya bagus karena jika\n

16522
15:46:10,822 --> 15:46:13,101
akan ada banyak\norang di ruangan ini dan online

16523
15:46:13,101 --> 15:46:15,531
siapa yang tidak dapat mengunduhnya karena\n

16524
15:46:16,281 --> 15:46:21,021
Atau jika mereka memiliki Mac, atau jika\n

16525
15:46:21,021 --> 15:46:22,951
pengguna PC mungkin tidak\ndapat mengunduhnya.

16526
15:46:22,951 --> 15:46:25,141
Jadi CSV memang sangat portabel.

16527
15:46:25,141 --> 15:46:28,281
Jadi saya akan melanjutkan dan\nmengunduh, sederhananya, CSV

16528
15:46:29,781 --> 15:46:32,301
Itu akan memasukkannya ke\nfolder Unduhan Mac saya sendiri.

16529
15:46:32,302 --> 15:46:36,802
Dan izinkan saya melanjutkan di sini, dan sebentar lagi

16530
15:46:36,802 --> 15:46:40,252
Karena sebenarnya download\nit dengan nama yang cukup besar.

16531
15:46:40,252 --> 15:46:43,461
Dan beri saya waktu sebentar saja,\dan Anda pasti akan melihatnya

16532
15:46:43,461 --> 15:46:46,551
di Mac saya, saya memiliki file\nbernama favorit.csv.

16533
15:46:46,552 --> 15:46:48,092
Saya menyingkat nama itu dengan sangat cepat.

16534
15:46:48,091 --> 15:46:54,021
Dan sekarang yang akan saya lakukan adalah pergi\n

16535
15:46:54,021 --> 15:46:55,822
Saya akan membuka File Explorer saya.

16536
15:46:55,822 --> 15:46:59,961
Dan jika saya memperkecil jendela saya di sini untuk\n

16537
15:46:59,961 --> 15:47:03,322
adalah Anda cukup menarik dan melepas\n

16538
15:47:03,322 --> 15:47:06,002
Dan voila, itu akan\otomatis mengunggahnya untuk Anda.

16539
15:47:06,002 --> 15:47:08,601
Jadi izinkan saya melanjutkan dan menampilkan\nlayar penuh di sini, tutup Explorer saya

16540
15:47:08,601 --> 15:47:10,461
tutup sementara jendela Terminal saya.

16541
15:47:10,461 --> 15:47:14,061
Dan di sini Anda akan melihat file\nCSV, favorit.csv.

16542
15:47:14,061 --> 15:47:16,731
Dan baris pertama, menurut\nkonvensi, memiliki apa saja

16543
15:47:16,732 --> 15:47:20,062
kolomnya ada di Google\nSpreadsheets, atau Office 365

16544
15:47:20,061 --> 15:47:23,961
di Excel online, stempel waktu,\nkoma, judul, koma, genre.

16545
15:47:23,961 --> 15:47:25,731
Lalu, kita memiliki stempel waktu,\nyang menunjukkan

16546
15:47:25,732 --> 15:47:27,064
ketika orang mulai mengirimkan.

16547
15:47:27,063 --> 15:47:29,271
Sepertinya beberapa orang\nsangat ingin mendapatkannya

16548
15:47:30,771 --> 15:47:34,682
Lalu, Anda akan mendapatkan\njudul berikutnya, setelah koma.

16549
15:47:34,682 --> 15:47:37,491
Namun ada semacam\nkeingintahuan setelah itu.

16550
15:47:37,491 --> 15:47:40,851
Terkadang saya melihat genre\nseperti komedi, komedi, komedi

16551
15:47:40,851 --> 15:47:45,211
tapi terkadang seperti kriminal, koma,\n

16552
15:47:45,891 --> 15:47:47,811
Dan hal-hal itu dikutip.

16553
15:47:47,811 --> 15:47:49,521
Namun, saya tidak membuat kutipan apa pun.

16554
15:47:49,521 --> 15:47:51,141
Anda mungkin tidak mengetikkan tanda kutip apa pun.

16555
15:47:51,141 --> 15:47:55,521
Dari mana asal kutipan\ndalam file CSV ini?

16556
15:47:55,521 --> 15:47:56,991
Mengapa mereka ada di sana jika kita mengambil kesimpulan?

16557
15:48:00,682 --> 15:48:03,650
DAVID J. MALAN: Ya, jadi Anda\nmemiliki kotak sudut, jika Anda mau.

16558
15:48:03,650 --> 15:48:05,692
Karena jika Anda menggunakan\nkoma, seperti yang Anda jelaskan

16559
15:48:05,692 --> 15:48:09,622
untuk memisahkan data Anda ke dalam kolom yang\nare efektif

16560
15:48:09,622 --> 15:48:12,352
Anda telah membuat diri Anda terpojok\na jika data Anda sebenarnya

16561
15:48:13,919 --> 15:48:16,461
Jadi apa yang telah dilakukan Google, apa\nMicrosoft lakukan, apa yang dilakukan Apple

16562
15:48:16,461 --> 15:48:19,671
adalah, mereka mengutip string\nteks apa pun yang mereka miliki

16563
15:48:19,671 --> 15:48:23,902
memiliki koma sehingga\nsekarang menjadi koma tata bahasa Inggris

16564
15:48:26,072 --> 15:48:28,741
Jadi ini adalah cara untuk melarikan diri\ndata Anda, jika Anda mau.

16565
15:48:28,741 --> 15:48:31,411
Dan melarikan diri berarti memanggil\nsimbol dengan cara khusus

16566
15:48:31,411 --> 15:48:33,978
jadi tidak disalahartikan\nas sesuatu yang lain.

16567
15:48:33,978 --> 15:48:35,811
Baiklah, jadi ini\tidak cukup untuk mengatakan bahwa kita sekarang

16568
15:48:35,811 --> 15:48:39,322
memiliki semua data yang kami\n

16569
15:48:39,322 --> 15:48:41,182
mulai memanggil database file datar.

16570
15:48:41,182 --> 15:48:44,572
Jadi misalkan saya ingin\nmulai memanipulasi data ini

16571
15:48:44,572 --> 15:48:47,451
dan pada akhirnya saya ingin menyimpannya,\ntentu saja, dalam format CSV ini.

16572
15:48:47,451 --> 15:48:49,881
Bagaimana saya bisa\nmulai membaca data ini

16573
15:48:49,881 --> 15:48:52,292
mungkin membersihkannya, mungkin\ndo melakukan beberapa analisis mengenainya

16574
15:48:52,292 --> 15:48:55,912
dan mencari tahu, apa yang paling penting\n

16575
15:48:55,911 --> 15:48:57,531
di sini selama beberapa menit terakhir?

16576
15:48:57,531 --> 15:48:59,612
Baiklah, izinkan saya melanjutkan dan menutup ini.

16577
15:48:59,612 --> 15:49:04,311
Kalau begitu, izinkan saya membukanya,\n

16578
15:49:04,311 --> 15:49:07,311
Dan mari kita buat kode file\nbernama favorit.py.

16579
15:49:07,311 --> 15:49:11,451
Dan mari kita lanjutkan dan memulai secara berulang\n

16580
15:49:11,451 --> 15:49:13,171
dan mencetak apa yang ada di dalamnya.

16581
15:49:13,171 --> 15:49:16,671
Jadi, Anda mungkin ingat bahwa kami dapat melakukannya\n

16582
15:49:16,671 --> 15:49:20,332
untuk memberi saya beberapa fungsi\nmembaca CSV.

16583
15:49:20,332 --> 15:49:24,952
Kalau begitu, saya bisa melanjutkan dan melakukan sesuatu\n

16584
15:49:24,951 --> 15:49:27,621
yang ingin saya buka dalam mode baca.

16585
15:49:27,622 --> 15:49:29,332
Quote, unquote, "r" artinya membacanya.

16586
15:49:29,332 --> 15:49:31,942
Dan kemudian, saya dapat mengatakan sebagai\nfile, atau nama apa pun lainnya

16587
15:49:31,942 --> 15:49:35,012
agar variabel mengatakan bahwa\nSaya ingin membuka file ini

16588
15:49:35,012 --> 15:49:37,822
dan pada dasarnya menyimpan semacam\n

16589
15:49:38,942 --> 15:49:42,262
Lalu, saya bisa memberi diri saya\npembaca, dan saya bisa mengatakan csv.reader

16590
15:49:42,262 --> 15:49:43,739
meneruskan file itu sebagai input.

16591
15:49:43,739 --> 15:49:45,322
Dan inilah keajaiban perpustakaan itu.

16592
15:49:45,322 --> 15:49:48,531
Ini berkaitan dengan proses pembukaan\n

16593
15:49:48,531 --> 15:49:51,771
mengembalikan sesuatu yang Anda bisa\n

16594
15:49:51,771 --> 15:49:55,851
Saya ingin melewatkan baris pertama,\ndan ingat bahwa saya bisa melakukan ini.

16595
15:49:55,851 --> 15:49:59,006
Selanjutnya, pembaca, inilah trik kecil ini\n

16596
15:49:59,006 --> 15:50:00,381
Karena yang pertama itu spesial.

16597
15:50:00,381 --> 15:50:02,752
Di situ tertulis stempel waktu, judul, genre.

16598
15:50:02,752 --> 15:50:04,741
Itu bukan datamu, itu milikku.

16599
15:50:04,741 --> 15:50:07,222
Namun ini berarti sekarang\nSaya telah melewatkan baris pertama itu.

16600
15:50:07,222 --> 15:50:10,042
Segala sesuatu setelahnya akan\nmenjadi judul pertunjukan

16601
15:50:10,042 --> 15:50:11,601
yang kalian semua sukai, jadi izinkan aku melakukan ini.

16602
15:50:11,601 --> 15:50:16,432
Untuk baris di pembaca, mari\naju dan cetak judulnya

16603
15:50:16,432 --> 15:50:18,201
dari acara yang Anda masing-masing ketik.

16604
15:50:18,201 --> 15:50:22,341
Bagaimana cara mendapatkan judul\nacara yang Anda ketikkan masing-masing?

16605
15:50:22,341 --> 15:50:24,081
Itu ada di suatu tempat di dalam baris.

16606
15:50:26,131 --> 15:50:28,252
Jadi apa yang ingin saya\nketik selanjutnya untuk mendapatkannya

16607
15:50:28,252 --> 15:50:34,262
pada judul saat ini\nhanya sebagai pemeriksaan singkat di sini?

16608
15:50:34,262 --> 15:50:36,692
Apa yang ingin saya ketik\nget di judul baris

16609
15:50:36,692 --> 15:50:40,862
perlu diingat, sekali lagi, bahwa itu\nadalah stempel waktu, judul, genre?

16610
15:50:42,237 --> 15:50:44,252
DAVID J. MALAN: Jadi baris\nbracket 1 akan memberi saya

16611
15:50:44,252 --> 15:50:47,982
kolom kedua, 0 indeks, yaitu\n

16612
15:50:47,982 --> 15:50:49,862
Jadi program ini belum\nbegitu menarik

16613
15:50:49,862 --> 15:50:52,711
tapi ini cara yang cepat dan kotor untuk\n

16614
15:50:53,161 --> 15:50:55,328
Biarkan saya melakukan\nsedikit pemeriksaan di sini

16615
15:50:55,328 --> 15:50:57,721
dan lihat apakah berisi\ndata yang menurut saya berisi.

16616
15:50:57,722 --> 15:50:59,832
Biarkan saya memaksimalkan jendela Terminal saya di sini.

16617
15:50:59,832 --> 15:51:03,152
Biarkan saya menjalankan Python of\nfavorites.py, tekan Enter.

16618
15:51:03,152 --> 15:51:07,862
Dan sekarang Anda akan melihat daftar\ntekstual murni dari semua acara

16619
15:51:09,902 --> 15:51:12,421
Tapi apa yang menarik dari hal itu?

16620
15:51:12,421 --> 15:51:15,301
Mengesampingkan acara tertentu,\nmengesampingkan penilaian terhadap orang lain

16621
15:51:15,302 --> 15:51:19,982
Selera TV, apa yang menarik atau\nperlu diperhatikan dari datanya

16622
15:51:19,982 --> 15:51:23,432
mungkin menimbulkan beberapa masalah bagi kami\n

16623
15:51:23,432 --> 15:51:25,082
dan cari tahu apa yang paling populer?

16624
15:51:25,082 --> 15:51:27,932
Berapa banyak orang yang menyukai ini atau itu?

16625
15:51:29,493 --> 15:51:32,800
AUDIENCE: Kesalahan pengguna [Tak terdengar].

16626
15:51:32,800 --> 15:51:34,842
DAVID J. MALAN: Ya,\nmungkin ada kesalahan pengguna

16627
15:51:34,841 --> 15:51:38,141
atau hanya perbedaan gaya saja\n

16628
15:51:42,311 --> 15:51:45,591
Mari kita lihat apakah saya dapat melihat\contoh berikut pada layar di sini.

16629
15:51:45,591 --> 15:51:49,681
Ya, jadi teman di sini adalah segalanya\n

16630
15:51:50,482 --> 15:51:51,712
Kita bisa menguranginya.

16631
15:51:51,711 --> 15:51:54,822
Namun ini hanyalah contoh kecil\ndimana data berada di dunia nyata

16632
15:51:56,099 --> 15:51:57,641
Dan itu mungkin bukan salah ketik.

16633
15:51:57,641 --> 15:52:02,928
Itu hanya seseorang yang tidak terlalu peduli\n

16634
15:52:02,928 --> 15:52:05,261
Pengguna Anda akan mengetik\napa yang akan mereka ketik.

16635
15:52:05,262 --> 15:52:08,922
Jadi mari kita lihat apakah sekarang kita tidak bisa mulai\nmendapatkan data yang lebih spesifik

16636
15:52:08,921 --> 15:52:10,841
dan bahkan mungkin membersihkan\nsebagian data ini.

16637
15:52:10,841 --> 15:52:15,911
Biarkan saya kembali ke file saya\nbernama favorit.py di sini

16638
15:52:15,911 --> 15:52:19,691
dan mari kita lakukan sesuatu\n

16639
15:52:19,692 --> 15:52:23,412
Daripada menjadi pembaca, ingatlah itu di sana\n

16640
15:52:23,411 --> 15:52:25,091
hanya sedikit lebih ramah pengguna.

16641
15:52:25,091 --> 15:52:30,011
Dan itu berarti saya bisa mengetik di kamus\n

16642
15:52:30,012 --> 15:52:36,012
Tapi sekarang, saat saya mengulanginya\n

16643
15:52:36,012 --> 15:52:39,402
Saat menggunakan DictReader alih-alih\npembaca, ingat, dan ini

16644
15:52:39,402 --> 15:52:43,031
hanyalah kekhasan\nperpustakaan CSV

16645
15:52:43,031 --> 15:52:47,871
ini memberi saya kembali, bukan daftar\nsel, melainkan apa

16646
15:52:47,872 --> 15:52:50,292
mana yang sedikit lebih\ramah pengguna bagi saya?

16647
15:52:53,802 --> 15:52:56,202
Sekarang saya dapat menggunakan tanda kurung buka,\ntanda kutip, dan judul.

16648
15:52:56,201 --> 15:52:59,112
Karena apa yang kembali\nsekarang adalah objek dict

16649
15:52:59,112 --> 15:53:02,351
kamus yang memiliki kunci dan nilai.

16650
15:53:02,351 --> 15:53:04,402
Kuncinya adalah\njudul kolom.

16651
15:53:04,402 --> 15:53:06,741
Nilai-nilai yang merupakan\ndata yang benar-benar saya pedulikan.

16652
15:53:06,741 --> 15:53:09,371
Jadi ini sedikit\nlebih baik karena, pertama, memang demikian

16653
15:53:09,372 --> 15:53:12,672
jauh lebih jelas bagi saya,\n

16654
15:53:13,391 --> 15:53:15,652
Saya tidak ingat\nkolom apa judulnya.

16655
15:53:17,232 --> 15:53:18,792
Itu adalah sesuatu yang\nakan Anda lupakan seiring berjalannya waktu.

16656
15:53:18,792 --> 15:53:21,851
Dan Tuhan melarang seseorang mengubah\n

16657
15:53:21,851 --> 15:53:24,731
kolom di Excel, atau Apple\nNumbers, atau Google Spreadsheets.

16658
15:53:24,732 --> 15:53:27,320
Itu akan merusak semua\nindeks numerik Anda.

16659
15:53:27,319 --> 15:53:29,112
Jadi pembaca\nkamus bisa dibilang adil

16660
15:53:29,112 --> 15:53:32,652
desain yang lebih baik karena\nlebih tahan terhadap perubahan

16661
15:53:32,652 --> 15:53:34,302
dan potensi kesalahan seperti itu.

16662
15:53:34,302 --> 15:53:37,902
Sekarang efek dari perubahan ini tidak\n

16663
15:53:37,902 --> 15:53:42,162
Jika saya menjalankan Python dari favorites.py,\n

16664
15:53:42,161 --> 15:53:46,631
Tapi sekarang saya belum membuat asumsi apa pun\n

16665
15:53:48,762 --> 15:53:51,672
Baiklah, mari kita lanjutkan dan sekarang\nfilter beberapa duplikat.

16666
15:53:51,671 --> 15:53:55,301
Karena ada banyak kesamaan\n

16667
15:53:55,302 --> 15:53:58,002
lihat apakah kami tidak dapat memfilter duplikat.

16668
15:53:58,002 --> 15:54:04,241
Jika saya membaca file CSV dari atas ke bawah,\n

16669
15:54:04,241 --> 15:54:06,991
Saya ingin menerapkan untuk\nmemfilter duplikat?

16670
15:54:06,991 --> 15:54:10,241
Ini tidak akan sesederhana\n

16671
15:54:10,241 --> 15:54:12,641
Saya harus membangun ini.

16672
15:54:12,641 --> 15:54:15,972
Namun logikanya, jika Anda membaca\na file dari atas ke bawah

16673
15:54:15,972 --> 15:54:20,202
bagaimana Anda melakukannya, dalam\nPython atau konteks apa pun

16674
15:54:20,201 --> 15:54:23,381
menghilangkan nilai duplikat?

16675
15:54:31,951 --> 15:54:35,072
Saya dapat menggunakan daftar dan saya dapat\menambahkan setiap judul ke dalam daftar

16676
15:54:35,072 --> 15:54:38,411
tapi periksa dulu apakah saya memasukkan\nini ke dalam daftar sebelumnya.

16677
15:54:38,411 --> 15:54:40,481
Jadi mari kita coba\nsesuatu seperti itu.

16678
15:54:40,482 --> 15:54:43,682
Biarkan saya melanjutkan dan membuat variabel\n

16679
15:54:43,682 --> 15:54:46,682
Saya akan menyebutnya judul, misalnya,\ninisialisasi ke daftar kosong

16680
15:54:46,682 --> 15:54:48,391
braket terbuka, braket tertutup.

16681
15:54:48,391 --> 15:54:53,201
Dan kemudian, di dalam loop saya\ndi sini, alih-alih mencetaknya

16682
15:54:53,201 --> 15:54:54,971
mari kita mulai mengambil keputusan.

16683
15:54:54,972 --> 15:55:04,673
Jadi jika judul\nbaris saat ini ada di daftar judul

16684
15:55:04,673 --> 15:55:05,881
Saya tidak ingin menaruhnya di sana.

16685
15:55:05,881 --> 15:55:08,923
Dan sebenarnya, izinkan saya membalikkan logikanya\n

16686
15:55:08,923 --> 15:55:13,531
Jadi kalau bukan itu\njudul braket baris dalam judul

16687
15:55:13,531 --> 15:55:21,542
lalu, lanjutkan dan lakukan sesuatu seperti\n

16688
15:55:21,542 --> 15:55:24,512
Dan ingat bahwa kita melihat\n.penambahan sekitar seminggu yang lalu

16689
15:55:24,512 --> 15:55:27,042
yang memungkinkan Anda\nmenambahkannya ke daftar saat ini.

16690
15:55:27,042 --> 15:55:30,152
Lalu, apa yang bisa kulakukan pada\nakhirnya, setelah aku selesai

16691
15:55:30,152 --> 15:55:31,802
selesai membaca seluruh file?

16692
15:55:31,802 --> 15:55:35,162
Mengapa saya tidak melanjutkan dan\nmengatakan, untuk judul dalam judul

16693
15:55:35,161 --> 15:55:38,072
lanjutkan dan cetak\njudul saat ini?

16694
15:55:38,072 --> 15:55:42,042
Jadi sekarang tinggal dua putaran, dan kita bisa sampai\n

16695
15:55:42,042 --> 15:55:44,715
Namun izinkan saya melanjutkan di sini dan\nmenjalankan kembali Python dari favorites.py.

16696
15:55:44,714 --> 15:55:47,881
Izinkan saya memperbesar ukuran Terminal saya\n

16697
15:55:53,461 --> 15:55:56,432
Saya rasa saya tidak melihat\ndduplikat, meskipun saya

16698
15:55:56,432 --> 15:55:59,342
Saya melihat beberapa hampir duplikat.

16699
15:55:59,341 --> 15:56:02,101
Misalnya, ada Teman lagi.

16700
15:56:02,101 --> 15:56:05,402
Dan jika kita terus berjalan, dan\nberjalan, dan terus berjalan, dan terus berjalan

16701
15:56:06,601 --> 15:56:12,411
Oh, menarik, jadi penasaran\n

16702
15:56:12,411 --> 15:56:13,971
dan aku juga punya yang ini di sini.

16703
15:56:13,972 --> 15:56:16,461
Jadi bagaimana kita bisa membersihkannya lebih lanjut?

16704
15:56:16,461 --> 15:56:18,735
Saya menyukai naluri Anda, dan\ini selangkah lebih dekat ke sana.

16705
15:56:18,735 --> 15:56:20,902
Apa yang perlu\nkita lakukan untuk menyaringnya

16706
15:56:24,487 --> 15:56:29,386
AUDIENCE: Anda dapat menyetel\semuanya ke lebih rendah [Tak terdengar]..

16707
15:56:30,262 --> 15:56:32,012
Apa saja\nkesalahan umum yang perlu diringkas?

16708
15:56:32,012 --> 15:56:34,747
Kita bisa mengabaikan kapitalisasi\nalbersama-sama dan mungkin

16709
15:56:34,747 --> 15:56:37,372
cukup paksa semuanya menjadi huruf kecil,\atau semuanya menjadi huruf besar.

16710
15:56:37,372 --> 15:56:39,262
Tidak masalah yang mana, tapi\nmari kita konsisten.

16711
15:56:39,262 --> 15:56:42,137
Dan bagi Anda yang mungkin memiliki\n

16712
15:56:42,137 --> 15:56:44,992
spasi di awal\nmasukan Anda atau bahkan di akhir

16713
15:56:46,521 --> 15:56:49,831
Menghapus spasi adalah hal yang umum\n

16714
15:56:49,832 --> 15:56:53,211
Jadi izinkan saya kembali ke\nkode saya di sini, dan biarkan saya melanjutkan

16715
15:56:53,211 --> 15:56:55,882
dan mengubah judulnya sedikit.

16716
15:56:55,881 --> 15:56:58,701
Izinkan saya mengatakan bahwa\njudul saat ini di dalam loop ini

16717
15:56:58,701 --> 15:57:01,641
tidak akan hanya menjadi\njudul baris saat ini.

16718
15:57:01,641 --> 15:57:05,781
Tapi izinkan saya melepasnya dulu,\n

16719
15:57:06,601 --> 15:57:09,601
Jika Anda membaca dokumentasi untuk\n

16720
15:57:09,601 --> 15:57:12,572
Ini menghilangkan spasi di\nkiri, spasi di kanan.

16721
15:57:12,572 --> 15:57:15,652
Dan kemudian, jika saya ingin memaksakan\semuanya menjadi huruf besar

16722
15:57:15,652 --> 15:57:18,052
Saya hanya bisa menggunakan huruf besar pada seluruh string.

16723
15:57:18,052 --> 15:57:21,652
Dan ingat, apa yang berguna tentang Python\n

16724
15:57:21,652 --> 15:57:24,891
melakukan panggilan bersamaan hanya dengan\menggunakan titik berulang kali.

16725
15:57:24,891 --> 15:57:26,841
Dan itu hanya memerlukan\napa pun yang baru saja terjadi

16726
15:57:26,841 --> 15:57:29,661
seperti spasi kosong\ndilucuti, maka itu juga

16727
15:57:29,661 --> 15:57:31,621
huruf besar semuanya juga.

16728
15:57:31,622 --> 15:57:36,322
Jadi sekarang, saya akan memeriksa apakah\n

16729
15:57:36,322 --> 15:57:40,101
Dan jika tidak, saya akan melanjutkan\nadan menambahkan judul itu

16730
15:57:40,101 --> 15:57:42,542
diurutkan ke dalam\nformat yang berbeda ini, jika Anda mau.

16731
15:57:42,542 --> 15:57:44,692
Jadi saya membuang beberapa informasi.

16732
15:57:44,692 --> 15:57:49,102
Saya mengorbankan semua\nnuansa tata bahasa dan masukan Anda

16733
15:57:50,362 --> 15:57:52,822
Tapi setidaknya saya mencoba\nkanonikalisasi ukuran

16734
15:57:52,822 --> 15:57:55,292
membakukan tampilan\ndata sebenarnya.

16735
15:57:55,292 --> 15:57:59,152
Jadi izinkan saya menjalankan Python\n

16736
15:57:59,152 --> 15:58:00,754
Oh, dan ini hanya kesalahan pengguna.

16737
15:58:00,754 --> 15:58:02,211
Mungkin Anda belum pernah melihat ini sebelumnya.

16738
15:58:02,211 --> 15:58:06,211
Ini sepertinya\bukan kesalahan saya.

16739
15:58:06,211 --> 15:58:08,542
Maksudku, bahkan bukan huruf besar.

16740
15:58:09,544 --> 15:58:11,752
Fungsinya disebut atas,\nkalau saya memikirkannya.

16741
15:58:12,171 --> 15:58:14,671
Mari kita perbesar\nojendela Terminal lagi.

16742
15:58:16,161 --> 15:58:20,871
Dan sekarang, ini sedikit lebih membebani\n

16743
15:58:22,641 --> 15:58:28,641
Namun sepertinya saya tidak bertemu\nbanyak Teman.

16744
15:58:28,641 --> 15:58:31,796
Ada satu Teman\ndi sini dan itu saja.

16745
15:58:31,796 --> 15:58:33,171
Aku sudah kembali pada perintahku.

16746
15:58:33,171 --> 15:58:35,612
Jadi sepertinya kami sekarang\nmemfilter duplikat.

16747
15:58:35,612 --> 15:58:38,923
Sekarang, sebelum kita mendalami lebih jauh dan\n

16748
15:58:38,923 --> 15:58:40,131
apa lagi yang bisa kami lakukan?

16749
15:58:40,131 --> 15:58:42,441
Nah, ternyata\nin Python 2 kamu sering

16750
15:58:42,442 --> 15:58:44,692
dapatkan banyak fungsi\nyang terintegrasi ke dalam bahasa tersebut.

16751
15:58:44,692 --> 15:58:47,655
Dan saya sedang menerapkan\ndiri saya sendiri gagasan tentang himpunan.

16752
15:58:47,654 --> 15:58:49,822
Jika Anda memikirkan kembali\nmatematika, satu set biasanya

16753
15:58:49,822 --> 15:58:53,811
sesuatu dengan banyak nilai\n

16754
15:58:53,811 --> 15:58:56,631
Ingatlah bahwa Python\sudah menyediakan ini untuk kita.

16755
15:58:56,631 --> 15:58:59,542
Dan kami melihatnya sekilas\nketika saya membuka kamus

16756
15:58:59,542 --> 15:59:01,531
implementasi beberapa minggu yang lalu.

16757
15:59:01,531 --> 15:59:06,322
Jadi saya bisa menentukan judul saya\n

16758
15:59:06,322 --> 15:59:11,421
dan ini hanya akan memungkinkan\n

16759
15:59:11,421 --> 15:59:14,211
sehingga saya tidak perlu repot\nmemeriksa duplikatnya.

16760
15:59:14,211 --> 15:59:18,051
Saya hanya bisa mengatakan\nsesuatu seperti, judul.tambahkan

16761
15:59:18,052 --> 15:59:21,149
judul saat ini, seperti ini.

16762
15:59:21,148 --> 15:59:24,231
Desainnya sedikit lebih baik jika Anda mengetahuinya\n

16763
15:59:24,232 --> 15:59:26,095
mendapatkan lebih banyak fungsi dari ini.

16764
15:59:26,095 --> 15:59:28,012
Baiklah, mari kita bersihkan\ndata lebih lanjut.

16765
15:59:28,012 --> 15:59:31,492
Kami kini telah melanjutkan dan memperbaiki\nmasalah sensitivitas huruf besar-kecil.

16766
15:59:31,491 --> 15:59:34,281
Kami membuang spasi jika\nseseorang menekan tombol spasi

16767
15:59:35,332 --> 15:59:39,302
Mari kita lanjutkan sekarang dan urutkan ini\n

16768
15:59:39,302 --> 15:59:42,622
Jadi, daripada hanya mencetak\njudul dalam urutan yang sama

16769
15:59:42,622 --> 15:59:47,484
Anda semua memasukkannya, tetapi memfilter\n

16770
15:59:47,483 --> 15:59:49,941
dan gunakan fungsi lain di\nPython yang mungkin belum pernah Anda lihat

16771
15:59:49,942 --> 15:59:52,281
yang secara harfiah\ndisebut diurutkan, dan akan

16772
15:59:52,281 --> 15:59:57,241
urus proses\sebenarnya menyortir judul untuk Anda.

16773
15:59:57,241 --> 15:59:59,781
Biarkan saya melanjutkan dan menambah\nukuran font Terminal saya

16774
15:59:59,781 --> 16:00:01,911
jalankan Python dari favorites.py,\ndan tekan Enter.

16775
16:00:01,911 --> 16:00:05,751
Dan sekarang Anda benar-benar dapat melihat berapa banyak\n

16776
16:00:06,561 --> 16:00:08,932
Sekarang sedikit lebih mudah\nuntuk memahaminya

16777
16:00:08,932 --> 16:00:11,991
hanya karena setidaknya\ndiurutkan berdasarkan abjad.

16778
16:00:11,991 --> 16:00:15,561
Namun sekarang Anda benar-benar dapat melihat beberapa\n

16779
16:00:17,192 --> 16:00:21,742
Namun beberapa dari Anda memutuskan untuk menyesuaikan gaya\n

16780
16:00:21,741 --> 16:00:24,862
Brooklyn 99 adalah beberapa\ncara yang berbeda di sini.

16781
16:00:24,862 --> 16:00:28,042
Dan menurut saya, jika kita terus melanjutkan, kita akan lihat\n

16782
16:00:28,042 --> 16:00:31,802
tidak diperbaiki dengan berfokus pada\nspasi putih dan kapitalisasi saja.

16783
16:00:31,802 --> 16:00:35,212
Jadi sudah di sini, ini hanya,\nberapa, 100 plus, 200 baris.

16784
16:00:35,211 --> 16:00:38,137
Data dunia nyata\nmulai menjadi berantakan dengan cepat

16785
16:00:38,137 --> 16:00:40,012
dan itu mungkin bukan pertanda\nbaik bagi kita sebenarnya

16786
16:00:40,012 --> 16:00:41,992
ingin menyimpan data\nasli dari pengguna sebenarnya.

16787
16:00:41,991 --> 16:00:44,366
Anda dapat membayangkan\nsitus web atau aplikasi seluler sebenarnya

16788
16:00:44,366 --> 16:00:47,002
menangani\nhal semacam ini dalam skala besar.

16789
16:00:47,002 --> 16:00:48,421
Baiklah, mari kita lanjutkan dan lakukan ini.

16790
16:00:48,421 --> 16:00:51,711
Mari kita cari tahu\npopularitas berbagai acara ini

16791
16:00:51,711 --> 16:00:57,021
sekarang mengulangi data saya, dan\n

16792
16:00:58,341 --> 16:01:03,231
Kami akan mengabaikan masalahnya\n

16793
16:01:03,232 --> 16:01:07,732
Maaf ya, Avatar,\ndi mana ada sesuatu

16794
16:01:07,732 --> 16:01:12,412
yang berbeda lebih dari sekadar\nspasi putih dan kapitalisasi.

16795
16:01:12,411 --> 16:01:14,181
Namun mari kita lanjutkan dan\npantau sekarang

16796
16:01:14,182 --> 16:01:17,631
berapa banyak dari Anda yang memasukkan\nmasing-masing judul ini.

16797
16:01:18,790 --> 16:01:21,082
Saya masih akan mengambil\npendekatan pengulangan ini

16798
16:01:21,082 --> 16:01:23,452
file CSV dari atas ke bawah.

16799
16:01:23,451 --> 16:01:25,701
Kami telah menggunakan beberapa\nstruktur data sejauh ini

16800
16:01:25,701 --> 16:01:29,601
daftar untuk melacak judul,\n

16801
16:01:29,601 --> 16:01:32,691
Namun bagaimana jika sekarang saya ingin menyimpan\ninformasi lebih lanjut?

16802
16:01:32,692 --> 16:01:38,452
Untuk setiap judul, saya ingin menyimpannya\n

16803
16:01:39,472 --> 16:01:43,222
Saya membuang total\nberapa kali saya menonton pertunjukan ini.

16804
16:01:43,222 --> 16:01:45,862
Bagaimana saya bisa mulai mempertahankan hal itu?

16805
16:01:45,862 --> 16:01:47,186
HADIRIN: Gunakan kamus.

16806
16:01:47,186 --> 16:01:49,311
DAVID J. MALAN: Kita bisa\nmenggunakan kamus, dan bagaimana caranya?

16807
16:01:51,476 --> 16:01:53,434
DAVID J. MALAN: Sempurna,\nnaluri yang sangat bagus.

16808
16:01:53,434 --> 16:01:55,191
Menggunakan kamus,\ninsejauh memungkinkan kita

16809
16:01:55,192 --> 16:01:58,641
menyimpan kunci dan nilai, yaitu\n

16810
16:01:59,192 --> 16:02:01,822
Inilah sebabnya mengapa kamus\atau tabel hash lebih banyak

16811
16:02:01,822 --> 16:02:04,972
umumnya merupakan struktur data yang berguna dan praktis.

16812
16:02:04,972 --> 16:02:08,461
Karena mereka hanya membiarkan Anda mengingat\n

16813
16:02:08,461 --> 16:02:11,211
Jadi jika kuncinya akan\nmenjadi judul yang pernah saya lihat

16814
16:02:11,211 --> 16:02:15,201
nilainya bisa berupa jumlah\n

16815
16:02:15,201 --> 16:02:19,649
Jadi itu seperti\n

16816
16:02:19,650 --> 16:02:22,192
Misalnya, jika saya akan\nmelakukannya pada selembar kertas

16817
16:02:22,192 --> 16:02:24,682
Saya mungkin hanya memiliki dua\nkolom di sini, di mana

16818
16:02:24,682 --> 16:02:29,932
mungkin ini judul yang sudah saya\n

16819
16:02:29,932 --> 16:02:33,592
Ini pada dasarnya adalah sebuah\kamus dalam Python.

16820
16:02:33,591 --> 16:02:36,831
Ini terdiri dari dua kolom, tombol di\nkiri, nilai di kanan.

16821
16:02:36,832 --> 16:02:38,961
Dan ini, jika saya dapat mengimplementasikan\nin kode, akan benar-benar terjadi

16822
16:02:38,961 --> 16:02:42,921
izinkan saya menyimpan data ini, dan\n

16823
16:02:42,921 --> 16:02:44,792
untuk mencari tahu mana yang paling populer.

16824
16:02:45,722 --> 16:02:49,582
Izinkan saya mengubah judul saya\n

16825
16:02:49,582 --> 16:02:54,502
Mari kita jadikan kamus saja,\n

16826
16:02:54,502 --> 16:02:58,942
dua kurung kurawal yang kosong menghasilkan\n

16827
16:03:00,201 --> 16:03:02,781
Saya rasa sebagian besar\nkode saya akan tetap sama.

16828
16:03:02,781 --> 16:03:06,201
Namun di sini, saya tidak ingin\nmenambah judul begitu saja

16829
16:03:07,521 --> 16:03:10,401
Entah bagaimana, saya perlu memantau\nhitungannya.

16830
16:03:10,402 --> 16:03:14,031
Dan sayangnya, jika saya\melakukan ini-- ayo buat judul

16831
16:03:14,031 --> 16:03:18,921
tanda kurung, judul, ditambah sama dengan 1.

16832
16:03:18,921 --> 16:03:21,472
Ini adalah upaya yang masuk akal\npertama dalam hal ini.

16833
16:03:22,762 --> 16:03:28,072
Jika judul adalah kamus dan saya ingin\n

16834
16:03:28,072 --> 16:03:30,862
sintaks untuk itu, seperti sebelumnya,\nis judul, tanda kurung, dan kemudian

16835
16:03:30,862 --> 16:03:34,222
kunci yang ingin Anda gunakan untuk\nindex ke dalam kamus.

16836
16:03:34,222 --> 16:03:37,342
Dalam hal ini, yang dimaksud bukanlah angka,\melainkan kata sebenarnya, sebuah judul.

16837
16:03:37,341 --> 16:03:39,561
Dan Anda hanya akan\nmenambahnya satu per satu

16838
16:03:39,561 --> 16:03:42,351
dan pada akhirnya saya akan kembali\ndan menyelesaikan putaran kedua saya

16839
16:03:42,351 --> 16:03:45,051
dan melakukan sesuatu sesuai urutannya.

16840
16:03:45,052 --> 16:03:48,922
Namun untuk saat ini, mari kita\ncatat jumlah totalnya.

16841
16:03:48,921 --> 16:03:51,002
Biarkan saya lanjutkan dan\nperbesar jendela Terminal saya.

16842
16:03:51,002 --> 16:03:54,932
Izinkan saya melakukan Python of\nfavorites.py dan tekan Enter.

16843
16:03:55,432 --> 16:03:59,482
Cara Aku Bertemu Ibumu\nmemberiku kesalahan penting.

16844
16:04:04,461 --> 16:04:07,671
Dan faktanya, hanya sekedar memberi\nsedikit remah roti di sini

16845
16:04:09,482 --> 16:04:12,262
Izinkan saya membuka kembali\nfile CSV dengan sangat cepat.

16846
16:04:12,262 --> 16:04:15,802
Dan wow, kami bahkan tidak berhasil\nmelewati baris kedua dalam file tersebut

16847
16:04:15,802 --> 16:04:17,552
atau pertunjukan pertama di file.

16848
16:04:17,552 --> 16:04:20,182
Perhatikan Bagaimana Aku Bertemu\nIbumu, hurufnya agak kecil

16849
16:04:20,182 --> 16:04:22,904
adalah pertunjukan pertama di dalamnya.

16850
16:04:22,904 --> 16:04:24,862
Apa naluri Anda\nmengapa hal ini terjadi?

16851
16:04:24,862 --> 16:04:27,092
AUDIENCE: Anda tidak\nmemiliki titik awal.

16852
16:04:27,091 --> 16:04:29,008
DAVID J. MALAN: Saya tidak\nmemiliki titik awal.

16853
16:04:30,262 --> 16:04:35,182
Saya mengindeks secara membabi buta ke dalam kamus\n

16854
16:04:35,182 --> 16:04:37,222
itu belum ada\nin kamus.

16855
16:04:37,222 --> 16:04:39,952
Dan Python memunculkan\napa yang disebut kesalahan kunci

16856
16:04:39,951 --> 16:04:42,781
karena kunci yang Anda coba\ngunakan belum ada.

16857
16:04:42,781 --> 16:04:46,341
Jadi secara logis, bagaimana kita bisa memperbaikinya?

16858
16:04:47,031 --> 16:04:50,451
Setengah dari masalah sudah terselesaikan,\n

16859
16:04:50,451 --> 16:04:52,191
jika tidak ada apa-apa di sana.

16860
16:04:52,936 --> 16:04:54,271
AUDIENCE: Membuat counter.

16861
16:04:54,271 --> 16:04:54,961
DAVID J. MALAN: Membuat--

16862
16:04:55,711 --> 16:04:57,582
DAVID J. MALAN: Membuat\npenghitung itu sendiri.

16863
16:04:57,582 --> 16:04:59,531
Jadi mungkin saya bisa melakukan hal seperti ini.

16864
16:04:59,531 --> 16:05:03,722
Izinkan saya menutup jendela Terminal\dan izinkan saya mengajukan pertanyaan terlebih dahulu.

16865
16:05:03,722 --> 16:05:10,322
Jika judul saat ini ada di\n

16866
16:05:10,322 --> 16:05:12,781
ternyata itu akan memberi saya\njawaban benar-salah.

16867
16:05:12,781 --> 16:05:17,582
Lalu, saya dapat dengan aman mengatakan, judul,\ntanda kurung, judul, ditambah sama dengan 1.

16868
16:05:17,582 --> 16:05:22,082
Dan ingat, ini hanyalah singkatan\n

16869
16:05:25,510 --> 16:05:28,052
Itu sama saja dengan ini\nnamun sedikit lebih ringkas

16870
16:05:30,152 --> 16:05:34,832
Lain lagi, jika secara logika tidak demikian\n

16871
16:05:34,832 --> 16:05:38,952
kamus, maka saya mungkin ingin\n

16872
16:05:38,951 --> 16:05:40,656
Jangan ragu untuk meneriakkannya saja.

16873
16:05:42,156 --> 16:05:46,661
Saya hanya perlu memberi nilai di sana\n

16874
16:05:47,161 --> 16:05:49,711
Jadi sekarang setelah saya menyelesaikannya\n, izinkan saya melanjutkan

16875
16:05:49,711 --> 16:05:51,961
dan membatalkan penyortiran saya untuk sementara.

16876
16:05:51,961 --> 16:05:54,991
Dan sekarang izinkan saya melanjutkan dan melakukan ini.

16877
16:05:54,991 --> 16:05:58,801
Sebagai pemeriksaan cepat, saya dapat\nmelanjutkan dan menjalankan kodenya saja

16878
16:05:58,802 --> 16:06:00,391
apa adanya, Python dari favorit.py.

16879
16:06:02,372 --> 16:06:05,132
Ini dicetak dengan benar, tidak ada kesalahan\nkunci, tetapi tidak diurutkan.

16880
16:06:05,131 --> 16:06:06,961
Dan saya tidak melihat satu pun hitungannya.

16881
16:06:06,961 --> 16:06:09,122
Biarkan saya menambahkan\njumlahnya dengan cepat, dan selesailah

16882
16:06:09,122 --> 16:06:10,872
beberapa cara saya bisa melakukan ini.

16883
16:06:10,872 --> 16:06:18,242
Saya bisa, katakanlah, mencetak judulnya, dan\n

16884
16:06:18,241 --> 16:06:22,561
bagaimana kalau hanya, koma,\njudul, tanda kurung, judul?

16885
16:06:22,561 --> 16:06:24,362
Jadi saya akan mencetak\ndua hal sekaligus

16886
16:06:24,362 --> 16:06:26,942
keduanya judul saat ini\nin kamus

16887
16:06:26,942 --> 16:06:29,641
dan berapa pun nilainya\nis dengan mengindeksnya.

16888
16:06:29,641 --> 16:06:31,481
Biarkan saya memperbesar jendela Terminal saya.

16889
16:06:31,482 --> 16:06:35,762
Izinkan saya menjalankan Python of\nfavorites.py, Enter, dan OK.

16890
16:06:39,421 --> 16:06:42,902
Sepertinya tidak ada di antara Anda yang menceritakan\nbanyak acara TV.

16891
16:06:42,902 --> 16:06:47,031
Apa kesalahan logisnya di sini?

16892
16:06:47,031 --> 16:06:50,801
Kesalahan apa yang saya lakukan jika\nmelihat kembali kode saya di sini?

16893
16:06:55,832 --> 16:07:00,482
Singkatnya, saya menginisialisasi\n

16894
16:07:00,482 --> 16:07:03,842
tapi saya seharusnya menginisialisasinya di\n

16895
16:07:03,841 --> 16:07:05,561
Atau saya harus mengubah kode saya sedikit.

16896
16:07:05,561 --> 16:07:08,222
Jadi misalnya, jika saya kembali\nin ke sini, perbaikan paling sederhana

16897
16:07:08,222 --> 16:07:11,732
mungkin akan diinisialisasi ke 1,\n

16898
16:07:11,732 --> 16:07:14,552
tentu saja, saya melihat\njudul ini untuk pertama kalinya.

16899
16:07:14,552 --> 16:07:16,922
Atau saya bisa mengubah logika saya sedikit.

16900
16:07:16,921 --> 16:07:18,811
Saya bisa melakukan hal seperti ini sebagai gantinya.

16901
16:07:18,811 --> 16:07:24,182
Jika judul saat ini tidak ada dalam judul,\n

16902
16:07:24,182 --> 16:07:28,201
Dan kemudian saya bisa membuang\nyang lain, dan sekarang mengindeks secara membabi buta

16903
16:07:30,241 --> 16:07:34,441
Karena sekarang, di jalur 11, aku\nbisa mempercayai jalur 9 dan 10 itu

16904
16:07:34,442 --> 16:07:37,382
mengurus inisialisasi\nuntuk saya jika perlu.

16905
16:07:38,911 --> 16:07:42,491
Yang ini sedikit lebih bagus, mungkin\nkarena barisnya lebih sedikit.

16906
16:07:42,491 --> 16:07:45,811
Namun menurut saya kedua pendekatan tersebut\n

16907
16:07:45,811 --> 16:07:47,761
Namun kuncinya, yang tidak\npun dimaksudkan, adalah kita

16908
16:07:47,762 --> 16:07:52,442
harus memastikan kuncinya ada\n

16909
16:07:59,741 --> 16:08:03,031
Jadi jika tidak, semua orang akan mengalami\n

16910
16:08:03,031 --> 16:08:04,531
berapa banyak orang yang mengatakan hal yang sama.

16911
16:08:04,531 --> 16:08:06,578
Sekarang kodenya sudah sebagaimana mestinya.

16912
16:08:06,578 --> 16:08:08,911
Jadi izinkan saya melanjutkan dan membuka\njendela Terminal saya lagi.

16913
16:08:08,911 --> 16:08:13,051
Izinkan saya menjalankan Python dari favorites.py,\n

16914
16:08:13,052 --> 16:08:14,492
Beberapa pertunjukan tidak begitu populer.

16915
16:08:14,491 --> 16:08:16,171
Hanya ada 1 dan mungkin 2.

16916
16:08:16,171 --> 16:08:21,911
Tapi aku yakin jika kita menyelesaikan masalah ini, kita\n

16917
16:08:23,232 --> 16:08:29,862
Ternyata, ketika berhadapan\ndengan kamus seperti ini--

16918
16:08:29,862 --> 16:08:32,502
mari kita lanjutkan\nmengurutkan judulnya sendiri.

16919
16:08:32,502 --> 16:08:37,472
Jadi mari kita perkenalkan kembali fungsi yang diurutkan\n

16920
16:08:37,472 --> 16:08:40,077
Biarkan saya melanjutkan sekarang dan\nmenjalankan Python dari favorites.py.

16921
16:08:40,076 --> 16:08:42,451
Sekarang sedikit lebih mudah\nuntuk memusatkan pikiran Anda pada hal tersebut

16922
16:08:42,451 --> 16:08:43,909
karena setidaknya itu berdasarkan abjad.

16923
16:08:43,910 --> 16:08:47,942
Tapi itu tidak diurutkan berdasarkan\nnilai, itu diurutkan berdasarkan kunci.

16924
16:08:47,942 --> 16:08:51,512
Tapi benar saja, kalau kita scroll\nke bawah, ada sesuatu di bawah sini

16925
16:08:51,512 --> 16:08:54,544
misalnya, seperti,\nmari kita lihat, The Office.

16926
16:08:54,544 --> 16:08:56,252
Itu pasti\nakan menjadi pesaing

16927
16:08:56,252 --> 16:08:58,201
untuk yang paling populer, 15 tanggapan.

16928
16:08:58,201 --> 16:09:01,201
Namun mari kita lihat apa yang sebenarnya\nakan muncul ke atas.

16929
16:09:01,201 --> 16:09:06,211
Sayangnya, fungsi yang diurutkan\n

16930
16:09:09,752 --> 16:09:12,841
Namun ternyata, dengan Python,\njika Anda membaca dokumentasinya

16931
16:09:12,841 --> 16:09:14,851
untuk fungsi yang diurutkan,\nsebenarnya bisa

16932
16:09:14,851 --> 16:09:19,921
sampaikan argumen lain yang\nmemberi tahunya cara menyortir berbagai hal.

16933
16:09:19,921 --> 16:09:22,771
Misalnya, jika saya ingin\melakukan sesuatu dalam urutan terbalik

16934
16:09:22,771 --> 16:09:27,481
Saya dapat menambahkan parameter kedua ke\n

16935
16:09:28,652 --> 16:09:30,961
Anda benar-benar mengatakan,\nkebalikan sama dengan benar, jadi

16936
16:09:30,961 --> 16:09:34,171
bahwa posisinya di\n

16937
16:09:34,171 --> 16:09:37,103
Jika sekarang saya menjalankannya kembali setelah\nmeningkatkan jendela Terminal saya

16938
16:09:37,103 --> 16:09:39,061
sekarang Anda akan melihat bahwa\nurutannya berlawanan.

16939
16:09:39,061 --> 16:09:41,671
Sekarang petualangan dan Anne\ndengan huruf E ada di bagian bawah

16940
16:09:41,671 --> 16:09:43,752
dari output, bukan dari atas.

16941
16:09:43,752 --> 16:09:52,186
Bagaimana saya bisa memerintahkannya untuk mengurutkan\nberdasarkan nilai, bukan berdasarkan kunci?

16942
16:09:52,186 --> 16:09:53,561
Baiklah, mari kita lanjutkan dan lakukan ini.

16943
16:09:53,561 --> 16:09:56,281
Biarkan saya melanjutkan dan mendefinisikan suatu fungsi.

16944
16:09:56,281 --> 16:09:58,411
Saya hanya akan menyebutnya\nf untuk menyederhanakannya.

16945
16:09:58,411 --> 16:10:01,531
Dan fungsi f ini akan\nmengambil judul sebagai masukan.

16946
16:10:01,531 --> 16:10:06,481
Dan jika diberi judul tertentu, itu akan berjalan\n

16947
16:10:06,482 --> 16:10:09,902
Jadi sebenarnya, mungkin nama yang lebih baik\nuntuk ini adalah mendapatkan nilai

16948
16:10:09,902 --> 16:10:12,162
dan/atau kami dapat menemukan\nhal lain juga.

16949
16:10:12,161 --> 16:10:14,641
Tujuan dari fungsi get\nvalue, agar jelas

16950
16:10:14,641 --> 16:10:19,542
adalah menganggapnya sebagai masukan judul dan\n

16951
16:10:20,802 --> 16:10:23,102
Nah, ternyata fungsi\nsorted di Python

16952
16:10:23,101 --> 16:10:27,211
menurut dokumentasinya,\njuga mengambil parameter kunci

16953
16:10:27,211 --> 16:10:31,201
di mana Anda dapat memasukkan, gila\ncukup, nama suatu fungsi

16954
16:10:31,201 --> 16:10:36,991
yang akan digunakan untuk menentukan\n

16955
16:10:36,991 --> 16:10:41,891
atau berdasarkan nilainya, atau dalam kasus lain,\n

16956
16:10:41,891 --> 16:10:44,731
Jadi ada rasa ingin tahu di sini,\nnamun itu sangat disengaja.

16957
16:10:44,732 --> 16:10:46,892
Kunci adalah nama\nparameter, sama seperti kebalikannya

16958
16:10:46,891 --> 16:10:48,434
adalah nama parameter lainnya ini.

16959
16:10:48,434 --> 16:10:51,451
Namun, nilainya\bukanlah pemanggilan fungsi.

16960
16:10:52,921 --> 16:10:55,862
Perhatikan saya tidak melakukan\nini, tanpa tanda kurung.

16961
16:10:55,862 --> 16:11:00,741
Saya malah meneruskan nilai get,\n

16962
16:11:00,741 --> 16:11:03,241
Dan ini adalah fitur Python\ndan bahasa tertentu lainnya.

16963
16:11:03,241 --> 16:11:06,451
Sama seperti variabel, Anda sebenarnya dapat meneruskan seluruh fungsi

16964
16:11:06,451 --> 16:11:10,901
sekitar sehingga mereka dapat dipanggil\n

16965
16:11:10,902 --> 16:11:14,222
Jadi maksudnya adalah\n

16966
16:11:14,222 --> 16:11:16,752
mereka tidak tahu apa yang ingin Anda sortir hari ini.

16967
16:11:16,752 --> 16:11:21,152
Namun jika Anda menyediakan fungsi\n

16968
16:11:21,152 --> 16:11:23,342
fungsi yang diurutkan\nakan menggunakan fungsi itu

16969
16:11:23,341 --> 16:11:27,181
untuk menentukan, oke, jika Anda tidak ingin\n

16970
16:11:28,292 --> 16:11:31,141
Ini akan memberitahu\nit untuk mengurutkan berdasarkan nilainya

16971
16:11:31,141 --> 16:11:34,091
dengan mengembalikan nilai\nspesifik yang kami pedulikan.

16972
16:11:34,091 --> 16:11:37,921
Jadi izinkan saya melanjutkan sekarang dan menjalankannya kembali\n

16973
16:11:39,961 --> 16:11:42,451
Di sini kita punya contoh\nsemua judul yang Anda semua

16974
16:11:42,451 --> 16:11:47,521
diketik, walaupun dipaksa huruf besar\n

16975
16:11:47,521 --> 16:11:50,074
Dan kini, The Office\nan mudah mengalahkan Friends

16976
16:11:50,074 --> 16:11:52,741
versus Komunitas, versus Game of\nThrones, Breaking Bad, dan kemudian

16977
16:11:52,741 --> 16:11:55,081
banyak varian setelahnya.

16978
16:11:55,082 --> 16:11:57,022
Jadi ada banyak langkah yang harus dilalui.

16979
16:11:57,021 --> 16:11:58,896
Ini tidak terlalu buruk jika\nAnda sudah melakukannya sekali

16980
16:11:58,896 --> 16:12:00,813
dan Anda tahu apa\nfungsi-fungsi ini, dan Anda

16981
16:12:00,813 --> 16:12:02,211
tahu bahwa parameter ini ada.

16982
16:12:03,351 --> 16:12:07,432
Itu berarti 17 baris kode\nhanya untuk menganalisis file CSV

16983
16:12:07,432 --> 16:12:10,762
yang Anda semua buat melalui\npengiriman Google Formulir tersebut.

16984
16:12:10,762 --> 16:12:13,702
Tapi aku butuh banyak kerja keras\n

16985
16:12:13,701 --> 16:12:15,618
Dan memang, hal tersebut akan menjadi salah satu tujuannya

16986
16:12:15,618 --> 16:12:18,261
untuk saat ini, pada akhirnya, bagaimana\nkita bisa mempermudahnya?

16987
16:12:18,262 --> 16:12:20,137
Mempelajari\nhal baru dengan Python adalah satu hal

16988
16:12:20,137 --> 16:12:22,641
tetapi jika kita dapat menghindari penulisan\nkode, atau kode sebanyak ini

16989
16:12:22,641 --> 16:12:24,182
itu akan menjadi hal yang baik.

16990
16:12:24,182 --> 16:12:26,362
Dan satu teknik lain\nyang dapat kami perkenalkan di sini

16991
16:12:26,362 --> 16:12:28,912
itu memungkinkan kita\nmenulis lebih sedikit kode

16992
16:12:28,911 --> 16:12:31,072
adalah, kita sebenarnya bisa menghilangkan\nfungsi ini.

16993
16:12:31,072 --> 16:12:34,582
Ternyata, dengan Python, jika Anda\nhanya perlu membuat suatu fungsi

16994
16:12:34,582 --> 16:12:37,281
tapi itu akan digunakan dan\nkemudian dibuang

16995
16:12:37,281 --> 16:12:40,131
itu bukan sesuatu yang ingin kamu lakukan\n

16996
16:12:40,131 --> 16:12:42,891
ini bukan seperti fungsi perpustakaan\nyang ingin Anda pertahankan--

16997
16:12:42,891 --> 16:12:45,021
Anda sebenarnya bisa melakukan ini.

16998
16:12:45,021 --> 16:12:48,771
Anda dapat mengubah nilai\nparameter kunci ini

16999
16:12:48,771 --> 16:12:51,291
menjadi apa yang disebut fungsi\nlambda, yang mana

17000
16:12:51,292 --> 16:12:54,381
adalah cara yang bagus untuk mengatakan suatu fungsi\n

17001
16:12:57,741 --> 16:13:00,871
Wah, agak bodoh\nSaya menemukan nama ini di baris 13.

17002
16:13:00,872 --> 16:13:04,012
Saya menggunakannya di baris 16, dan\nkemudian saya tidak pernah menggunakannya lagi.

17003
16:13:04,012 --> 16:13:07,862
Jika hanya digunakan di satu tempat,\n

17004
16:13:07,862 --> 16:13:10,342
Jadi jika Anda menggunakan\nPython, ucapkan lambda

17005
16:13:10,341 --> 16:13:13,191
lalu ketikkan\nnama parameternya

17006
16:13:13,192 --> 16:13:15,472
Anda ingin fungsi anonim\nini digunakan

17007
16:13:15,472 --> 16:13:19,802
Anda kemudian dapat berkata, lanjutkan\nd kembalikan nilai ini.

17008
16:13:19,802 --> 16:13:22,372
Sekarang mari kita perhatikan\ninkonsistensi di sini.

17009
16:13:22,372 --> 16:13:25,192
Saat Anda menggunakan kata kunci lambda\nkhusus yang berbunyi, hai Python

17010
16:13:25,192 --> 16:13:28,192
beri saya fungsi anonim,\na fungsi tanpa nama

17011
16:13:28,192 --> 16:13:31,952
kemudian tertulis, Python, ini anonim\n

17012
16:13:31,951 --> 16:13:34,040
Perhatikan tidak ada tanda kurung.

17013
16:13:34,040 --> 16:13:35,841
Dan itu disengaja, meski membingungkan.

17014
16:13:35,841 --> 16:13:38,250
Itu hanya memperketat segalanya sedikit.

17015
16:13:38,250 --> 16:13:42,111
Perhatikan bahwa tidak ada kata kunci return,\n

17016
16:13:42,112 --> 16:13:44,122
sedikit meningkat, meskipun tidak konsisten.

17017
16:13:44,122 --> 16:13:47,992
Namun baris kode ini\nbaru saja saya soroti

17018
16:13:47,991 --> 16:13:51,771
sebenarnya identik\nfungsinya dengan ini.

17019
16:13:51,771 --> 16:13:53,662
Tapi itu membuang kata [Tak terdengar].

17020
16:13:53,661 --> 16:13:55,191
Itu membuang kata dapatkan nilai.

17021
16:13:55,192 --> 16:13:58,852
Itu membuang tanda kurung, dan\n

17022
16:14:00,021 --> 16:14:02,631
Dan ini sangat cocok\nuntuk masalah seperti ini

17023
16:14:02,631 --> 16:14:05,301
di mana saya hanya ingin meneruskan\na fungsi kecil itu

17024
16:14:06,432 --> 16:14:08,182
Namun itu bukan sesuatu\nyang akan saya gunakan kembali.

17025
16:14:08,182 --> 16:14:10,442
Tidak perlu beberapa\nbaris untuk memakan ruang.

17026
16:14:10,442 --> 16:14:12,501
Itu hanya satu liner yang bagus dan elegan.

17027
16:14:12,500 --> 16:14:14,181
Hanya itu yang dilakukan fungsi lambda.

17028
16:14:14,182 --> 16:14:17,251
Ini memungkinkan Anda membuat anonim\n

17029
16:14:17,250 --> 16:14:22,551
Dan kemudian fungsi yang Anda teruskan\n

17030
16:14:22,552 --> 16:14:26,152
Memang, jika saya menjalankan Python dari favorit.py\n

17031
16:14:26,152 --> 16:14:28,141
hasilnya sama persis.

17032
16:14:28,141 --> 16:14:31,701
Dan kita lihat di bagian bawah\nsemua hasil kecil tersebut.

17033
16:14:31,701 --> 16:14:36,151
Apakah ada pertanyaan tentang\nsintaks ini, mengenai gagasan ini?

17034
16:14:36,152 --> 16:14:39,112
Tujuannya di sini adalah untuk menulis\n

17035
16:14:39,112 --> 16:14:44,201
untuk menganalisis atau membersihkan data seperti ini.

17036
16:14:48,614 --> 16:14:51,781
DAVID J. MALAN: Bisakah Anda menggunakan lambda\n

17037
16:14:51,781 --> 16:14:54,601
Secara umum, ini dimaksudkan untuk satu\nbaris kode.

17038
16:14:54,601 --> 16:14:56,762
Jadi Anda tidak menggunakan kata kunci return.

17039
16:14:56,762 --> 16:14:59,222
Anda tinggal mengatakan apa yang ingin Anda kembalikan.

17040
16:15:03,021 --> 16:15:04,271
DAVID J. MALAN: Pertanyaan bagus.

17041
16:15:04,271 --> 16:15:06,301
Bisakah Anda berbuat lebih banyak dalam\nsatu baris itu jika ya

17042
16:15:06,302 --> 16:15:08,012
harus menjadi algoritma yang lebih terlibat?

17043
16:15:08,012 --> 16:15:11,162
Ya, tapi pada akhirnya Anda\nakan mengembalikan nilai yang dimaksud.

17044
16:15:11,161 --> 16:15:13,288
Singkatnya, jika semuanya menjadi\nat canggih

17045
16:15:13,288 --> 16:15:15,121
Anda tidak menggunakan fungsi lambda\n dengan Python.

17046
16:15:15,122 --> 16:15:17,852
Silakan saja\ntentukan saja namanya

17047
16:15:17,851 --> 16:15:19,574
meskipun itu nama yang hanya sekali digunakan.

17048
16:15:19,574 --> 16:15:21,991
JavaScript, bahasa lain\nkita akan membahasnya dalam beberapa minggu

17049
16:15:21,991 --> 16:15:24,932
lebih banyak menggunakan, saya berani\nmengatakan, fungsi lambda.

17050
16:15:24,932 --> 16:15:27,372
Dan itu sebenarnya bisa berupa\nbeberapa baris

17051
16:15:27,372 --> 16:15:30,862
tapi Python tidak\nmendukung naluri itu.

17052
16:15:31,362 --> 16:15:33,069
Jadi mari kita lanjutkan dan\melakukan satu hal lagi.

17053
16:15:33,069 --> 16:15:35,682
Office jelas-jelas mengeluarkan\nokode di sini.

17054
16:15:35,682 --> 16:15:38,101
Mari kita lanjutkan dan menulis\nprogram yang sedikit berbeda

17055
16:15:38,101 --> 16:15:40,741
yang mungkin hanya berfokus pada\nOffice untuk saat ini

17056
16:15:42,241 --> 16:15:46,591
Jadi izinkan saya melanjutkan dan membuang sebagian besar\n

17057
16:15:46,591 --> 16:15:48,421
ketika aku berada di dalam lingkaran batinku.

17058
16:15:48,421 --> 16:15:51,391
Dan biarkan aku melanjutkannya, dan aku tidak melakukannya\n

17059
16:15:51,391 --> 16:15:53,582
Yang ingin saya lakukan hanyalah fokus\bukan judul saat ini.

17060
16:15:53,582 --> 16:15:56,072
Bagaimana cara mendeteksi jika\nseseorang menyukai The Office?

17061
16:15:56,072 --> 16:15:59,131
Yah, aku bisa mengatakan sesuatu seperti--

17062
16:16:01,652 --> 16:16:03,692
Kami hanya akan fokus pada The Office.

17063
16:16:03,692 --> 16:16:09,272
Jika judulnya sama, sama dengan The Office,\n

17064
16:16:13,741 --> 16:16:15,199
Tidak ada kamus yang terlibat sekarang.

17065
16:16:15,199 --> 16:16:17,221
Itu hanya variabel integer sederhana.

17066
16:16:17,222 --> 16:16:21,092
Lalu, di sini\nSaya akan mengatakan sesuatu seperti

17067
16:16:21,091 --> 16:16:26,311
jumlah orang yang menyukai The\nOffice, berapa pun nilainya.

17068
16:16:26,311 --> 16:16:29,191
Dan saya akan memasukkan counter ke dalam\nkurung kurawal, lalu saya akan melakukannya

17069
16:16:29,192 --> 16:16:31,125
ubah semua ini menjadi string F.

17070
16:16:31,125 --> 16:16:32,792
Baiklah, izinkan saya melanjutkan dan menjalankan ini.

17071
16:16:32,792 --> 16:16:35,442
Python dari favorit.py, Enter.

17072
16:16:35,442 --> 16:16:37,952
Jumlah orang yang\nmenyukai The Office adalah 15.

17073
16:16:39,332 --> 16:16:42,872
Namun mari kita lanjutkan sekarang dan\nsengaja memperkeruh datanya sedikit.

17074
16:16:42,872 --> 16:16:46,502
Anda semua sangat baik\nAnda mengetik di The Office.

17075
16:16:46,502 --> 16:16:48,572
Namun Anda dapat membayangkan\nseseorang baru saja mengetik Office

17076
16:16:48,572 --> 16:16:51,033
misalnya, mungkin di sana, mungkin di sana.

17077
16:16:51,033 --> 16:16:53,491
Dan banyak orang mungkin hanya\nmenulis Office, Anda bisa bayangkan.

17078
16:16:53,491 --> 16:16:55,741
Tidak terjadi di sini, tapi\nseandainya terjadi, dan mungkin

17079
16:16:55,741 --> 16:16:58,631
akan terjadi jika kami menerima lebih banyak\nd lebih banyak kiriman dari waktu ke waktu.

17080
16:16:58,631 --> 16:17:02,341
Sekarang mari kita lanjutkan dan jalankan kembali\n

17081
16:17:02,341 --> 16:17:04,471
Sekarang hanya 13 orang yang menyukai The Office.

17082
16:17:05,491 --> 16:17:11,131
Datanya sekarang seperti yang saya mutasikan menjadi\n

17083
16:17:11,131 --> 16:17:16,391
Bagaimana saya bisa mengubah kode Python saya menjadi\n

17084
16:17:16,391 --> 16:17:20,731
Apa yang dapat saya ubah di sini\nuntuk memperbaiki situasi ini?

17085
16:17:24,091 --> 16:17:27,641
AUDIENCE: Anda menulis\njudulnya [Tak terdengar]..

17086
16:17:27,641 --> 16:17:30,391
DAVID J. MALAN: Ya, jadi saya bisa\n

17087
16:17:30,391 --> 16:17:34,711
Jika gelar sama dengan Kantor,\atau gelar sama dengan adil

17088
16:17:35,779 --> 16:17:38,072
Dan saya tetap tidak perlu\nkhawatir tentang penggunaan huruf besar.

17089
16:17:38,072 --> 16:17:41,154
Saya tidak perlu khawatir tentang spasi\n

17090
16:17:41,154 --> 16:17:43,542
Sekarang saya dapat melanjutkan dan menjalankan kembali kode ini.

17091
16:17:43,542 --> 16:17:45,332
Biarkan saya menjalankannya untuk ketiga kalinya.

17092
16:17:50,552 --> 16:17:54,002
Anda dapat membayangkan penskalaannya\ntidak terlalu baik.

17093
16:17:54,002 --> 16:17:57,105
Avatar memiliki tiga\n yang berbeda

17094
16:17:57,105 --> 16:17:59,522
jika kita menggali lebih dalam maka\nmungkin ada lebih banyak varian.

17095
16:17:59,521 --> 16:18:01,771
Bisakah kita melakukan sesuatu yang\ntujuannya lebih umum?

17096
16:18:01,771 --> 16:18:03,572
Ya, kita bisa melakukan hal seperti ini.

17097
16:18:07,224 --> 16:18:09,391
ini adalah hal keren\nyang dapat Anda lakukan dengan Python.

17098
16:18:09,391 --> 16:18:12,271
Ini sangat mirip bahasa Inggris, cukup ajukan\npertanyaannya, meskipun singkat.

17099
16:18:12,271 --> 16:18:16,002
Menariknya, ini\nmembuat saya mendapat masalah.

17100
16:18:16,002 --> 16:18:18,482
Sekarang, tiba-tiba, kami berjumlah 16 orang.

17101
16:18:18,482 --> 16:18:21,594
Adakah yang tahu apa yang lainnya?

17102
16:18:21,593 --> 16:18:23,439
HADIRIN: Seseorang memasang V Office.

17103
16:18:23,440 --> 16:18:24,607
DAVID J. MALAN: Kantor apa?

17104
16:18:24,607 --> 16:18:27,462
HADIRIN: Seseorang memasuki\na V Office, [Tak terdengar]..

17105
16:18:29,858 --> 16:18:31,191
DAVID J. MALAN: Oh, menarik.

17106
16:18:42,472 --> 16:18:44,811
Oke, yang ini sebenarnya\nsulit untuk diperbaiki.

17107
16:18:44,811 --> 16:18:46,641
Saya tidak bisa memikirkan seorang jenderal--

17108
16:18:46,641 --> 16:18:51,201
nah, ini sebenarnya contoh bagus\ncontoh data menjadi cepat berantakan.

17109
16:18:51,201 --> 16:18:53,421
Dan Anda bisa membayangkan melakukan\nsesuatu di mana, oke, kita

17110
16:18:53,421 --> 16:18:58,261
bisa memiliki 26 kondisi jika seseorang\n

17111
16:18:58,762 --> 16:18:59,992
Anda bisa membayangkan melakukan itu.

17112
16:18:59,991 --> 16:19:02,741
Namun pasti akan ada\n

17113
16:19:02,741 --> 16:19:04,951
Jadi itu sebenarnya sulit untuk diperbaiki.

17114
16:19:04,951 --> 16:19:10,072
Namun ternyata kami beruntung dan sekarang\n

17115
16:19:10,072 --> 16:19:12,002
Namun datanya sendiri berantakan.

17116
16:19:12,002 --> 16:19:15,292
Izinkan saya menunjukkan cara lain untuk\n

17117
16:19:15,292 --> 16:19:20,092
Ternyata ada fitur ini\n

17118
16:19:20,091 --> 16:19:22,381
di antaranya, disebut ekspresi reguler.

17119
16:19:22,381 --> 16:19:24,381
Dan ini sebenarnya adalah\nteknik yang sangat ampuh

17120
16:19:24,381 --> 16:19:26,214
bahwa kita hanya akan menggores\npermukaannya saja di sini.

17121
16:19:26,214 --> 16:19:29,631
Tapi itu akan sangat berguna,\n

17122
16:19:29,631 --> 16:19:34,221
dalam pemrograman web, kapan pun Anda mau\n

17123
16:19:34,222 --> 16:19:37,252
Dan sebenarnya, untuk memperjelas\nini, beri saya waktu sebentar

17124
16:19:37,252 --> 16:19:39,502
sebelum saya berpindah layar di sini.

17125
16:19:39,502 --> 16:19:43,792
Dan izinkan saya membuka\nGoogle Formulir dari awal.

17126
16:19:43,792 --> 16:19:47,572
Beri saya waktu sejenak untuk\nmembuat sesuatu dengan sangat cepat.

17127
16:19:47,572 --> 16:19:50,601
Jika Anda belum pernah memperhatikan hal ini\nsebelumnya saat membuat Google Formulir

17128
16:19:53,752 --> 16:19:55,701
Dan jika Anda ingin pengguna\n mengetikkan sesuatu

17129
16:19:55,701 --> 16:19:58,375
sangat spesifik sebagai jawaban\nteks singkat seperti ini

17130
16:19:58,375 --> 16:20:01,042
Anda mungkin tahu bahwa ada tombol\nseperti ini di dunia Google

17131
16:20:02,271 --> 16:20:04,611
Atau Anda dapat melakukan validasi respons.

17132
16:20:04,612 --> 16:20:07,012
Bisa dibilang, apa emailmu?

17133
16:20:07,012 --> 16:20:12,592
Lalu Anda bisa mengatakan sesuatu\nseperti, teks adalah email.

17134
16:20:12,591 --> 16:20:17,871
Berikut ini contoh di Google Formulir\n

17135
16:20:17,872 --> 16:20:22,492
Namun fitur yang mungkin dimiliki sebagian besar dari Anda\n

17136
16:20:22,491 --> 16:20:24,831
apakah hal ini disebut\nekspresi reguler, di mana

17137
16:20:24,832 --> 16:20:26,781
Anda sebenarnya dapat mendefinisikan suatu pola.

17138
16:20:26,781 --> 16:20:30,171
Dan saya sebenarnya bisa menerapkannya kembali\n

17139
16:20:30,171 --> 16:20:36,411
Bisa saya katakan, biarkan pengguna mengetik apa saja\n

17140
16:20:36,411 --> 16:20:41,941
lalu sesuatu yang lain, lalu\nperiode literal, lalu, misalnya

17141
16:20:43,021 --> 16:20:45,291
Jadi ini sangat samar,\namun memang pada pandangan pertama.

17142
16:20:45,292 --> 16:20:48,772
Namun ini berarti\nkarakter apa pun 0 kali lebih banyak.

17143
16:20:48,771 --> 16:20:51,502
Ini berarti karakter apa pun 0 kali lebih banyak.

17144
16:20:51,502 --> 16:20:54,067
Ini berarti periode\n literal, karena tampaknya

17145
16:20:54,067 --> 16:20:57,502
titik berarti karakter apa pun dalam\nkonteks pola ini.

17146
16:20:57,502 --> 16:21:01,412
Maka hal ini berarti\nkarakter apa pun 0 kali lebih banyak.

17147
16:21:01,411 --> 16:21:04,011
Jadi seharusnya aku\na sedikit lebih rewel.

17148
16:21:04,012 --> 16:21:06,872
Anda tidak ingin 0 kali atau lebih,\nAnda ingin 1 kali atau lebih.

17149
16:21:06,872 --> 16:21:10,682
Jadi ini dengan tanda plus berarti\nany karakter 1 kali atau lebih.

17150
16:21:10,682 --> 16:21:12,362
Jadi pasti ada sesuatu di sana.

17151
16:21:12,362 --> 16:21:16,972
Dan sepertinya aku menginginkan hal yang sama\n

17152
16:21:16,972 --> 16:21:21,502
Atau sih, jika saya ingin membatasi ini\n

17153
16:21:21,502 --> 16:21:24,862
Saya dapat mengubah\nyang terakhir menjadi .edu secara harfiah.

17154
16:21:24,862 --> 16:21:26,912
Singkat cerita,\walaupun kelihatannya seperti ini

17155
16:21:26,911 --> 16:21:31,761
Saya yakin, cukup samar, ada\n

17156
16:21:31,762 --> 16:21:35,242
dan JavaScript, dan Java, dan lainnya\n

17157
16:21:35,241 --> 16:21:37,771
pola dengan cara yang terstandarisasi.

17158
16:21:37,771 --> 16:21:41,271
Dan pola ini sebenarnya adalah sesuatu\n

17159
16:21:41,271 --> 16:21:43,491
Dan izinkan saya beralih kembali ke\nPython sebentar saja

17160
16:21:43,491 --> 16:21:45,261
untuk melakukan ide yang sama.

17161
16:21:45,262 --> 16:21:48,292
Izinkan saya beralih kembali ke kode saya di sini.

17162
16:21:48,292 --> 16:21:52,072
Izinkan saya memberikan, misalnya,\nringkasan tentang apa yang dapat Anda lakukan.

17163
16:21:52,072 --> 16:21:58,372
Dan inilah ringkasan singkatnya\n

17164
16:21:58,372 --> 16:22:04,672
Titik dapat mewakili karakter apa pun.\n

17165
16:22:05,311 --> 16:22:08,362
Jadi titik itu berarti apa saja,\njadi bisa A atau tidak sama sekali.

17166
16:22:09,502 --> 16:22:14,872
Bisa A, B, A, B, C. Bisa apa saja\n

17167
16:22:14,872 --> 16:22:18,202
Ubah itu menjadi nilai plus dan Anda sekarang\n

17168
16:22:18,201 --> 16:22:21,201
Tanda tanya berarti\nsesuatu bersifat opsional.

17169
16:22:21,201 --> 16:22:24,711
Simbol tanda sisipan berarti mulai mencocokkan pada\n

17170
16:22:24,711 --> 16:22:30,442
Tanda dolar berarti berhenti mencocokkan\nat akhir masukan pengguna.

17171
16:22:30,442 --> 16:22:32,552
Jadi kami tidak akan bermain-main dengan\semua ini sekarang.

17172
16:22:32,552 --> 16:22:36,812
Namun izinkan saya membahasnya di sini dan\nbenarnya mengatasi masalah Office ini.

17173
16:22:36,811 --> 16:22:40,792
Izinkan saya mengimpor perpustakaan baru\n

17174
16:22:42,622 --> 16:22:45,902
Dan kemudian, di sini, izinkan saya mengatakan ini.

17175
16:22:50,421 --> 16:22:55,551
Mari kita cari saja Office, kutipan,\n

17176
16:22:55,552 --> 16:22:58,072
Lalu kita akan lanjutkan\ndan tingkatkan penghitungnya.

17177
16:22:58,072 --> 16:23:00,381
Jadi ternyata\nperpustakaan ekspresi reguler

17178
16:23:00,381 --> 16:23:04,432
memiliki fungsi bernama pencarian yang\n

17179
16:23:04,432 --> 16:23:07,311
dan kemudian, sebagai argumen\keduanya, string Anda

17180
16:23:07,311 --> 16:23:09,502
ingin menganalisis pola itu.

17181
16:23:09,502 --> 16:23:13,222
Jadi itu seperti mencari jarum\n

17182
16:23:13,222 --> 16:23:17,421
Biarkan saya melanjutkan sekarang dan menjalankan\nversi program ini, Enter.

17183
16:23:17,421 --> 16:23:21,591
Dan sekarang saya mengacau karena saya lupa\n

17184
16:23:24,491 --> 16:23:27,141
Jumlah orang yang\nmenyukai The Office sekarang adalah 0.

17185
16:23:28,311 --> 16:23:30,981
terima kasih-- langkah mundur yang besar.

17186
16:23:36,951 --> 16:23:39,936
Saya memaksakan semua masukan saya menjadi huruf besar,\n

17187
16:23:39,936 --> 16:23:41,811
Jadi kita akan kembali ke\pendekatan lain di sana.

17188
16:23:42,771 --> 16:23:45,141
Oke, sekarang kita kembali ke 16.

17189
16:23:45,141 --> 16:23:47,542
Tapi aku bahkan bisa, katakanlah--

17190
16:23:47,542 --> 16:23:50,452
Saya hanya bisa mentolerir The Office.

17191
16:23:50,451 --> 16:23:55,461
Bagaimana dengan ini, atau bagaimana dengan\nsesuatu seperti, atau The Office?

17192
16:23:57,714 --> 16:23:59,631
Dan izinkan saya menggunakan\karakter khusus lainnya.

17193
16:23:59,631 --> 16:24:02,721
Tanda sisipan ini berarti\nawal string.

17194
16:24:02,722 --> 16:24:06,082
Tanda dolar ini anehnya\nmewakili akhir string.

17195
16:24:06,082 --> 16:24:09,832
Saya hanya menambahkan beberapa tanda kurung\n

17196
16:24:11,811 --> 16:24:15,921
Dan ini mengatakan mulai mencocokkan\n

17197
16:24:15,921 --> 16:24:20,002
Periksa apakah awal string adalah\n

17198
16:24:21,262 --> 16:24:23,882
Dan kemudian, Anda sebaiknya berada\na di akhir string.

17199
16:24:23,881 --> 16:24:26,991
Jadi mereka tidak bisa terus mengetik kata\nsebelum atau sesudah input itu.

17200
16:24:26,991 --> 16:24:29,031
Biarkan saya melanjutkan dan menjalankan kembali programnya.

17201
16:24:29,031 --> 16:24:32,841
Dan sekarang kita tinggal 15, yang\dulu merupakan jawaban yang benar

17202
16:24:32,841 --> 16:24:36,111
tapi kemudian kami memperhatikan The V Office.

17203
16:24:38,021 --> 16:24:41,541
Akan menjadi lebih berantakan\nuntuk mengatasinya.

17204
16:24:41,542 --> 16:24:46,897
Bagaimana jika saya menoleransi\nkarakter apa pun yang diwakili oleh titik

17205
16:24:48,982 --> 16:24:53,452
Sekarang jika saya menjalankannya kembali, sekarang saya benar-benar\nmemiliki kemampuan ekspresif ini.

17206
16:24:53,451 --> 16:24:57,682
Jadi ini hanya untuk mengatakan, memang ada\n

17207
16:24:58,732 --> 16:25:01,292
Dan beberapa alat ini\nlebih canggih dibandingkan yang lain.

17208
16:25:01,292 --> 16:25:04,298
Ini adalah salah satu yang sebenarnya Anda\n

17209
16:25:04,298 --> 16:25:06,381
dalam konteks Google\nForm selama bertahun-tahun jika Anda melakukannya

17210
16:25:06,381 --> 16:25:09,112
karena kebiasaan membuat ini untuk\n

17211
16:25:09,112 --> 16:25:11,182
Namun kini hal tersebut\nAnda dapat mulai memanfaatkannya.

17212
16:25:11,182 --> 16:25:14,781
Dan kami baru menyentuh permukaannya\n

17213
16:25:14,781 --> 16:25:18,981
Namun sekarang mari kita lakukan satu contoh terakhir\n

17214
16:25:18,982 --> 16:25:20,872
Dan mari kita\nmenulis program itu

17215
16:25:20,872 --> 16:25:25,382
sedikit lebih banyak tujuan umum daripada\n

17216
16:25:25,381 --> 16:25:27,112
dan mencari tahu popularitasnya.

17217
16:25:27,112 --> 16:25:29,752
Jadi izinkan saya melanjutkan dan menyederhanakannya.

17218
16:25:29,752 --> 16:25:31,972
Mari kita hilangkan\nekspresi reguler kita.

17219
16:25:31,972 --> 16:25:35,281
Mari lanjutkan\nmemanfaatkan judulnya.

17220
16:25:36,921 --> 16:25:41,362
di awal program ini,\n

17221
16:25:42,722 --> 16:25:45,662
Jadi judulnya sama, ayo\naskan masukan dari pengguna

17222
16:25:45,661 --> 16:25:48,831
yang pada dasarnya adalah hal yang sama\n

17223
16:25:50,302 --> 16:25:53,512
Lalu apa pun yang mereka ketik,\n

17224
16:25:53,512 --> 16:25:56,242
dan huruf besar lagi.

17225
16:25:56,241 --> 16:26:01,161
Dan sekarang, di dalam lingkaranku, aku\nbisa mengatakan sesuatu seperti ini.

17226
16:26:01,161 --> 16:26:08,001
Jika judul baris saat ini setelah\n

17227
16:26:08,002 --> 16:26:12,262
menjadi huruf besar juga, sama dengan\njudul pengguna, lalu lanjutkan

17228
16:26:12,262 --> 16:26:14,781
dan mungkin menambah penghitung.

17229
16:26:14,781 --> 16:26:16,502
Jadi saya masih membutuhkan counter itu kembali.

17230
16:26:16,502 --> 16:26:21,951
Jadi izinkan saya menjelaskannya\n

17231
16:26:21,951 --> 16:26:24,061
Lalu, di akhir\nakhir program ini

17232
16:26:24,061 --> 16:26:26,391
biarkan saya melanjutkan dan mencetak\ntidak hanya popularitasnya

17233
16:26:26,391 --> 16:26:28,381
dari apa pun yang diketik manusia.

17234
16:26:28,381 --> 16:26:31,371
Jadi sekali lagi, satu-satunya perbedaan adalah\n

17235
16:26:32,061 --> 16:26:34,491
Saya menginisialisasi\npenghitung saya ke 0, lalu saya

17236
16:26:34,491 --> 16:26:38,002
mencari\njudulnya di file CSV

17237
16:26:38,002 --> 16:26:41,152
dengan melakukan pemijatan yang sama pada\n

17238
16:26:41,152 --> 16:26:43,912
dan menghilangkan spasi.

17239
16:26:43,911 --> 16:26:47,121
Jadi sekarang, ketika saya menjalankan Python\nof favorites.py, Enter

17240
16:26:47,122 --> 16:26:55,372
Saya bisa mengetik di kantor dengan huruf kecil semua\n

17241
16:27:02,042 --> 16:27:05,982
Karena akulah yang masuk dan\n

17242
16:27:05,982 --> 16:27:08,372
Jika kami memperbaikinya, kami\nakan kembali ke 15.

17243
16:27:08,372 --> 16:27:12,992
Jika kami menambahkan dukungan untuk The V\n

17244
16:27:12,991 --> 16:27:15,691
Baiklah, ada pertanyaan\bukan berbagai manipulasi ini?

17245
16:27:15,692 --> 16:27:17,525
Dan jika Anda merasa\nseperti, ya Tuhan, ini

17246
16:27:17,525 --> 16:27:20,442
ada begitu banyak kode Python yang harus dilakukan\n

17247
16:27:20,442 --> 16:27:22,502
Dan memang benar, meskipun\itu adalah bahasa yang hebat

17248
16:27:22,502 --> 16:27:26,012
dan dapat mengatasi masalah seperti ini,\n

17249
16:27:26,012 --> 16:27:28,812
hanya untuk menanyakan satu pertanyaan seperti ini.

17250
16:27:28,811 --> 16:27:32,461
Namun ada pertanyaan tentang bagaimana kami melakukannya\n

17251
16:27:38,641 --> 16:27:40,141
Mari kita istirahat lima menit di sini.

17252
16:27:40,141 --> 16:27:42,572
Ketika kami kembali, kami akan melakukannya dengan lebih baik.

17253
16:27:43,822 --> 16:27:45,951
Dan sisa hari ini\pada akhirnya tentang bagaimana caranya

17254
16:27:45,951 --> 16:27:50,182
bisakah kita menyimpan, dan memanipulasi,\ndan mengubah, dan mengambil data

17255
16:27:50,182 --> 16:27:53,432
lebih efisien dibandingkan\nhanya dengan menulis kode mentah?

17256
16:27:53,432 --> 16:27:56,781
Ini bukan berarti Anda tidak boleh\n

17257
16:27:57,622 --> 16:28:02,362
Faktanya, ini mungkin sangat umum\n

17258
16:28:02,362 --> 16:28:04,415
dari pengguna yang mungkin\ningin Anda bersihkan.

17259
16:28:04,415 --> 16:28:07,582
Dan mungkin cara terbaik untuk melakukannya adalah\n

17260
16:28:07,582 --> 16:28:09,711
Anda dapat melakukan semua\nperubahan dan perbaikan yang diperlukan

17261
16:28:09,711 --> 16:28:12,864
seperti yang kami lakukan dengan The Office,\nmisalnya, berulang kali

17262
16:28:12,864 --> 16:28:15,531
dan gunakan kembali kode tersebut, terutama\njika semakin banyak kiriman yang dikirimkan

17263
16:28:16,491 --> 16:28:18,891
Namun tema lain\nhari ini, pada akhirnya, adalah

17264
16:28:18,891 --> 16:28:22,980
yang terkadang berbeda,\n

17265
16:28:22,980 --> 16:28:24,772
Dan faktanya, sekarang pada\ntitik istilah ini

17266
16:28:24,771 --> 16:28:27,651
saat kami mulai memperkenalkan bukan\nhanya Python, tetapi sebentar lagi

17267
16:28:27,652 --> 16:28:31,461
bahasa yang disebut SQL, dan selanjutnya\n

17268
16:28:31,461 --> 16:28:34,491
dan seminggu setelahnya, mensintesis\n

17269
16:28:34,491 --> 16:28:37,761
bersama-sama adalah untuk sekadar melukiskan gambaran bagaimana caranya

17270
16:28:37,762 --> 16:28:41,242
Anda dapat memutuskan apa saja keuntungannya\n

17271
16:28:42,171 --> 16:28:45,112
Karena pastinya Anda bisa\nmenyelesaikan masalah di masa mendatang

17272
16:28:45,112 --> 16:28:48,002
dengan berbagai cara\ndengan berbagai alat.

17273
16:28:48,002 --> 16:28:50,362
Jadi mari kita beri Anda\nalat lain, yang bisa digunakan

17274
16:28:50,362 --> 16:28:53,512
Anda dapat mengimplementasikan\ndatabase relasional yang tepat.

17275
16:28:53,512 --> 16:28:56,391
Apa yang baru saja kita lihat dalam\nbentuk file CSV

17276
16:28:56,391 --> 16:28:59,152
adalah apa yang kita sebut\ndatabase file datar.

17277
16:28:59,152 --> 16:29:02,842
Sekali lagi, hanya file yang sangat sederhana, flat\n

17278
16:29:04,612 --> 16:29:09,622
Dan itu semua pada akhirnya\nmenyimpan teks ASCII atau Unicode.

17279
16:29:09,622 --> 16:29:12,742
Namun, database relasional\adalah sesuatu yang sebenarnya

17280
16:29:12,741 --> 16:29:16,191
lebih dekat ke program spreadsheet yang tepat.

17281
16:29:16,192 --> 16:29:18,781
CSV adalah sheet\nindividual, jika Anda mau

17282
16:29:18,781 --> 16:29:20,601
dari spreadsheet saat Anda mengekspornya.

17283
16:29:20,601 --> 16:29:22,801
Jika Anda memiliki beberapa\nsheet dalam satu spreadsheet

17284
16:29:22,802 --> 16:29:24,937
Anda harus mengekspor beberapa CSV.

17285
16:29:24,936 --> 16:29:26,811
Dan itu akan mengganggu\ndengan cepat dalam kode jika Anda

17286
16:29:26,811 --> 16:29:29,331
harus membuka CSV ini,\nCSV ini, semuanya

17287
16:29:29,332 --> 16:29:32,421
mewakili sheet atau\ntab yang berbeda dalam spreadsheet yang sesuai.

17288
16:29:32,421 --> 16:29:36,862
Basis data relasional lebih\nseperti program spreadsheet

17289
16:29:36,862 --> 16:29:39,982
yang Anda, seorang programmer,\nkini dapat berinteraksi dengannya.

17290
16:29:41,482 --> 16:29:45,022
Anda dapat membaca data darinya, dan Anda\n

17291
16:29:45,021 --> 16:29:47,491
tabel menyimpan semua data Anda.

17292
16:29:47,491 --> 16:29:49,581
Jadi sedangkan Excel dan angka\nin Google spreadsheet

17293
16:29:49,582 --> 16:29:52,432
dimaksudkan untuk benar-benar digunakan kembali oleh manusia\n

17294
16:29:52,432 --> 16:29:55,192
mengklik, dan menunjuk, dan\nmemanipulasi sesuatu secara grafis

17295
16:29:55,192 --> 16:29:57,502
database relasional\menggunakan bahasa yang disebut

17296
16:29:57,502 --> 16:30:02,662
SQL adalah salah satu programmer yang\nmemiliki kemampuan serupa

17297
16:30:04,341 --> 16:30:08,061
Secara khusus, menggunakan bahasa\nyang disebut SQL, dan dalam skala tertentu

17298
16:30:08,061 --> 16:30:11,011
itu jauh lebih hebat\ntdari spreadsheet saja.

17299
16:30:11,012 --> 16:30:13,762
Faktanya, jika Anda mencobanya di Mac\n

17300
16:30:13,762 --> 16:30:16,432
mendapat puluhan ribu\nbaris, mungkin saja

17301
16:30:16,432 --> 16:30:20,122
berfungsi dengan baik, ratusan ribu\n

17302
16:30:20,122 --> 16:30:22,342
Pada titik tertentu, Mac atau\nPC Anda akan bermasalah

17303
16:30:22,341 --> 16:30:24,471
untuk membuka kumpulan data yang sangat besar.

17304
16:30:24,472 --> 16:30:26,961
Dan di situlah\ndatabase yang tepat dapat diperoleh

17305
16:30:26,961 --> 16:30:29,481
mulai digunakan dan\nbahasa yang tepat untuk database pun hadir

17306
16:30:29,482 --> 16:30:31,462
ikut bermain, ketika ini semua tentang skala.

17307
16:30:31,461 --> 16:30:34,731
Dan memang, hampir semua aplikasi seluler atau\n

17308
16:30:34,732 --> 16:30:38,762
mungkin menulis mungkin harus merencanakan\n

17309
16:30:38,762 --> 16:30:41,072
Jadi kita memerlukan\nalat yang tepat untuk masalah tersebut.

17310
16:30:41,072 --> 16:30:44,451
Untungnya, meskipun kita\n

17311
16:30:44,451 --> 16:30:49,701
pada dasarnya hanya melakukan empat hal,\n

17312
16:30:49,701 --> 16:30:53,211
SQL, bahasa ini untuk\ndatabase, mendukung kemampuan tersebut

17313
16:30:53,211 --> 16:30:57,741
untuk membuat data, membaca data,\nmemperbarui data, dan menghapus data.

17314
16:30:58,762 --> 16:31:02,031
Ada beberapa kata kunci lagi yang\n

17315
16:31:03,091 --> 16:31:04,799
Namun pada akhirnya\nmeskipun demikian

17316
16:31:04,800 --> 16:31:07,522
mulai merasa seperti ini\nis dalam waktu sangat cepat

17317
16:31:07,521 --> 16:31:10,281
semuanya bermuara pada\nempat operasi dasar ini.

17318
16:31:10,281 --> 16:31:12,981
Dan empat perintah\nin SQL, jika Anda mau

17319
16:31:12,982 --> 16:31:17,122
fungsi dalam arti mengimplementasikan\n

17320
16:31:17,122 --> 16:31:19,612
Keduanya hampir sama namun\ndengan sedikit perbedaan.

17321
16:31:19,612 --> 16:31:24,622
Kemampuan untuk membuat atau menyisipkan data\n

17322
16:31:27,472 --> 16:31:30,389
Hapus sama saja, tetapi hilangkan\nis juga kata kuncinya.

17323
16:31:30,389 --> 16:31:32,182
Jadi kita akan melihat ini dan\na beberapa kata kunci lainnya

17324
16:31:32,182 --> 16:31:35,752
dalam SQL yang, pada akhirnya, hanya\n

17325
16:31:35,752 --> 16:31:39,652
data menggunakan kata kerja, jika\nAnda mau, seperti ini.

17326
16:31:39,652 --> 16:31:43,372
Jadi untuk melakukan itu, apa\nsintaksnya?

17327
16:31:43,372 --> 16:31:45,632
Baiklah, kita tidak akan membahas\ngulma terlalu cepat dalam hal ini.

17328
16:31:45,631 --> 16:31:47,991
Namun inilah contoh\nsintaks caranya

17329
16:31:47,991 --> 16:31:51,051
Anda dapat membuat menggunakan\nbahasa ini yang disebut SQL, sesuai keinginan Anda

17330
16:31:51,052 --> 16:31:53,362
database sendiri, tabel baru.

17331
16:31:53,362 --> 16:31:56,252
Ini sangat mudah di Excel dan Google\n

17332
16:31:56,252 --> 16:31:58,252
Anda menginginkan sheet baru, Anda\nklik tombol plus.

17333
16:31:59,031 --> 16:32:00,832
Beri nama,\ndan boom, selesai.

17334
16:32:00,832 --> 16:32:05,391
Namun, dalam dunia pemrograman, jika\n

17335
16:32:05,391 --> 16:32:08,781
spreadsheet di memori komputer,\n

17336
16:32:08,781 --> 16:32:13,762
seperti sheet, yang mempunyai nama, lalu\n

17337
16:32:13,762 --> 16:32:17,332
Namun tidak seperti Google Spreadsheets,\ndan Apple Numbers, dan Excel

17338
16:32:17,332 --> 16:32:20,415
Anda harus memutuskan sebagai\npemrogram jenis data apa

17339
16:32:20,415 --> 16:32:22,582
Anda akan menyimpan\nsetiap kolom ini.

17340
16:32:22,582 --> 16:32:24,772
Sekarang meskipun Excel,\ndan Google Spreadsheets

17341
16:32:24,771 --> 16:32:28,651
dan Numbers memungkinkan Anda memformat\n

17342
16:32:28,652 --> 16:32:33,022
ini bukan data yang diketik dengan kuat seperti itu\n

17343
16:32:33,021 --> 16:32:35,541
Dan bahkan di Python\nada tipe data yang mendasarinya.

17344
16:32:35,542 --> 16:32:37,500
Meskipun Anda tidak perlu\nmengetikkannya secara eksplisit

17345
16:32:37,500 --> 16:32:40,241
database ingin\tahu, apakah Anda menyimpan bilangan bulat?

17346
16:32:40,241 --> 16:32:41,981
Apakah Anda menyimpan bilangan real atau float?

17347
16:32:43,482 --> 16:32:46,302
Karena semakin besar\ndata Anda, semakin banyak petunjuknya

17348
16:32:46,302 --> 16:32:49,752
Anda memberikan database tentang\n Anda

17349
16:32:49,752 --> 16:32:52,841
semakin cepat ia dapat membantu Anda\nmendapatkan dan menyimpan data tersebut.

17350
16:32:52,841 --> 16:32:54,644
Jadi tipe akan\nmenjadi penting lagi

17351
16:32:54,644 --> 16:32:57,101
tapi untungnya jumlahnya tidak akan sebanyak itu.

17352
16:32:57,101 --> 16:32:59,981
Sekarang bagaimana cara mengonversi,\nmisalnya, beberapa data nyata

17353
16:32:59,982 --> 16:33:02,832
seperti itu dari Anda,\nfile favorit saya.csv

17354
16:33:02,832 --> 16:33:04,781
ke dalam database relasional yang tepat?

17355
16:33:04,781 --> 16:33:07,991
Nah, ternyata\menggunakan SQL saya bisa melakukan ini

17356
16:33:07,991 --> 16:33:10,601
di VS Code di Mac saya sendiri,\atau PC, atau di cloud

17357
16:33:10,601 --> 16:33:13,796
di sini hanya dengan mengimpor\nCSV ke dalam database.

17358
16:33:13,796 --> 16:33:15,671
Pada akhirnya kita akan melihat\ncara melakukannya secara manual.

17359
16:33:15,671 --> 16:33:17,963
Untuk saat ini, saya akan menggunakan\nlebih banyak proses otomatis.

17360
16:33:17,963 --> 16:33:20,021
Jadi izinkan saya membahas VS Code di sini.

17361
16:33:20,021 --> 16:33:22,511
Biarkan saya mengetik ls untuk melihat\ndimana kita tinggalkan sebelumnya.

17362
16:33:22,512 --> 16:33:26,347
Saya punya dua file favorit.csv, yang\n

17363
16:33:26,347 --> 16:33:27,972
Ingatlah bahwa saya membuat beberapa perubahan.

17364
16:33:27,972 --> 16:33:31,391
Kami menghapus beberapa Ini\ndari file untuk The Office.

17365
16:33:31,391 --> 16:33:33,942
Tapi ini adalah file\nas yang sama sebelumnya, dan kemudian kita

17366
16:33:33,942 --> 16:33:36,552
memiliki favorit.py, yang\nakan kita sisihkan untuk saat ini.

17367
16:33:36,552 --> 16:33:40,212
Saya akan melanjutkan sekarang\ndan menjalankan perintah SQLite3.

17368
16:33:40,211 --> 16:33:43,362
Jadi dalam dunia\ndatabase relasional, ada

17369
16:33:43,362 --> 16:33:48,372
banyak produk berbeda di luar sana,\nbanyak perangkat lunak berbeda

17370
16:33:48,372 --> 16:33:50,711
mengimplementasikan bahasa SQL.

17371
16:33:51,942 --> 16:33:55,422
Ada sesuatu yang disebut MySQL\n

17372
16:33:55,421 --> 16:33:57,461
Facebook, misalnya,\menggunakannya sejak awal.

17373
16:33:57,461 --> 16:34:00,372
PostgreSQL, Microsoft\nAccess Server, Oracle

17374
16:34:00,372 --> 16:34:02,300
dan mungkin sejumlah\nnama produk lainnya

17375
16:34:02,300 --> 16:34:04,092
Anda mungkin pernah menemukannya\ndari waktu ke waktu, yang mana

17376
16:34:04,091 --> 16:34:08,322
artinya ada banyak\njenis alat dan server yang berbeda

17377
16:34:08,322 --> 16:34:10,332
dan perangkat lunak di mana Anda dapat menggunakan SQL.

17378
16:34:10,332 --> 16:34:13,122
Kita akan menggunakan yang sangat ringan\n

17379
16:34:14,711 --> 16:34:17,021
Ini adalah versi\nSQL pada umumnya

17380
16:34:17,021 --> 16:34:19,361
digunakan di iPhone dan\nperangkat Android saat ini.

17381
16:34:19,362 --> 16:34:22,272
Jika Anda mendownload aplikasi yang menyimpan\ndata seperti kontak Anda sendiri

17382
16:34:22,271 --> 16:34:24,341
biasanya disimpan menggunakan SQLite.

17383
16:34:24,341 --> 16:34:28,051
Karena cukup ringan,\n

17384
16:34:28,052 --> 16:34:31,152
ribuan, bahkan puluhan\nribuan data

17385
16:34:31,152 --> 16:34:33,312
bahkan menggunakan versi\nyang ringan ini.

17386
16:34:33,311 --> 16:34:36,131
SQLite3 seperti versi 3 alat ini.

17387
16:34:36,131 --> 16:34:41,682
Kita akan melanjutkan dan menjalankan SQLite3\n

17388
16:34:41,682 --> 16:34:45,461
Ini merupakan hal yang konvensional di dunia\n

17389
16:34:45,461 --> 16:34:47,832
Saya akan membuat\ndatabase bernama favorit.db.

17390
16:34:47,832 --> 16:34:52,351
Setelah saya berada di dalam program, sekarang saya\n

17391
16:34:52,351 --> 16:34:54,101
Sekali lagi, bukan sesuatu\nyang harus Anda hafal

17392
16:34:54,101 --> 16:34:55,809
hanya sesuatu yang\ndapat Anda cari sesuai kebutuhan.

17393
16:34:55,809 --> 16:34:59,441
Lalu, saya akan\nimport favorites.csv

17394
16:34:59,442 --> 16:35:05,602
ke dalam tabel, yaitu sheet, jika\n

17395
16:35:05,601 --> 16:35:09,371
Sekarang saya akan menekan Enter dan saya\n

17396
16:35:10,991 --> 16:35:13,511
Sekarang saya memiliki tiga file\ndi direktori saya saat ini--

17397
16:35:13,512 --> 16:35:17,472
file CSV, file Python\ndari sebelumnya, dan sekarang favorit.db.

17398
16:35:17,472 --> 16:35:21,522
Namun jika saya melakukannya dengan benar, semua\n

17399
16:35:21,521 --> 16:35:25,182
sekarang telah dimuat ke\ndatabase yang tepat di mana saya sekarang dapat menggunakannya

17400
16:35:25,182 --> 16:35:28,521
bahasa SQL ini untuk mengaksesnya.

17401
16:35:28,521 --> 16:35:33,072
Jadi mari kita lanjutkan lagi dan jalankan SQLite3\n

17402
16:35:33,072 --> 16:35:35,982
Dan sekarang, pada perintah SQLite\nsaya bisa memulai

17403
16:35:35,982 --> 16:35:38,502
untuk bermain-main dan\nmelihat data apa ini.

17404
16:35:38,502 --> 16:35:41,951
Misalnya, saya dapat\nmelihatnya dengan mengetikkan .schema

17405
16:35:41,951 --> 16:35:44,703
apa skema\ndata saya, apa desainnya.

17406
16:35:44,703 --> 16:35:47,411
Sekarang tidak ada pemikiran yang dimasukkan ke dalam\n

17407
16:35:47,411 --> 16:35:49,241
karena saya mengotomatiskan seluruh proses.

17408
16:35:49,241 --> 16:35:52,091
Setelah kami mulai membuat\ndatabase kami sendiri, kami akan melakukannya

17409
16:35:52,091 --> 16:35:55,091
lebih memikirkan data\n

17410
16:35:55,091 --> 16:35:59,561
Tapi kita bisa melihat apa yang SQLite\nanggap saya inginkan saja

17411
16:35:59,561 --> 16:36:01,871
dengan mengimpor data secara default.

17412
16:36:01,872 --> 16:36:06,461
Apa yang dilakukan perintah import untuk saya a\n

17413
16:36:06,461 --> 16:36:09,851
Ini mengotomatiskan proses pembuatan\n

17414
16:36:11,112 --> 16:36:14,322
Dan kemudian perhatikan, dalam tanda kurung\nit beri saya tiga kolom--

17415
16:36:14,322 --> 16:36:18,701
stempel waktu, judul, dan genre, yang mana\n

17416
16:36:18,701 --> 16:36:21,341
Ketiganya telah\nditetapkan menjadi teks.

17417
16:36:21,341 --> 16:36:24,521
Sekali lagi, setelah kita merasa lebih nyaman\nkita akan membuat tabel kita sendiri

17418
16:36:24,521 --> 16:36:26,351
pilih jenis dan nama kolom kita sendiri.

17419
16:36:26,351 --> 16:36:28,691
Namun untuk saat ini, saya hanya mengotomatiskan\nseluruh proses saja

17420
16:36:28,692 --> 16:36:33,461
untuk memulai dengan menggunakan\nperintah impor bawaan ini juga.

17421
16:36:34,152 --> 16:36:36,972
Jadi apa yang bisa saya mulai lakukan sekarang?

17422
16:36:36,972 --> 16:36:42,252
Misalnya, jika saya ingin,\n

17423
16:36:42,252 --> 16:36:44,936
Saya mungkin menjalankan beberapa\nperintah yang berbeda.

17424
16:36:48,341 --> 16:36:53,762
Biarkan saya menemukan yang tepat di sini--\tidak ada satupun yang dapat dipilih.

17425
16:36:53,762 --> 16:36:56,951
Pilih salah satu\nalat kami yang paling serbaguna

17426
16:36:56,951 --> 16:36:58,521
untuk memilih data dari database ini.

17427
16:36:58,521 --> 16:37:01,061
Jadi jika saya memiliki tiga\nkolom ini di sini-- stempel waktu

17428
16:37:01,061 --> 16:37:04,362
judul, dan genre, misalkan saya\ningin memilih semua judul.

17429
16:37:04,362 --> 16:37:09,131
Melakukan hal itu sebelumnya dengan Python\nmemerlukan impor pustaka CSV

17430
16:37:09,131 --> 16:37:14,081
membuka file, membuat pembaca atau\n

17431
16:37:14,082 --> 16:37:16,842
menambahkan setiap judul ke kamus\atau hanya mencetaknya

17432
16:37:17,652 --> 16:37:20,512
Ada sekitar selusin baris\nkode saat pertama kali kami memulai.

17433
16:37:22,182 --> 16:37:26,561
Pilih judul dari\nfavorit, titik koma, selesai.

17434
16:37:26,561 --> 16:37:30,911
Jadi sekarang, dengan ini\n

17435
16:37:30,911 --> 16:37:34,271
dan itu menyimulasikan tampilannya\n

17436
16:37:36,211 --> 16:37:39,421
Memilih judul dari\nfavorit adalah penyulingan

17437
16:37:39,421 --> 16:37:42,871
dalam bahasa berbeda yang disebut\nSQL dari semua baris kode

17438
16:37:42,872 --> 16:37:46,082
Aku menulisnya sejak awal saat kita pertama kali\n

17439
16:37:46,082 --> 16:37:50,882
Oleh karena itu SQL dioptimalkan untuk\n

17440
16:37:50,881 --> 16:37:52,841
dan akhirnya, menghapus data.

17441
16:37:52,841 --> 16:37:56,041
Jadi, mungkin inilah alat yang lebih baik\n

17442
16:37:56,042 --> 16:37:59,372
Melemparkannya ke dalam format yang lebih\nkuat dan serbaguna

17443
16:37:59,372 --> 16:38:02,569
mungkin memungkinkan Anda menyelesaikan\nlebih banyak pekerjaan dengan lebih cepat

17444
16:38:02,569 --> 16:38:04,112
tanpa harus menemukan kembali rodanya.

17445
16:38:04,112 --> 16:38:06,851
Orang lain telah menemukan\ncara memilih data seperti ini.

17446
16:38:09,101 --> 16:38:12,391
Baiklah, izinkan saya menariknya\n

17447
16:38:14,732 --> 16:38:19,182
Beri aku satu detik untuk menemukan ini.

17448
16:38:19,182 --> 16:38:23,432
Jadi misalkan saya sekarang ingin memilih\ndata sedikit lebih kuat.

17449
16:38:23,432 --> 16:38:25,561
Jadi inilah yang baru saja saya\ndilakukan dengan cara kanonis.

17450
16:38:25,561 --> 16:38:27,061
Jadi pilih biasanya berfungsi seperti ini.

17451
16:38:27,061 --> 16:38:31,201
Anda memilih kolom dari\ntabel tertentu, titik koma.

17452
16:38:31,201 --> 16:38:33,601
Sayangnya,\nstitik koma bodoh kembali hadir.

17453
16:38:33,601 --> 16:38:38,051
Pilih kolom dari tabel, is\n

17454
16:38:38,052 --> 16:38:42,463
Lebih khusus lagi, saya memilih satu\n

17455
16:38:42,463 --> 16:38:43,921
Favorit adalah nama tabelnya.

17456
16:38:45,031 --> 16:38:48,781
Misalkan saya ingin mendapatkan dua hal, seperti\n

17457
16:38:48,781 --> 16:38:53,762
Saya malah bisa memilih judul,\nkoma, genre dari favorit

17458
16:38:53,762 --> 16:38:55,562
lalu, titik koma, dan Enter.

17459
16:38:55,561 --> 16:38:57,451
Ini akan terlihat\nsedikit jelek di layar saya

17460
16:38:57,451 --> 16:38:59,011
karena beberapa judul ini dan--

17461
16:38:59,012 --> 16:39:02,641
Oke, salah satu dari Anda benar-benar\nbergaul dengan Komunitas.

17462
16:39:02,641 --> 16:39:06,002
Anda dapat melihat bahwa itu hanya\ndibungkus dengan cara yang jelek

17463
16:39:06,002 --> 16:39:08,641
tapi baru saja\nmenunjukkan dua kolom kepada saya.

17464
16:39:08,641 --> 16:39:12,182
Kalau kita gulir ke atas\nag lagi, paling kiri

17465
16:39:12,182 --> 16:39:13,622
Black Mirror juga tampil maksimal.

17466
16:39:14,491 --> 16:39:17,341
Dan sekarang, oke, kita\nharus membersihkan beberapa di antaranya.

17467
16:39:17,341 --> 16:39:19,456
Game of Thrones, komedi yang bagus ya.

17468
16:39:22,891 --> 16:39:24,822
Teruskan, lanjutkan, teruskan.

17469
16:39:24,822 --> 16:39:28,211
Jadi sekarang kita telah memilih dua\nkolom yang kita pedulikan.

17470
16:39:28,711 --> 16:39:31,722
Oke, jadi sangat luas karena\nsemua genre tersebut.

17471
16:39:31,722 --> 16:39:34,476
Namun ini memungkinkan saya memilih\next data yang saya inginkan.

17472
16:39:34,476 --> 16:39:37,351
Mari kita kembali ke judulnya,\n

17473
16:39:39,091 --> 16:39:43,651
Misalnya, ternyata menggunakan\n

17474
16:39:45,241 --> 16:39:48,184
Anda memiliki banyak fungsi, serupa\n

17475
16:39:48,184 --> 16:39:49,351
di mana Anda dapat memiliki rumus.

17476
16:39:49,351 --> 16:39:51,661
SQL memberi Anda beberapa\nheuristik yang sama dengan itu

17477
16:39:51,661 --> 16:39:55,691
memungkinkan Anda menerapkan operasi\nseperti ini di seluruh kolom.

17478
16:39:55,692 --> 16:39:58,262
Misalnya, Anda dapat mengambil\rata-rata, menghitung totalnya

17479
16:39:58,262 --> 16:40:01,351
dapatkan nilai yang berbeda, paksa\n

17480
16:40:02,561 --> 16:40:04,951
Jadi mari kita coba membedakannya, misalnya.

17481
16:40:04,951 --> 16:40:08,791
Biarkan saya kembali ke Terminal saya,\ndan katakanlah, pilih

17482
16:40:08,792 --> 16:40:14,101
bagaimana dengan judul-judul berbeda\ndari tabel favorit?

17483
16:40:14,855 --> 16:40:16,772
Saya tidak repot-repot memilih\ngenre karena saya

17484
16:40:16,771 --> 16:40:18,104
ingin menjadi sedikit lebih cantik.

17485
16:40:18,105 --> 16:40:23,432
Dan Anda dapat melihat di sini bahwa kami\nhanya memiliki judul-judul yang berbeda

17486
16:40:23,432 --> 16:40:25,889
kecuali untuk masalah format.

17487
16:40:25,889 --> 16:40:27,722
Jadi spasi akan\nmenjadi masalah lagi.

17488
16:40:27,722 --> 16:40:29,555
Kapitalisasi\nakan menjadi hal penting lagi.

17489
16:40:30,572 --> 16:40:34,622
Salah satu hal yang saya lakukan dengan Python\n

17490
16:40:34,622 --> 16:40:36,272
dan kemudian menghilangkan spasi.

17491
16:40:36,271 --> 16:40:37,741
Tapi kita bisa menggabungkan beberapa di antaranya.

17492
16:40:37,741 --> 16:40:40,682
Saya bisa melakukan sesuatu seperti\nmemaksa setiap judul menjadi huruf besar

17493
16:40:40,682 --> 16:40:41,849
lalu dapatkan nilai yang berbeda.

17494
16:40:41,849 --> 16:40:44,724
Dan itu benar-benar akan menghasilkan\n

17495
16:40:44,724 --> 16:40:47,202
Dan sekali lagi, saya melakukan semuanya dalam\\nsatu baris sederhana yang cepat.

17496
16:40:47,201 --> 16:40:49,368
Jadi izinkan saya menarik\nbagian bawah layar lagi.

17497
16:40:49,368 --> 16:40:53,432
Saya memilih judul\natas yang berbeda dari favorit

17498
16:40:53,432 --> 16:40:56,412
dan itu melakukan segalanya untuk\nsaya sekaligus hanya dalam satu tarikan napas.

17499
16:40:56,411 --> 16:40:58,981
Misalkan saya ingin mendapatkan\njumlah total judul.

17500
16:40:58,982 --> 16:41:05,492
Bagaimana dengan memilih jumlah semua\njudul tersebut dari favorit?

17501
16:41:05,491 --> 16:41:09,331
Titik koma, Enter, dan sekarang\nAnda mendapatkan kembali tabel mini

17502
16:41:09,332 --> 16:41:13,302
yang hanya berisi\njawaban Anda, 158 dalam hal ini.

17503
16:41:13,302 --> 16:41:15,902
Jadi itulah total\njumlahnya, tidak berbeda

17504
16:41:15,902 --> 16:41:18,031
tapi total judul yang\nkami miliki di file.

17505
16:41:18,031 --> 16:41:21,902
Dan kami dapat terus memanipulasi\n

17506
16:41:23,792 --> 16:41:26,891
Namun ada juga\npenyaringan tambahan yang bisa kami lakukan.

17507
16:41:26,891 --> 16:41:32,351
Kami juga dapat memenuhi syarat pilihan kami pada\n

17508
16:41:32,351 --> 16:41:35,972
Jadi sama seperti di Scratch, dan C, dan\n

17509
16:41:35,972 --> 16:41:41,612
Anda juga dapat memiliki hal yang sama di SQL,\n

17510
16:41:44,732 --> 16:41:46,682
Suka memungkinkan saya melakukan perkiraan.

17511
16:41:46,682 --> 16:41:48,842
Jika saya ingin mendapatkan sesuatu\nseperti The Office

17512
16:41:48,841 --> 16:41:51,661
namun belum tentu\nT-H-E, ruang, Kantor

17513
16:41:51,661 --> 16:41:54,781
Saya bisa melakukan pencocokan pola\nmenggunakan seperti di sini.

17514
16:41:54,781 --> 16:41:58,512
Urutkan berdasarkan, batasi, dan kelompokkan berdasarkan are\n

17515
16:41:58,512 --> 16:42:01,322
Jadi izinkan saya kembali dan melakukan\na beberapa hal ini di sini.

17516
16:42:01,322 --> 16:42:07,951
Bagaimana kalau, biarkan saja, oh, tidak\n

17517
16:42:07,951 --> 16:42:10,189
tetapi batasi hingga 10 hasil.

17518
16:42:10,190 --> 16:42:13,232
Itu mungkin satu hal yang berguna\n

17519
16:42:13,232 --> 16:42:15,452
dari data di bagian atas sana.

17520
16:42:15,451 --> 16:42:21,871
Bagaimana kalau pilih semua judul\n

17521
16:42:21,872 --> 16:42:25,052
seperti, mengutip, tidak mengutip, "Kantor?

17522
16:42:25,052 --> 16:42:28,082
Dan ini hanya akan memberi saya dua jawaban.

17523
16:42:28,082 --> 16:42:32,522
Ingat, itulah dua baris yang saya\n

17524
16:42:32,521 --> 16:42:37,221
Perhatikan bahwa like memungkinkan saya juga\nmenoleransi huruf besar dan kecil.

17525
16:42:37,222 --> 16:42:40,222
Karena kalau saya saja\ngunakan saja tanda sama dengan

17526
16:42:40,222 --> 16:42:46,402
dan dalam SQL, satu tanda sama dengan\ndo sebenarnya berarti persamaan.

17527
16:42:46,402 --> 16:42:48,711
Sebagai perbandingan,\nit tidak mengerjakan tugas.

17528
16:42:48,711 --> 16:42:51,411
Ini bukan cara Anda menetapkan data dalam SQL.

17529
16:42:51,411 --> 16:42:53,281
I got back no answers there.

17530
16:42:53,281 --> 16:42:56,961
Jadi memang, tanda sama dengan\nis memberi saya jawaban literal

17531
16:42:56,961 --> 16:42:59,332
yang mencari hanya apa yang saya ketik.

17532
16:42:59,332 --> 16:43:00,711
Bagaimana saya bisa mendapatkan semua ini?

17533
16:43:00,711 --> 16:43:04,432
Ya, semangatnya mirip dengan reguler\n

17534
16:43:04,432 --> 16:43:06,961
di SQL, saya bisa melakukan sesuatu seperti ini.

17535
16:43:06,961 --> 16:43:10,671
Saya dapat memilih judul dari favorit\n

17536
16:43:12,052 --> 16:43:17,792
Tapi saya bisa menambahkan, dengan sedikit aneh, persen\n

17537
16:43:17,792 --> 16:43:23,272
Jadi bahasa SQL mendukung\ngagasan pencocokan pola yang sama

17538
16:43:23,271 --> 16:43:24,888
tetapi jauh lebih terbatas.

17539
16:43:24,889 --> 16:43:26,722
Jika kita menginginkan\nekspresi reguler yang lebih kuat

17540
16:43:26,722 --> 16:43:28,762
kami mungkin ingin\nmenggunakan Python sebagai gantinya.

17541
16:43:28,762 --> 16:43:32,062
Namun tanda persen di sini\nberarti 0 karakter atau lebih

17542
16:43:32,061 --> 16:43:34,682
di sebelah kiri, 0 atau lebih\nkarakter di sebelah kanan.

17543
16:43:34,682 --> 16:43:39,802
Jadi ini hanya akan mengambil judul apa pun yang\n

17544
16:43:40,442 --> 16:43:44,632
Dan sekarang saya mendapatkan semua 16, tampaknya\ndari hasil tersebut, lagi.

17545
16:43:45,832 --> 16:43:48,502
Baiklah, saya bisa mengetahui\njumlah judul-judul itu

17546
16:43:48,502 --> 16:43:51,482
dan dapatkan kembali\njawabannya juga.

17547
16:43:51,482 --> 16:43:54,982
Jadi sekali lagi, dibutuhkan beberapa\n pembiasaan kosakata

17548
16:43:54,982 --> 16:43:56,315
dan sintaks yang dapat Anda gunakan.

17549
16:43:56,315 --> 16:43:58,024
Ada blok bangunan\ndan lainnya.

17550
16:43:58,023 --> 16:44:00,841
Namun SQL benar-benar dirancang, sekali lagi,\n

17551
16:44:01,822 --> 16:44:06,421
Misalnya, saya belum pernah\n

17552
16:44:06,421 --> 16:44:12,201
Jadi sekarang jika saya memilih,\nbagaimana dengan judul dari favorit

17553
16:44:12,201 --> 16:44:18,682
dengan judul seperti, kutipan, tanda kutip,\n

17554
16:44:18,682 --> 16:44:20,671
Kita dapat melihat bahwa jumlah mereka\na banyak sekali.

17555
16:44:21,862 --> 16:44:23,302
Mari kita lakukan hitung cepat.

17556
16:44:25,232 --> 16:44:28,642
Ya, hapus dari favorit.

17557
16:44:28,641 --> 16:44:35,841
Oke, Anda dan saya, hapus dari favorit,\n

17558
16:44:35,841 --> 16:44:39,621
Sepertinya tidak terjadi apa-apa,\ntapi sampai jumpa Teman.

17559
16:44:44,451 --> 16:44:46,731
Jadi sekarang kami sebenarnya sudah mengubah datanya.

17560
16:44:46,732 --> 16:44:50,452
Dan inilah yang menarik\ntentang database yang tepat.

17561
16:44:50,451 --> 16:44:54,661
Ya, secara teknis Anda bisa menulis Python\n

17562
16:44:55,881 --> 16:44:58,161
Anda dapat mengubahnya menggunakan tanda kutip,\nunkutip, "A" untuk menambahkan

17563
16:44:58,161 --> 16:45:01,251
atau kutip, tanda kutip, "W" untuk\ntulis, alih-alih mengutip, tanda kutip

17564
16:45:02,605 --> 16:45:05,272
Namun yang pasti akan lebih\nmelibatkan hal tersebut dengan Python.

17565
16:45:05,271 --> 16:45:07,591
Namun dengan SQL, Anda dapat memperbarui\ndata secara real-time.

17566
16:45:07,591 --> 16:45:11,091
Dan jika saya benar-benar menjalankan\n

17567
16:45:11,091 --> 16:45:13,221
untuk aplikasi seluler, secara teoritis\nberubah

17568
16:45:13,222 --> 16:45:15,502
akan tercermin di mana saja\bukan perangkat Anda sendiri

17569
16:45:15,502 --> 16:45:17,552
jika Anda berbicara\ndengan aplikasi ini.

17570
16:45:17,552 --> 16:45:19,337
Jadi itulah arah yang kita tuju.

17571
16:45:19,336 --> 16:45:20,961
Hal lain ini mengganggu saya.

17572
16:45:20,961 --> 16:45:27,981
Jadi pilih, bagaimana dengan judul dari\nfavorit, dengan judul yang sama

17573
16:45:33,021 --> 16:45:37,491
Bagaimana kalau kita memperbarui\nfavorit dengan menetapkan judul

17574
16:45:37,491 --> 16:45:44,421
sama dengan The Office, dengan judul\n

17575
16:45:45,811 --> 16:45:47,991
Dan sekarang, jika saya memilih\nhal yang sama lagi

17576
16:45:47,991 --> 16:45:50,152
Saya bisa naik dan turun dengan\ntombol panah saya dengan cepat.

17577
16:45:50,152 --> 16:45:52,432
Sekarang tidak ada Kantor V.

17578
16:45:52,432 --> 16:45:54,542
Kami sebenarnya telah mengubah nilai itu.

17579
16:45:55,641 --> 16:46:01,222
Pilih genre dari favorit,\njudulnya adalah judul

17580
16:46:01,222 --> 16:46:04,792
sama dengan Game of Thrones, titik koma.

17581
16:46:04,792 --> 16:46:08,342
Ini agak panjang, dan aku\n

17582
16:46:08,341 --> 16:46:14,901
Jadi bagaimana kalau kita memperbarui favorit,\nset genre sama, tentu saja

17583
16:46:14,902 --> 16:46:17,991
aksi, petualangan, tentu saja, drama?

17584
16:46:19,732 --> 16:46:22,042
Fantasi, tentu saja, thriller, perang.

17585
16:46:22,042 --> 16:46:26,391
Oke, apa pun kecuali\nkomedi, menurutku.

17586
16:46:26,391 --> 16:46:28,502
Ayo lanjutkan dan tekan Enter sekarang.

17587
16:46:28,502 --> 16:46:33,141
Dan sekarang, jika saya memilih genre lagi, sama saja\n

17588
16:46:34,502 --> 16:46:36,591
Jadi apakah itu\nbenar atau tidak, itu mungkin

17589
16:46:36,591 --> 16:46:38,361
agak subyektif dan argumentatif.

17590
16:46:38,362 --> 16:46:42,262
Tapi setidaknya aku sudah membersihkan\n

17591
16:46:42,262 --> 16:46:46,012
Membuat, membaca, memperbarui, menghapus,\nAnda dapat melakukannya dengan mudah.

17592
16:46:47,631 --> 16:46:51,771
Berhati-hatilah saat menggunakan drop, dimana\nAnda dapat menjatuhkan seluruh tabel.

17593
16:46:51,771 --> 16:46:54,651
Namun melalui\nperintah semacam ini, kita bisa melakukannya sekarang

17594
16:46:54,652 --> 16:46:58,732
memanipulasi data kami jauh lebih\ncepat dan dengan satu pemikiran.

17595
16:46:58,732 --> 16:47:01,732
Faktanya, jika Anda seorang yang bercita-cita tinggi\n

17596
16:47:01,732 --> 16:47:05,662
atau analis di dunia nyata, SQL\n

17597
16:47:05,661 --> 16:47:08,914
karena ini memungkinkan Anda\nmenyelami data dengan cepat, dan bertanya

17598
16:47:08,915 --> 16:47:11,332
pertanyaan tentang data, dan dapatkan\njawaban kembali dengan cukup cepat.

17599
16:47:11,332 --> 16:47:12,872
Dan ini adalah kumpulan data sederhana.

17600
16:47:12,872 --> 16:47:17,182
Anda dapat melakukan ini dengan kumpulan data\nyang jauh lebih besar seperti yang akan kami lakukan dalam waktu dekat.

17601
16:47:17,182 --> 16:47:20,391
Atau ada pertanyaan tentang apa\nyang telah kita lihat tentang SQL sejauh ini?

17602
16:47:20,391 --> 16:47:22,512
Hanya menggores\npermukaannya, tapi sekali lagi, itu

17603
16:47:22,512 --> 16:47:28,442
intinya adalah membuat, membaca,\nmemperbarui, dan menghapus data.

17604
16:47:30,752 --> 16:47:33,162
Baiklah, mari kita pertimbangkan\ndesain data ini.

17605
16:47:33,161 --> 16:47:37,241
Ingatlah bahwa jika saya melakukan .schema, itu\n

17606
16:47:37,241 --> 16:47:39,331
apa yang disebut skema data saya.

17607
16:47:40,351 --> 16:47:42,991
Ini menyelesaikan pekerjaannya, dan sejujurnya,\tidak ada apa pun yang diketik pengguna

17608
16:47:42,991 --> 16:47:46,951
bisa dibilang teks, termasuk\n

17609
16:47:46,951 --> 16:47:49,381
Namun kumpulan data\nnya sendiri agak sederhana.

17610
16:47:49,381 --> 16:47:54,911
Namun jika kita melihat kumpulan datanya sendiri,\n

17611
16:47:54,911 --> 16:47:57,302
Pilih genre dari favorit.

17612
16:47:57,302 --> 16:47:59,882
Dan izinkan saya menunjukkan satu hal\nlainnya juga secara gaya.

17613
16:47:59,881 --> 16:48:04,391
Saya sengaja menggunakan huruf besar\n

17614
16:48:04,391 --> 16:48:08,042
dan saya huruf kecil semua\nnama kolom dan nama tabel.

17615
16:48:08,042 --> 16:48:11,101
Ini adalah konvensi, dan\nsejujurnya, ini hanya membantu Anda membaca

17616
16:48:11,101 --> 16:48:14,551
Menurut saya, kode saat Anda\nmenggabungkan nama Anda untuk kolom

17617
16:48:14,552 --> 16:48:17,942
dan tabel dengan kata kunci SQL yang tepat.

17618
16:48:17,942 --> 16:48:23,370
Namun saya dapat dengan mudah\nmemilih genre dari favorit

17619
16:48:23,370 --> 16:48:26,491
tapi sekali lagi, kata kunci khusus SQL\n

17620
16:48:26,491 --> 16:48:29,582
Jadi secara gaya, kami akan\nmerekomendasikan hal ini, dengan memilih genre

17621
16:48:38,192 --> 16:48:40,562
Saya tidak sengaja membuat\tidak pernah tampil, termasuk

17622
16:48:40,561 --> 16:48:45,752
Kantor tentang aksi, petualangan,\n

17623
16:48:45,752 --> 16:48:49,802
Bagaimana saya bisa melakukannya secara tidak sengaja?

17624
16:48:57,802 --> 16:48:59,701
Saya pikir saya sudah mengatakan\nberhati-hatilah saat ini.

17625
16:48:59,701 --> 16:49:03,152
Jadi database SQL membawa saya--\nsecara harfiah, saya memperbarui favorit

17626
16:49:03,152 --> 16:49:06,351
menyetel genre sama dengan itu,\nstitik koma, akhir pemikiran.

17627
16:49:06,351 --> 16:49:08,841
Saya benar-benar ingin mengatakan\ndi mana judulnya sama

17628
16:49:08,841 --> 16:49:11,361
kutipan, tanda kutip, "Game of Thrones.

17629
16:49:11,362 --> 16:49:14,421
Sayangnya, tidak ada perintah\nundo atau mesin waktu

17630
16:49:14,421 --> 16:49:17,271
dengan database SQL, jadi\nyang terbaik bisa kita lakukan di sini

17631
16:49:17,271 --> 16:49:21,591
adalah, mari kita singkirkan\nfavorit.db.

17632
16:49:21,591 --> 16:49:27,681
Mari kita jalankan SQLite dari favorit.db\n

17633
16:49:27,682 --> 16:49:29,781
Izinkan saya mengubah diri saya ke mode CSV.

17634
16:49:29,781 --> 16:49:35,271
Izinkan saya mengimpor, ke\ntabel favorit saya, file CSV.

17635
16:49:35,271 --> 16:49:39,591
Dan sekarang, Teman telah kembali,\nbaik atau buruk

17636
16:49:39,591 --> 16:49:40,851
tapi begitu juga semua genre kami.

17637
16:49:43,432 --> 16:49:46,671
Jika sekarang saya memuat ulang file\ndan memilih, memberi bintang, dari--

17638
16:49:47,182 --> 16:49:51,180
Pilih genre dari favorit,\nitulah hasil yang saya dapatkan.

17639
16:49:51,180 --> 16:49:53,972
Ini jauh lebih berantakan, tapi itu\n

17640
16:49:53,972 --> 16:49:55,639
Tapi sekarang kita kembali ke data awal.

17641
16:49:55,639 --> 16:49:58,042
Pelajarannya di sini, pastikan\nuntuk mencadangkan pekerjaan Anda.

17642
16:49:58,582 --> 16:50:02,192
Jadi apa lagi yang bisa kami\nlakukan dengan data ini?

17643
16:50:02,192 --> 16:50:05,822
Yah, saya tidak suka desain\n

17644
16:50:05,822 --> 16:50:08,542
Pertama, kami tidak memiliki\nanvalidasi apa pun

17645
16:50:08,542 --> 16:50:10,552
tapi masukan pengguna akan berantakan.

17646
16:50:10,552 --> 16:50:13,132
Ada banyak\nredundansi di sini.

17647
16:50:15,061 --> 16:50:17,101
Izinkan saya memilih semua\nkomedi yang Anda ketikkan.

17648
16:50:17,101 --> 16:50:23,301
Jadi pilih judul dari\nfavorit, dengan genre yang sama

17649
16:50:25,461 --> 16:50:31,072
Oke, jadi semua acaranya\nyang jelas-jelas komedi.

17650
16:50:31,072 --> 16:50:34,281
Namun menurut saya mungkin\nsebenarnya ada yang lain.

17651
16:50:37,521 --> 16:50:39,381
Apa itu komedi dan drama?

17652
16:50:39,381 --> 16:50:44,481
Bagaimana kalau kita mencari-- oops,\n

17653
16:50:44,482 --> 16:50:49,042
Oke, jadi The Office, dalam hal ini, adalah\n

17654
16:50:49,042 --> 16:50:52,351
Philadelphia selalu cerah,\ndan Gilmore Girls juga.

17655
16:50:52,351 --> 16:50:56,792
Namun perhatikan bahwa saya mendapatkan lebih banyak lagi\nbila saya hanya menelusuri komedi.

17656
16:50:56,792 --> 16:51:01,792
Jadi yang menarik di sini adalah, karena saya\n

17657
16:51:01,792 --> 16:51:04,372
seperti yang dilakukan Google, sebagai\na daftar yang dipisahkan koma

17658
16:51:04,372 --> 16:51:08,932
sebenarnya sangat sulit dan berantakan\n

17659
16:51:08,932 --> 16:51:12,171
yang di suatu tempat digambarkan sebagai komedi.

17660
16:51:12,171 --> 16:51:15,021
Karena jika saya mencari penawaran,\n

17661
16:51:15,021 --> 16:51:18,951
Aku akan ambil yang ini, terserah\n

17662
16:51:20,582 --> 16:51:22,012
Tapi aku tidak akan mendapatkan yang ini.

17663
16:51:22,012 --> 16:51:23,512
Saya tidak akan mendapatkan yang ini.

17664
16:51:24,411 --> 16:51:28,131
Jika saya mencari, di mana genre\n

17665
16:51:28,131 --> 16:51:29,691
mengapa saya melewatkan acara lainnya?

17666
16:51:37,362 --> 16:51:39,732
Ini bukan sekedar komedi,\namun komedi dan drama

17667
16:51:39,732 --> 16:51:42,022
dan komedi atau acara\nberita, dan seterusnya.

17668
16:51:42,021 --> 16:51:45,851
Jadi saya harus mencari koma ini,\n

17669
16:51:45,851 --> 16:51:47,902
Biarkan saya menyalin ini sehingga saya bisa melakukan ini.

17670
16:51:47,902 --> 16:51:51,491
Izinkan saya menelusuri\ngenre yang sama dengan komedi.

17671
16:51:51,491 --> 16:51:58,572
Bagaimana kalau, atau genre sama dengan\nkomedi, drama, atau genre

17672
16:51:58,572 --> 16:52:01,991
sama dengan semua ini,\nkomedi, berita, acara bincang-bincang?

17673
16:52:01,991 --> 16:52:03,711
Saya akan mendapatkan lebih banyak hasil.

17674
16:52:03,711 --> 16:52:05,241
Tapi itu tidak akan berjalan dengan baik.

17675
16:52:05,241 --> 16:52:08,152
Apa yang bisa saya lakukan selain\nmenghitung dengan ors

17676
16:52:08,152 --> 16:52:11,141
semua permutasi\nogenre yang berbeda, menurut Anda?

17677
16:52:15,872 --> 16:52:19,772
Jadi saya bisa menggunakan kata kunci is,\nsmirip dengan Python dengan kata in.

17678
16:52:19,771 --> 16:52:22,322
Saya bisa menggunakan kata kunci suka\nbegitu lama

17679
16:52:22,322 --> 16:52:27,421
karena genrenya seperti\nkomedi di suatu tempat di sana

17680
16:52:27,421 --> 16:52:31,241
itu akan memberiku semuanya,\n

17681
16:52:31,241 --> 16:52:34,606
Tapi izinkan saya melanjutkan\membuka formulir yang tadi.

17682
16:52:37,591 --> 16:52:40,414
Coba saya lihat apakah saya bisa membukanya\nsecepatnya sebelum saya beralih.

17683
16:52:40,415 --> 16:52:42,332
Jika kita melihat kembali\nformulirnya, ingatlah hal itu di sana

17684
16:52:42,332 --> 16:52:47,972
adalah semua tombol radio\yang menanyakan genre tertentu

17685
16:52:49,872 --> 16:52:55,052
Dan jika saya membuka ini, biarkan layar penuh\n

17686
16:52:55,052 --> 16:52:58,262
Anda akan melihat semua\ngenre di sini, tidak ada satupun

17687
16:52:58,262 --> 16:53:04,022
apakah itu mengkhawatirkan kecuali a\n

17688
16:53:04,021 --> 16:53:08,671
Di mana kata kunci suka\na saja bisa membuat saya mendapat masalah?

17689
16:53:13,021 --> 16:53:16,531
DAVID J. MALAN: Ya, musik dan musikal\n

17690
16:53:16,531 --> 16:53:19,002
Karena, pertama, mereka adalah genre yang berbeda.

17691
16:53:19,002 --> 16:53:21,652
Namun jika saya hanya mencari\nsesuatu yang seperti musik

17692
16:53:21,652 --> 16:53:24,152
Saya akan secara tidak sengaja menyedot\nin semua musikalnya, yang mana

17693
16:53:25,292 --> 16:53:28,652
Jika musik adalah video musik atau\napa pun, dan musikal sebenarnya adalah

17694
16:53:28,652 --> 16:53:31,961
jenis pertunjukan yang berbeda, saya\ntidak ingin melakukan itu begitu saja.

17695
16:53:31,961 --> 16:53:33,451
Jadi sepertinya sangat berantakan.

17696
16:53:33,451 --> 16:53:37,023
Saya mungkin bisa meretas sesuatu bersama-sama\n

17697
16:53:37,982 --> 16:53:40,862
Namun ini bukan\ndesain data yang bagus.

17698
16:53:40,862 --> 16:53:43,232
Google melakukannya\ndengan cara ini karena adil

17699
16:53:43,232 --> 16:53:47,342
sederhana untuk menyimpan semua\ndata pengguna dalam satu kolom

17700
16:53:47,341 --> 16:53:49,861
dan seperti yang mereka lakukan,\npisahkan dengan koma.

17701
16:53:49,862 --> 16:53:54,061
Namun ini adalah cara yang\nberantakan dalam menggunakan CSV

17702
16:53:54,061 --> 16:53:58,171
dengan meletakkan nilai yang dipisahkan koma\n

17703
16:53:58,171 --> 16:54:00,691
Bisa dibilang, orang-orang di\nGoogle mungkin baru saja melakukan hal ini

17704
16:54:01,862 --> 16:54:03,987
Dan mereka tidak ingin\ngmemberi banyak lembar kepada orang-orang

17705
16:54:03,987 --> 16:54:07,561
atau memperumit masalah menggunakan yang lain\n

17706
16:54:07,561 --> 16:54:09,792
Namun saya yakin ada\ncara yang lebih baik bagi kita untuk melakukan ini.

17707
16:54:09,792 --> 16:54:11,202
Dan izinkan saya melanjutkan dan melakukan ini.

17708
16:54:11,201 --> 16:54:13,319
Biarkan saya kembali ke kode saya di sini.

17709
16:54:13,319 --> 16:54:15,362
Dan sebentar lagi, saya\nakan mengambil sebuah program

17710
16:54:15,362 --> 16:54:19,592
yang saya tulis sebelumnya, itu akan terjadi\n

17711
16:54:19,591 --> 16:54:24,451
ulangi semua baris, dan muat\n

17712
16:54:24,451 --> 16:54:27,971
dua tabel, satu disebut\nacara, dan satu lagi disebut genre

17713
16:54:27,972 --> 16:54:30,482
untuk benar-benar memisahkan\nkedua hal ini.

17714
16:54:30,482 --> 16:54:33,072
Beri saya waktu sebentar untuk mengambil kodenya.

17715
16:54:33,072 --> 16:54:36,061
Dan ketika saya menjalankan ini, saya\tidak perlu menjalankannya sekali saja.

17716
16:54:36,061 --> 16:54:38,432
Biarkan saya melanjutkan dan\nmenjalankan Python sebentar lagi

17717
16:54:38,432 --> 16:54:41,281
dan saya akan mengungkapkan hasilnya sebentar lagi.

17718
16:54:41,281 --> 16:54:44,131
Ini akan menjadi versi\n8 kode online.

17719
16:54:44,131 --> 16:54:47,822
Saat saya melakukan ini, izinkan saya\nahead membuka file ini.

17720
16:54:47,822 --> 16:54:51,601
Beri saya waktu sebentar untuk memindahkan\nit ke direktori ini.

17721
16:54:53,911 --> 16:54:56,856
Jadi di sini kami memiliki versi 8\nini yang tersedia online

17722
16:54:56,857 --> 16:54:58,232
itu akan melakukan hal berikut.

17723
16:54:58,232 --> 16:55:00,190
Dan saya akan mengabaikan beberapa\ndetailnya begitu saja

17724
16:55:00,190 --> 16:55:04,082
agar kita tidak terjebak dalam\ngangguan beberapa kode ini.

17725
16:55:04,082 --> 16:55:06,722
Saya akan menggunakan, di\nbagian atas program ini

17726
16:55:06,722 --> 16:55:11,162
seperti yang akan segera kita lihat, perpustakaan CS50,\n

17727
16:55:11,161 --> 16:55:14,072
atau get_int, atau get_float, tetapi\nkarena ada beberapa SQL bawaan

17728
16:55:14,072 --> 16:55:17,222
fungsi yang belum kita diskusikan\n

17729
16:55:18,091 --> 16:55:22,021
Namun di dalam perpustakaan CS50 kami akan\n

17730
16:55:22,021 --> 16:55:26,671
SQL yang memberi Anda kemampuan menggunakan\n

17731
16:55:26,671 --> 16:55:31,381
secara teknis disebut URI, yang memungkinkan\n

17732
16:55:31,381 --> 16:55:33,721
Dan singkatnya, semua\nokode berikutnya

17733
16:55:33,722 --> 16:55:37,921
akan mengulangi ini\n

17734
16:55:37,921 --> 16:55:41,582
Dan itu akan mengimpornya\ninke database SQLite

17735
16:55:41,582 --> 16:55:44,772
tapi itu akan menggunakan dua\ntabel, bukan hanya satu.

17736
16:55:44,771 --> 16:55:46,981
Jadi beri saya waktu sebentar\nuntuk menjalankan ini, dan saya akan melakukannya

17737
16:55:48,942 --> 16:55:51,612
Ini akan\ndijalankan di favorit.csv.

17738
16:55:56,851 --> 16:56:00,826
Dan lihat di sini,\ngberi saya waktu sebentar.

17739
16:56:11,421 --> 16:56:14,362
Program ini tidak akan memakan waktu\nselama ini.

17740
16:56:24,841 --> 16:56:27,691
Izinkan saya membaca sekilas kode ini secara nyata\n

17741
16:56:30,182 --> 16:56:35,732
Pembaca, judul, ID acara\nin dua acara tertentu.

17742
16:56:35,732 --> 16:56:40,712
Genre [Tak Terdengar] terpecah, DB dijalankan.

17743
16:56:41,222 --> 16:56:42,752
Ini saya sedang melakukan debug secara real-time.

17744
16:56:42,752 --> 16:56:48,184
Selama ini kami menganjurkan Anda untuk menggunakan\n

17745
16:56:48,184 --> 16:56:50,101
Kita lihat seberapa cepat saya\ndapat pulih dari masalah ini.

17746
16:56:50,101 --> 16:56:51,902
Python favorit versi 8.

17747
16:56:54,442 --> 16:56:57,412
Oke, jadi inilah saya melakukan debug secara real time.

17748
16:56:58,224 --> 16:56:59,932
Oh, mungkin aku tidak\nmenunggu cukup lama.

17749
16:57:01,281 --> 16:57:05,241
Apa yang saya lakukan adalah mencetak\nkamus yang mewakili

17750
16:57:05,241 --> 16:57:06,883
setiap baris yang Anda semua ketik.

17751
16:57:06,883 --> 16:57:08,341
Dan kami benar-benar membuat kemajuan.

17752
16:57:09,561 --> 16:57:11,851
Saya terlalu tidak sabar dan\ntidak menunggu cukup lama.

17753
16:57:13,311 --> 16:57:15,711
Baiklah, terkadang yang perlu kita\nlakukan hanyalah menunggu.

17754
16:57:15,711 --> 16:57:19,762
Biarkan saya melanjutkan sekarang dan membuka\nfile ini menggunakan SQLite3.

17755
16:57:19,762 --> 16:57:23,422
Jadi di SQLite3 saya sekarang memiliki\nversi favorit.db yang berbeda.

17756
16:57:23,421 --> 16:57:25,311
Saya menamakannya nomor 8 untuk konsistensi.

17757
16:57:25,311 --> 16:57:28,621
Setelah saya menjalankan program, saya dapat\ndo .schema melihat ke dalamnya.

17758
16:57:28,622 --> 16:57:32,542
Dan inilah dua tabel di\n

17759
16:57:32,542 --> 16:57:36,262
Saya telah membuat tabel bernama show, ini\n

17760
16:57:36,262 --> 16:57:39,752
yang favorit,\nyang memiliki dua kolom.

17761
16:57:39,752 --> 16:57:42,154
Yang satu disebut ID, yang satu lagi disebut Judul.

17762
16:57:42,154 --> 16:57:44,362
Namun sekarang saya akan mulai\n mencoba beberapa hal

17763
16:57:44,362 --> 16:57:45,982
fitur lain dari SQL.

17764
16:57:45,982 --> 16:57:50,242
Dan selain ada teks, ternyata\n

17765
16:57:50,241 --> 16:57:52,252
Selain itu ada\ntipe data yang disebut teks

17766
16:57:52,252 --> 16:57:55,491
ada juga kunci\nfrasa khusus yang dapat Anda tentukan

17767
16:57:55,491 --> 16:57:57,171
bahwa judulnya tidak akan pernah nol.

17768
16:57:57,171 --> 16:58:00,502
Pikirkan kembali penggunaan\nnull kita di C. Pikirkan kembali

17769
16:58:00,502 --> 16:58:02,601
ke kata kunci tidak ada dengan Python.

17770
16:58:02,601 --> 16:58:06,171
Ini adalah batasan database yang\n

17771
16:58:06,171 --> 16:58:07,972
tidak dapat memiliki acara TV favorit.

17772
16:58:07,972 --> 16:58:11,662
Jika Anda mengirimkan formulir, Anda harus\nmengetikkan judulnya

17773
16:58:11,661 --> 16:58:13,591
untuk berakhir di database kami di sini.

17774
16:58:13,591 --> 16:58:16,281
Dan Anda akan melihat satu fitur baru lainnya.

17775
16:58:16,281 --> 16:58:18,801
Ternyata, di\ntabel ini saya mendefinisikan apa itu

17776
16:58:18,802 --> 16:58:22,312
disebut kunci utama,\nkhususnya menjadi kolom ID.

17777
16:58:22,311 --> 16:58:23,941
Lebih lanjut tentang itu sebentar lagi.

17778
16:58:23,942 --> 16:58:28,042
Sementara itu, tabel kedua kode saya\n

17779
16:58:28,042 --> 16:58:33,561
memberi saya kolom bernama\nshow ID, dan kemudian, genre

17780
16:58:33,561 --> 16:58:36,481
yang nilainya berupa teks\nyang juga tidak boleh nol.

17781
16:58:36,482 --> 16:58:38,102
Dan lebih lanjut tentang ini sebentar lagi.

17782
16:58:38,101 --> 16:58:41,182
Tabel ini memiliki apa yang\nkita sebut sebagai kunci asing

17783
16:58:41,182 --> 16:58:45,891
khususnya kolom show ID\nreferensi yang menunjukkan ID.

17784
16:58:45,891 --> 16:58:48,591
Jadi sebelum kita masuk ke\nmasalah ini, ini

17785
16:58:48,591 --> 16:58:52,461
sekarang menjadi cara untuk membuat\nrelasi dalam database relasional.

17786
16:58:52,461 --> 16:58:56,481
Jika saya memiliki dua tabel sekarang, bukan\nhanya satu, entah bagaimana mereka bisa

17787
16:58:56,482 --> 16:59:00,062
dihubungkan bersama oleh kolom yang sama.

17788
16:59:00,061 --> 16:59:03,201
Dengan kata lain, kolom pertunjukan--

17789
16:59:03,201 --> 16:59:06,682
show table akan memberi\nsaya tabel dengan dua kolom--

17790
16:59:08,421 --> 16:59:12,141
Setiap gelar yang Anda berikan kepada saya, saya\nakan memberikan nilai unik.

17791
16:59:12,141 --> 16:59:16,942
Sementara itu, tabel genre adalah\n

17792
16:59:16,942 --> 16:59:19,822
tunggal dengan ide yang sama.

17793
16:59:19,822 --> 16:59:26,491
Dan hasilnya, muncul kembali ke\n

17794
16:59:26,491 --> 16:59:30,801
Pilih bintang dari pertunjukan\ndatabase baru ini

17795
16:59:30,802 --> 16:59:34,372
dan kamu akan melihat bahwa aku sudah memberi,\n

17796
16:59:36,004 --> 16:59:39,171
Saya tidak memfilter duplikat atau melakukan\n

17797
16:59:39,771 --> 16:59:42,271
Jadi akan ada beberapa\ndduplikasi di sini karena saya tidak melakukannya

17798
16:59:42,271 --> 16:59:44,182
ingin menghapus data siapa pun.

17799
16:59:44,182 --> 16:59:47,302
Namun Anda akan melihatnya,\nmemang, saya telah memberikan segalanya

17800
16:59:47,302 --> 16:59:49,762
pengenal unik, dari\norang pertama yang

17801
16:59:49,762 --> 16:59:53,992
mengetik Bagaimana Aku Bertemu Ibumu, semuanya\n

17802
16:59:53,991 --> 17:00:01,101
Sedangkan jika saya pilih bintang dari\n

17803
17:00:01,101 --> 17:00:03,621
kolom di\ndata asli, sekarang Anda akan melakukannya

17804
17:00:03,622 --> 17:00:08,537
lihat desain yang jauh lebih baik untuk data ini.

17805
17:00:08,536 --> 17:00:09,661
Perhatikan apa yang telah saya lakukan di sini.

17806
17:00:09,661 --> 17:00:12,711
Biarkan saya pergi ke puncak dan\n

17807
17:00:12,711 --> 17:00:16,849
disebut ID acara,\no lainnya disebut genre.

17808
17:00:16,849 --> 17:00:18,891
Dan lagi, saya menulis beberapa\nkode untuk melakukan ini karena saya

17809
17:00:18,891 --> 17:00:22,016
harus membawa keluaran Google yang berantakan ke mana\n

17810
17:00:22,016 --> 17:00:25,671
Saya harus menghilangkan koma dan\n

17811
17:00:27,112 --> 17:00:29,542
Meskipun kami belum\nmemperkenalkan sintaks yang digunakan

17812
17:00:29,542 --> 17:00:32,572
kita dapat menyusun kembali\ndatanya dan mengaitkannya kembali

17813
17:00:32,572 --> 17:00:35,872
genre Anda dengan\njudul Anda, alasannya, sekilas

17814
17:00:35,872 --> 17:00:38,482
mungkinkah ini desain yang lebih baik sekarang?

17815
17:00:38,482 --> 17:00:42,082
Meskipun saya telah menggandakan\njumlah tabel dari satu menjadi dua

17816
17:00:42,082 --> 17:00:46,882
mengapa ini mungkin mengarah\nke arah desain yang lebih baik?

17817
17:00:46,881 --> 17:00:48,471
Apa insting Anda?

17818
17:00:53,061 --> 17:00:56,572
Sekali lagi, pertama kali menggunakan SQL,\nmungkin mengapa lebih baik

17819
17:00:56,572 --> 17:00:59,122
bahwa kami telah melakukan ini\ndengan tabel genre kami?

17820
17:01:02,542 --> 17:01:06,702
Oh, hanya karena kita punya\n

17821
17:01:09,190 --> 17:01:14,472
Kami telah membersihkan data dengan memberi\n

17822
17:01:14,472 --> 17:01:16,601
kolom di\nGoogle Spreadsheet asli

17823
17:01:16,601 --> 17:01:19,371
selnya sendiri di tabel ini, jika Anda mau.

17824
17:01:19,372 --> 17:01:22,272
Dan sekarang pemberitahuan acara ID\nmungkin muncul beberapa kali.

17825
17:01:22,271 --> 17:01:26,871
Siapa pun yang mengetik Bagaimana Aku Bertemu Ibumu,\n

17826
17:01:26,872 --> 17:01:29,802
Jadi kita melihat bahwa\nacara ID 1 adalah sebuah komedi.

17827
17:01:30,987 --> 17:01:32,862
Saya lupa nama\npertunjukan kedua begitu saja.

17828
17:01:32,862 --> 17:01:37,302
Tapi orang itu, siapa pun yang\ditugaskan menunjukkan ID 2 dicentang

17829
17:01:37,302 --> 17:01:39,192
sejumlah besar kotak genre.

17830
17:01:39,192 --> 17:01:42,882
Itu terjadi lagi dengan acara ID 3, 4.

17831
17:01:42,881 --> 17:01:46,281
Orang 5, 6, 7 hanya mencentang satu kotak.

17832
17:01:46,281 --> 17:01:50,381
Jadi sekarang Anda dapat melihat bahwa kami telah\n

17833
17:01:50,381 --> 17:01:53,031
mungkin disebut hubungan satu-ke-banyak.

17834
17:01:53,031 --> 17:01:58,391
Hubungan satu-ke-banyak, dimana\n

17835
17:01:58,391 --> 17:02:02,141
sekarang dapat memiliki banyak genre\yang terkait dengannya, masing-masing genre

17836
17:02:02,141 --> 17:02:06,591
diwakili oleh baris terpisah di sini.

17837
17:02:06,591 --> 17:02:10,301
Jadi sekali lagi, jika saya melanjutkan dan\nmemilih bintang dari acara--

17838
17:02:10,302 --> 17:02:14,082
mari kita batasi menjadi 10 yang pertama saja\n

17839
17:02:14,082 --> 17:02:17,112
Bagaimana Aku Bertemu Ibumu, Para Soprano\nadalah masukan kedua di sana.

17840
17:02:17,112 --> 17:02:20,442
Tampaknya sekarang saya telah\nmembuat data dengan cara ini

17841
17:02:20,442 --> 17:02:25,266
Saya idealnya bisa mencari\n

17842
17:02:25,266 --> 17:02:26,891
Saya tidak perlu khawatir tentang koma.

17843
17:02:26,891 --> 17:02:29,266
Saya tidak perlu khawatir tentang\npendekatan musik yang bersifat hackish

17844
17:02:29,266 --> 17:02:30,972
menjadi substring musikal.

17845
17:02:30,972 --> 17:02:33,652
Namun bagaimana saya bisa\nmengembalikan data ini?

17846
17:02:33,652 --> 17:02:35,092
Baiklah, mari kita lanjutkan dan lakukan ini.

17847
17:02:35,091 --> 17:02:39,041
Misalkan saya memang ingin kembali\nmungkin semua komedinya.

17848
17:02:39,042 --> 17:02:42,461
Semua komedi, apa pun\n

17849
17:02:42,461 --> 17:02:44,891
kotak atau beberapa kotak saja.

17850
17:02:44,891 --> 17:02:48,671
Bagaimana sekarang, mengingat saya\nmempunyai dua tabel, bisakah saya

17851
17:02:48,671 --> 17:02:53,082
memilih hanya\njudul komedi?

17852
17:02:53,082 --> 17:02:55,122
Saya sebenarnya telah membuat\nmasalahnya sedikit lebih sulit

17853
17:02:55,122 --> 17:02:58,062
tapi sekali lagi, SQL akan\ngmemberi saya solusi untuk ini.

17854
17:02:58,061 --> 17:03:00,371
Masalahnya kalau saya\ningin mencari komedi

17855
17:03:00,372 --> 17:03:03,162
Saya harus memeriksa tabel genre terlebih dahulu.

17856
17:03:03,161 --> 17:03:04,991
Lalu apa manfaatnya bagi saya?

17857
17:03:04,991 --> 17:03:08,921
Jika saya mencari genre\ntable komedi

17858
17:03:08,921 --> 17:03:11,951
apa yang berpotensi memberi saya imbalan?

17859
17:03:13,451 --> 17:03:14,451
DAVID J. MALAN: Mungkin tunjukkan ID.

17860
17:03:15,243 --> 17:03:21,161
Izinkan saya memilih ID acara dari genre,\n

17861
17:03:21,161 --> 17:03:22,661
sama dengan kutipan, tanda kutip, "komedi.

17862
17:03:22,661 --> 17:03:25,811
Tanpa koma, tanpa tanda suka, tanpa tanda persen.

17863
17:03:25,811 --> 17:03:30,281
Karena sebenarnya, kolom itu sekarang adalah\n

17864
17:03:31,061 --> 17:03:33,011
Biarkan saya melanjutkan dan tekan Enter di sini.

17865
17:03:33,012 --> 17:03:36,042
Oke, jadi saya mendapatkan kembali sejumlah\nnomor ID.

17866
17:03:36,042 --> 17:03:38,442
Sekarang hal ini bisa\ndengan cepat mengganggu.

17867
17:03:38,442 --> 17:03:43,272
Sepertinya tampilkan ID 1, 2, 4, 5, 6,\n

17868
17:03:43,271 --> 17:03:49,031
Jadi saya bisa melakukan sesuatu\n

17869
17:03:49,031 --> 17:03:54,731
dimana ID sama dengan 1, atau ID sama dengan 2.

17870
17:03:54,732 --> 17:03:57,702
Skala ini tidak akan berjalan dengan baik, tapi ini

17871
17:03:57,701 --> 17:03:59,951
itulah sebabnya SQL sangat kuat.

17872
17:03:59,951 --> 17:04:04,761
Anda sebenarnya dapat membuat satu\npertanyaan SQL dari beberapa pertanyaan.

17873
17:04:05,781 --> 17:04:09,822
Mengapa saya tidak memilih judul\ndimana ID acaranya

17874
17:04:09,822 --> 17:04:13,391
ada dalam daftar ID berikut?

17875
17:04:13,391 --> 17:04:20,052
Pilih ID acara dari genre, dengan\n

17876
17:04:20,982 --> 17:04:23,892
Jadi saya punya dua pertanyaan SQL.

17877
17:04:23,891 --> 17:04:27,192
Yang satu sengaja disarangkan\ndi dalam tanda kurung.

17878
17:04:27,192 --> 17:04:30,102
Itu akan mengembalikan saya\nseluruh daftar ID acara.

17879
17:04:30,101 --> 17:04:32,411
Namun itulah yang\nsaya ingin cari

17880
17:04:32,411 --> 17:04:36,341
judul dengan memilih judul\n

17881
17:04:38,722 --> 17:04:44,052
Jadi sekarang jika saya menekan Enter,\nSaya hanya mendapatkan kembali acara tersebut

17882
17:04:44,052 --> 17:04:47,862
yang entah bagaimana ditandai sebagai\nkomedi, baik Anda yang menontonnya

17883
17:04:47,862 --> 17:04:51,912
mencentang satu kotak untuk komedi,\ndua kotak, atau semua kotak.

17884
17:04:51,911 --> 17:04:54,269
Entah bagaimana kami menampilkan\nkomedi, sekali lagi, adil

17885
17:04:54,269 --> 17:04:56,561
dengan menggunakan skrip Python tersebut,\nyang tidak memuat data ini

17886
17:04:56,561 --> 17:04:59,141
menjadi satu meja besar, tapi malah menjadi dua.

17887
17:04:59,141 --> 17:05:01,762
Dan jika kita ingin membersihkan\nini, mari kita lakukan beberapa hal.

17888
17:05:01,762 --> 17:05:05,922
Mari, di luar\ntanda kurung, urutkan berdasarkan judul.

17889
17:05:05,921 --> 17:05:08,891
Ini adalah cara mengurutkan\ndata dalam SQL dengan sangat mudah.

17890
17:05:08,891 --> 17:05:13,481
Sekarang kita mempunyai seluruh daftar\njudul yang sama yang kini diurutkan.

17891
17:05:13,482 --> 17:05:17,982
Dan apa kata kunci yang digunakan\n

17892
17:05:19,601 --> 17:05:24,941
Kueri yang sama, tapi mari kita pilih\n saja

17893
17:05:24,942 --> 17:05:27,112
Dan perhatikan, saya\nsengaja melakukannya dengan cara ini.

17894
17:05:27,112 --> 17:05:28,862
Dan sampai hari ini, kapan pun saya menggunakan SQL, saya

17895
17:05:28,862 --> 17:05:31,529
jangan hanya mulai dari awal\dan mengetikkan seluruh pemikiran saya

17896
17:05:31,529 --> 17:05:33,281
dan lakukan dengan benar pada percobaan pertama.

17897
17:05:33,281 --> 17:05:35,951
Saya biasanya memulai\ndengan subkueri, jika Anda

17898
17:05:35,951 --> 17:05:38,141
akan, hal dalam\ntanda kurung, hanya untuk mendapatkan diriku sendiri

17899
17:05:38,141 --> 17:05:39,942
satu langkah menuju apa yang saya pedulikan.

17900
17:05:41,381 --> 17:05:43,932
Lalu saya menambahkannya, seperti\nyang telah kami dorong dengan Python dan C

17901
17:05:43,932 --> 17:05:47,711
mengambil langkah kecil untuk mencapai\n

17902
17:05:48,822 --> 17:05:51,402
Dan selain kesalahan\nini, yang tidak kami lakukan

17903
17:05:51,402 --> 17:05:55,692
perbaiki karena saya mengimpor ulang data setelah\n

17904
17:05:55,692 --> 17:06:00,531
kami sekarang memiliki\ndaftar semua data yang sama berdasarkan abjad.

17905
17:06:00,531 --> 17:06:06,012
Namun sekarang dirancang lebih baik, karena kami\n

17906
17:06:10,061 --> 17:06:14,292
Pertanyaan apa yang kita miliki, jika ada di sini?

17907
17:06:25,622 --> 17:06:27,622
DAVID J. MALAN: Oh, sekarang\nkita sudah mempunyai database

17908
17:06:27,622 --> 17:06:29,982
bagaimana cara kami mentransfernya ke CSV?

17909
17:06:31,402 --> 17:06:33,912
Dan faktanya, ada\nperintah dalam SQLite

17910
17:06:33,911 --> 17:06:36,931
yang memungkinkan Anda mengekspor\ndata Anda kembali ke file CSV.

17911
17:06:36,932 --> 17:06:38,682
Jika Anda ingin mengirim email\nit ke seseorang dan Anda

17912
17:06:38,682 --> 17:06:41,771
ingin mereka dapat membukanya di\n

17913
17:06:41,771 --> 17:06:44,351
Angka, atau sejenisnya, Anda dapat\nberalih ke arah lain.

17914
17:06:44,351 --> 17:06:47,231
Namun secara umum, setelah\nAnda berada di dunia SQL

17915
17:06:47,232 --> 17:06:49,962
Anda mungkin menyimpan\ndata Anda di sana dalam jangka panjang.

17916
17:06:49,961 --> 17:06:52,932
Dan Anda mungkin sedang memperbaruinya,\n

17917
17:06:53,614 --> 17:06:55,781
Misalnya, satu perintah\nyang tidak saya tampilkan sebelumnya

17918
17:06:55,781 --> 17:06:58,661
adalah, misalkan seseorang lupa suatu pertunjukan.

17919
17:06:58,661 --> 17:07:00,981
Mari kita lihat, apakah saya melihat ini di keluaran?

17920
17:07:00,982 --> 17:07:02,922
Baiklah, jadi Batasi Antusiasme Anda.

17921
17:07:04,872 --> 17:07:06,502
Apakah ada yang melihatnya tadi malam?

17922
17:07:07,002 --> 17:07:10,084
Baiklah, satu orang saja\n

17923
17:07:10,084 --> 17:07:12,082
Acara apa lagi yang\ntidak masuk daftar?

17924
17:07:13,559 --> 17:07:14,891
Tampaknya sekarang ada di Netflix.

17925
17:07:21,732 --> 17:07:25,252
Ya, kami ingin memasukkan\nmungkin ID dan judul.

17926
17:07:25,252 --> 17:07:27,491
Tapi sebenarnya saya tidak\npeduli apa ID-nya

17927
17:07:27,491 --> 17:07:28,991
jadi saya hanya akan memasukkan judul.

17928
17:07:28,991 --> 17:07:31,121
Dan nilai yang akan saya\nberikan pada judul itu

17929
17:07:31,122 --> 17:07:34,242
akan menjadi, kutipan,\nunkutip, "Seinfeld.

17930
17:07:34,241 --> 17:07:37,152
Lalu, izinkan saya\na lanjutkan dan tekan titik koma.

17931
17:07:37,152 --> 17:07:39,702
Sepertinya tidak terjadi apa-apa, tapi\nbiarkan saya menjalankan kembali pertanyaan besarnya

17932
17:07:39,701 --> 17:07:41,591
dari sebelum mencari komedi.

17933
17:07:41,591 --> 17:07:45,191
Dan sayangnya, Seinfeld telah\n

17934
17:07:45,192 --> 17:07:47,052
jadi mari kita perbaiki juga.

17935
17:07:47,052 --> 17:07:50,712
Apa yang secara intuitif harus saya\nlakukan untuk mengasosiasikannya, sekarang

17936
17:07:53,322 --> 17:07:55,482
Saya baru saja memasukkannya ke dalam tabel acara.

17937
17:07:55,482 --> 17:07:59,232
Apa lagi yang perlu dilakukan sebelum\n

17938
17:08:03,851 --> 17:08:08,292
Jadi saya perlu memasukkan dua hal ke dalam tabel\ngenres sekarang

17939
17:08:08,292 --> 17:08:13,522
ID acara, seperti ini, dan\nlalu, nama genrenya

17940
17:08:14,682 --> 17:08:16,152
Nilai apa yang ingin saya masukkan?

17941
17:08:16,152 --> 17:08:18,137
Nah, ID acaranya, sebaiknya saya ambil itu.

17942
17:08:18,137 --> 17:08:19,512
Ah, aku bahkan tidak tahu apa itu.

17943
17:08:19,512 --> 17:08:21,112
Saya harus\nmencari tahu apa itu.

17944
17:08:21,112 --> 17:08:23,002
Jadi saya bisa melakukan ini dengan beberapa cara.

17945
17:08:24,491 --> 17:08:28,265
Pilih bintang dari acara,\njudulnya sama

17946
17:08:28,266 --> 17:08:32,112
kutip, tanda kutip,\n titik koma "Seinfeld" 159.

17947
17:08:32,112 --> 17:08:37,122
Jadi sekarang yang bisa saya lakukan, memasukkan\ninke genre ID acara

17948
17:08:37,122 --> 17:08:45,852
dan nama genre, nilai 159, dan,\n

17949
17:08:46,601 --> 17:08:50,051
Dan sekarang, jika saya menelusuri kembali riwayat saya\n

17950
17:08:50,052 --> 17:08:52,032
sekali lagi, mencari\nsemua komedi yang berbeda

17951
17:08:52,031 --> 17:08:54,442
sekarang Seinfeld telah masuk daftarnya.

17952
17:08:54,442 --> 17:08:57,978
Namun saya melakukannya secara manual sehingga\ntidak menggunakan huruf kapital.

17953
17:09:03,042 --> 17:09:08,781
Tetapkan judul sama dengan titik koma Seinfeld.

17954
17:09:09,281 --> 17:09:13,121
Oke, terima kasih, jika judul sama dengan,\nkutip, tanda kutip, "Seinfeld.

17955
17:09:13,122 --> 17:09:14,862
Jangan sampai kita melakukan kesalahan itu lagi.

17956
17:09:15,671 --> 17:09:18,612
Dan sekarang, jika saya menjalankan\nkueri yang sangat besar itu, sekarang Seinfeld yang mengeksekusinya

17957
17:09:18,612 --> 17:09:21,822
memang, dianggap komedi.

17958
17:09:21,822 --> 17:09:23,302
Jadi kemana kita akan pergi dengan ini?

17959
17:09:23,302 --> 17:09:25,582
Sejauh ini kami telah melakukan\nsemuanya secara manual.

17960
17:09:25,582 --> 17:09:28,122
Dan ini benar-benar hebat\n

17961
17:09:28,122 --> 17:09:30,539
mungkin bisa dilakukan jika hanya memanipulasi\na kumpulan data yang cukup besar saja

17962
17:09:30,538 --> 17:09:33,351
untuk mendapatkan jawaban menarik\nyang mungkin ada di salah satu jawaban

17963
17:09:33,351 --> 17:09:34,781
dua, atau bahkan lebih banyak tabel.

17964
17:09:34,781 --> 17:09:37,781
Akhirnya, dalam beberapa minggu, kami\n

17965
17:09:37,781 --> 17:09:41,951
dengan menulis kode dalam Python\nyang menghasilkan SQL untuk melakukan ini.

17966
17:09:41,951 --> 17:09:44,621
Jika Anda mengunjungi sebagian besar situs web\non internet saat ini

17967
17:09:44,622 --> 17:09:48,762
dan Anda, misalnya, masuk, kemungkinan besar\n

17968
17:09:50,771 --> 17:09:53,351
Ya, situs web tersebut mungkin tidak\ndiimplementasikan dengan Python

17969
17:09:53,351 --> 17:09:56,951
tapi mungkin diterapkan di beberapa\n

17970
17:09:58,451 --> 17:10:03,671
Dan bahasa itu mungkin menggunakan\n

17971
17:10:03,671 --> 17:10:07,271
untuk menggunakan SQL untuk mendapatkan\nama pengguna Anda, dapatkan kata sandi Anda

17972
17:10:07,271 --> 17:10:09,338
dan bandingkan keduanya dengan\napa yang Anda ketik.

17973
17:10:09,338 --> 17:10:11,921
Dan sebenarnya, mudah-mudahan ini tidak\nmengetahui kata sandi Anda yang sebenarnya

17974
17:10:11,921 --> 17:10:13,504
tapi sesuatu yang disebut hash daripadanya.

17975
17:10:13,504 --> 17:10:15,701
Namun mungkin ada\ndatabase yang terlibat melakukan hal itu.

17976
17:10:15,701 --> 17:10:18,941
Saat Anda membeli sesuatu di\nAmazon.com dan mengeklik Periksa

17977
17:10:18,942 --> 17:10:22,062
kemungkinan besar ada\nkode di server Amazon

17978
17:10:22,061 --> 17:10:25,211
itu tergantung pada apa yang\nAnda tambahkan ke keranjang belanja Anda

17979
17:10:25,211 --> 17:10:29,031
dan mungkin menggunakan perulangan for beberapa\n

17980
17:10:29,031 --> 17:10:33,521
Itu melakukan sejumlah besar SQL\n

17981
17:10:34,631 --> 17:10:37,601
Ada jenis database lain,\ntjuga, selain database SQL

17982
17:10:37,601 --> 17:10:39,989
atau database relasional\ncukup populer.

17983
17:10:39,989 --> 17:10:42,072
Jadi mari kita lanjutkan dan tulis\tidak ada program lain di sini

17984
17:10:42,072 --> 17:10:46,661
dengan Python yang sekarang menggabungkan\ndua bahasa ini menjadi satu, sehingga

17985
17:10:46,661 --> 17:10:50,081
Saya akan menggunakan SQL\nindi dalam program Python

17986
17:10:50,082 --> 17:10:53,772
jadi saya bisa mengimplementasikan logika\nprogram saya dengan Python

17987
17:10:55,391 --> 17:10:59,601
Namun ketika saya ingin mendapatkan beberapa data, saya\n

17988
17:10:59,601 --> 17:11:02,531
Jadi izinkan saya melanjutkan\ndan membuka favorites.py.

17989
17:11:05,082 --> 17:11:10,542
Dan izinkan saya membuangnya\n

17990
17:11:10,542 --> 17:11:13,031
sekarang tambahkan SQL ke dalam campuran.

17991
17:11:13,031 --> 17:11:16,781
Dari perpustakaan CS50, mari\nimpor fungsi SQL.

17992
17:11:16,781 --> 17:11:19,601
Ini akan berguna untuk digunakan\nkarena sebagian besar perpustakaan pihak ketiga

17993
17:11:19,601 --> 17:11:22,731
yang berhubungan dengan SQL dan Python adalah\n

17994
17:11:22,732 --> 17:11:25,732
Jadi menurut saya Anda akan menemukan\nperpustakaan ini lebih mudah digunakan.

17995
17:11:25,732 --> 17:11:27,122
Mari kita lakukan hal berikut.

17996
17:11:27,122 --> 17:11:29,242
Buat variabel\ndisebut db untuk database.

17997
17:11:29,241 --> 17:11:30,741
Tapi saya bisa menyebutnya apa pun yang saya inginkan.

17998
17:11:30,741 --> 17:11:34,432
Mari gunakan URI Anda, yang merupakan\nacara yang bagus untuk mengatakan sesuatu

17999
17:11:34,432 --> 17:11:43,131
itu terlihat seperti URL, tapi sebenarnya itu\n

18000
17:11:44,451 --> 17:11:47,961
Sekarang mari kita tanyakan judul kepada pengguna dengan\n

18001
17:11:49,161 --> 17:11:53,301
Dan mari hilangkan spasi apa pun\n

18002
17:11:53,302 --> 17:11:56,072
Lalu, mari kita lanjutkan dan lakukan ini.

18003
17:11:57,561 --> 17:12:01,911
Saya akan melanjutkan sekarang dan menulis\n

18004
17:12:01,911 --> 17:12:05,181
untuk berbicara dengan favorit.db asli.

18005
17:12:05,182 --> 17:12:09,322
Jadi sekali lagi, saya tidak menggunakan dua tabel\n

18006
17:12:09,322 --> 17:12:12,661
Saya menggunakan data asli yang kami\nimpor dari data Anda sendiri

18007
17:12:12,661 --> 17:12:14,431
dan saya akan melakukan hal berikut.

18008
17:12:14,432 --> 17:12:19,491
Saya akan menggunakan db.execute untuk mengeksekusi\n

18009
17:12:19,491 --> 17:12:28,042
Saya akan memilih jumlah\nacara dari favorit

18010
17:12:28,042 --> 17:12:35,302
tabel, dengan judul pengguna\n

18011
17:12:35,302 --> 17:12:37,252
Dan mengapa saya melakukan itu adalah sebagai berikut.

18012
17:12:37,252 --> 17:12:40,942
Sama seperti di C, ketika kita memiliki\npersen S, di SQL untuk saat ini

18013
17:12:40,942 --> 17:12:42,832
analoginya akan\nmenjadi tanda tanya.

18014
17:12:42,832 --> 17:12:44,332
Jadi idenya sama, sintaksisnya berbeda.

18015
17:12:44,332 --> 17:12:46,522
Daripada persen S,\itu hanya tanda tanya.

18016
17:12:46,521 --> 17:12:51,621
Dan menggunakan koma di luar ini\n

18017
17:12:51,622 --> 17:12:54,682
fungsi yang dapat saya berikan\na string SQL, sebuah perintah

18018
17:12:54,682 --> 17:12:59,177
lalu argumen apa pun yang ingin saya masukkan\n

18019
17:12:59,177 --> 17:13:01,552
Jadi tujuannya adalah\nbenarnya menulis program itu

18020
17:13:01,552 --> 17:13:07,762
akan mencari favorit.csv, alias,\n

18021
17:13:07,762 --> 17:13:10,641
orang yang menyukai acara tertentu.

18022
17:13:10,641 --> 17:13:14,391
Jadi ini akan memilih hitungan\n

18023
17:13:14,391 --> 17:13:18,741
dimana judul yang mereka ketik seperti\n

18024
17:13:19,311 --> 17:13:22,072
Fungsi eksekusi db ini mengembalikan daftar.

18025
17:13:23,154 --> 17:13:25,529
Dan Anda hanya akan mengetahuinya\nmelalui cerita atau bacaan saya

18026
17:13:26,631 --> 17:13:29,481
Oleh karena itu, jika saya ingin\ngekembali ke jumlah total

18027
17:13:29,482 --> 17:13:34,282
Saya akan melanjutkan dan mengambil\nbaris pertama dari baris tersebut.

18028
17:13:34,281 --> 17:13:36,561
Karena itu hanya akan\nmembuat saya kembali menghitungnya.

18029
17:13:36,561 --> 17:13:41,781
Lalu saya akan melanjutkan dan\n

18030
17:13:41,781 --> 17:13:43,281
Tapi ini akan menjadi sedikit aneh.

18031
17:13:43,281 --> 17:13:46,762
Secara teknis kolomnya akan menjadi\n

18032
17:13:47,762 --> 17:13:49,522
Izinkan saya menambahkan satu fitur lagi ke dalam campuran.

18033
17:13:49,521 --> 17:13:51,621
Anda sebenarnya dapat memberi\nnama panggilan pada kolom

18034
17:13:51,622 --> 17:13:55,432
yang akan kembali lagi, khususnya jika mereka\n

18035
17:13:55,432 --> 17:13:59,512
Saya cukup menyebut kolom itu\npenghitung, dengan huruf kecil semua.

18036
17:13:59,512 --> 17:14:06,961
Itu berarti sekarang saya dapat mengatakan kembali\n

18037
17:14:06,961 --> 17:14:08,701
Jadi sekedar rekap, apa yang sudah kita lakukan?

18038
17:14:08,701 --> 17:14:11,351
Kami telah mengimpor fungsi SQL perpustakaan CS50\n.

18039
17:14:11,351 --> 17:14:14,421
Kami telah, dengan baris\nkode ini, membuka favorit.db

18040
17:14:14,421 --> 17:14:20,152
file yang Anda dan saya buat sebelumnya\n

18041
17:14:20,152 --> 17:14:23,482
Saya sekarang hanya menanyakan\n kepada pengguna

18042
17:14:23,482 --> 17:14:27,412
Saya sekarang menjalankan kueri SQL\nini pada database itu

18043
17:14:27,411 --> 17:14:30,591
memasukkan apa pun yang\nmanusia ketikkan sebagai judulnya

18044
17:14:30,591 --> 17:14:32,511
untuk mendapatkan kembali jumlah total.

18045
17:14:32,512 --> 17:14:36,292
Dan saya memberikan nama panggilan pada hitungan tersebut, alias penghitung

18046
17:14:36,292 --> 17:14:39,202
supaya lebih jelas.

18047
17:14:39,201 --> 17:14:43,671
Fungsi ini, db jalankan, tidak peduli\n

18048
17:14:43,671 --> 17:14:45,811
meskipun hanya\tidak ada baris di dalamnya.

18049
17:14:45,811 --> 17:14:48,651
Jadi baris kode ini hanya memberi\nsaya baris pertama dan satu-satunya.

18050
17:14:48,652 --> 17:14:53,302
Lalu, ini masuk ke dalam baris itu,\n

18051
17:14:53,302 --> 17:14:59,072
dan memberi saya penghitung kunci\ndan nilai yang terkait dengannya.

18052
17:14:59,072 --> 17:15:00,682
Jadi, untuk lebih jelasnya, apa yang dilakukan hal ini?

18053
17:15:00,682 --> 17:15:03,561
Mari kita lanjutkan dan jalankan ini secara manual\n

18054
17:15:03,561 --> 17:15:07,311
Izinkan saya menjalankan SQLite3 di favorit--

18055
17:15:08,722 --> 17:15:12,752
Di favorit.db, izinkan saya\nmengimpor datanya lagi.

18056
17:15:12,752 --> 17:15:20,252
Jadi mode csv.import dari\nfavorites.csv ke tabel favorit.

18057
17:15:20,252 --> 17:15:22,671
Jadi saya baru saja membuat ulang\kumpulan data yang sama dengan Anda semua

18058
17:15:22,671 --> 17:15:25,123
memberi saya sebelumnya di favorit.db.

18059
17:15:25,124 --> 17:15:27,832
Jika saya melakukannya secara manual,\n

18060
17:15:27,832 --> 17:15:34,552
Pilih, hitung bintang dari favorit,\njudul mana yang disukai, dan ayo

18061
17:15:34,552 --> 17:15:37,612
cukup ketikkan secara manual\nin untuk saat ini, The Office.

18062
17:15:37,612 --> 17:15:40,671
Kita akan mencari yang\nberkata The, titik koma.

18063
17:15:41,902 --> 17:15:44,122
Namun secara teknis, perhatikan apa yang saya dapatkan kembali.

18064
17:15:44,122 --> 17:15:50,422
Secara teknis saya mendapatkan kembali miniaturnya\n

18065
17:15:50,421 --> 17:15:52,432
Bagaimana jika saya ingin mengganti nama kolom itu?

18066
17:15:52,432 --> 17:15:54,182
Di situlah kata kunci as berperan.

18067
17:15:54,182 --> 17:15:56,421
Jadi pilih hitungan bintang sebagai penghitung.

18068
17:15:58,252 --> 17:16:01,224
Saya baru saja kembali-- meja\nsederhana yang sama, tapi sudah

18069
17:16:01,224 --> 17:16:03,891
mengganti nama kolom menjadi counter\nhanya karena lebih sedikit

18070
17:16:03,891 --> 17:16:05,752
cukup jelas tentang apa itu.

18071
17:16:05,752 --> 17:16:08,542
Jadi apa yang saya lakukan\ndengan baris kode ini?

18072
17:16:08,542 --> 17:16:12,772
Baris kode ini kembali ke\n

18073
17:16:12,771 --> 17:16:16,161
dalam bentuk daftar kamus.

18074
17:16:16,161 --> 17:16:20,961
Daftar ini berisi satu\nbaris, seperti yang akan kita lihat, dan itu

18075
17:16:20,961 --> 17:16:26,141
berisi satu kolom, seperti yang akan kita\nlihat, kuncinya adalah counter.

18076
17:16:26,141 --> 17:16:27,881
Jadi sekarang mari kita jalankan kodenya sendiri.

18077
17:16:27,881 --> 17:16:32,621
Saya akan keluar dari SQLite3 dan saya\n

18078
17:16:33,461 --> 17:16:34,881
Saya diminta memberi judul.

18079
17:16:34,881 --> 17:16:39,131
Saya akan mengetik The Office dan\n

18080
17:16:40,152 --> 17:16:42,792
Ya, ada salah ketik lagi\nkarena saya mengimpor ulang CSVnya.

18081
17:16:42,792 --> 17:16:46,612
Saya telah menghapus dua dari Thes, jadi\n

18082
17:16:46,612 --> 17:16:51,101
Jadi ada 12 total yang memiliki,\nkutip, tanda kutip, "Kantor

18083
17:16:54,201 --> 17:16:57,161
Kami telah menggabungkan beberapa\nPython dengan beberapa SQL

18084
17:16:57,161 --> 17:17:00,131
tapi kami sudah terdegradasi\n

18085
17:17:00,131 --> 17:17:02,141
pemilihan sesuatu,\nmenyingkirkan semuanya

18086
17:17:02,141 --> 17:17:04,902
dari kata kunci with, kata kunci\noopen, perulangan for

18087
17:17:04,902 --> 17:17:06,942
pembaca DictReader,\ndan semua itu.

18088
17:17:06,942 --> 17:17:11,802
Dan sekarang hanya satu baris SQL,\n

18089
17:17:11,802 --> 17:17:17,062
Baiklah, ada pertanyaan tentang apa yang kami miliki\n

18090
17:17:26,411 --> 17:17:29,754
DAVID J. MALAN: Kapan ini\n

18091
17:17:31,372 --> 17:17:33,582
Jadi mari kita lakukan itu dengan mengubah\nmasalah yang ada.

18092
17:17:33,582 --> 17:17:36,312
Program ini dirancang hanya\nuntuk memilih jumlah total.

18093
17:17:36,311 --> 17:17:41,411
Mari lanjutkan dan\npilih, misalnya, semua

18094
17:17:41,411 --> 17:17:46,046
tentang cara Anda mengetik di The Office\n

18095
17:17:49,451 --> 17:17:53,811
Jika saya melakukan ini di SQLite3, biarkan\nsaya melanjutkan dan melakukannya lagi

18096
17:17:53,811 --> 17:17:55,311
setelah meningkatkan jendela Terminal saya.

18097
17:17:56,262 --> 17:18:00,912
Pilih judul dari favorit,\nseperti apa judulnya

18098
17:18:00,911 --> 17:18:04,176
kutipan, tanda kutip, "The Office," titik koma.

18099
17:18:04,177 --> 17:18:07,302
Saya mendapatkan kembali semua baris yang berbeda ini,\n

18100
17:18:07,302 --> 17:18:09,252
Sebenarnya ada\nsedikit kesalahan ketik lagi di sana

18101
17:18:09,252 --> 17:18:12,972
dengan beberapa huruf besar pada\nE, dan C, dan E. Itu

18102
17:18:12,972 --> 17:18:16,182
akan menjadi contoh kueri\nyang mengembalikan saya

18103
17:18:17,421 --> 17:18:19,332
Jadi sekarang mari kita ubah program Python saya.

18104
17:18:19,332 --> 17:18:24,882
Jika sekarang, dalam program Python saya, lakukan\n

18105
17:18:24,881 --> 17:18:26,451
berisi semua judul itu.

18106
17:18:26,451 --> 17:18:31,691
Sekarang saya bisa melakukannya, untuk baris demi baris, saya bisa\n

18107
17:18:31,692 --> 17:18:34,732
dan sekarang memanipulasi semua\nhal itu bersama-sama.

18108
17:18:34,732 --> 17:18:36,102
Biarkan saya menyimpan keduanya di layar.

18109
17:18:36,101 --> 17:18:37,661
Biarkan saya menjalankan Python dari favorites.py.

18110
17:18:37,661 --> 17:18:41,661
Dan perulangan for itu sekarang harus\niterasi, berapa, 10 kali atau lebih

18111
17:18:41,661 --> 17:18:43,361
satu kali untuk masing-masing judul tersebut.

18112
17:18:43,362 --> 17:18:47,351
Dan benar saja, jika saya mengetik\nThe Office lagi, Enter.

18113
17:18:52,091 --> 17:18:55,394
Oh, saya tidak seharusnya mengganti nama\njudul menjadi counter kali ini.

18114
17:18:55,394 --> 17:18:57,101
Jadi itu hanya kesalahan\nbodoh saya.

18115
17:18:58,752 --> 17:19:01,572
Dan sekarang saya akan melihatnya setelah\nmengetik di The Office

18116
17:19:01,572 --> 17:19:03,762
Masuk, sejumlah The Offices.

18117
17:19:03,762 --> 17:19:05,862
Dan karena saya menggunakan\nlike, bahkan yang terlewat

18118
17:19:05,862 --> 17:19:08,891
kapitalisasi masuk,\n

18119
17:19:08,891 --> 17:19:11,231
Tidak masalah apakah itu\huruf besar atau kecil.

18120
17:19:11,232 --> 17:19:15,642
Padahal kalau saya pakai tanda sama dengan\n

18121
17:19:17,277 --> 17:19:20,592
Baiklah, ada pertanyaan selanjutnya tentang ini?

18122
17:19:20,591 --> 17:19:25,041
Baiklah, mari kita beralih\nke data yang lebih besar dan lebih menarik

18123
17:19:25,042 --> 17:19:26,952
tetapkan, dan pertimbangkan beberapa\nmasalah yang ada

18124
17:19:26,951 --> 17:19:31,211
muncul ketika sebenarnya sekarang menggunakan SQL dan\n

18125
17:19:31,211 --> 17:19:34,311
menggunakan SQL untuk aplikasi seluler, web\napps, dan secara umum

18126
17:19:36,141 --> 17:19:39,432
Jadi mari kita mulai dengan kumpulan\ndata yang lebih besar seperti itu.

18127
17:19:39,432 --> 17:19:45,141
Beri saya waktu sebentar untuk berpindah layar\n

18128
17:19:45,141 --> 17:19:48,311
yang merupakan database\nrelasional aktual yang telah kita buat

18129
17:19:48,311 --> 17:19:51,881
dari kumpulan data dunia nyata dari IMDb.

18130
17:19:51,881 --> 17:19:54,551
Jadi InternetMovieDatabase.com\adalah sebuah situs web

18131
17:19:54,552 --> 17:19:57,132
tempat Anda dapat menelusuri\nacara TV, film, dan aktor

18132
17:19:57,131 --> 17:20:00,221
dan seterusnya, semuanya menggunakan\ndatabase mereka di belakang layar.

18133
17:20:00,222 --> 17:20:04,872
IMDb dengan luar biasa membuat datanya\n

18134
17:20:04,872 --> 17:20:08,302
tetapi file TSV, nilai yang dipisahkan tab.

18135
17:20:08,302 --> 17:20:11,802
Jadi yang kami lakukan adalah, sebelum kelas\n

18136
17:20:11,802 --> 17:20:15,641
Kami menulis program Python\nmirip dengan file favorites8.py saya

18137
17:20:15,641 --> 17:20:19,091
sebelumnya yang membaca\akhir semua file TSV tersebut

18138
17:20:19,091 --> 17:20:24,161
membuat beberapa tabel SQL\nin database IMDb

18139
17:20:24,161 --> 17:20:28,611
untuk Anda di SQLite yang memiliki banyak\ntabel dan banyak kolom.

18140
17:20:28,612 --> 17:20:32,531
Jadi mari kita mulai dan memikirkan\n

18141
17:20:32,531 --> 17:20:36,281
Biarkan saya kembali ke VS Code\ndi sini, dan sebentar lagi

18142
17:20:36,281 --> 17:20:40,601
Saya akan melanjutkan dan menyalin\n

18143
17:20:40,601 --> 17:20:45,851
Dan saya akan melanjutkan dan meningkatkan\n

18144
17:20:45,851 --> 17:20:48,911
Setiap kali bermain-main dengan\n

18145
17:20:48,911 --> 17:20:51,822
mengetik .schema mungkin merupakan cara yang bagus\n

18146
17:20:52,752 --> 17:20:54,461
Dan segalanya meningkat dengan cepat.

18147
17:20:54,461 --> 17:20:56,981
Ada banyak hal dalam kumpulan data\nini, karena memang ada

18148
17:20:56,982 --> 17:21:01,092
akan menjadi puluhan ratusan\n

18149
17:21:01,091 --> 17:21:04,572
dan juga kumpulan masalah 7, di mana kita akan\n

18150
17:21:06,262 --> 17:21:09,281
Jadi apa skema yang\nkami buat untuk Anda

18151
17:21:09,281 --> 17:21:12,491
dari data dunia nyata IMDb yang sebenarnya?

18152
17:21:12,491 --> 17:21:14,292
Pertama, ada meja yang disebut pertunjukan.

18153
17:21:14,292 --> 17:21:17,292
Dan perhatikan kita baru saja menambahkan spasi\n

18154
17:21:17,292 --> 17:21:19,391
untuk membuatnya sedikit\nlebih mudah dibaca.

18155
17:21:19,391 --> 17:21:23,322
Tabel acara memiliki kolom ID\n, kolom judul, tahun

18156
17:21:23,322 --> 17:21:26,082
dan jumlah total\nepisode untuk acara tertentu.

18157
17:21:26,082 --> 17:21:31,092
Dan jenis kolom tersebut adalah\n

18158
17:21:31,091 --> 17:21:33,431
Jadi ternyata\sebenarnya ada beberapa data yang berbeda

18159
17:21:33,432 --> 17:21:39,192
jenis yang perlu diperhatikan saat\n

18160
17:21:39,192 --> 17:21:43,512
Faktanya, di SQLite ada\nlima tipe data, dan hanya lima

18161
17:21:43,512 --> 17:21:46,992
untungnya, salah satunya adalah,\n

18162
17:21:46,991 --> 17:21:50,351
numerik, yang merupakan semacam\ncatchall untuk tanggal dan waktu

18163
17:21:50,351 --> 17:21:52,661
hal-hal yang numerik\ntetapi bukan hanya bilangan bulat

18164
17:21:52,661 --> 17:21:54,851
dan bukan hanya bilangan real, misalnya.

18165
17:21:54,851 --> 17:21:58,362
Bilangan riil adalah bilangan yang umumnya kita miliki\n

18166
17:21:58,362 --> 17:22:00,400
Teks, tentu saja,\nhanya teks, namun perhatikan

18167
17:22:00,400 --> 17:22:02,442
sehingga Anda tidak perlu\nkhawatir tentang seberapa besarnya.

18168
17:22:02,442 --> 17:22:04,452
Seperti di Python, ukurannya akan pas.

18169
17:22:04,451 --> 17:22:07,182
Lalu ada BLOB, yang merupakan objek besar biner, yang mana

18170
17:22:07,182 --> 17:22:10,641
hanya untuk 0 dan 1 mentah, seperti\nuntuk file atau sejenisnya.

18171
17:22:10,641 --> 17:22:12,911
Namun biasanya kami akan menggunakan\nempat lainnya.

18172
17:22:12,911 --> 17:22:16,301
Dan memang benar, saat kami\nmengimpor data ini untuk Anda

18173
17:22:16,302 --> 17:22:21,612
kami memutuskan bahwa setiap pertunjukan akan\n

18174
17:22:21,612 --> 17:22:24,802
Setiap acara tentu saja mempunyai\njudul, yang tidak boleh nol.

18175
17:22:24,802 --> 17:22:26,662
Jika tidak, mengapa itu ada di database?

18176
17:22:26,661 --> 17:22:30,171
Setiap pertunjukan memiliki tahun,\nyang berdasarkan angka

18177
17:22:30,171 --> 17:22:31,521
dengan definisi itu beberapa saat yang lalu.

18178
17:22:31,521 --> 17:22:34,881
Dan jumlah total episode untuk\n

18179
17:22:34,881 --> 17:22:38,451
Sekarang ada apa dengan kunci utama ini\n

18180
17:22:38,451 --> 17:22:43,432
Kunci utama adalah kolom yang\n

18181
17:22:43,432 --> 17:22:46,461
Dalam kasus kami, dengan\nfavorit, saya secara otomatis

18182
17:22:46,461 --> 17:22:50,091
memberi setiap kiriman Anda keunikan\n

18183
17:22:50,091 --> 17:22:52,701
diketik di The Office,\nkiriman Anda tetap ada

18184
17:22:52,701 --> 17:22:57,651
memiliki pengidentifikasi unik, nomor\n

18185
17:22:57,652 --> 17:23:01,671
dengan genre Anda, baru saja\nas yang kita lihat beberapa saat yang lalu.

18186
17:23:01,671 --> 17:23:04,621
Di IMDb versi ini,\nada juga genrenya.

18187
17:23:04,622 --> 17:23:07,461
Namun bukan berasal dari\nus, melainkan dari IMDb.com.

18188
17:23:07,461 --> 17:23:11,661
Jadi suatu genre memiliki ID acara, dan\n

18189
17:23:11,661 --> 17:23:15,231
Namun ini adalah genre dunia nyata\ndengan sedikit penyaringan.

18190
17:23:15,232 --> 17:23:19,862
Namun perhatikan, sama seperti\nversi saya, ada kunci asing.

18191
17:23:19,862 --> 17:23:25,311
Kunci asing adalah tampilan\nkunci utama tabel lain

18192
17:23:27,391 --> 17:23:30,442
Jadi ketika Anda memiliki tabel\ngenre seperti itu, entah bagaimana caranya

18193
17:23:30,442 --> 17:23:36,262
referensi silang acara asli\n

18194
17:23:36,262 --> 17:23:40,612
disebut ID, dan nomor yang sama\nmuncul di tabel genre

18195
17:23:40,612 --> 17:23:45,592
di bawah kolom bernama show ID, oleh\n

18196
17:23:45,591 --> 17:23:47,991
Itu angka yang sama tetapi\nih dalam artian asing

18197
17:23:47,991 --> 17:23:50,601
bahwa nomor tersebut sedang\digunakan dalam tabel ini

18198
17:23:50,601 --> 17:23:54,472
meskipun sudah ditetapkan secara resmi\n

18199
17:23:54,472 --> 17:23:57,112
Inilah yang kami maksud dengan\ndatabase relasional.

18200
17:23:57,112 --> 17:24:02,512
Anda memiliki beberapa tabel dengan beberapa\n

18201
17:24:02,512 --> 17:24:06,202
Dan angka-angka itu memungkinkan Anda mengantri\n

18202
17:24:06,201 --> 17:24:09,381
agar Anda dapat menghubungkan kembali\nacara tersebut dengan genrenya

18203
17:24:09,381 --> 17:24:12,141
seperti yang kita lakukan dengan\nkumpulan data yang lebih kecil beberapa saat yang lalu.

18204
17:24:12,141 --> 17:24:14,391
Logika ini diperluas lebih jauh.

18205
17:24:14,391 --> 17:24:18,411
Perhatikan bahwa database IMDb yang kami miliki\n

18206
17:24:18,411 --> 17:24:22,072
seperti bintang acara TV, para aktor di dalamnya.

18207
17:24:22,072 --> 17:24:25,552
Menariknya, meja itu\ntidak menyebutkan nama orang

18208
17:24:25,552 --> 17:24:27,562
dan tidak menyebutkan acaranya.

18209
17:24:27,561 --> 17:24:31,072
Ia hanya memiliki kolom bernama\nshow ID, yang merupakan bilangan bulat

18210
17:24:31,072 --> 17:24:33,561
dan ID orang, yang merupakan bilangan bulat.

18211
17:24:33,561 --> 17:24:39,661
Sedangkan jika kita scroll\nsampai ke bawah

18212
17:24:39,661 --> 17:24:42,831
Anda akan melihat tabel bernama orang.

18213
17:24:42,832 --> 17:24:48,351
Dan kami telah memutuskannya di dunia IMDb\n

18214
17:24:48,351 --> 17:24:52,851
akan memiliki pengidentifikasi unik yaitu\n

18215
17:24:52,851 --> 17:24:56,841
tanggal, yang berupa angka, dan\nlalu, sekali lagi, tentukan ID tersebut

18216
17:24:56,841 --> 17:25:00,691
akan menjadi kunci utama mereka.

18217
17:25:02,281 --> 17:25:07,981
Ternyata bintang TV dan\n

18218
17:25:07,982 --> 17:25:13,072
Jadi dengan menggunakan database relasional ini,\n

18219
17:25:13,072 --> 17:25:15,112
Kami memperhitungkan kesamaan.

18220
17:25:15,112 --> 17:25:17,912
Dan jika seseorang bisa menjadi\nhal yang berbeda dalam hidupnya

18221
17:25:17,911 --> 17:25:20,601
ya, pertama-tama kami mendefinisikan mereka\nsebagai manusia.

18222
17:25:20,601 --> 17:25:23,491
Lalu, perhatikan kedua\ntabel ini hampir sama.

18223
17:25:23,491 --> 17:25:26,002
Tabel bintang memiliki show\nID yang berupa angka

18224
17:25:26,002 --> 17:25:28,012
dan ID orang, yang\nis nomor, yang mana

18225
17:25:28,012 --> 17:25:36,052
memungkinkan kita melalui tabel perantara ini, jika\n

18226
17:25:36,052 --> 17:25:41,422
Demikian pula, tabel penulis mengizinkan\n

18227
17:25:41,421 --> 17:25:43,561
dengan hanya mencatat angka-angka itu.

18228
17:25:43,561 --> 17:25:46,322
Jadi jika kita masuk ke kumpulan data\nini, lakukan hal berikut.

18229
17:25:46,322 --> 17:25:49,682
Mari kita pilih bintang\ndari titik koma.

18230
17:25:49,682 --> 17:25:52,372
Jadi sejumlah besar data akan kembali.

18231
17:25:52,372 --> 17:25:56,822
Jumlahnya ratusan ribu baris\n

18232
17:25:56,822 --> 17:25:59,661
Jadi ini adalah data dunia nyata\nyang terbang melintasi layar.

18233
17:25:59,661 --> 17:26:03,501
Ada banyak orang di acara TV\n

18234
17:26:06,021 --> 17:26:07,318
Ada banyak data di sana.

18235
17:26:07,319 --> 17:26:09,652
Ya Tuhan, jika Anda harus melakukan\apa pun secara manual pada data ini

18236
17:26:09,652 --> 17:26:12,002
mengaturnya mungkin tidak akan\nberhasil dengan baik.

18237
17:26:12,002 --> 17:26:14,932
Dan sebenarnya, jumlah kami mencapai\na juta orang dalam data ini

18238
17:26:14,932 --> 17:26:17,332
set, plus, yang berarti\nini mungkin tidak genap

18239
17:26:17,332 --> 17:26:20,932
akan terbuka dengan baik di Excel, atau\n

18240
17:26:20,932 --> 17:26:23,042
SQL mungkin merupakan\npendekatan yang lebih baik di sini.

18241
17:26:23,042 --> 17:26:25,702
Mari kita telusuri seseorang\nspesifik, misalnya pilih bintang

18242
17:26:25,701 --> 17:26:31,401
dari orang yang namanya sama\n

18243
17:26:32,044 --> 17:26:33,502
Baiklah, jadi itu Steve Carell.

18244
17:26:33,502 --> 17:26:39,442
Dia adalah orang nomor\n136.797, lahir pada tahun 1962.

18245
17:26:39,442 --> 17:26:41,882
Dan jumlah tersebut sama banyaknya\nyang kami miliki tentang Steve Carell di sini.

18246
17:26:41,881 --> 17:26:44,551
Bagaimana kita mengetahui\nacara apa, misalnya, dia ikut serta?

18247
17:26:44,552 --> 17:26:48,842
Baiklah, mari kita lihat, pilih\nbintang dari acara, titik koma.

18248
17:26:48,841 --> 17:26:52,521
Ada banyak sekali acara\nyang ada di database IMDb.

18249
17:26:52,521 --> 17:26:55,491
Dan Anda dapat melihatnya lagi di sini\nterbang melintasi layar.

18250
17:26:55,491 --> 17:26:58,972
Sepertinya kita harus\n

18251
17:26:58,972 --> 17:27:02,402
untuk menonton semua pertunjukan Steve Carell.

18252
17:27:02,402 --> 17:27:04,562
Jadi bagaimana kita akan melakukan itu?

18253
17:27:04,561 --> 17:27:07,072
Ya Tuhan, banyak sekali datanya di sini.

18254
17:27:07,072 --> 17:27:10,461
Dan faktanya, ya, kami\npunya, berapa, 15 juta

18255
17:27:10,461 --> 17:27:12,622
menunjukkan plus dalam kumpulan data ini juga.

18256
17:27:12,622 --> 17:27:15,682
Jadi melakukan berbagai hal secara efisien\nkini akan menjadi penting.

18257
17:27:17,131 --> 17:27:18,801
Izinkan saya memilih acara tertentu.

18258
17:27:18,802 --> 17:27:23,932
Pilih bintang dari acara yang judulnya\n

18259
17:27:23,932 --> 17:27:26,262
Dan kiranya tidak boleh ada\nkesalahan ketik pada data ini

18260
17:27:26,262 --> 17:27:28,812
karena berasal dari\nwebsite asli IMDb.com.

18261
17:27:30,341 --> 17:27:33,551
Ternyata ada banyak\nKantor di dunia.

18262
17:27:33,552 --> 17:27:37,512
Yang dimulai pada tahun 2005\adalah yang kami inginkan

18263
17:27:37,512 --> 17:27:40,332
mungkin yang paling\npopuler dengan 188 episode.

18264
17:27:41,561 --> 17:27:46,991
Mungkin kita bisa melakukan hal yang sama dengan tahun\ne, bagaimana kalau tahun 2005?

18265
17:27:46,991 --> 17:27:50,591
Baiklah, jadi sekarang kami hanya mendapatkan\nkembali ID Office

18266
17:27:52,572 --> 17:27:55,451
Izinkan saya mengaktifkan pengatur waktu\ndalam SQLite saja

18267
17:27:55,451 --> 17:27:57,131
untuk mengetahui waktu berjalan sekarang.

18268
17:27:58,451 --> 17:28:01,391
Pilih bintang dari acara, yang\njudulnya sama dengan The Office

18269
17:28:04,192 --> 17:28:05,711
Mari kita buat judul saja untuk saat ini.

18270
17:28:06,792 --> 17:28:08,802
Baiklah, jadi tidak terlalu lama.

18271
17:28:08,802 --> 17:28:12,332
Ia menemukannya cukup cepat, tapi tampaknya\n

18272
17:28:12,332 --> 17:28:15,351
0,02 detik, lumayan untuk sekedar judul.

18273
17:28:15,351 --> 17:28:18,551
Namun untuk sekedar menanam benih saja, ternyata kita mungkin bisa

18274
17:28:20,271 --> 17:28:23,561
Izinkan saya membuat sesuatu yang disebut\n

18275
17:28:23,561 --> 17:28:25,511
di CRUD untuk membuat sesuatu.

18276
17:28:25,512 --> 17:28:28,152
Dan saya akan menyebutnya indeks judul.

18277
17:28:28,152 --> 17:28:32,682
Dan saya akan membuat\nit di tabel acara

18278
17:28:32,682 --> 17:28:34,614
khusus pada kolom judul.

18279
17:28:34,614 --> 17:28:37,031
Dan kita akan lihat sebentar lagi apa\nefeknya bagi saya.

18280
17:28:38,262 --> 17:28:42,472
Butuh beberapa saat, misalnya 0,349 detik,\n

18281
17:28:42,472 --> 17:28:46,932
Tapi sekarang perhatikan, jika saya memilih bintang dari\n

18282
17:28:46,932 --> 17:28:49,572
sebelumnya saya butuh waktu 0,021 detik.

18283
17:28:53,021 --> 17:28:56,531
Benar-benar tidak ada waktu sama sekali, atau sangat singkat\n

18284
17:28:56,531 --> 17:28:58,811
Dan saya akan melakukannya lagi\nhanya untuk memahaminya.

18285
17:29:00,201 --> 17:29:05,362
Sekarang meskipun 0,021 detik, tidak gila\n

18286
17:29:05,362 --> 17:29:07,902
banyak pengguna yang menjalankan\nsitus web atau aplikasi seluler sungguhan.

18287
17:29:07,902 --> 17:29:11,322
Setiap milidetik kita dapat memulai\n

18288
17:29:13,152 --> 17:29:17,171
Sebenarnya kita baru saja membuat\nsesuatu yang disebut indeks.

18289
17:29:17,171 --> 17:29:19,301
Dan ini adalah cara yang bagus\nuntuk menyatukan beberapa hal

18290
17:29:19,302 --> 17:29:21,762
diskusi minggu ke 5\ntentang struktur data

18291
17:29:21,762 --> 17:29:23,592
dan diskusi minggu ke-3 kami\ntentang waktu tayang.

18292
17:29:23,591 --> 17:29:26,621
Indeks dalam database adalah\nsejenis data mewah

18293
17:29:26,622 --> 17:29:31,452
struktur yang memungkinkan database\n

18294
17:29:31,451 --> 17:29:35,921
Secara harfiah, seperti yang baru saja Anda lihat, ini\n

18295
17:29:37,491 --> 17:29:39,641
Begitu pula saat pertama kali\nmenelusuri The Office

18296
17:29:39,641 --> 17:29:43,122
itu benar-benar melakukan penelusuran linier,\n

18297
17:29:46,211 --> 17:29:48,671
Tidak terlalu lambat, 0,021 detik.

18298
17:29:48,671 --> 17:29:52,362
Namun hal tersebut relatif lambat\nsecara teoritis dan algoritmik

18299
17:29:53,921 --> 17:29:57,432
Tetapi jika Anda membuat\nan indeks menggunakan sintaksis

18300
17:29:57,432 --> 17:30:03,222
seperti ini, yang baru saja saya lakukan, membuat\n

18301
17:30:03,222 --> 17:30:06,561
tabel, itu seperti memberi\ndatabase petunjuk sebelumnya

18302
17:30:06,561 --> 17:30:10,002
hei, aku tahu aku akan mencarinya\n

18303
17:30:10,002 --> 17:30:12,771
Lakukan sesuatu dengan struktur\ndata untuk mempercepatnya.

18304
17:30:12,771 --> 17:30:15,371
Jadi jika Anda memikirkan kembali\diskusi kita tentang struktur data

18305
17:30:17,061 --> 17:30:21,401
Mungkin menggunakan percobaan atau hash\n

18306
17:30:21,402 --> 17:30:25,272
struktur umumnya akan terangkat\n

18307
17:30:26,152 --> 17:30:28,961
Jadi, menemukan data jauh lebih cepat\nkhususnya

18308
17:30:28,961 --> 17:30:31,841
kalau diurutkan sekarang\nberdasarkan judul, dan bukan

18309
17:30:31,841 --> 17:30:33,371
hanya menyimpannya dalam satu daftar panjang.

18310
17:30:33,372 --> 17:30:35,562
Dan faktanya, di dunia\ndatabase relasional

18311
17:30:35,561 --> 17:30:37,901
jenis struktur yang\nosering digunakan dalam database

18312
17:30:37,902 --> 17:30:39,262
adalah sesuatu yang disebut pohon-B.

18313
17:30:40,512 --> 17:30:44,382
Beda penggunaan huruf B, tapi\n

18314
17:30:45,161 --> 17:30:47,021
Ini bukan biner karena\nbeberapa node

18315
17:30:47,021 --> 17:30:50,231
mungkin memiliki lebih dari\ndua anak atau kurang

18316
17:30:50,232 --> 17:30:53,532
tapi pohonnya sangat lebar namun\nrelatif dangkal.

18317
17:30:55,332 --> 17:30:59,112
Dan keuntungannya adalah jika\n

18318
17:30:59,112 --> 17:31:01,402
database dapat menemukannya lebih cepat.

18319
17:31:01,402 --> 17:31:06,612
Dan alasannya butuh waktu setengah detik,\n

18320
17:31:06,612 --> 17:31:10,601
karena SQLite perlu memakan waktu\njumlah waktu yang tidak nol

18321
17:31:10,601 --> 17:31:12,972
untuk hanya membangun pohon ini dalam memori.

18322
17:31:12,972 --> 17:31:17,241
Dan ia memiliki algoritme untuk melakukannya berdasarkan\n

18323
17:31:17,241 --> 17:31:20,682
Namun Anda menghabiskan sedikit waktu\ndi depan, sepertiga detik.

18324
17:31:22,811 --> 17:31:25,811
Setiap permintaan berikutnya, jika saya\nterus melakukannya lagi dan lagi

18325
17:31:25,811 --> 17:31:29,381
akan menjadi gila\nrendah, 0,000, mungkin 0,001.

18326
17:31:29,381 --> 17:31:33,581
Namun besarnya,\nfaktornya 10 atau 100 lebih cepat dari itu

18327
17:31:36,131 --> 17:31:39,701
Jadi kita punya indeks ini yang\nmemungkinkan kita mendapatkan data lebih cepat.

18328
17:31:39,701 --> 17:31:42,671
Namun bagaimana jika kita ingin\namun mendapatkan data itu

18329
17:31:42,671 --> 17:31:44,711
sekarang di beberapa tabel ini?

18330
17:31:45,582 --> 17:31:48,402
Dan bagaimana indeks\atau indeks ini dapat membantu lebih lanjut?

18331
17:31:48,402 --> 17:31:52,241
Ya, ternyata ada\na cara yang sudah kita lihat

18332
17:31:52,241 --> 17:31:54,851
secara tidak langsung untuk menggabungkan dua tabel bersama-sama.

18333
17:31:54,851 --> 17:31:58,752
Sebelumnya, ketika saya memilih\nID The Office

18334
17:31:58,752 --> 17:32:03,082
lalu aku mencarinya di yang lain\n

18335
17:32:03,082 --> 17:32:05,752
Saya menggabungkan dua tabel bersama-sama.

18336
17:32:05,752 --> 17:32:08,241
Dan ternyata ada\nbeberapa cara untuk melakukan hal ini.

18337
17:32:08,241 --> 17:32:11,891
Mari kita lanjutkan sekarang dan, misalnya,\n

18338
17:32:11,891 --> 17:32:14,021
Bukan hanya The Office\ntetapi semuanya juga.

18339
17:32:14,021 --> 17:32:21,656
Sayangnya, jika kita melihat skema kita,\n

18340
17:32:21,656 --> 17:32:27,201
oh, acara di sini tidak\nmenyebutkan bintang TV di dalamnya.

18341
17:32:27,201 --> 17:32:30,471
Dan orang-orang tidak menyebutkan pertunjukan.

18342
17:32:30,472 --> 17:32:34,702
Kita entah bagaimana perlu menggunakan\ntabel ini di sini untuk menghubungkan keduanya.

18343
17:32:34,701 --> 17:32:40,161
Dan ini disebut tabel gabungan, di\n

18344
17:32:40,161 --> 17:32:43,131
itu menggabungkan dua tabel\ntbersama secara logis.

18345
17:32:43,131 --> 17:32:47,091
Jadi jika Anda cukup paham dengan SQL,\n

18346
17:32:47,091 --> 17:32:51,351
sebelumnya dan suka menggabungkan kembali\ntabel dengan menggunakan ID umum ini

18347
17:32:53,671 --> 17:32:58,072
Biarkan saya mencari tahu dulu,\n

18348
17:32:58,072 --> 17:32:59,311
Jadi bagaimana saya akan melakukan ini?

18349
17:32:59,311 --> 17:33:04,461
Nah, jika saya memilih bintang dari orang,\n

18350
17:33:04,461 --> 17:33:06,182
untungnya, hanya ada satu dari mereka.

18351
17:33:06,182 --> 17:33:12,141
Jadi ini memberi saya kembali namanya,\nID-nya, dan tahun lahirnya.

18352
17:33:12,141 --> 17:33:14,302
Tapi sebenarnya hanya\nID miliknya yang saya pedulikan.

18353
17:33:15,021 --> 17:33:20,841
Karena untuk mendapatkan kembali acaranya,\n

18354
17:33:20,841 --> 17:33:22,981
Jadi saya perlu tahu nomor ID-nya.

18355
17:33:22,982 --> 17:33:24,932
Jadi apa yang bisa saya lakukan dengan ini?

18356
17:33:24,932 --> 17:33:29,572
Nah, ingat skema\nd tabel bintangnya.

18357
17:33:29,572 --> 17:33:33,171
Saya baru saja mendapatkan, dari tabel\npeople, ID Steve Carell.

18358
17:33:33,171 --> 17:33:38,871
Saya yakin dengan transitivitas saya\nsekarang dapat menggunakan ID orangnya, ID-nya

18359
17:33:38,872 --> 17:33:41,242
untuk mendapatkan kembali semua ID acaranya.

18360
17:33:41,241 --> 17:33:44,511
Dan setelah saya mendapatkan semua acaranya\n

18361
17:33:44,512 --> 17:33:46,672
dan mendapatkan kembali semua judul acaranya.

18362
17:33:46,671 --> 17:33:50,781
Jadi jawabannya sebenarnya bahasa Inggris\n

18363
17:33:51,631 --> 17:33:52,981
Jadi izinkan saya melanjutkan dan melakukan ini.

18364
17:33:52,982 --> 17:33:57,082
Izinkan saya, sekali lagi, mendapatkan nomor ID Steve\nCarell, tetapi bukan bintangnya.

18365
17:33:58,402 --> 17:34:00,952
Ini adalah karakter wildcard dalam SQL.

18366
17:34:00,951 --> 17:34:03,651
Biarkan saya memilih\nID Steve Carell.

18367
17:34:03,652 --> 17:34:06,982
Dan itu memberi saya kembali 136.797.

18368
17:34:06,982 --> 17:34:08,782
Dan itu hanya memberi saya kembali satu nilai.

18369
17:34:08,781 --> 17:34:12,051
Yang namanya ID hanyalah\nkolom yang mengarah ke atas.

18370
17:34:12,052 --> 17:34:16,702
Sekarang, misalkan saya ingin\nmemilih semua ID acara

18371
17:34:16,701 --> 17:34:18,801
yang berafiliasi dengan Steve Carell.

18372
17:34:18,802 --> 17:34:25,912
Izinkan saya memilih Tampilkan ID dari bintang,\ndi mana ID orang dalam bintang

18373
17:34:25,911 --> 17:34:28,822
kebetulan sama dengan ID Steve Carell.

18374
17:34:28,822 --> 17:34:32,661
Jadi sekali lagi, saya menyusun jawaban saya di\n

18375
17:34:32,661 --> 17:34:36,771
Di sebelah kanan, dalam tanda kurung,\nSaya mendapatkan ID Steve Carell.

18376
17:34:36,771 --> 17:34:40,671
Di sebelah kiri, saya sekarang\nmemilih semua ID acara

18377
17:34:40,671 --> 17:34:44,752
yang ada hubungannya dengan\n

18378
17:34:44,752 --> 17:34:47,192
Jawaban ini juga tidak\nakan begitu mencerahkan.

18379
17:34:47,192 --> 17:34:50,762
Itu hanya sejumlah bilangan bulat\n

18380
17:34:50,762 --> 17:34:53,112
Tapi mari kita ambil satu langkah lebih jauh.

18381
17:34:53,112 --> 17:34:54,862
Dan meskipun\nkode saya semakin panjang, saya

18382
17:34:54,862 --> 17:34:57,262
bisa menekan Enter dan memformat\nit dengan baik, khususnya

18383
17:34:57,262 --> 17:34:59,002
jika saya melakukan ini dalam file kode.

18384
17:34:59,002 --> 17:35:00,921
Namun saya hanya melakukannya\nsecara interaktif untuk saat ini.

18385
17:35:00,921 --> 17:35:04,761
Sekarang mari kita pilih semua\njudul dari tabel pertunjukan

18386
17:35:04,762 --> 17:35:13,442
di mana ID acaranya berada\nini mengikuti kueri sebelumnya.

18387
17:35:13,442 --> 17:35:15,082
Jadi sekali lagi, pertanyaannya semakin panjang.

18388
17:35:15,082 --> 17:35:17,542
Namun perhatikan, ini adalah\nlangkah ketiga dan terakhir.

18389
17:35:17,542 --> 17:35:21,292
Pilih judul dari tabel\acara, yang berisi ID acara

18390
17:35:21,292 --> 17:35:23,932
ada dalam daftar semua\nID acara itu

18391
17:35:23,932 --> 17:35:27,381
kembali dari meja bintang\n

18392
17:35:27,381 --> 17:35:28,822
Bagaimana kami mendapatkan ID orang itu?

18393
17:35:30,021 --> 17:35:36,502
Baiklah, saya pilih, di bagian terdalam saya\n

18394
17:35:36,502 --> 17:35:38,781
Jadi sekarang, saat saya menekan Enter, voila.

18395
17:35:38,781 --> 17:35:41,866
Saya mendapatkan semua\nacara TV Steve Carell hingga saat ini.

18396
17:35:41,866 --> 17:35:44,991
Dan jika saya ingin membereskannya lebih lanjut,\n

18397
17:35:47,521 --> 17:35:50,881
Sekarang saya sudah mendapatkan semuanya\nalfabet seperti sebelumnya.

18398
17:35:50,881 --> 17:35:53,421
Jadi sekali lagi, dengan SQL hadir\nkemampuan untuk mencari--

18399
17:35:53,421 --> 17:35:56,631
Maksudku, lihat seberapa cepat\nkita melakukan ini, 0,094 detik

18400
17:35:56,631 --> 17:35:59,991
untuk menelusuri tiga\ntabel berbeda untuk mendapatkan jawaban ini.

18401
17:35:59,991 --> 17:36:04,161
Namun data saya sekarang semuanya dirancang dengan rapi\ndalam tabel tersendiri

18402
17:36:04,161 --> 17:36:07,341
yang mana akan menjadi penting\n

18403
17:36:07,341 --> 17:36:09,681
Tapi izinkan saya mengambil satu langkah lebih jauh.

18404
17:36:09,682 --> 17:36:12,271
Biarkan saya melanjutkan dan melakukan ini.

18405
17:36:12,271 --> 17:36:16,921
Biarkan saya melanjutkan dan menunjukkan\n hal tersebut dengan kueri ini

18406
17:36:16,921 --> 17:36:20,211
perhatikan bahwa aku sedang mencari--

18407
17:36:20,211 --> 17:36:24,051
katakanlah saya sedang mencari\bukan ID seseorang di sini.

18408
17:36:24,052 --> 17:36:27,752
Dan pada akhirnya di sini, saya\nmencari kolom nama di sini.

18409
17:36:27,752 --> 17:36:30,572
Jadi izinkan saya melanjutkan dan melakukan ini.

18410
17:36:30,572 --> 17:36:34,851
Biarkan saya melanjutkan dan melihat\napakah kita tidak dapat mempercepatnya.

18411
17:36:34,851 --> 17:36:38,432
Kueri ini saat ini\nmembutuhkan 0,092 detik.

18412
17:36:38,432 --> 17:36:41,271
Mari kita lihat apakah kita tidak bisa mempercepatnya\n

18413
17:36:41,271 --> 17:36:44,271
beberapa B-tree lagi\di memori database.

18414
17:36:44,271 --> 17:36:49,581
Buat indeks yang disebut indeks orang, dan\n

18415
17:36:52,192 --> 17:36:53,830
Butuh beberapa saat, butuh beberapa saat.

18416
17:36:53,830 --> 17:36:56,122
Itu hampir satu detik penuh\nkarena itu meja yang besar.

18417
17:36:56,122 --> 17:37:00,391
Mari kita buat indeks lain yang disebut\ntampilkan indeks pada tabel bintang.

18418
17:37:00,891 --> 17:37:03,292
Karena saya ingin mencari\nberdasarkan ID acara juga.

18419
17:37:03,292 --> 17:37:05,122
Itu adalah bagian dari pertanyaan besar saya.

18420
17:37:06,002 --> 17:37:09,152
Oke, hanya lebih dari\nsekitar 2/3 detik.

18421
17:37:09,152 --> 17:37:11,781
Sekarang mari kita buat yang terakhir,\nanindeks lain yang disebut indeks nama

18422
17:37:11,781 --> 17:37:14,502
tapi saya bisa menyebut hal ini\n

18423
17:37:14,902 --> 17:37:16,891
Karena saya juga mencari\bukan kolom nama.

18424
17:37:16,891 --> 17:37:19,072
Jadi singkatnya, saya\nmembuat indeks pada masing-masingnya

18425
17:37:19,072 --> 17:37:22,792
dari kolom yang entah bagaimana\nterlibat dalam permintaan pencarian saya

18426
17:37:22,792 --> 17:37:25,022
berpindah dari satu meja ke meja lainnya.

18427
17:37:25,021 --> 17:37:32,932
Sekarang mari kita kembali ke\nkueri sebelumnya, yang, ingat, memerlukan--

18428
17:37:36,112 --> 17:37:37,987
Ya, kira-kira\nbesarnya sebesar ini.

18429
17:37:37,987 --> 17:37:39,482
Kami tidak melihat datanya sekarang.

18430
17:37:39,482 --> 17:37:42,502
Namun izinkan saya menjalankan\nkueri besar asli saya satu kali.

18431
17:37:42,502 --> 17:37:45,722
Dan boom, kita hampir tidak menghasilkan apa-apa.

18432
17:37:45,722 --> 17:37:48,202
Jadi sekali lagi, buat\nindeks ini di memori

18433
17:37:48,201 --> 17:37:52,981
mempunyai efek mempercepat\nwaktu komputasi kita.

18434
17:37:52,982 --> 17:37:56,482
Sekarang jika Anda pernah menggunakan, misalnya,\n

18435
17:37:56,482 --> 17:38:00,472
di sini, di kampus, atau di kampus Yale, Anda\n

18436
17:38:00,472 --> 17:38:04,671
Ini mungkin salah satu alasannya\n

18437
17:38:04,671 --> 17:38:07,011
ribuan kursus\ntcenderung lambat, jika

18438
17:38:07,012 --> 17:38:10,222
dan aku hanya menduga-duga, jika\n

18439
17:38:10,222 --> 17:38:12,232
Jika Anda sedang membangun\aplikasi web Anda saat ini

18440
17:38:12,232 --> 17:38:14,512
dan Anda menemukan bahwa pengguna\na menunggu dan menunggu

18441
17:38:14,512 --> 17:38:17,632
dan segala sesuatunya berputar dan berputar,\n

18442
17:38:17,631 --> 17:38:21,112
Yah, itu bisa saja berakibat buruk\n

18443
17:38:21,112 --> 17:38:23,612
Atau mungkin Anda\nbelum memikirkannya

18444
17:38:23,612 --> 17:38:27,112
kolom apa yang harus dioptimalkan\nuntuk penelusuran dan pemfilteran

18445
17:38:27,112 --> 17:38:31,046
seperti yang saya lakukan di sini untuk\nmempercepat pertanyaan berikutnya?

18446
17:38:31,046 --> 17:38:33,171
Sekali lagi, dari luar\nin, kita hanya bisa menduga-duga.

18447
17:38:33,171 --> 17:38:36,921
Namun pada akhirnya, ini\nhanyalah salah satu hal yang penting

18448
17:38:36,921 --> 17:38:39,650
menjelaskan masalah kinerja juga.

18449
17:38:39,650 --> 17:38:42,442
Baiklah, mari kita tunjukkan a\n

18450
17:38:42,442 --> 17:38:45,112
lalu kita akan mempertimbangkan,\ngambaran lebih besar, beberapa masalah

18451
17:38:45,112 --> 17:38:47,451
yang mungkin muncul di dunia ini.

18452
17:38:47,451 --> 17:38:52,221
Jika kueri yang disarangkan dan disarangkan ini\nmulai mendapatkan sedikit banyak

18453
17:38:52,222 --> 17:38:54,502
ada cara lain,\nasal Anda sudah melihatnya

18454
17:38:54,502 --> 17:38:57,262
bahwa Anda dapat menjalankan\nlogika serupa dalam SQL.

18455
17:38:57,262 --> 17:38:59,752
Misalnya, jika saya\tahu sebelumnya bahwa saya

18456
17:38:59,752 --> 17:39:04,732
ingin menghubungkan Steve Carell ke\n

18457
17:39:04,732 --> 17:39:06,532
kita bisa melakukan sesuatu yang lebih seperti ini.

18458
17:39:06,531 --> 17:39:17,391
Pilih judul dari tabel orang,\n

18459
17:39:21,832 --> 17:39:25,124
Dan sekali lagi, ini bukanlah sesuatu yang Anda akan\n

18460
17:39:25,124 --> 17:39:29,422
Tapi supaya Anda melihat yang lain\n

18461
17:39:30,502 --> 17:39:35,031
Ini adalah cara eksplisit untuk mengatakan, ambil\n

18462
17:39:35,031 --> 17:39:37,371
tabel di sisi lain,\ndan entah bagaimana bergabung dengan mereka

18463
17:39:37,372 --> 17:39:39,332
seperti yang terus saya lakukan dengan ujung jari saya di sini.

18464
17:39:40,951 --> 17:39:45,711
Bergabunglah dengan mereka sehingga orang-orang, ID\n

18465
17:39:45,711 --> 17:39:48,601
dengan ID orang di tabel bintang.

18466
17:39:48,601 --> 17:39:50,601
Tapi itu bukanlah segalanya.

18467
17:39:50,601 --> 17:39:54,082
Saya juga bisa mengatakan, bergabunglah\nlebih lanjut di tabel acara

18468
17:39:54,082 --> 17:40:00,632
dimana bintang menunjukkan ID\sama dengan kolom ID pertunjukan.

18469
17:40:01,881 --> 17:40:11,331
Artinya, melangkah lebih jauh dan bergabunglah\n

18470
17:40:11,332 --> 17:40:14,332
menggabungkan kolom show ID\n dengan kolom ID.

18471
17:40:14,332 --> 17:40:17,092
Sekali lagi, hal ini mulai menjadi\nsedikit berantakan untuk dipikirkan.

18472
17:40:17,091 --> 17:40:21,171
Tapi sekarang saya hanya bisa mengatakan, di mana namanya\n

18473
17:40:21,171 --> 17:40:24,411
Saya dapat melakukan dalam satu permintaan apa yang sebelumnya\n

18474
17:40:24,411 --> 17:40:25,941
dan mendapatkan kembali jawaban yang sama.

18475
17:40:25,942 --> 17:40:30,722
Dan saya masih dapat menambahkan pesanan saya\nberdasarkan judul untuk mendapatkan kembali hasilnya.

18476
17:40:30,722 --> 17:40:35,122
Dan jika saya melakukan ini lagi\n

18477
17:40:36,091 --> 17:40:41,961
Izinkan saya mengetiknya dengan menambahkan\n

18478
17:40:41,961 --> 17:40:43,461
Aku akan membiarkannya untuk saat ini.

18479
17:40:43,461 --> 17:40:46,042
Kita dapat mengetikkannya pada beberapa\nbaris dalam konteks lain.

18480
17:40:46,042 --> 17:40:49,042
Dan izinkan saya melakukan satu hal terakhir.

18481
17:40:50,353 --> 17:40:52,311
Saya akan menunjukkannya,\ntapi ini bukan sesuatu

18482
17:40:52,311 --> 17:40:53,781
Anda juga harus menanamkannya dulu.

18483
17:40:53,781 --> 17:40:56,961
Pilih judul dari\norang, bintang, dan acara.

18484
17:40:56,961 --> 17:41:00,201
Jika Anda mengetahui sebelumnya bahwa Anda menginginkannya\n

18485
17:41:00,201 --> 17:41:03,471
Anda cukup menghitungnya,\tidak ada nama tabel satu demi satu.

18486
17:41:03,472 --> 17:41:08,838
Lalu Anda bisa mengatakan mana\npeople.ID sama dengan bintang.personID.

18487
17:41:08,838 --> 17:41:10,671
Dan sekarang saya menekan\nEnter untuk memformatnya

18488
17:41:10,671 --> 17:41:12,411
sedikit lebih mudah dibaca di layar saya.

18489
17:41:12,411 --> 17:41:20,481
Dan bintang.showID sama dengan show.ID,\n

18490
17:41:20,482 --> 17:41:25,072
Singkatnya, Anda menentukan bahwa Anda\n

18491
17:41:26,031 --> 17:41:31,792
Lalu Anda memberi tahu database cara\n

18492
17:41:31,792 --> 17:41:35,031
yaitu, kolom-kolom yang\nmemiliki bilangan bulat yang sama.

18493
17:41:35,031 --> 17:41:38,061
Jika saya menekan Enter sekarang, saya mendapatkan\nhasil yang persis sama

18494
17:41:38,061 --> 17:41:41,451
terlebih lagi jika saya juga menambahkan\nin pesanan berdasarkan judul.

18495
17:41:43,612 --> 17:41:45,531
Itu sebabnya saya tidak\ningin melakukan ini lebih awal.

18496
17:41:45,531 --> 17:41:48,531
Aku harus melihat kembali riwayatku\n

18497
17:41:48,531 --> 17:41:49,981
kueri multi-baris kali ini.

18498
17:41:52,622 --> 17:41:56,707
Tapi ini hanya untuk mengatakan itu, bahkan\n

18499
17:41:56,707 --> 17:41:59,332
lebih canggih, dan kami menaruh\nsebagiannya di sini, sebagian lagi

18500
17:41:59,332 --> 17:42:03,472
di sini, sebagian di sini untuk\n

18501
17:42:03,472 --> 17:42:07,252
seperti memberi koma pada data, kami\n

18502
17:42:07,252 --> 17:42:09,622
yang mungkin kita inginkan di\nbeberapa tabel ini.

18503
17:42:09,622 --> 17:42:13,922
Dan dengan menggunakan indeks, kami dapat\nmempercepat proses ini secara signifikan

18504
17:42:13,921 --> 17:42:17,481
untuk menangani pengguna yang 10 kali lebih banyak, 100 kali lebih banyak

18505
17:42:17,482 --> 17:42:19,012
pada database aktual yang sama.

18506
17:42:19,012 --> 17:42:20,362
Akan ada sisi negatifnya.

18507
17:42:20,362 --> 17:42:22,881
Dan mengingat kembali\diskusi kami tentang algoritme dan data

18508
17:42:22,881 --> 17:42:27,461
struktur dalam beberapa minggu terakhir, apa yang mungkin terjadi\n

18509
17:42:27,461 --> 17:42:31,451
Karena sampai sekarang, saya membuat empat\n

18510
17:42:31,451 --> 17:42:34,901
kolom judul, dan\nbeberapa kolom lainnya juga.

18511
17:42:34,902 --> 17:42:37,272
Mengapa saya tidak langsung saja\namengindeks semuanya

18512
17:42:37,271 --> 17:42:39,731
jika itu jelas mempercepat?

18513
17:42:41,112 --> 17:42:44,232
Kapan pun Anda mulai merasakan manfaat\n

18514
17:42:44,232 --> 17:42:47,292
kemungkinan besar Anda mengorbankan\nruang, atau sebaliknya.

18515
17:42:47,292 --> 17:42:50,741
Dan mungkin mengindeks sepenuhnya\semuanya sedikit bodoh

18516
17:42:50,741 --> 17:42:54,771
karena Anda akan membuang lebih banyak\n

18517
17:42:54,771 --> 17:42:56,951
Jadi cari tahu di mana\ntitik belok yang tepat

18518
17:42:56,951 --> 17:43:01,752
adalah bagian dari proses perancangan dan\n

18519
17:43:01,752 --> 17:43:06,252
Sayangnya sekarang, banyak sekali\n

18520
17:43:06,252 --> 17:43:10,211
dan mereka terus melakukannya di dunia nyata\n

18521
17:43:10,211 --> 17:43:12,101
Dan faktanya, di sini\nantinya, jika Anda sedang membaca

18522
17:43:12,101 --> 17:43:16,871
sesuatu yang teknis tentang database SQL,\n

18523
17:43:16,872 --> 17:43:20,002
dan sandi bocor,\nsayangnya, terlalu sering

18524
17:43:20,002 --> 17:43:22,847
hal ini disebabkan oleh apa yang\ndisebut serangan injeksi SQL.

18525
17:43:22,847 --> 17:43:24,972
Dan sekadar memberi Anda\nakal sehat untuk mengimbanginya

18526
17:43:24,972 --> 17:43:26,930
mungkin antusiasme [Tak terdengar]\nuntuk seperti, oh, itu

18527
17:43:26,930 --> 17:43:28,961
bagus sekali bagaimana kami dapat\melakukan berbagai hal dengan begitu cepat.

18528
17:43:28,961 --> 17:43:32,021
Dengan kekuatan yang besar, muncul\ntanggung jawab di dunia ini juga.

18529
17:43:32,021 --> 17:43:34,661
Dan begitu banyak orang memasukkan\nbug ke dalam kode mereka

18530
17:43:34,661 --> 17:43:42,501
dengan tidak terlalu mengapresiasi hal tersebut\n

18531
17:43:43,732 --> 17:43:46,542
Di sini, misalnya, adalah\nlayar login khas untuk Yale.

18532
17:43:46,542 --> 17:43:49,122
Dan inilah analog untuk\nHarvard di mana Anda diminta

18533
17:43:49,122 --> 17:43:51,792
mungkin setiap hari, untuk\nama pengguna dan kata sandi Anda

18534
17:43:51,792 --> 17:43:53,802
alamat email Anda dan\nkata sandi Anda di sini.

18535
17:43:53,802 --> 17:43:57,762
Namun, misalkan itu\ndi belakang halaman login ini

18536
17:43:57,762 --> 17:44:00,372
baik Harvard atau Yale,\nada beberapa situs webnya.

18537
17:44:00,372 --> 17:44:03,612
Dan situs web tersebut menggunakan\nSQL di baliknya

18538
17:44:03,612 --> 17:44:06,042
untuk menyimpan semua\nmilik orang Harvard atau Yale

18539
17:44:06,042 --> 17:44:09,281
nama pengguna, kata sandi, nomor ID\n, kursus, transkrip

18540
17:44:10,311 --> 17:44:12,822
Jadi ada database SQL\ndi bawah situs web.

18541
17:44:12,822 --> 17:44:15,701
Nah, apa yang mungkin\nsalah dengan proses ini?

18542
17:44:15,701 --> 17:44:18,191
Sayangnya, ada\nbeberapa sintaksis khusus dalam SQL

18543
17:44:18,192 --> 17:44:19,872
seperti yang ada di C dan Python.

18544
17:44:19,872 --> 17:44:22,302
Misalnya, ada\nkomentar di SQL juga.

18545
17:44:22,302 --> 17:44:26,022
Jika Anda membuat dua tanda hubung, tanda hubung,\ndash, itu adalah komentar di SQL.

18546
17:44:26,021 --> 17:44:31,511
Dan jika Anda, sang pemrogram, tidak\n

18547
17:44:31,512 --> 17:44:34,902
sedemikian rupa sehingga Anda bertahan dari\nserangan yang berpotensi merugikan

18548
17:44:34,902 --> 17:44:36,502
Anda mungkin melakukan hal seperti ini.

18549
17:44:36,502 --> 17:44:41,412
Anggaplah saya log masuk dengan agak\njahat atau penasaran

18550
17:44:41,411 --> 17:44:44,471
dengan mengetikkan nama pengguna saya,\nMalan@harvard.edu, dan mungkin

18551
17:44:44,472 --> 17:44:46,332
satu kutipan dan tanda hubung, tanda hubung.

18552
17:44:47,021 --> 17:44:50,201
Karena saya mencoba memilah\napakah ada kerentanan di sini

18553
17:44:53,252 --> 17:44:56,502
Namun jika saya adalah pemilik situs web\n

18554
17:44:56,502 --> 17:45:00,641
Saya mungkin mencoba menggunakan karakter yang berpotensi\nberbahaya dalam masukan saya.

18555
17:45:01,631 --> 17:45:05,682
Karena tanda kutip tunggal digunakan untuk\n

18556
17:45:05,682 --> 17:45:07,152
tanda kutip tunggal atau tanda kutip ganda.

18557
17:45:07,152 --> 17:45:10,272
Tanda hubung, tanda hubung, saya klaim sekarang,\ndigunakan untuk berkomentar.

18558
17:45:10,271 --> 17:45:13,301
Tapi sekarang mari kita bayangkan\nkode apa yang ada di baliknya

18559
17:45:13,302 --> 17:45:17,502
mungkin untuk sesuatu seperti\nlogin Yale atau log masuk Harvard.

18560
17:45:17,502 --> 17:45:19,942
Bagaimana jika kodenya terlihat seperti ini?

18561
17:45:19,942 --> 17:45:21,882
Jadi izinkan saya membacanya dari kiri ke kanan.

18562
17:45:21,881 --> 17:45:26,051
Misalkan mereka menggunakan sesuatu\n

18563
17:45:26,052 --> 17:45:28,572
dan mereka punya beberapa SQL\nyang diketik di situs web itu

18564
17:45:28,572 --> 17:45:32,502
mengatakan pilih bintang dari pengguna,\nnama pengguna sama dengan ini

18565
17:45:34,391 --> 17:45:37,851
Dan mereka memasukkan\nama pengguna dan kata sandi.

18566
17:45:38,949 --> 17:45:41,531
Nah, ketika pengguna mengetik\kata sandi nama penggunanya, tekan Enter

18567
17:45:41,531 --> 17:45:44,262
Saya mungkin ingin memilih\npengguna itu dari database saya

18568
17:45:44,262 --> 17:45:46,362
untuk melihat apakah nama pengguna\nd kata sandi cocok.

18569
17:45:46,362 --> 17:45:49,061
Jadi SQL yang mendasarinya\nmungkin, pilih bintang

18570
17:45:49,061 --> 17:45:51,131
dari pengguna, dengan nama pengguna\nsama dengan tanda tanya

18571
17:45:51,131 --> 17:45:52,548
dan kata sandi sama dengan tanda tanya.

18572
17:45:57,341 --> 17:46:02,771
Dan jika kita kembali satu baris,\nmungkin Malan@harvard.edu

18573
17:46:04,311 --> 17:46:06,531
Kita harus membiarkan dia melanjutkan\nsejak saat itu.

18574
17:46:06,531 --> 17:46:10,481
Jadi itulah beberapa kode semu, jika\nAnda mau, untuk skenario ini.

18575
17:46:10,482 --> 17:46:14,922
Namun, bagaimana jika kode ini bukan\n

18576
17:46:14,921 --> 17:46:16,841
ya, dan tidak menggunakan tanda tanya?

18577
17:46:16,841 --> 17:46:20,098
Jadi sintaksis tanda tanya\adalah hal SQL yang cukup umum

18578
17:46:20,099 --> 17:46:22,182
di mana tanda tanya\na digunakan sebagai pengganti

18579
17:46:22,182 --> 17:46:24,732
seperti di printf, persen S tadi.

18580
17:46:24,732 --> 17:46:28,242
Tapi fungsi ini, db.execute\ndari perpustakaan CS50

18581
17:46:28,241 --> 17:46:30,761
dan perpustakaan pihak ketiga\namun, juga demikian

18582
17:46:30,762 --> 17:46:33,132
melakukan beberapa hal baik\ndengan tanda tanya ini

18583
17:46:33,131 --> 17:46:35,171
dan bertahan melawan\nserangan berikutnya.

18584
17:46:35,171 --> 17:46:38,261
Misalkan Anda tidak menggunakan\na perpustakaan pihak ketiga seperti milik kami

18585
17:46:38,262 --> 17:46:41,832
dan Anda baru saja membuat\n secara manual

18586
17:46:41,832 --> 17:46:45,281
Anda harus melakukan sesuatu seperti ini\n

18587
17:46:45,281 --> 17:46:47,141
Anda sudah nyaman dengan\nformat string sekarang.

18588
17:46:47,141 --> 17:46:50,224
Anda sudah terbiasa menggunakan\n

18589
17:46:50,224 --> 17:46:52,572
Misalkan Anda adalah\programmer yang sedang bercita-cita tinggi

18590
17:46:52,572 --> 17:46:55,002
hanya menggunakan teknik\nyang telah diajarkan kepada Anda.

18591
17:46:55,002 --> 17:46:58,002
Jadi, Anda memiliki f-string\ndengan bintang pilihan dari pengguna

18592
17:46:58,002 --> 17:47:01,811
di mana nama pengguna sama dengan, kutipan,\n

18593
17:47:01,811 --> 17:47:06,612
Dan kata sandi sama dengan, kutipan,\nunquote, "kata sandi" dalam kurung kurawal.

18594
17:47:06,612 --> 17:47:09,612
Sampai saat ini, dua minggu\na lalu, ini sudah sempurna

18595
17:47:09,612 --> 17:47:14,802
teknik sah dalam Python\nuntuk memasukkan nilai ke dalam string.

18596
17:47:14,802 --> 17:47:18,972
Namun perhatikan jika Anda sendiri menggunakan\ntanda kutip tunggal

18597
17:47:18,972 --> 17:47:24,092
dan pengguna mengetikkan satu\ntanda kutip pada masukannya, apa

18598
17:47:25,262 --> 17:47:29,851
Kemana tujuan kita jika Anda\n

18599
17:47:29,851 --> 17:47:33,691
ke dalam rangkaian teks yang Anda siapkan sendiri?

18600
17:47:40,942 --> 17:47:46,012
Kasus terburuk, mereka dapat memasukkan apa yang ada\n

18601
17:47:47,152 --> 17:47:50,482
Secara umum, jika Anda menggunakan\n

18602
17:47:50,482 --> 17:47:52,342
untuk mengelilingi\ninput pengguna, sebaiknya Anda melakukannya

18603
17:47:52,341 --> 17:47:54,591
berharap mereka tidak memiliki\nan tanda kutip di namanya.

18604
17:47:54,591 --> 17:47:57,216
Atau Anda sebaiknya berharap mereka\ntidak mengetikkan satu kutipan pun.

18605
17:47:57,216 --> 17:48:01,366
Karena bagaimana jika kutipan tunggal mereka\n

18606
17:48:01,366 --> 17:48:03,241
lalu sisanya\nini diabaikan?

18607
17:48:03,241 --> 17:48:04,671
Baiklah, mari kita pertimbangkan\nbagaimana hal ini bisa terjadi.

18608
17:48:05,851 --> 17:48:08,182
Ini jadi agak\nburam di sini, tapi izinkan saya

18609
17:48:08,182 --> 17:48:10,192
colokkan di sini-- wow, kelihatannya jelek.

18610
17:48:13,281 --> 17:48:15,771
Ubah saja menjadi putih\nagar lebih mudah dibaca.

18611
17:48:15,771 --> 17:48:22,072
Apa yang terjadi jika\pengguna melakukan ini?

18612
17:48:22,072 --> 17:48:24,652
Mereka mengetik, seperti yang saya\ndilakukan pada tangkapan layar

18613
17:48:24,652 --> 17:48:28,101
'Malan@harvard.edu,'\nkutipan tunggal, tanda hubung, tanda hubung.

18614
17:48:28,101 --> 17:48:30,411
Apa yang baru saja terjadi\nsecara logis, padahal kita pernah melakukannya

18615
17:48:30,411 --> 17:48:32,241
baru saja memulai dengan SQL hari ini?

18616
17:48:32,241 --> 17:48:37,491
Nah, pilih bintang dari pengguna, dimana\n

18617
17:48:38,661 --> 17:48:42,681
Apa yang buruk tentang sisanya?

18618
17:48:42,682 --> 17:48:45,093
Tanda hubung, tanda hubung, saya klaim,\nberarti komentar, yang mana

18619
17:48:45,093 --> 17:48:47,551
berarti kode warna saya akan\nmenjadi sedikit buram lagi.

18620
17:48:47,552 --> 17:48:50,482
Tapi semuanya setelah\ndash, tanda hubung diabaikan begitu saja.

18621
17:48:50,482 --> 17:48:52,782
Maka, logika dari\nkueri SQL adalah

18622
17:48:52,781 --> 17:48:56,101
cukup katakan, pilih\nMalan@harvard.edu dari database

18623
17:48:56,101 --> 17:48:58,832
bahkan tidak memeriksa kata sandi lagi.

18624
17:48:58,832 --> 17:49:01,522
Oleh karena itu, Anda akan mendapatkan\nkembali setidaknya satu baris.

18625
17:49:01,521 --> 17:49:06,531
Jadi panjang barisnya akan sama dengan 1, dan seterusnya\n

18626
17:49:06,531 --> 17:49:09,531
memasukkan pengguna, memberi mereka\nakses ke akun my.harvard saya

18627
17:49:10,491 --> 17:49:15,981
Dan mereka berpura-pura menjadi saya\n

18628
17:49:15,982 --> 17:49:17,787
tanda hubung di bidang nama pengguna.

18629
17:49:17,786 --> 17:49:19,911
Sekali lagi, tolong jangan lakukan\nmulai melakukan ini nanti hari ini

18630
17:49:19,911 --> 17:49:21,481
di Harvard, Yale, atau situs web lainnya.

18631
17:49:21,482 --> 17:49:23,012
Tapi itu bisa sesederhana itu.

18632
17:49:23,512 --> 17:49:25,372
Karena programmer\nmempraktikkan apa yang mereka

18633
17:49:25,372 --> 17:49:29,452
diajarkan, yaitu hanya\nmenggunakan kurung kurawal untuk menyambungkannya

18634
17:49:30,902 --> 17:49:33,932
Namun jika Anda tidak mengerti caranya\n

18635
17:49:33,932 --> 17:49:37,597
dan jika Anda tidak mempercayai pengguna Anda\n

18636
17:49:37,597 --> 17:49:39,472
sayangnya di luar sana akan\nitu terjadi

18637
17:49:39,472 --> 17:49:44,722
beberapa musuh yang hanya ingin mencoba\n

18638
17:49:45,832 --> 17:49:48,322
Inilah yang disebut\na serangan injeksi SQL

18639
17:49:48,322 --> 17:49:52,341
karena pengguna dapat mengetikkan sesuatu\n

18640
17:49:52,341 --> 17:49:56,451
dan menipu database Anda agar melakukan\n

18641
17:49:56,451 --> 17:50:00,171
seperti, misalnya, memasukkan pengguna.

18642
17:50:00,171 --> 17:50:02,222
Kasus terburuk, mereka\tidak bisa melakukan hal lain.

18643
17:50:02,222 --> 17:50:06,832
Mungkin pengguna mengetikkan titik koma, lalu\n

18644
17:50:06,832 --> 17:50:10,522
Anda dapat membayangkan melakukan titik koma\nmemperbarui nilai tabel, di mana

18645
17:50:10,521 --> 17:50:14,481
nama sama dengan Malan, dan atur\nnilainya sama dengan A, bukan B

18646
17:50:16,012 --> 17:50:18,891
The ability to inject\nSQL into the database

18647
17:50:18,891 --> 17:50:22,161
means you can do anything you want with\n

18648
17:50:25,341 --> 17:50:28,221
And now, just a quick, little\n

18649
17:50:34,752 --> 17:50:38,362
OK, to, like, one of us, two of us.

18650
17:50:39,741 --> 17:50:41,902
Baiklah, jadi mari kita lanjutkan\bukan ke kondisi terakhir.

18651
17:50:41,902 --> 17:50:44,472
Ada satu masalah lain\nyang bisa menjadi kacau di sini.

18652
17:50:44,472 --> 17:50:45,722
Oh, and I should explain this.

18653
17:50:45,722 --> 17:50:50,842
So this is an allusion to the son,\n

18654
17:50:50,841 --> 17:50:54,151
The word drop, table, students, and\n

18655
17:50:54,152 --> 17:50:56,781
Ini adalah humor yang hanya\norang CS yang mengerti

18656
17:50:56,781 --> 17:51:00,381
karena ibu menyadarinya,\n

18657
17:51:01,650 --> 17:51:04,942
Kurang lucu saat dijelaskan, tapi sekali\n

18658
17:51:06,802 --> 17:51:10,192
Jadi satu ancaman terakhir, sekarang\nAnda sudah lulus

18659
17:51:10,192 --> 17:51:14,662
ke dunia database yang tepat\ndan jauh dari file CSV saja.

18660
17:51:14,661 --> 17:51:17,511
Ada yang salah\nsaat menggunakan database

18661
17:51:17,512 --> 17:51:21,180
dan sejujurnya, bahkan menggunakan file\nCSV jika Anda memiliki banyak pengguna.

18662
17:51:21,180 --> 17:51:22,972
Dan sejauh ini, Anda dan\nSaya sudah mendapatkan kemewahan tersebut

18663
17:51:22,972 --> 17:51:25,889
di hampir setiap program yang kami tulis\n

18664
17:51:25,889 --> 17:51:27,172
Hanya Anda yang menggunakan kode Anda.

18665
17:51:27,171 --> 17:51:30,112
Dan bahkan jika rekan pengajar Anda\atau TA menggunakannya, mungkin

18666
17:51:31,402 --> 17:51:36,112
Namun dunia menjadi menarik jika Anda\n

18667
17:51:36,112 --> 17:51:40,072
di situs web, sehingga sekarang Anda dapat\n

18668
17:51:40,072 --> 17:51:42,771
untuk masuk pada saat yang sama,\ndengan mengeklik tombol

18669
17:51:42,771 --> 17:51:44,752
pada waktu yang sama, atau hampir bersamaan.

18670
17:51:44,752 --> 17:51:47,722
Lalu, apa yang terjadi jika\na komputer sedang mencoba

18671
17:51:47,722 --> 17:51:50,632
untuk menangani permintaan dari dua\norang yang berbeda sekaligus

18672
17:51:50,631 --> 17:51:52,822
seperti yang mungkin terjadi\nsepanjang waktu di situs web?

18673
17:51:52,822 --> 17:51:54,951
Anda mungkin mendapatkan apa yang\ndisebut kondisi balapan.

18674
17:51:54,951 --> 17:51:58,401
Dan ini merupakan masalah dalam komputasi\n

18675
17:51:58,402 --> 17:52:02,302
dengan Python, kapan saja\nAnda telah berbagi data

18676
17:52:02,302 --> 17:52:04,492
seperti database, sebagai berikut.

18677
17:52:04,491 --> 17:52:08,961
Tampaknya ini adalah salah satu\npostingan Instagram yang paling banyak disukai.

18678
17:52:08,961 --> 17:52:11,451
Ini sebenarnya hanya\na gambar telur.

18679
17:52:11,451 --> 17:52:12,987
Adakah yang mengklik telur ini?

18680
17:52:15,561 --> 17:52:19,222
Jadi, telusuri foto ini jika Anda mau\n

18681
17:52:19,222 --> 17:52:21,452
Akunnya adalah world_record_egg.

18682
17:52:21,451 --> 17:52:24,381
Ini hanyalah tangkapan layar\n

18683
17:52:24,381 --> 17:52:25,881
Jika Anda terbiasa\nmenggunakan Instagram

18684
17:52:25,881 --> 17:52:28,839
atau seperti situs media sosial lainnya, ada\n

18685
17:52:28,839 --> 17:52:30,261
atau tombol hati hari ini.

18686
17:52:30,262 --> 17:52:32,242
Dan itu sebenarnya masalah yang\nsangat sulit.

18687
17:52:32,241 --> 17:52:35,391
Ide sederhana untuk menghitung\njumlah suka pada sesuatu

18688
17:52:35,391 --> 17:52:38,332
punya, tapi itu berarti\nseseorang harus mengekliknya.

18689
17:52:38,332 --> 17:52:40,252
Kode Anda harus mendeteksi klik.

18690
17:52:40,252 --> 17:52:43,201
Kode Anda harus memperbarui database,\n

18691
17:52:43,201 --> 17:52:48,081
meskipun mungkin ada banyak orang\n

18692
17:52:48,082 --> 17:52:53,692
Dan sayangnya, hal buruk bisa\n

18693
17:52:53,692 --> 17:52:55,882
secara bersamaan di komputer.

18694
17:52:57,031 --> 17:53:01,012
Jadi ini beberapa kode lagi, setengah\n

18695
17:53:01,921 --> 17:53:05,572
Misalkan apa yang terjadi ketika Anda,\n

18696
17:53:05,572 --> 17:53:08,811
pada tombol suka di\npostingan Instagram.

18697
17:53:08,811 --> 17:53:13,101
Misalkan kode tersebut seperti berikut,\n

18698
17:53:13,101 --> 17:53:19,531
db.eksekusi dari kesukaan yang dipilih dari\n

18699
17:53:22,432 --> 17:53:24,622
Saya berasumsi bahwa\nfoto itu memiliki ID unik.

18700
17:53:24,622 --> 17:53:28,012
Itu adalah bilangan bulat besar, apa pun\nnya, yang ditetapkan secara acak.

18701
17:53:28,012 --> 17:53:30,472
Saya berasumsi bahwa ketika\nAnda mengklik hati

18702
17:53:30,472 --> 17:53:33,502
ID uniknya entah bagaimana\ndikirim ke server Instagram

18703
17:53:33,502 --> 17:53:36,082
sehingga kodenya bisa menyebutnya ID.

18704
17:53:36,082 --> 17:53:39,171
Dan saya berasumsi bahwa Instagram\nis menggunakan database SQL-nya

18705
17:53:39,171 --> 17:53:43,131
dan memilih, dari tabel\npostingan, jumlah suka saat ini

18706
17:53:43,131 --> 17:53:46,502
telur itu untuk nomor ID yang diberikan.

18707
17:53:47,002 --> 17:53:50,294
Karena saya perlu tahu berapa banyak yang menyukainya\n

18708
17:53:50,294 --> 17:53:51,531
dan kemudian perbarui database.

18709
17:53:51,531 --> 17:53:55,051
Saya perlu memilih datanya, lalu\nSaya perlu memperbarui data di sini.

18710
17:53:55,552 --> 17:53:59,122
Jadi dalam beberapa kode Python di sini,\nmari kita simpan, dalam sebuah variabel bernama

18711
17:53:59,122 --> 17:54:03,292
suka, apa pun yang muncul di\n

18712
17:54:03,292 --> 17:54:06,002
Sekali lagi, ini adalah sintaks baru\nkhusus untuk perpustakaan kami

18713
17:54:06,002 --> 17:54:09,171
tapi cara umum untuk mendapatkan kembali\nbaris pertama dan kolom dipanggil

18714
17:54:10,141 --> 17:54:12,262
Jadi pada titik\ncerita ini, suka sedang disimpan

18715
17:54:12,262 --> 17:54:14,804
jumlah total suka,\njutaan atau berapa pun

18716
17:54:17,241 --> 17:54:21,741
Jalankan pembaruan postingan,\natur jumlah suka

18717
17:54:21,741 --> 17:54:25,949
sama dengan nilai ini, dengan\nID postingan sama dengan nilai ini.

18718
17:54:25,949 --> 17:54:27,531
Saya ingin memperbarui sukanya menjadi apa?

18719
17:54:27,531 --> 17:54:31,881
Apapun yang disukai saat ini ditambah\n1, lalu masukkan ID.

18720
17:54:33,682 --> 17:54:37,072
Saya sedang memeriksa nilai\nsukanya, dan mungkin 10.

18721
17:54:37,072 --> 17:54:40,372
Saya mengubah 10 menjadi 11 dan\nkemudian memperbarui tabel.

18722
17:54:40,372 --> 17:54:43,732
Namun masalah bisa muncul\njika dua orang mengalaminya

18723
17:54:43,732 --> 17:54:48,352
mengklik telur itu kira-kira pada\n

18724
17:54:49,682 --> 17:54:52,192
Nah, di dunia\ndatabase dan server

18725
17:54:52,192 --> 17:54:56,461
dan Instagram di seluruh dunia memiliki\n

18726
17:54:56,461 --> 17:55:00,771
Jadi mereka dapat mendukung jutaan,\nbahkan miliaran pengguna saat ini.

18727
17:55:02,252 --> 17:55:05,872
Biasanya kode seperti ini\bukanlah yang kita sebut atomik.

18728
17:55:05,872 --> 17:55:09,772
Menjadi atomik berarti semuanya\ndieksekusi bersama-sama atau tidak dijalankan sama sekali.

18729
17:55:09,771 --> 17:55:14,841
Sebaliknya, kode biasanya dieksekusi,\n

18730
17:55:14,841 --> 17:55:18,451
Dan jika kode Anda berjalan di server\n

18731
17:55:18,451 --> 17:55:20,871
yang memang berlaku\nuntuk aplikasi seperti Instagram

18732
17:55:20,872 --> 17:55:23,902
jika Anda dan saya mengeklik\nhati pada waktu yang hampir bersamaan

18733
17:55:23,902 --> 17:55:27,502
untuk efisiensi, komputer,\nserver, milik Instagram

18734
17:55:27,502 --> 17:55:29,841
mungkin mengeksekusi baris kode ini untuk saya.

18735
17:55:29,841 --> 17:55:31,878
Kemudian ia mungkin mengeksekusi\nbaris kode ini untuk Anda.

18736
17:55:31,879 --> 17:55:34,461
Lalu baris kode ini untuk saya,\nlalu baris kode ini untuk Anda

18737
17:55:34,461 --> 17:55:37,044
lalu baris kode ini untuk saya,\nlalu baris kode ini untuk Anda.

18738
17:55:37,044 --> 17:55:41,891
Artinya, pertanyaan kami mungkin\n

18739
17:55:41,891 --> 17:55:44,711
Karena itu akan sedikit menjengkelkan\n

18740
17:55:44,711 --> 17:55:47,381
Saya diblokir saat Anda\nberinteraksi dengan situs ini.

18741
17:55:47,381 --> 17:55:50,119
Akan jauh lebih baik dalam hal efisiensi\nd keadilan jika memang demikian

18742
17:55:50,120 --> 17:55:52,662
lakukan sedikit pekerjaan untukku,\na sedikit pekerjaan untuk kamu

18743
17:55:52,661 --> 17:55:55,881
dan bolak-balik, dan bolak-balik, secara adil di server.

18744
17:55:55,881 --> 17:55:58,661
Jadi itulah yang biasanya terjadi\nsecara default. Baris kode ini

18745
17:56:00,762 --> 17:56:05,112
Dan hal ini dapat terjadi secara bergantian\nurutan dengan pengguna lain.

18746
17:56:05,112 --> 17:56:07,150
Anda bisa menggabungkannya seperti ini.

18747
17:56:07,150 --> 17:56:11,182
Urutan yang sama dari atas ke bawah, tetapi berbeda\n

18748
17:56:11,182 --> 17:56:15,342
Jadi misalkan jumlah\n

18749
17:56:15,341 --> 17:56:19,421
Dan misalkan saya dan Carter mengklik\n

18750
17:56:19,421 --> 17:56:21,761
Dan misalkan baris\nkode ini dieksekusi untuk saya

18751
17:56:21,762 --> 17:56:25,211
dan itu memberi saya nilai\nin suka, pada akhirnya, sebesar 10.

18752
17:56:25,211 --> 17:56:28,631
Misalkan komputer mengambil\n

18753
17:56:28,631 --> 17:56:31,031
melakukan kode yang sama untuk\nCarter, dan kembali

18754
17:56:31,031 --> 17:56:33,252
berapa nilai\njumlah suka saat ini?

18755
17:56:34,512 --> 17:56:36,550
Karena punyaku belum tercatat.

18756
17:56:36,550 --> 17:56:39,252
Pada titik cerita ini,\ndi suatu tempat di memori komputer

18757
17:56:39,252 --> 17:56:41,561
ada variabel suka\nuntuk saya, menyimpan 10.

18758
17:56:41,561 --> 17:56:44,741
Ada variabel suka\nmenyimpan 10 untuk Carter.

18759
17:56:44,741 --> 17:56:46,631
Kemudian baris kode ini dijalankan untuk saya.

18760
17:56:46,631 --> 17:56:50,560
Ini memperbarui database menjadi suka\n

18761
17:56:50,561 --> 17:56:55,781
Kemudian kode Carter dieksekusi,\n

18762
17:56:59,502 --> 17:57:03,550
Karena nilai sukanya terjadi\n

18763
17:57:03,550 --> 17:57:06,881
Jadi metaforanya di sini, jika kita\n

18764
17:57:06,881 --> 17:57:10,131
benar-benar bertindak, adalah sesuatu yang\n

18765
17:57:10,131 --> 17:57:15,640
kelas sistem, yang paling mirip\n

18766
17:57:15,641 --> 17:57:17,712
jika kamu punya\nkulkas mini di kamar asramamu.

18767
17:57:17,711 --> 17:57:23,781
Dan salah satu dari kamu dan teman sekamarmu datang\n

18768
17:57:23,781 --> 17:57:26,502
oh, kita kehabisan susu, begitulah\nbagaimana ceritanya pada hari-hariku.

18769
17:57:26,502 --> 17:57:30,525
Jadi kamu menutup kulkas, dan\n

18770
17:57:30,525 --> 17:57:31,900
dan mengantri untuk membeli susu.

18771
17:57:31,900 --> 17:57:33,650
Sementara itu, teman sekamarmu pulang.

18772
17:57:33,650 --> 17:57:38,265
Mereka juga memeriksa keadaan\n Anda

18773
17:57:38,266 --> 17:57:40,391
membuka pintu, dan menyadari,\noh, kita kehabisan susu.

18774
17:57:41,322 --> 17:57:43,362
Tutup kulkas, pergi\naseberang jalan, dan berangkat

18775
17:57:43,362 --> 17:57:45,400
mungkin ke toko lain,\atau antreannya cukup panjang

18776
17:57:45,400 --> 17:57:47,192
agar Anda tidak bertemu satu sama lain\di toko.

18777
17:57:47,192 --> 17:57:51,042
Singkat cerita, Anda berdua akhirnya\n

18778
17:57:51,042 --> 17:57:52,900
sekarang ada susu dari\nteman sekamarmu yang lain

18779
17:57:52,900 --> 17:57:56,021
di sana karena Anda berdua\nmembuat keputusan mengenai hal ini

18780
17:57:56,021 --> 17:58:01,150
berdasarkan keadaan variabel\n

18781
17:58:01,150 --> 17:58:03,042
Dan Anda entah bagaimana tidak berkomunikasi.

18782
17:58:03,042 --> 17:58:05,952
Sekarang di dunia nyata, hal ini\nisbenar-benar dapat dipecahkan.

18783
17:58:05,951 --> 17:58:09,461
Bagaimana cara Anda memperbaikinya atau menghindari\nmasalah ini di dunia nyata?

18784
17:58:09,461 --> 17:58:11,112
Secara harfiah, teman sekamar sendiri, lemari es sendiri.

18785
17:58:11,112 --> 17:58:13,092
AUDIENCE: Kirim SMS ke\nteman sekamar Anda [TIDAK TERDENGAR]..

18786
17:58:14,091 --> 17:58:15,824
Beri tahu mereka, jadi komunikasikanlah.

18787
17:58:15,824 --> 17:58:18,281
Faktanya, terminologi\ndi sini akan terdiri dari banyak rangkaian pesan

18788
17:58:18,281 --> 17:58:20,800
entah bagaimana bisa saling berkomunikasi\ndengan memiliki status bersama

18789
17:58:20,800 --> 17:58:22,572
seperti thread iMessage di ponsel Anda.

18790
17:58:23,531 --> 17:58:26,832
Anda dapat, lebih dramatis lagi,\nmengunci lemari es

18791
17:58:26,832 --> 17:58:30,912
sehingga membuat\nproses pembelian susu menjadi atomik.

18792
17:58:30,911 --> 17:58:33,730
Masalah mendasarnya adalah\nperlu efisiensi

18793
17:58:33,730 --> 17:58:37,031
komputer cenderung\nmenggabungkan logika yang diperlukan

18794
17:58:37,031 --> 17:58:41,322
terjadi ketika itu terjadi di\n

18795
17:58:42,521 --> 17:58:45,161
Anda perlu memastikan bahwa\nketiga baris kode ini

18796
17:58:45,161 --> 17:58:48,610
jalankan untuk saya, lalu\nuntuk Carter, lalu untuk Anda

18797
17:58:48,610 --> 17:58:51,050
jika Anda ingin memastikan bahwa\nhitungan ini benar.

18798
17:58:51,050 --> 17:58:54,561
Dan selama bertahun-tahun, ketika media sosial\n

18799
17:58:54,561 --> 17:58:56,442
ini adalah masalah yang sangat sulit.

18800
17:58:56,442 --> 17:58:59,262
Twitter dulunya down\nsepanjang waktu, dan ada tweet

18801
17:58:59,262 --> 17:59:01,601
dan retweet adalah hal\nyang juga terjadi

18802
17:59:02,832 --> 17:59:04,362
Ini adalah masalah yang sulit untuk dipecahkan.

18803
17:59:04,362 --> 17:59:06,031
Dan untungnya, ada solusi.

18804
17:59:06,031 --> 17:59:08,781
Dan kita tidak akan terjerumus ke dalam rumput liar\n

18805
17:59:08,781 --> 17:59:11,442
namun ketahuilah bahwa ada\nsolusi dalam bentuk benda

18806
17:59:11,442 --> 17:59:14,952
disebut kunci, yang saya gunakan itu\n

18807
17:59:14,951 --> 17:59:18,911
Kunci perangkat lunak memungkinkan Anda\n

18808
17:59:18,911 --> 17:59:20,891
lihatlah sampai kamu selesai melakukannya.

18809
17:59:20,891 --> 17:59:23,112
Ada hal-hal yang disebut\ntransaksi, yang mana

18810
17:59:23,112 --> 17:59:26,442
memungkinkan Anda melakukan hal yang setara dengan\n

18811
17:59:26,442 --> 17:59:29,472
mencegah teman sekamar Anda mengakses\nvariabel yang sama juga

18812
17:59:29,472 --> 17:59:32,262
tetapi untuk waktu yang sedikit lebih singkat.

18813
17:59:32,262 --> 17:59:34,222
Ada solusi untuk permasalahan ini.

18814
17:59:34,222 --> 17:59:37,991
Jadi misalnya, dalam Python,\nkode yang sama sekarang berwarna hijau

18815
17:59:37,991 --> 17:59:39,701
mungkin terlihat seperti ini.

18816
17:59:39,701 --> 17:59:42,491
Saat Anda mengetahui bahwa sesuatu\nharus terjadi sekaligus

18817
17:59:42,491 --> 17:59:46,362
secara keseluruhan, pertama-tama Anda memulai\n

18818
17:59:46,362 --> 17:59:49,048
lalu Anda melakukan\ntransaksi di bagian paling akhir.

18819
17:59:49,048 --> 17:59:51,131
Namun, di sini juga,\nakan ada sisi buruknya.

18820
17:59:51,131 --> 17:59:55,243
Biasanya, semakin sering Anda menggunakan\ntransaksi dengan cara ini

18821
17:59:55,243 --> 17:59:56,951
berpotensi, semakin tinggi\nprobabilitasnya

18822
17:59:56,951 --> 18:00:00,531
bahwa Anda akan mengusir seseorang atau\n

18823
18:00:01,031 --> 18:00:02,824
Karena kita tidak bisa berinteraksi\namun pada saat yang bersamaan.

18824
18:00:02,824 --> 18:00:05,262
Atau Anda mungkin membuat permintaannya\ngagal jika dia mencoba memperbarui

18825
18:00:05,262 --> 18:00:07,211
sesuatu yang sudah diperbarui.

18826
18:00:07,211 --> 18:00:10,061
Jadi biasanya Anda ingin\nmemiliki sedikit baris kode

18827
18:00:10,061 --> 18:00:13,182
bersama-sama di antara transaksi ini\n

18828
18:00:13,182 --> 18:00:16,122
Dan Anda membuka CVS dan Anda mendapatkan\nkembali dengan sangat cepat sehingga tidak

18829
18:00:16,122 --> 18:00:17,891
menyebabkan hal-hal kinerja semacam ini.

18830
18:00:17,891 --> 18:00:20,411
Jadi segalanya memang\meningkat dengan cepat hari ini.

18831
18:00:20,411 --> 18:00:23,613
Tujuan awalnya hanya untuk menyelesaikan\n

18832
18:00:23,614 --> 18:00:24,822
lebih efektif daripada Python.

18833
18:00:24,822 --> 18:00:27,114
Namun segera setelah Anda memiliki\nteknik yang lebih hebat ini

18834
18:00:27,114 --> 18:00:28,866
serangkaian masalah baru muncul.

18835
18:00:28,866 --> 18:00:30,491
Butuh latihan agar merasa nyaman.

18836
18:00:30,491 --> 18:00:34,511
Namun pada akhirnya, ini semua yang memimpin\n

18837
18:00:34,512 --> 18:00:37,601
pemrograman web dengan HTML,\nCSS, dan beberapa JavaScript.

18838
18:00:37,601 --> 18:00:40,432
Seminggu setelahnya, kembali menggunakan Python\ndan SQL.

18839
18:00:40,432 --> 18:00:42,281
Sehingga pada akhir semester,\nkami sudah benar-benar menggunakannya

18840
18:00:42,281 --> 18:00:45,101
semua bahasa yang berbeda ini\nuntuk mengetahui keahlian terbaiknya.

18841
18:00:45,101 --> 18:00:48,184
Dan selama beberapa minggu ke depan, sasaran\n

18842
18:00:48,184 --> 18:00:51,273
dan nyaman dengan apa yang dilakukan masing-masing\n

18843
18:00:51,273 --> 18:00:52,481
Ayo lanjutkan dan selesaikan di sini.

18844
18:00:52,482 --> 18:00:53,815
Saya akan menunggu jika ada pertanyaan.

18845
18:02:15,171 --> 18:02:19,222
Ini CS50, dan ini\nis sudah minggu ke 8.

18846
18:02:19,222 --> 18:02:21,705
Dan jika kita mengingat kembali\nbeberapa minggu terakhir ini

18847
18:02:21,705 --> 18:02:24,622
ingat bahwa segala sesuatunya dimulai dengan baik\n

18848
18:02:24,622 --> 18:02:27,049
seperti pada minggu ke 0, saat\nkita menggunakan Scratch

18849
18:02:27,048 --> 18:02:29,631
karena dengan Scratch kami memiliki\nGUI, antarmuka pengguna grafis.

18850
18:02:29,631 --> 18:02:33,171
Bahkan saat kita menjelajahi variabel dan\n

18851
18:02:33,171 --> 18:02:36,083
Anda memiliki lingkungan yang menyenangkan\n

18852
18:02:36,084 --> 18:02:37,792
Lalu di minggu ke-1,\nkami melakukan banyak hal

18853
18:02:37,792 --> 18:02:41,692
dari itu, ketika kita memperkenalkan C, dan\n

18854
18:02:41,692 --> 18:02:46,372
karena sekarang, semua program Anda menjadi\n

18855
18:02:46,372 --> 18:02:49,432
dan yang hilang hanyalah mouse,\animasi, menu, dan sebagainya.

18856
18:02:49,432 --> 18:02:51,622
Jadi sekarang,\nmaju ke minggu ke 8, kita sudah selesai

18857
18:02:51,622 --> 18:02:54,952
akan mengembalikan\antarmuka pengguna, UI, elemen semacam itu

18858
18:02:54,951 --> 18:02:56,511
dalam bentuk pemrograman web.

18859
18:02:56,512 --> 18:02:58,851
Dan ini lebih dari sekadar\nhanya menata situs web.

18860
18:02:58,851 --> 18:03:03,069
Ini akan terjadi pada minggu ini dan minggu depan,\n

18861
18:03:03,069 --> 18:03:05,362
hal-hal yang telah kami lakukan\nselama beberapa minggu terakhir

18862
18:03:05,362 --> 18:03:07,972
menggunakan Python, menggunakan\nSQL, dan sekarang memperkenalkan

18863
18:03:07,972 --> 18:03:10,972
beberapa bahasa lain,\bukan yang disebut sisi klien

18864
18:03:10,972 --> 18:03:13,461
di Mac Anda sendiri, PC Anda sendiri,\nponsel Anda sendiri, itu saja

18865
18:03:13,461 --> 18:03:15,472
untuk berbicara dengan layanan back-end tersebut.

18866
18:03:15,472 --> 18:03:18,772
Jadi memang, pada akhir\nCS50 ini, melakukan segalanya

18867
18:03:18,771 --> 18:03:22,131
menyatu menjadi antarmuka pengguna\nyang sangat familier.

18868
18:03:22,131 --> 18:03:24,951
Kita semua menggunakan ponsel,\nddesktop, laptop, setiap hari.

18869
18:03:24,951 --> 18:03:28,252
Dan semakin meningkat, bahkan aplikasi\nseluler yang Anda semua gunakan

18870
18:03:28,252 --> 18:03:32,512
diimplementasikan, belum tentu\n

18871
18:03:32,512 --> 18:03:34,641
jika Anda familier dengan\nitu, namun juga bahasanya

18872
18:03:34,641 --> 18:03:38,552
disebut HTML, CSS, dan JavaScript,\n

18873
18:03:38,552 --> 18:03:43,372
Namun sebelum kita melakukan itu, mari kita sediakan\n

18874
18:03:43,372 --> 18:03:46,822
karena memang, kita akan mulai mencari\n

18875
18:03:46,822 --> 18:03:51,105
itu sendiri berfungsi, meskipun cepat, sehingga\n

18876
18:03:51,105 --> 18:03:54,022
semua kode ini berjalan, bagaimana caranya\n

18877
18:03:54,021 --> 18:03:56,752
sungguh, pada akhirnya, setelah\nCS50, Anda dapat belajar hanya dengan

18878
18:03:56,752 --> 18:03:59,156
menjelajahi situs-situs nyata lainnya.

18879
18:03:59,156 --> 18:04:00,531
Jadi internet, kita semua ada di dalamnya.

18880
18:04:00,531 --> 18:04:05,101
Secara harafiah, saat ini, apa itu, menurut kata-kata Anda sendiri?

18881
18:04:07,671 --> 18:04:10,371
Kegunaan inilah yang saat ini\nkita anggap remeh.

18882
18:04:12,654 --> 18:04:14,572
PEMBICARA 1: Oke, penyimpanan\nbesar, dan memang benar

18883
18:04:14,572 --> 18:04:18,451
bagaimana cloud dijelaskan, yaitu\n

18884
18:04:18,451 --> 18:04:21,771
untuk banyak kabel\ndan kabel dan perangkat keras.

18885
18:04:21,771 --> 18:04:24,941
Dan internet,\nrumusan istilah lainnya, bagaimana lagi?

18886
18:04:24,942 --> 18:04:26,692
AUDIENCE: Banyak\ndata yang dapat kami jangkau.

18887
18:04:26,692 --> 18:04:28,609
PEMBICARA 1: Oke, sekian\nodata yang kita semua dapat

18888
18:04:28,608 --> 18:04:32,241
jangkauan, dengan cara saling terhubung\n

18889
18:04:32,241 --> 18:04:35,002
Dan sebenarnya, internet\njuga merupakan sebuah perangkat keras.

18890
18:04:35,002 --> 18:04:38,811
Ada banyak sekali server yang keluar\n

18891
18:04:38,811 --> 18:04:41,331
melalui kabel fisik, melalui\npenyedia layanan internet

18892
18:04:41,332 --> 18:04:43,382
melalui konektivitas nirkabel, dan sejenisnya.

18893
18:04:43,381 --> 18:04:46,161
Dan begitu Anda mulai memiliki\njaringan dari jaringan dari jaringan

18894
18:04:47,362 --> 18:04:50,332
Memang benar, Harvard memiliki jaringannya sendiri\n

18895
18:04:50,332 --> 18:04:52,687
dan rumah Anda mungkin\nmemiliki jaringannya sendiri.

18896
18:04:52,686 --> 18:04:54,561
Namun begitu Anda mulai\nmenghubungkan jaringan tersebut

18897
18:04:54,561 --> 18:04:58,921
apakah Anda mendapatkan jaringan yang saling terhubung\n

18898
18:04:58,921 --> 18:05:01,551
Jadi inilah sup\nafabet lengkap yang bisa disajikan

18899
18:05:01,552 --> 18:05:03,802
dengan internet, beberapa\nyang akronim dan istilahnya

18900
18:05:03,802 --> 18:05:04,732
Anda mungkin pernah melihatnya sebelumnya.

18901
18:05:04,732 --> 18:05:06,532
Tapi setidaknya mari kita kupas\nkembali beberapa lapisan tersebut

18902
18:05:06,531 --> 18:05:08,752
dan pertimbangkan apa saja\nkomponen penyusunnya.

18903
18:05:08,752 --> 18:05:11,752
Jadi inilah gambaran internet\n

18904
18:05:11,752 --> 18:05:14,182
pada tahun 1969, ketika\nitulah sesuatu yang disebut

18905
18:05:14,182 --> 18:05:17,482
ARPANET, dari Badan Proyek Penelitian\nLanjutan.

18906
18:05:17,482 --> 18:05:20,872
Dan niat awalnya hanya\n

18907
18:05:20,872 --> 18:05:25,702
di Utah dan California, secara harfiah\nserver, atau komputer, di masing-masingnya

18908
18:05:25,701 --> 18:05:27,891
dari area tersebut, entah bagaimana\nterhubung dengan kabel

18909
18:05:27,891 --> 18:05:29,616
sehingga orang-orang dapat\nmulai berbagi data.

18910
18:05:29,616 --> 18:05:33,182
Setahun kemudian, organisasi ini diperluas hingga\nmencakup MIT, Harvard, dan lainnya.

18911
18:05:33,182 --> 18:05:36,201
Dan sekarang maju cepat ke\nhari ini, Anda memiliki jumlah yang sangat besar

18912
18:05:36,201 --> 18:05:39,322
sistem di seluruh dunia\nyang berada di jaringan yang sama.

18913
18:05:39,322 --> 18:05:41,841
Dan sebenarnya, jika saya\nhanya membuka halaman web

18914
18:05:41,841 --> 18:05:44,301
di sini, hal itu\nterus berubah

18915
18:05:44,302 --> 18:05:48,802
visualisasi internet sebagai\n

18916
18:05:48,802 --> 18:05:52,072
secara abstrak, semua\ngaris dan interkoneksi ini

18917
18:05:52,072 --> 18:05:56,008
mewakili betapa saling terhubungnya\ndunia saat ini.

18918
18:05:56,008 --> 18:05:59,091
Dan itu berarti ada semua\n

18919
18:05:59,091 --> 18:06:02,822
semakin banyak perangkat keras yang diberikan\n

18920
18:06:02,822 --> 18:06:07,402
Namun jika kita fokus, sungguh, pada\n saja

18921
18:06:07,402 --> 18:06:11,872
baik pada tahun 1970, atau sekarang pada tahun 2021,\n

18922
18:06:11,872 --> 18:06:15,385
ya, server, tapi tipe tertentu\n

18923
18:06:15,385 --> 18:06:17,302
Dan router, sesuai\nnamanya, hanya melakukan rute

18924
18:06:17,302 --> 18:06:21,302
data dari kiri ke kanan, atas ke\nbawah, dari satu titik ke titik lainnya.

18925
18:06:21,302 --> 18:06:25,132
Jadi, ada semua server ini di sini\n

18926
18:06:25,131 --> 18:06:28,651
di jaringan Comcast,\njaringan Verizon, jaringan rumah Anda sendiri

18927
18:06:28,652 --> 18:06:31,461
Anda memiliki router sendiri\nyang memiliki tujuan hidup

18928
18:06:31,461 --> 18:06:34,277
adalah mengambil data lalu\nmemutuskan, haruskah saya mengirimkannya dengan cara ini

18929
18:06:34,277 --> 18:06:36,652
atau lewat sini, atau lewat sini, boleh dikatakan begitu, dengan asumsi ada

18930
18:06:36,652 --> 18:06:38,512
beberapa opsi dengan banyak kabel.

18931
18:06:38,512 --> 18:06:41,692
Anda, di rumah Anda, mungkin baru saja\n

18932
18:06:41,692 --> 18:06:46,162
Namun tentu saja, jika Anda berada di tempat seperti\n

18933
18:06:46,161 --> 18:06:49,221
mungkin ada sejumlah\ninterkoneksi

18934
18:06:49,222 --> 18:06:51,891
agar data dapat\ndikirim pada akhirnya.

18935
18:06:51,891 --> 18:06:54,981
Jadi bagaimana kita mendapatkan data\nama router ini?

18936
18:06:54,982 --> 18:06:57,652
Misalnya, jika Anda ingin\nmengirim email ke seseorang

18937
18:06:57,652 --> 18:07:00,502
di Stanford, California,\ndari sini, di Pantai Timur

18938
18:07:00,502 --> 18:07:04,771
atau jika anda ingin mengunjungi\nwww.stanford.edu, bagaimana kabar laptop anda

18939
18:07:04,771 --> 18:07:08,557
ponsel Anda, desktop Anda, sebenarnya\n

18940
18:07:08,557 --> 18:07:12,112
Intinya,\nlaptop atau ponsel Anda mengetahuinya

18941
18:07:12,112 --> 18:07:16,141
saat booting di awal\n

18942
18:07:16,141 --> 18:07:17,682
alamat router lokal itu.

18943
18:07:17,682 --> 18:07:20,491
Jadi jika Anda ingin mengirim\nemail dari laptop saya ke sini

18944
18:07:20,491 --> 18:07:23,701
laptop saya pada dasarnya akan\n

18945
18:07:23,701 --> 18:07:25,711
Lalu, dari sana, saya\ntidak tahu, saya tidak peduli

18946
18:07:25,711 --> 18:07:27,254
bagaimana ia mendapatkan sisa jaraknya.

18947
18:07:27,254 --> 18:07:29,822
Namun mudah-mudahan, dalam beberapa\nsejumlah langkah nanti

18948
18:07:29,822 --> 18:07:32,461
Router Harvard mungkin akan\nmengirimnya ke router Boston

18949
18:07:32,461 --> 18:07:34,586
akan mengirimkannya ke\nrouter California akan dikirim

18950
18:07:34,586 --> 18:07:37,771
untuk mengirimkannya ke router Stanford, hingga\n

18951
18:07:38,372 --> 18:07:41,822
Dan sebenarnya kita dapat menggambarkan hal ini\ndengan sedikit bercanda.

18952
18:07:41,822 --> 18:07:44,072
Syukurlah,\nstaf kursus dengan baik hati menawarkan diri

18953
18:07:44,072 --> 18:07:48,792
untuk membuat visualisasi\nini, menggunakan teknologi yang sudah dikenal.

18954
18:07:48,792 --> 18:07:52,322
Jadi di sini kita memiliki beberapa TF\n

18955
18:07:52,322 --> 18:07:55,472
Biarkan saya melanjutkan dan menampilkan\njendela ini secara penuh di sini.

18956
18:07:55,472 --> 18:07:58,391
Beri saya waktu sejenak untuk\nmelihatnya di layar saya di sini.

18957
18:07:58,391 --> 18:08:03,182
Dan kami akan mempertimbangkan apa yang terjadi jika kami\n

18958
18:08:03,182 --> 18:08:07,502
dari satu orang atau router,\ndalam hal ini adalah Phyllis

18959
18:08:07,502 --> 18:08:10,561
di pojok kanan bawah,\nhingga Brian, dalam hal ini

18960
18:08:10,561 --> 18:08:11,831
di pojok kiri atas.

18961
18:08:11,832 --> 18:08:14,461
Jadi setiap anggota staf\ndi sini mewakili tepat satu orang

18962
18:08:14,461 --> 18:08:17,051
router ini di internet.

18963
18:08:47,612 --> 18:08:49,891
Kami sebenarnya memerlukan\npercobaan yang cukup banyak

18964
18:08:49,891 --> 18:08:51,481
untuk menyelesaikannya dengan benar.

18965
18:08:51,482 --> 18:08:54,632
Jadi kapan, apa yang\nstaf lewati di sini?

18966
18:08:54,631 --> 18:08:57,714
Di sini kita hanya punya, secara fisik, apa\n

18967
18:08:57,714 --> 18:08:59,881
Jadi Phyllis memulai dengan\nenvelope, yang di dalamnya

18968
18:08:59,881 --> 18:09:01,951
apakah email itu, mungkin,\di luar Pantai Timur

18969
18:09:01,951 --> 18:09:05,136
dan dia ingin mengirimkannya ke Brian pada\n

18970
18:09:05,137 --> 18:09:08,012
Jadi dia memiliki semua hal yang berbeda ini\n

18971
18:09:08,012 --> 18:09:11,112
antara dia dan titik B yaitu Brian.

18972
18:09:11,112 --> 18:09:14,671
Dia bisa naik, turun, dalam kasusnya, dan\n

18973
18:09:14,671 --> 18:09:17,461
bisa naik, turun, kiri, atau kanan,\n

18974
18:09:17,461 --> 18:09:19,442
Singkat cerita,\nada algoritma untuk itu

18975
18:09:19,442 --> 18:09:22,812
cari tahu bagaimana Anda memutuskan\nuntuk mengirim paket ke atas, ke bawah

18976
18:09:22,811 --> 18:09:24,661
kiri, atau kanan, begitulah.

18977
18:09:24,661 --> 18:09:29,716
Namun mereka melakukannya dengan mengambil masukan, dan\n

18978
18:09:29,716 --> 18:09:32,341
Dan setidaknya ada beberapa\nhal di luar ini

18979
18:09:32,341 --> 18:09:35,281
karena semua router ini dan,\n

18980
18:09:35,281 --> 18:09:38,012
dan telepon saat ini,\nsbicarakan sesuatu yang disebut

18981
18:09:38,012 --> 18:09:41,132
TCP/IP, sekumpulan\nakronim yang mungkin Anda miliki

18982
18:09:41,131 --> 18:09:44,011
terlihat di suatu tempat di\nponsel, Mac, atau PC Anda

18983
18:09:44,012 --> 18:09:48,422
di print di suatu tempat, yang merujuk\n

18984
18:09:48,421 --> 18:09:51,194
yang digunakan komputer untuk\nberkomunikasi antar saat ini.

18985
18:09:52,112 --> 18:09:54,631
Protokol seperti seperangkat\naturan yang harus Anda patuhi.

18986
18:09:54,631 --> 18:09:57,091
Di masa yang lebih sehat, saya mungkin\berikutnya mengulurkan tangan saya dan seseorang

18987
18:09:57,091 --> 18:10:00,631
seperti Carter akan mengulurkan tangannya,\n

18988
18:10:00,631 --> 18:10:03,871
berdasarkan protokol manusia seperti\nberjabat tangan secara fisik.

18989
18:10:03,872 --> 18:10:07,082
Saat ini, kami memiliki protokol mask,\nyang perlu Anda lakukan

18990
18:10:08,591 --> 18:10:11,641
Namun itu juga hanyalah seperangkat aturan\n

18991
18:10:11,641 --> 18:10:13,951
itu ada di suatu tempat\nyang distandarisasi dan didokumentasikan.

18992
18:10:13,951 --> 18:10:16,711
Jadi komputer selalu menggunakan protokol\nuntuk mengaturnya

18993
18:10:16,711 --> 18:10:19,622
bagaimana mereka mengirim informasi\nd menerima informasi.

18994
18:10:19,622 --> 18:10:24,482
Dan TCP dan IP adalah dua protokol tersebut\n

18995
18:10:24,482 --> 18:10:27,212
Apa yang TCP/IP perintahkan kepada seseorang\nseperti Phyllis untuk dilakukan

18996
18:10:27,211 --> 18:10:31,152
jika dia ingin mengirim email ke Brian,\n

18997
18:10:31,902 --> 18:10:37,082
Namun di luar virtual\n itu

18998
18:10:37,082 --> 18:10:41,132
Dan saya akan menggambarkan ini sebagai tujuan\n

18999
18:10:41,131 --> 18:10:44,011
sama seperti di dunia manusia,\nAnda akan menulis tujuannya

19000
18:10:45,332 --> 18:10:49,202
Lalu dia akan memasang miliknya\n

19001
18:10:49,201 --> 18:10:51,750
pojok, sama seperti Anda, sebagai\nsender, akan mencantumkan sumber Anda sendiri

19002
18:10:51,750 --> 18:10:53,171
alamatnya di dunia manusia.

19003
18:10:53,171 --> 18:10:56,432
Namun, alih-alih alamat ini\n

19004
18:10:56,432 --> 18:11:01,141
Cambridge, Massachusetts 02138, AS,\n

19005
18:11:01,141 --> 18:11:05,641
di internet memiliki alamat unik\n

19006
18:11:05,641 --> 18:11:08,192
Dan alamat IP\nhanyalah pengidentifikasi numerik

19007
18:11:08,192 --> 18:11:11,461
di internet, yang memungkinkan\nkomputer, seperti Phyllis dan Brian

19008
18:11:11,461 --> 18:11:14,432
untuk mengalamatkan amplop ini\nke dan dari satu sama lain.

19009
18:11:14,432 --> 18:11:16,741
Dan Anda mungkin pernah melihat\nformatnya pada suatu saat.

19010
18:11:16,741 --> 18:11:20,311
Biasanya, format IP\nadresses adalah sesuatu yang titik sesuatu

19011
18:11:20,311 --> 18:11:22,261
titik sesuatu titik sesuatu.

19012
18:11:22,262 --> 18:11:24,872
Masing-masing hal tersebut,\ndiwakili di sini dengan simbol hash

19013
18:11:24,872 --> 18:11:29,852
adalah angka dari 0 sampai 255.

19014
18:11:29,851 --> 18:11:32,911
Dan, berdasarkan\npetunjuk kecil itu, jika masing-masing hash ini

19015
18:11:32,911 --> 18:11:36,631
mewakili angka dari 0\nhingga 255, masing-masing hash tersebut

19016
18:11:36,631 --> 18:11:39,542
diwakili dengan\nberapa byte atau bit?

19017
18:11:39,542 --> 18:11:43,442
Delapan bit atau satu byte, yaitu ke\n

19018
18:11:43,442 --> 18:11:47,072
alamat IP harus menggunakan\n32 bit atau 4 byte

19019
18:11:47,072 --> 18:11:50,641
jika kita mundur sekarang ke beberapa\n

19020
18:11:50,641 --> 18:11:52,991
Dan maksudnya adalah,\namun setidaknya sekilas

19021
18:11:52,991 --> 18:11:57,153
sepertinya kita punya 4 miliar\n

19022
18:11:57,154 --> 18:11:58,862
Sayangnya,\njumlahnya sangat banyak

19023
18:11:58,862 --> 18:12:01,772
manusia di dunia saat ini,\n

19024
18:12:01,771 --> 18:12:05,221
memiliki banyak perangkat, tentu saja\n

19025
18:12:05,222 --> 18:12:08,974
laptop, dan telepon, dan Anda punya\n

19026
18:12:08,974 --> 18:12:10,391
semuanya perlu diatasi.

19027
18:12:10,391 --> 18:12:12,332
Jadi ada jenis\nalamat IP lain itu

19028
18:12:12,332 --> 18:12:14,012
mulai digunakan secara lebih umum.

19029
18:12:16,411 --> 18:12:19,232
Ada juga versi 6\nyang bukan 32 bit

19030
18:12:19,232 --> 18:12:23,552
menggunakan 128 bit, yang memberi kita\n

19031
18:12:23,551 --> 18:12:27,872
untuk komputer, jadi setidaknya kami bisa menangani\n

19032
18:12:28,812 --> 18:12:31,772
Jadi maksudnya, apa yang sebenarnya terjadi di dalam amplop ini

19033
18:12:31,771 --> 18:12:35,941
adalah alamat tujuan, yaitu\n

19034
18:12:35,941 --> 18:12:40,021
alamat, itu adalah alamat IP Phyllis,\n

19035
18:12:40,021 --> 18:12:43,051
ke titik B, dan jika perlu\ndapat kembali, hanya dengan membaliknya

19036
18:12:43,051 --> 18:12:44,641
sumber dan tujuannya.

19037
18:12:44,642 --> 18:12:49,652
Namun di internet, Anda mungkin mengetahuinya\n

19038
18:12:49,652 --> 18:12:53,191
Ada server web, ada chat\n

19039
18:12:53,191 --> 18:12:56,191
Sepertinya semua ini berbeda\n

19040
18:12:56,191 --> 18:12:58,771
Lalu, saat Brian\nmenerima amplop itu

19041
18:12:58,771 --> 18:13:05,432
bagaimana dia tahu itu email, versus\n

19042
18:13:05,432 --> 18:13:07,622
versus sesuatu yang lain sama sekali.

19043
18:13:07,622 --> 18:13:10,771
Nah, ternyata kita\nbisa melihat bagian lainnya

19044
18:13:10,771 --> 18:13:14,281
dari akronim ini, TCP dalam TCP/IP.

19045
18:13:14,282 --> 18:13:17,172
Dan apa yang TCP izinkan untuk kita\nlakukan, misalnya

19046
18:13:17,172 --> 18:13:18,822
adalah menentukan beberapa hal.

19047
18:13:18,822 --> 18:13:23,792
Pertama, jenis layanan yang\n

19048
18:13:23,792 --> 18:13:26,881
ia melakukan ini dengan pengidentifikasi numerik.

19049
18:13:26,881 --> 18:13:31,652
Dan saya akan melanjutkan dan menulis\n

19050
18:13:31,652 --> 18:13:35,222
Dan saya akan menulisnya di\n

19051
18:13:35,221 --> 18:13:37,381
Jadi secara teknis, sekarang,\napa yang ada di amplop ini

19052
18:13:37,381 --> 18:13:40,111
bukan hanya alamat,\ntetapi juga nomor unik

19053
18:13:40,111 --> 18:13:45,182
yang mewakili jenis layanan apa\n

19054
18:13:45,182 --> 18:13:48,792
baik itu email, atau lalu lintas web,\atau Skype, atau yang lainnya.

19055
18:13:48,792 --> 18:13:53,342
Angka-angka ini distandarisasi, dan di sini\n

19056
18:13:53,342 --> 18:13:56,192
bahkan tidak dalam konteks email,\ntetapi dalam konteks web.

19057
18:13:56,191 --> 18:13:59,131
Port 80 biasanya digunakan\nsetiap kali ada amplop yang berisi

19058
18:13:59,131 --> 18:14:03,361
halaman web, atau permintaan\nuntuk itu, atau nomor 443

19059
18:14:03,361 --> 18:14:07,201
ketika permintaan itu sebenarnya\n

19060
18:14:07,202 --> 18:14:11,192
ketahuilah, dalam URL, yang dikenal sebagai HTTPS,\n

19061
18:14:11,191 --> 18:14:13,081
Lebih lanjut tentang arti HTTP nanti.

19062
18:14:13,081 --> 18:14:16,955
Jika berupa email, nomornya\nmungkin 25 atau 465, atau 587.

19063
18:14:16,955 --> 18:14:19,872
Ini adalah hal-hal yang Anda\n

19064
18:14:19,872 --> 18:14:24,271
Namun jika Anda pernah harus mengonfigurasi,\nmisalnya, Outlook atau bahkan Gmail

19065
18:14:24,271 --> 18:14:26,671
untuk berbicara dengan akun lain,\nAnda mungkin bisa melakukannya

19066
18:14:26,672 --> 18:14:30,902
telah melihat angka-angka ini, dengan mengetik\n

19067
18:14:30,902 --> 18:14:33,892
lalu sebuah angka, yang hanya untuk\n

19068
18:14:33,892 --> 18:14:35,642
Namun biasanya\nbukan hal-hal yang Anda dan saya

19069
18:14:35,642 --> 18:14:38,582
harus dipedulikan, karena\nserver dan komputer saat ini

19070
18:14:38,581 --> 18:14:40,811
mengotomatiskan sebagian besar proses ini.

19071
18:14:40,812 --> 18:14:45,211
Namun, pada akhirnya, hanya itu yang diperlukan untuk\n

19072
18:14:45,211 --> 18:14:47,042
Namun bagaimana jika pesannya sangat besar?

19073
18:14:47,042 --> 18:14:50,351
Jika emailnya pendek, Mungkin\n

19074
18:14:50,941 --> 18:14:54,241
Namun misalkan Phyllis ingin\nmengirimkan gambar kucing kepada Brian

19075
18:14:54,241 --> 18:14:56,581
seperti ini, atau lebih buruk lagi, video kucing.

19076
18:14:56,581 --> 18:15:00,811
Ini akan menjadi tidak adil\njika tidak ada orang lain yang bisa berbuat apa pun

19077
18:15:00,812 --> 18:15:03,062
di internet, hanya\nkarena keinginan Phyllis

19078
18:15:03,062 --> 18:15:06,601
untuk mengirimi Brian gambar yang sangat besar,\na video kucing yang sangat besar.

19079
18:15:06,601 --> 18:15:10,351
Alangkah baiknya jika kita bisa berbaik hati\n

19080
18:15:10,351 --> 18:15:13,529
di seluruh router ini, sehingga\nkami dapat memberikan sedikit waktu

19081
18:15:13,529 --> 18:15:15,572
untuk Phyllis, sedikit\nwaktu untuk orang lain

19082
18:15:15,572 --> 18:15:18,779
sedikit waktu untuk orang lain,\n

19083
18:15:19,892 --> 18:15:25,472
Namun dalam hal keadilan, dia tidak memonopoli bandwidth

19084
18:15:27,842 --> 18:15:31,982
Dan ini memungkinkan kita\ndo melakukan satu fitur lain dari TCP/IP

19085
18:15:31,982 --> 18:15:35,072
yaitu fragmentasi,\nyang bisa kita lakukan untuk sementara

19086
18:15:35,072 --> 18:15:37,952
dan komputer Phyllis akan\melakukan ini secara otomatis, terfragmentasi

19087
18:15:37,952 --> 18:15:41,582
paket besar yang dimaksud,\atau file besar yang dimaksud

19088
18:15:41,581 --> 18:15:46,561
lalu gunakan, bukan hanya satu\n

19089
18:15:48,369 --> 18:15:50,161
Namun, jika kami melakukan itu,\nkami mungkin akan pergi

19090
18:15:50,161 --> 18:15:54,031
memerlukan satu informasi lagi,\n

19091
18:15:54,032 --> 18:15:57,332
Misalnya, jika Anda menerapkan ini,\n

19092
18:15:57,331 --> 18:16:00,301
menjadi empat bagian, seperti,\secara intuitif, apa yang mungkin Anda lakukan

19093
18:16:00,301 --> 18:16:03,911
ingin meletakkannya secara virtual di\nluar amplop ini sekarang?

19094
18:16:05,259 --> 18:16:06,842
PEMBICARA 1: Urutannya, entah bagaimana.

19095
18:16:06,842 --> 18:16:10,472
Jadi mungkin seperti bagian\tidak ada dari empat, bagian kedua dari empat

19096
18:16:10,471 --> 18:16:12,161
bagian ketiga dari empat, dan seterusnya.

19097
18:16:12,161 --> 18:16:14,792
Jadi saya akan menulis satu hal lagi\n

19098
18:16:15,301 --> 18:16:17,551
Saya menaruh semacam\nnomor urut, itu

19099
18:16:17,551 --> 18:16:20,191
hanya sedikit\npetunjuk untuk Brian, untuk mengetahuinya

19100
18:16:20,191 --> 18:16:22,171
bagaimana cara\nmerangkai kembali benda-benda ini.

19101
18:16:22,172 --> 18:16:25,202
Dan bahkan lebih kuat\ntdari itu, ini sebenarnya

19102
18:16:25,202 --> 18:16:29,252
memberi kita primitif sederhana\n ini

19103
18:16:30,452 --> 18:16:35,881
Jika Brian menerima amplop seperti ini,\n

19104
18:16:35,881 --> 18:16:39,691
bidang, fitur apa lagi\ndo yang dimiliki TCP

19105
18:16:39,691 --> 18:16:42,542
memungkinkan Brian dan Phyllis untuk menerapkannya?

19106
18:16:44,282 --> 18:16:46,612
Namun ini bukan hanya\npengurutan paket.

19107
18:16:46,611 --> 18:16:50,701
Apa lagi yang mungkin berguna dalam\nmemberikan angka pada hal-hal ini

19108
18:16:55,187 --> 18:16:56,932
HADIRIN: Bagaimana kalau suka ketinggalan.

19109
18:16:56,932 --> 18:16:58,851
PEMBICARA 1: Jika Anda melewatkan sesuatu\nyang seharusnya dikirimkan

19110
18:16:59,851 --> 18:17:04,110
Jawaban singkatnya, tepatnya, ya, TCP,\n

19111
18:17:04,110 --> 18:17:06,652
yang kami sertakan, dapat mengutip\nmenghapus tanda kutip pengiriman "jaminan".

19112
18:17:07,161 --> 18:17:10,341
Karena jika Brian menerima satu\ndari empat, dua dari empat

19113
18:17:10,342 --> 18:17:12,562
empat dari empat, tapi\nbukan tiga dari empat

19114
18:17:12,562 --> 18:17:16,402
dia sekarang tahu, bisa ditebak, hal itu\n

19115
18:17:17,911 --> 18:17:21,801
Oleh karena itu, hampir selalu\njika Anda menerima email

19116
18:17:21,801 --> 18:17:24,411
Anda bisa menerima semuanya\natau tidak sama sekali.

19117
18:17:24,411 --> 18:17:27,741
Menyukai kalimat, kata, dan\nparagraf tidak boleh kok

19118
18:17:29,361 --> 18:17:31,478
Atau jika Anda mengunduh\nfoto di web

19119
18:17:31,479 --> 18:17:33,562
seharusnya tidak hanya memiliki\nlubang kosong di tengahnya

19120
18:17:33,562 --> 18:17:36,652
hanya karena paket\ninformasi itu hilang.

19121
18:17:36,652 --> 18:17:40,851
TCP, jika itu adalah protokol yang digunakan untuk\n

19122
18:17:40,851 --> 18:17:44,792
memastikan semuanya sampai di sana,\n

19123
18:17:44,792 --> 18:17:48,112
Jadi ini adalah properti yang penting,\ntapi, hanya sebagai teaser saja

19124
18:17:49,312 --> 18:17:52,732
Ada sesuatu yang disebut UDP,\nyang merupakan alternatif dari TCP

19125
18:17:52,732 --> 18:17:54,472
itu tidak menjamin pengiriman.

19126
18:17:54,471 --> 18:17:58,072
Dan sebagai gambaran mengapa Anda mungkin\n

19127
18:17:58,072 --> 18:18:03,366
mungkin Anda menonton seperti streaming\n

19128
18:18:03,366 --> 18:18:05,241
Anda mungkin tidak\nmenginginkannya

19129
18:18:05,241 --> 18:18:08,476
untuk melakukan buffering dan buffering dan buffering, cukup\n

19130
18:18:08,476 --> 18:18:10,351
karena Anda akan\nmulai melewatkan banyak hal.

19131
18:18:10,351 --> 18:18:12,471
Dan kemudian Anda akan menjadi\bukan satu-satunya orang di dunia yang menonton

19132
18:18:12,471 --> 18:18:15,849
pertandingan yang berakhir 20 menit yang lalu, ketika\n

19133
18:18:15,850 --> 18:18:18,142
Demikian pula untuk panggilan suara,\nakan sangat mengganggu

19134
18:18:18,142 --> 18:18:19,942
jika suara kita terus-menerus di-buffer.

19135
18:18:19,941 --> 18:18:22,678
Jadi UDP mungkin merupakan\nprotokol yang baik untuk memastikannya

19136
18:18:22,679 --> 18:18:25,762
itu, meskipun orang di sisi lain\n

19137
18:18:26,991 --> 18:18:29,781
Itu tidak menjeda dan\nmengirim ulang dan mengirim ulang

19138
18:18:29,782 --> 18:18:33,961
karena itu akan sangat memperlambat\n

19139
18:18:33,961 --> 18:18:36,861
Jadi, singkatnya, IP menangani\npengalamatan paket-paket ini

19140
18:18:36,861 --> 18:18:40,341
dan membakukan angka-angka yang setiap\n

19141
18:18:40,342 --> 18:18:44,542
dan TCP menangani standardisasi\nseperti layanan apa

19142
18:18:44,542 --> 18:18:50,661
dapat digunakan, antara titik A dan\n

19143
18:18:50,661 --> 18:18:54,652
tapi mungkin, saat Phyllis\nsmengirimkan pesan ke Brian

19144
18:18:54,652 --> 18:18:56,782
dia tidak benar-benar tahu\dan mungkin tidak seharusnya tahu

19145
18:18:56,782 --> 18:18:58,912
peduli apa alamat IP-nya, kan?

19146
18:18:58,911 --> 18:19:01,491
Saat ini, sepertinya, saya tidak\tahu sebagian besar nomor teleponnya

19147
18:19:02,661 --> 18:19:04,614
Saya malah mencarinya dengan cara tertentu.

19148
18:19:04,614 --> 18:19:07,072
Dan tentu saja, saat Anda mengunjungi\nsitus web, apa yang Anda ketik?

19149
18:19:07,072 --> 18:19:10,048
Biasanya bukan sesuatu\ndot sesuatu titik sesuatu titik

19150
18:19:10,048 --> 18:19:12,298
sesuatu, yang masing-masing\nsesuatu itu adalah angka.

19151
18:19:12,298 --> 18:19:14,182
Apa yang biasanya\nAnda ketik di browser?

19152
18:19:15,622 --> 18:19:20,031
Sesuatu seperti Stanford.edu,\nHarvard.edu, Yale.edu, gmail.com

19153
18:19:20,031 --> 18:19:22,072
atau nama domain sejenis lainnya.

19154
18:19:22,072 --> 18:19:24,622
Jadi, untungnya,\nada sistem lain

19155
18:19:24,622 --> 18:19:29,551
di internet, satu lagi akronim untuk\n

19156
18:19:29,551 --> 18:19:33,742
Dan hampir semua jaringan di\n

19157
18:19:33,741 --> 18:19:37,838
jaringan rumah Anda sendiri, di suatu tempat,\nentah bagaimana memiliki server DNS.

19158
18:19:37,839 --> 18:19:39,922
Anda mungkin tidak perlu\nmengonfigurasinya sendiri.

19159
18:19:39,922 --> 18:19:44,342
Orang lain melakukannya, kampus Anda,\n Anda

19160
18:19:44,342 --> 18:19:48,112
Namun ada beberapa server yang terhubung\n

19161
18:19:48,111 --> 18:19:52,701
melalui kabel atau nirkabel, itu saja\n

19162
18:19:52,702 --> 18:19:55,672
spreadsheet besar, jika Anda\nmau, atau, jika Anda mau

19163
18:19:55,672 --> 18:19:59,992
tabel hash, yang memiliki setidaknya\ndua kolom kunci dan nilai

19164
18:20:00,812 --> 18:20:02,241
Di sebelah kiri\ndisampinglah yang akan kita lakukan

19165
18:20:02,241 --> 18:20:04,262
panggil nama domain,\nseperti Harvard.edu

19166
18:20:04,262 --> 18:20:08,902
Yale.edu, artinya alamat IP di\nsebelah kanan

19167
18:20:08,902 --> 18:20:13,612
tujuan hidup server DNS\nilah hanya untuk menerjemahkan nama domain

19168
18:20:14,896 --> 18:20:17,271
Begitu pula sebaliknya, jika Anda ingin\nberalih ke arah lain

19169
18:20:17,271 --> 18:20:22,072
dan secara teknis, tepatnya\n

19170
18:20:23,432 --> 18:20:25,441
Dan kita akan melihat apa yang terjadi sebentar lagi.

19171
18:20:25,441 --> 18:20:27,652
Namun sekali lagi, semua ini\nterjadi secara ajaib

19172
18:20:27,652 --> 18:20:29,402
saat Anda menghidupkan\nponsel atau laptop Anda

19173
18:20:29,402 --> 18:20:33,292
hari ini, karena semua hal ini\n

19174
18:20:33,292 --> 18:20:38,752
Jadi, bagaimana sebenarnya kita bisa memulai\n

19175
18:20:38,751 --> 18:20:44,911
Baiklah, ayo kita lihat-lihat,\n

19176
18:20:44,911 --> 18:20:48,531
Mari kita lihat apa yang sebenarnya bisa kita lakukan\n

19177
18:20:48,532 --> 18:20:52,672
Jika sekarang kita mempunyai kemampuan untuk\nmemindahkan data dari titik A ke titik B

19178
18:20:52,672 --> 18:20:55,252
dan apa yang ada di dalam amplop itu\nbisa berupa, ya, email

19179
18:20:55,251 --> 18:20:58,011
tapi sekarang, dan seterusnya, itu benar-benar\nakan berupa konten web.

19180
18:20:58,012 --> 18:21:00,202
Akan ada konten\nyang Anda minta

19181
18:21:00,202 --> 18:21:01,584
seperti memberi saya halaman beranda hari ini.

19182
18:21:01,584 --> 18:21:03,292
Dan ada konten\nyang Anda kirim, yang mana

19183
18:21:03,292 --> 18:21:05,512
akan menjadi konten\nhalaman beranda sebenarnya.

19184
18:21:05,512 --> 18:21:10,642
Jadi, untuk melangkah lebih dalam lagi,\n

19185
18:21:10,642 --> 18:21:14,602
sedang berpindah dari titik A ke\ntitik B menggunakan TCP/IP, ayo

19186
18:21:14,601 --> 18:21:19,221
masukkan sesuatu yang spesifik ke dalamnya,\n

19187
18:21:19,221 --> 18:21:24,149
tapi sesuatu yang disebut HTTP, yang\n

19188
18:21:24,149 --> 18:21:25,941
Anda mungkin sudah melihat ini selama\nberpuluh-puluh tahun, mungkin

19189
18:21:25,941 --> 18:21:29,331
dalam bentuk URL, sedemikian rupa sehingga Anda\n

19190
18:21:29,331 --> 18:21:31,521
Browser Anda baru saja menambahkan\nit untuk Anda secara otomatis

19191
18:21:31,521 --> 18:21:35,101
dan Anda tinggal mengetikkan Harvard.edu,\nor Yale.edu, atau sejenisnya.

19192
18:21:35,101 --> 18:21:38,391
Namun HTTP hanyalah\nprotokol terakhir yang akan kami buat

19193
18:21:38,392 --> 18:21:42,412
dibicarakan di sini, itu hanya\nmenstandarkan cara kerja browser web dan web

19194
18:21:44,611 --> 18:21:47,601
Jadi inilah perbedaan\nantara internet dan web.

19195
18:21:47,601 --> 18:21:50,001
Internet benar-benar seperti\npipa ledeng tingkat rendah

19196
18:21:50,001 --> 18:21:53,091
semua kabel, semua\nteknologi yang hanya memindahkan paket

19197
18:21:53,092 --> 18:21:57,322
dari kiri ke kanan, kanan ke kiri, atas\n

19198
18:21:57,322 --> 18:22:01,941
ke titik B. Anda dapat melakukan apa saja\n

19199
18:22:01,941 --> 18:22:06,121
email, web, video, chat\ndan game, dan sebagainya.

19200
18:22:06,122 --> 18:22:09,652
Jadi HTTP, atau web,\nhanyalah satu aplikasi

19201
18:22:09,652 --> 18:22:13,695
yang secara konseptual berada di atas,\ndibangun di atas internet.

19202
18:22:13,695 --> 18:22:15,862
Setelah Anda menerima begitu saja\nbahwa ada internet

19203
18:22:15,861 --> 18:22:17,451
Anda dapat melakukan\nhal-hal menarik dengannya

19204
18:22:17,452 --> 18:22:19,942
sama seperti di dunia fisik kita,\noce Anda memiliki listrik

19205
18:22:19,941 --> 18:22:22,941
Anda bisa berasumsi bahwa Anda benar-benar bisa melakukannya\n

19206
18:22:22,941 --> 18:22:25,101
tanpa mengetahui\atau peduli cara kerjanya.

19207
18:22:25,101 --> 18:22:28,801
Namun sekarang Anda akan\nmemprogram untuk web

19208
18:22:28,801 --> 18:22:32,131
ada gunanya memahami cara\nbeberapa hal ini bekerja.

19209
18:22:32,131 --> 18:22:36,202
Jadi mari kita intip\nformat hal-hal itu

19210
18:22:37,402 --> 18:22:39,922
Saat ini, biasanya\sebenarnya HTTPS

19211
18:22:39,922 --> 18:22:42,172
dalam permainan, sekali lagi,\nhuruf S berarti aman.

19212
18:22:42,172 --> 18:22:47,092
Lebih lanjut tentang itu nanti, tapi HTTPnya\n

19213
18:22:47,092 --> 18:22:48,472
masuk ke dalam amplop ini.

19214
18:22:48,471 --> 18:22:52,281
Dan hebatnya, biasanya hanya\ninformasi tekstual.

19215
18:22:52,282 --> 18:22:56,992
Ada format teks sederhana\nyang diputuskan manusia bertahun-tahun yang lalu

19216
18:22:56,991 --> 18:23:00,441
yang ada di dalam\nvelope ini, yang memberi tahu browser caranya

19217
18:23:00,441 --> 18:23:04,762
untuk meminta informasi dari server,\n

19218
18:23:04,762 --> 18:23:06,392
kepada klien itu dengan informasi.

19219
18:23:06,392 --> 18:23:12,592
Jadi inilah, misalnya, kanonis\n

19220
18:23:12,592 --> 18:23:14,362
Apa yang mungkin Anda lihat pada akhir ini?

19221
18:23:14,361 --> 18:23:15,829
Terkadang Anda mungkin melihat garis miring.

19222
18:23:15,830 --> 18:23:18,622
Browser saat ini agak disederhanakan\n

19223
18:23:18,622 --> 18:23:21,771
Namun garis miring, seperti yang akan kita lihat, hanya\nmewakili seperti defaultnya

19224
18:23:21,771 --> 18:23:24,652
folder, akar dari\nhard drive server web

19225
18:23:24,652 --> 18:23:26,077
seperti apa pun dasarnya.

19226
18:23:26,077 --> 18:23:32,182
Ini seperti garis miring terbalik pada titik C\n

19227
18:23:32,182 --> 18:23:34,432
Namun sebuah URL bisa memiliki lebih dari itu.

19228
18:23:34,432 --> 18:23:36,982
Itu dapat memiliki jalur garis miring,\ndi mana jalur hanyalah sebuah kata

19229
18:23:36,982 --> 18:23:40,552
atau beberapa kata, semacam itu\n

19230
18:23:40,551 --> 18:23:43,072
Jalur itu sebenarnya bisa berupa\na file tertentu, kita lihat saja nanti

19231
18:23:43,072 --> 18:23:45,262
seperti sesuatu yang disebut file.html.

19232
18:23:45,262 --> 18:23:48,682
Lebih lanjut tentang HTML sebentar lagi, atau\nit bahkan bisa berupa folder garis miring

19233
18:23:48,682 --> 18:23:52,911
mungkin dengan garis miring lain, atau\nmungkin bisa /folder/file.html.

19234
18:23:52,911 --> 18:23:57,081
Sekarang ini Safari, dan bahkan Chrome\n

19235
18:23:57,081 --> 18:24:00,621
mempunyai kebiasaan mencoba bersembunyi\n

19236
18:24:02,361 --> 18:24:05,121
Namun pada akhirnya, akan ada gunanya jika kita memahaminya

19237
18:24:05,122 --> 18:24:08,812
di URL mana Anda berada, karena\nit memetakan langsung ke kode

19238
18:24:08,812 --> 18:24:10,642
yang pada akhirnya akan kami tulis.

19239
18:24:10,642 --> 18:24:13,282
Namun ini hanya berarti\akhirnya semua benda ini berwarna kuning

19240
18:24:13,282 --> 18:24:18,322
merujuk pada, mungkin, suatu\nfile dan/atau folder tertentu di web

19241
18:24:18,322 --> 18:24:20,214
server, tempat Anda memprogram.

19242
18:24:21,172 --> 18:24:26,002
Contoh.com, ini domainnya\n

19243
18:24:26,001 --> 18:24:28,621
Contoh.com adalah\nyang disebut dengan nama domain.

19244
18:24:28,622 --> 18:24:33,532
Semuanya, www.example.com,\n

19245
18:24:33,532 --> 18:24:37,432
Dan yang dimaksud WW\nadalah nama spesifiknya

19246
18:24:37,432 --> 18:24:40,292
dari server tertentu di domain itu.

19247
18:24:40,292 --> 18:24:44,842
Dulu, ada\na server web www.example.com.

19248
18:24:44,842 --> 18:24:48,442
Mungkin ada server email\nmail.example.com.

19249
18:24:48,441 --> 18:24:51,501
Mungkin ada server obrolan\nchat.example.com.

19250
18:24:51,501 --> 18:24:56,331
Saat ini, nama host, atau\nsubdomain ini, bergantung pada konteksnya

19251
18:24:56,331 --> 18:24:58,581
sebenarnya dapat merujuk ke sejumlah\nbanyak server, bukan?

19252
18:24:58,581 --> 18:25:01,792
Saat Anda membuka www.facebook.com,\nitu bukan satu server

19253
18:25:01,792 --> 18:25:03,652
itu ribuan server saat ini.

19254
18:25:03,652 --> 18:25:05,631
Singkat cerita,\nada teknologi untuk itu

19255
18:25:05,631 --> 18:25:08,122
entah bagaimana, dapatkan data Anda\nke salah satu server tersebut

19256
18:25:08,122 --> 18:25:11,491
tapi semua ini adalah urusan kami\n

19257
18:25:11,491 --> 18:25:13,822
Hal ini di sini, nama host,\nkonteks email

19258
18:25:13,822 --> 18:25:16,702
alamat itu mungkin alternatif\ndisebut subdomain.

19259
18:25:16,702 --> 18:25:20,062
Hal ini di sini,\ndomain tingkat atas, mungkin Anda

19260
18:25:20,062 --> 18:25:23,422
ketahuilah bahwa dot com berarti komersial,\n

19261
18:25:23,422 --> 18:25:25,762
Dot org serupa, dot net.

19262
18:25:25,762 --> 18:25:29,182
Beberapa di antaranya agak dibatasi,\n

19263
18:25:29,182 --> 18:25:31,711
dot edu hanya untuk lembaga pendidikan\terakreditasi.

19264
18:25:31,711 --> 18:25:35,211
Namun ada ratusan, bahkan\nlebih, domain tingkat atas

19265
18:25:35,211 --> 18:25:37,702
saat ini, beberapa lebih populer daripada yang lain.

19266
18:25:37,702 --> 18:25:41,542
Alat CS50, misalnya, menggunakan CS50.io.

19267
18:25:41,542 --> 18:25:44,182
IO semacam berkonotasi input-output.

19268
18:25:44,182 --> 18:25:49,131
Namun, itu sebenarnya milik\n

19269
18:25:49,131 --> 18:25:55,366
yang kode negaranya .io, dan Anda melihat\n

19270
18:25:56,241 --> 18:26:00,399
Memang, biasanya itu adalah sesuatu.uk,\nsesuatu.jp, dan sejenisnya

19271
18:26:01,191 --> 18:26:04,042
Namun beberapa di antaranya telah\nterkooptasi, termasuk .tv

19272
18:26:04,042 --> 18:26:06,932
karena mereka juga memiliki\narti dalam bahasa Inggris.

19273
18:26:06,932 --> 18:26:08,991
Terakhir, ini\nkita sebut sebagai protokol.

19274
18:26:08,991 --> 18:26:13,042
Itu menentukan bagaimana server menggunakan\n

19275
18:26:13,042 --> 18:26:16,351
ke titik B. Jadi apa yang\ndi dalam amplop ini?

19276
18:26:16,351 --> 18:26:18,622
Sekarang mari kita mulai melihat\nsedikit lagi.

19277
18:26:18,622 --> 18:26:20,211
Apa yang ada di dalam amplop ini?

19278
18:26:20,211 --> 18:26:23,782
Pada dasarnya, untuk tujuan\nkita saat ini, ini adalah salah satu dari dua kata kerja

19279
18:26:25,792 --> 18:26:28,612
Dan jika ada di antara Anda yang pernah mencoba\n

19280
18:26:28,611 --> 18:26:30,569
Anda mungkin pernah melihat beberapa\nistilah ini sebelumnya.

19281
18:26:30,570 --> 18:26:34,702
Namun kedua kata kerja ini menjelaskan\nhanya cara mengirimkan informasi

19282
18:26:36,952 --> 18:26:39,172
Singkat cerita, lebih\non minggu depan ini

19283
18:26:39,172 --> 18:26:43,472
GET berarti memasukkan input pengguna apa pun ke dalam URL, POST berarti menyembunyikannya

19284
18:26:43,471 --> 18:26:46,641
sehingga hal-hal yang Anda cari,\n

19285
18:26:46,642 --> 18:26:49,634
nama pengguna dan sandi Anda\n

19286
18:26:49,634 --> 18:26:51,592
dan oleh karena itu dapat dilihat\noleh siapa pun yang memiliki akses

19287
18:26:51,592 --> 18:26:53,672
ke komputer Anda dan\nriwayat penelusuran Anda

19288
18:26:53,672 --> 18:26:57,802
melainkan disediakan\n

19289
18:26:57,801 --> 18:27:00,292
Namun untuk saat ini, kami akan fokus\hampir seluruhnya pada GET

19290
18:27:00,292 --> 18:27:03,741
yang mungkin merupakan yang paling umum\n

19291
18:27:03,741 --> 18:27:05,251
Dan yang akan kami lakukan adalah ini.

19292
18:27:05,251 --> 18:27:07,461
Izinkan saya beralih\nke layar kosong di sini.

19293
18:27:07,461 --> 18:27:11,182
Dan jika kita berasumsi bahwa saya kecil\nadalah laptop ini

19294
18:27:11,182 --> 18:27:16,191
dan saya terhubung ke cloud, dan\n

19295
18:27:16,191 --> 18:27:20,182
ingin meminta halaman web\nof, Harvard.edu atau Yale.edu

19296
18:27:20,182 --> 18:27:22,982
ini sebenarnya akan menjadi\nproses dua langkah.

19297
18:27:22,982 --> 18:27:27,892
Akan ada permintaan,\n

19298
18:27:27,892 --> 18:27:29,752
dan kemudian, mudah-mudahan,\nserver yang mendengarnya

19299
18:27:29,751 --> 18:27:34,011
permintaan itu akan dibalas dengan\n

19300
18:27:34,012 --> 18:27:37,042
Dan istilah lain yang\nrelevan di sini adalah laptop saya

19301
18:27:37,042 --> 18:27:40,642
adalah yang disebut klien,\nHarvard.edu, Yale.edu, apa pun

19302
18:27:40,642 --> 18:27:42,352
itu, itulah yang disebut server.

19303
18:27:42,351 --> 18:27:45,441
Dan seperti di restoran, di mana\n

19304
18:27:45,441 --> 18:27:47,091
server mungkin memberikannya kepada Anda.

19305
18:27:47,092 --> 18:27:49,372
Sekali lagi, ini merupakan\nhubungan dua arah.

19306
18:27:49,372 --> 18:27:54,381
Satu permintaan, satu tanggapan, untuk\nsetiap halaman web yang kami minta.

19307
18:27:54,381 --> 18:27:58,042
Baiklah, jadi apa isinya\n

19308
18:27:58,042 --> 18:28:01,012
Nah, panah ini, garis ini\nbaru saja saya gambar dari kiri ke kanan

19309
18:28:01,012 --> 18:28:05,301
mewakili permintaan, secara teknis\n

19310
18:28:05,301 --> 18:28:08,031
Saat Anda mengunjungi halaman\nweb, menggunakan browser Anda

19311
18:28:08,032 --> 18:28:11,452
di ponsel, laptop, atau desktop Anda,\n

19312
18:28:11,452 --> 18:28:14,794
dan pesan teks pada Mac atau PC Anda\n

19313
18:28:14,793 --> 18:28:16,251
terlihat seperti ini.

19314
18:28:16,251 --> 18:28:20,111
Kata kerja GET, URL, atau lebih tepatnya\njalur yang ingin Anda dapatkan

19315
18:28:20,111 --> 18:28:22,941
garis miring mewakili\ndhalaman default di situs web.

19316
18:28:22,941 --> 18:28:27,682
HTTP/1.1 hanyalah penyebutan\n

19317
18:28:27,682 --> 18:28:31,221
Sekarang kita sampai ke versi 2, dan\n

19318
18:28:31,221 --> 18:28:35,811
Dan amplop itu berisi beberapa\n

19319
18:28:35,812 --> 18:28:37,502
nama domain yang sepenuhnya memenuhi syarat.

19320
18:28:37,501 --> 18:28:42,331
Hal ini karena server tunggal dapat\n

19321
18:28:42,331 --> 18:28:46,011
Jika Anda menggunakan Squarespace atau Wix atau\n

19322
18:28:46,012 --> 18:28:49,282
saat ini, kemungkinan besar Anda tidak mendapatkan\nserver pribadi Anda sendiri.

19323
18:28:49,282 --> 18:28:52,652
Anda berada di server yang sama dengan\n

19324
18:28:52,652 --> 18:28:56,241
Namun bila pelanggan Anda,\nbrowser pengguna Anda

19325
18:28:56,241 --> 18:29:00,471
sertakan sedikit penyebutan\n Anda

19326
18:29:00,471 --> 18:29:02,841
nama di dalam amplop,\nSquarespace dan Wix saja

19327
18:29:02,842 --> 18:29:06,442
tahu untuk mengirimkannya ke halaman web Anda atau\n

19328
18:29:07,142 --> 18:29:09,032
Dot dot dot, ada\nbeberapa hal lain di sana.

19329
18:29:09,032 --> 18:29:12,532
Namun itulah inti\npermintaan ini.

19330
18:29:12,532 --> 18:29:16,312
Mudah-mudahan, ketika browser Anda\n

19331
18:29:17,361 --> 18:29:21,951
Mudah-mudahan, responsnya\nseperti ini, HTTP/1.1

19332
18:29:21,952 --> 18:29:25,822
jadi versi yang sama, beberapa\nkode status, seperti angka 200

19333
18:29:25,822 --> 18:29:30,021
dan kemudian secara harafiah frasa pendek seperti\n

19334
18:29:31,682 --> 18:29:35,062
Kemudian berisi beberapa lainnya\n

19335
18:29:35,872 --> 18:29:37,789
Dan kita akan melihat bahwa ini\njuga terstandarisasi.

19336
18:29:37,789 --> 18:29:41,932
Teks/HTML berarti ada beberapa\n

19337
18:29:41,932 --> 18:29:48,142
Bisa saja berupa gambar/jpeg\atau Gambar/png, atau video/mp4

19338
18:29:48,142 --> 18:29:51,982
ada konten yang berbeda\n

19339
18:29:51,982 --> 18:29:54,711
yang secara unik mengidentifikasi jenis\nfile, yang muncul kembali

19340
18:29:54,711 --> 18:29:57,322
semangatnya mirip dengan file\nextensions, tetapi sedikit lebih

19341
18:29:59,232 --> 18:30:00,982
Lalu ada beberapa\nlainnya, titik titik titik.

19342
18:30:00,982 --> 18:30:05,842
Namun secara umum, apa yang Anda lihat di sini adalah\n

19343
18:30:05,842 --> 18:30:09,652
Kunci dan nilai ini\juga dikenal sebagai header HTTP.

19344
18:30:09,652 --> 18:30:14,092
Dan browser Anda telah mengirimkan\n

19345
18:30:14,092 --> 18:30:16,422
Dan, tentu saja, kami dapat melihatnya sendiri\nsaat ini.

19346
18:30:16,422 --> 18:30:20,422
Biarkan saya beralih, sebentar\ndetik, ke Chrome di komputer saya

19347
18:30:20,422 --> 18:30:23,552
meskipun Anda bisa melakukan hal semacam ini\n

19348
18:30:23,551 --> 18:30:28,641
Saya akan melanjutkan dan mengunjungi\nHTTP://Harvard.edu, Enter.

19349
18:30:28,642 --> 18:30:31,459
Dan, voila, saya berada di\nhalaman beranda Harvard hari ini.

19350
18:30:32,542 --> 18:30:34,982
Namun inilah\nyang tampak saat ini.

19351
18:30:34,982 --> 18:30:38,002
Baiklah, saya mengetikkan URL-nya, tetapi\nperhatikan ada sedikit perubahan.

19352
18:30:38,001 --> 18:30:41,011
Ini sebenarnya mengirim saya ke\nHTTPS dan menambahkan www

19353
18:30:41,012 --> 18:30:42,682
padahal aku tidak mengetiknya.

19354
18:30:42,682 --> 18:30:46,702
Tapi ternyata kita bisa melihat-lihat\n

19355
18:30:47,812 --> 18:30:50,542
Saya akan mulai menggunakan penyamaran\n

19356
18:30:50,542 --> 18:30:52,500
peduli agar orang lain mengetahuinya\nSaya mengunjungi Harvard.edu

19357
18:30:52,500 --> 18:30:56,471
tapi karena itu membuang\nany sejarah yang baru saja saya lakukan.

19358
18:30:56,471 --> 18:30:58,971
Sehingga setiap permintaan akan\nterlihat seperti permintaan baru

19359
18:30:58,971 --> 18:31:01,429
dan itu berguna\ndidiagnostik, karena kita selalu begitu

19360
18:31:01,429 --> 18:31:02,781
akan melihat informasi segar.

19361
18:31:02,782 --> 18:31:06,082
Browser saya tidak akan mengingat\n

19362
18:31:06,081 --> 18:31:09,441
Namun saya akan membuka\nke Lihat, pengembang

19363
18:31:09,441 --> 18:31:13,042
alat pengembang, yang merupakan sesuatu\n

19364
18:31:13,042 --> 18:31:15,652
Dan ada sesuatu yang\nalog untuk Firefox dan Edge

19365
18:31:15,652 --> 18:31:17,631
dan Safari dan browser lainnya.

19366
18:31:17,631 --> 18:31:20,301
Alat pengembang akan\membuka tab ini di sini.

19367
18:31:20,301 --> 18:31:23,509
Saya tidak terlalu peduli apa yang baru, jadi saya\n

19368
18:31:23,509 --> 18:31:26,182
Dan saya akan mengarahkan kursor ke tab\nJaringan sejenak.

19369
18:31:26,182 --> 18:31:31,252
Dan sekarang saya akan pergi dan\nmengatakan HTTP://Harvard.edu, jadi

19370
18:31:32,422 --> 18:31:36,022
Saya akan menekan Enter,\ndan banyak hal lainnya

19371
18:31:36,021 --> 18:31:37,342
baru saja terbang melintasi layar.

19372
18:31:38,601 --> 18:31:43,702
Dan jika saya memperbesarnya, ya Tuhan,\n

19373
18:31:43,702 --> 18:31:48,082
sedang mengunduh, berapa 17, 18,\n19 megabyte, 20 megabyte

19374
18:31:48,081 --> 18:31:53,182
jutaan byte informasi,\nlebih dari 111 permintaan HTTP.

19375
18:31:53,182 --> 18:31:56,062
Dengan kata lain, sedikit\npenyederhanaan, tapi browser saya

19376
18:31:56,062 --> 18:31:59,692
tanpa sepengetahuan saya, awalnya mengirim satu\nenvelope dengan permintaan.

19377
18:31:59,691 --> 18:32:01,611
Lalu server berkata,\nOke, ngomong-ngomong, sudah

19378
18:32:01,611 --> 18:32:05,241
110 hal lain yang Anda butuhkan, 112\hal lain yang perlu Anda dapatkan.

19379
18:32:05,241 --> 18:32:09,441
Jadi komputerku bolak-balik,\n

19380
18:32:10,191 --> 18:32:13,581
Nah, di dalam halaman web\nHarvard terdapat banyak sekali gambar

19381
18:32:13,581 --> 18:32:16,341
dan mungkin file suara dan\nvideo serta hal lainnya

19382
18:32:16,342 --> 18:32:18,741
itu semua perlu\ndiunduh dan dibuat

19383
18:32:18,741 --> 18:32:20,161
apa yang akhirnya menjadi halaman web.

19384
18:32:20,161 --> 18:32:22,881
Tapi saya tidak peduli tentang\nlebih dari hal-hal ini.

19385
18:32:22,881 --> 18:32:25,161
Mari kita fokus pada yang pertama dulu.

19386
18:32:25,161 --> 18:32:27,711
Permintaan pertama\nyang saya kirimkan ada di sini.

19387
18:32:27,711 --> 18:32:30,771
Dan saya akan mengklik\nbaris ini, di bawah tab Jaringan.

19388
18:32:30,771 --> 18:32:33,501
Lalu saya akan melihat\nsedikit informasi diagnostik.

19389
18:32:33,501 --> 18:32:36,741
Bagi rata-rata orang yang menggunakan\n

19390
18:32:36,741 --> 18:32:39,292
sama seperti Anda mungkin tidak\nmempedulikannya sampai saat ini.

19391
18:32:41,001 --> 18:32:44,991
Namun jika saya gulir ke bawah ke\nmeminta header, Anda akan melihatnya

19392
18:32:44,991 --> 18:32:48,952
jika saya mengklik Lihat sumber, secara harfiah\n

19393
18:32:48,952 --> 18:32:51,282
Mac saya baru saja dikirim ke Harvard.edu.

19394
18:32:51,282 --> 18:32:56,482
Dua barisnya familiar,\nget/http1.1, host:harvard.edu

19395
18:32:56,482 --> 18:32:59,942
dan hal-hal lain yang, untuk saat ini,\n

19396
18:32:59,941 --> 18:33:03,381
Namun mari kita lihat respons\nyang datang dari server.

19397
18:33:03,381 --> 18:33:08,421
Saya akan menggulir ke atas sekarang dan\n

19398
18:33:11,211 --> 18:33:14,032
Tidak ada 200, tidak ada kata OK.

19399
18:33:14,032 --> 18:33:18,112
Anehnya, harvard.edu\ntelah pindah secara permanen.

19400
18:33:18,953 --> 18:33:20,661
Ya, ada banyak\nbanyak hal di sini

19401
18:33:20,661 --> 18:33:22,119
itu tidak begitu menarik bagi kami.

19402
18:33:22,119 --> 18:33:24,781
Tapi jalur ini, lokasinya, menarik.

19403
18:33:24,782 --> 18:33:28,552
Ini adalah header HTTP,\npasangan nilai kunci terstandarisasi

19404
18:33:28,551 --> 18:33:32,301
itu bagian dari protokol HTTP\nyaitu konvensi.

19405
18:33:32,301 --> 18:33:34,881
Dan jika saya menyorot\nyang ini saja, itu memberi tahu saya

19406
18:33:34,881 --> 18:33:38,421
mm-mmm, Harvard bukan\nat HTTP://Harvard.edu

19407
18:33:38,422 --> 18:33:44,242
Situs web Harvard sekarang, dan mungkin\n

19408
18:33:47,631 --> 18:33:50,641
Mungkin seseorang di Harvard menginginkan\n

19409
18:33:50,642 --> 18:33:53,092
Jadi mereka mengalihkan Anda\ndari HTTP ke HTTPS.

19410
18:33:53,092 --> 18:33:57,392
Mungkin orang pemasaran menginginkan Anda\n

19411
18:33:57,892 --> 18:34:00,350
Hanya untuk membuat standarisasi,\ntapi ada alasan teknis

19412
18:34:00,350 --> 18:34:03,442
untuk menggunakan nama host, dan bukan\nhanya nama domain mentah.

19413
18:34:03,441 --> 18:34:06,331
Dan semua hal lainnya ini beres\n

19414
18:34:06,331 --> 18:34:11,361
sekarang, karena browser yang\nmenerima respons 301 mengetahuinya

19415
18:34:11,361 --> 18:34:16,461
berdasarkan desain, berdasarkan definisi HTTP,\n

19416
18:34:16,461 --> 18:34:20,065
Dan itulah sebabnya, di browser saya, semuanya\n

19417
18:34:20,065 --> 18:34:22,732
karena saya tidak begitu tahu atau\npeduli dengan semua header itu.

19418
18:34:22,732 --> 18:34:26,482
Namun itulah sebabnya dan bagaimana saya\nsampai di URL ini.

19419
18:34:26,482 --> 18:34:29,842
Browser saya diminta untuk pergi\\ke mana pun melalui lokasi baru itu.

19420
18:34:29,842 --> 18:34:32,392
Dan browser hanya\nmengikuti remah roti tersebut

19421
18:34:32,392 --> 18:34:35,122
jika Anda mau, pada titik mana\n

19422
18:34:35,122 --> 18:34:39,562
dan file, dan sebagainya, yang\nmembuat halaman khusus ini.

19423
18:34:40,638 --> 18:34:42,471
Dan biarkan saya beralih\nin ke VS Code, jika saja

19424
18:34:42,471 --> 18:34:45,596
karena itu sedikit lebih menyenangkan\n

19425
18:34:45,596 --> 18:34:49,201
tanpa benar-benar menggunakan\na browser lengkap.

19426
18:34:49,202 --> 18:34:51,381
Jadi sekarang mari kita gunakan\nan program yang setara.

19427
18:34:51,381 --> 18:34:54,351
Namanya Curl, untuk\nmenyambung ke URL

19428
18:34:54,351 --> 18:34:57,262
akan mengizinkanku bermain bersama\n

19429
18:34:57,262 --> 18:34:59,872
tanpa perlu repot mengunduh\nsemua gambar dan teks

19430
18:34:59,872 --> 18:35:01,312
dan lain sebagainya dari website.

19431
18:35:01,312 --> 18:35:03,902
Ini akan memungkinkan saya untuk\melakukan sesuatu seperti ini.

19432
18:35:03,902 --> 18:35:10,941
Izinkan saya menjalankannya, misalnya,\n

19433
18:35:10,941 --> 18:35:14,572
argumen baris yang mengatakan\nsimulasikan permintaan GET secara tekstual

19434
18:35:15,831 --> 18:35:20,661
Dan mari pergi ke\nHTTP://Harvard.edu Enter.

19435
18:35:20,661 --> 18:35:23,834
Sekarang, tentang cara kerja Curl,\nSaya hanya melihat headernya.

19436
18:35:23,834 --> 18:35:25,792
Tidak perlu mengunduh\nseluruh situs web.

19437
18:35:25,792 --> 18:35:28,792
Dan Anda melihat hal yang persis sama\n, 301 dipindahkan secara permanen.

19438
18:35:28,792 --> 18:35:31,562
Lokasinya memang di sini.

19439
18:35:31,562 --> 18:35:33,202
Jadi itu menarik.

19440
18:35:33,202 --> 18:35:34,881
Tapi mari kita ikuti secara manual sekarang.

19441
18:35:34,881 --> 18:35:37,682
Sekarang mari kita lakukan apa yang diperintahkan kepadaku.

19442
18:35:37,682 --> 18:35:42,381
Ayo pergi ke lokasi, dengan\nHTTPS dan www dan tekan Enter.

19443
18:35:42,381 --> 18:35:46,402
Dan sekarang, apa gunanya\ntanda bagus dari keluaran ini?

19444
18:35:48,831 --> 18:35:51,741
SPEAKER 1: 200 Oke, itu\nberarti saya melihat, mungkin

19445
18:35:51,741 --> 18:35:55,221
jika saya menggunakan browser asli,\n

19446
18:35:55,221 --> 18:35:58,911
Sepertinya HTTP\n versi Harvard

19447
18:35:58,911 --> 18:36:01,051
Itu menggunakan versi HTTP\n2, itu bagus.

19448
18:36:01,051 --> 18:36:04,611
Namun angka 200 memang menunjukkan\nsemuanya baik-baik saja.

19449
18:36:04,611 --> 18:36:07,822
Nah, bagaimana jika saya mencoba\nmengunjungi beberapa URL palsu

19450
18:36:07,822 --> 18:36:14,331
seperti Harvard.edu, ketika file ini berfungsi\n

19451
18:36:14,331 --> 18:36:17,331
mungkin tidak ada, dan tekan Enter.

19452
18:36:17,331 --> 18:36:20,991
Apa yang Anda lihat sekarang, yang mungkin\nfamiliar di dunia nyata?

19453
18:36:24,620 --> 18:36:26,600
Kita semua mungkin pernah melihat\nhal ini

19454
18:36:26,600 --> 18:36:29,301
dari waktu ke waktu, saat Anda\nmengacaukan karena salah mengetik URL

19455
18:36:29,301 --> 18:36:31,221
atau seseorang menghapus\nlaman web yang dimaksud.

19456
18:36:31,221 --> 18:36:34,221
Namun semua itu hanyalah\nkode status browser

19457
18:36:34,221 --> 18:36:37,521
sedang dikirim dari server,\nitu sedikit petunjuk tentang apa

19458
18:36:37,521 --> 18:36:40,383
masalah sebenarnya adalah,\ndi balik terpal.

19459
18:36:40,384 --> 18:36:42,092
Jadi, alih-alih mendapatkan\nkembali, misalnya

19460
18:36:42,092 --> 18:36:45,202
sesuatu seperti Oke, atau dipindahkan secara permanen,\n

19461
18:36:47,902 --> 18:36:51,711
Ternyata, ada\jenis kode status lainnya

19462
18:36:51,711 --> 18:36:55,211
yang akan mulai Anda lihat seiring berjalannya waktu,\n

19463
18:36:57,881 --> 18:37:01,421
302, 304, 307 semuanya memiliki semangat yang sama.

19464
18:37:01,422 --> 18:37:04,782
Hal ini terkait dengan pengalihan\n

19465
18:37:04,782 --> 18:37:08,802
401, 403, tidak sah atau dilarang.

19466
18:37:08,801 --> 18:37:11,021
Jika Anda pernah mengacaukan\nkata sandi Anda, atau diri Anda sendiri

19467
18:37:11,021 --> 18:37:13,134
coba kunjungi URL yang\ntidak seharusnya Anda lihat

19468
18:37:13,134 --> 18:37:15,551
Anda mungkin melihat salah satu\nkode berikut, yang menunjukkan bahwa Anda baru saja

19469
18:37:15,551 --> 18:37:17,441
tidak memiliki otorisasi untuk itu.

19470
18:37:17,441 --> 18:37:21,671
404 tidak ditemukan, 418, aku adalah\nteko, adalah lelucon April Mop

19471
18:37:21,672 --> 18:37:24,072
oleh komunitas teknologi bertahun-tahun yang lalu.

19472
18:37:25,331 --> 18:37:27,281
Dan, sayangnya,\semua dari Anda mungkin mengalami hal tersebut

19473
18:37:27,282 --> 18:37:30,972
sekarang berada di jalur untuk membuat\nkesalahan HTTP 500, satu kali

19474
18:37:30,971 --> 18:37:33,114
minggu depan, kami mulai menulis\nkode, karena kami semua

19475
18:37:34,032 --> 18:37:37,632
Kita akan mengalami kesalahan ketik, logis\n

19476
18:37:37,631 --> 18:37:42,042
sama seperti segfault yang ada di dunia\n

19477
18:37:42,042 --> 18:37:45,254
Layanan 503 tidak tersedia, berarti\nmungkin server kelebihan beban

19478
18:37:46,211 --> 18:37:47,721
Dan ada kode lain di sana.

19479
18:37:47,721 --> 18:37:51,011
Namun itu mungkin\nyang paling umum.

19480
18:37:51,012 --> 18:37:54,642
Adakah yang bisa lolos\n

19481
18:37:54,642 --> 18:37:58,972
adakah yang pernah mengunjungi\nSafetySchool.org?

19482
18:38:01,542 --> 18:38:08,381
HTTP://SafetySchool.org,\ndakalau kita melakukan ini, Enter.

19483
18:38:17,262 --> 18:38:20,051
--jadi ini sudah seperti\nlelucon selama 10 atau 20 tahun.

19484
18:38:20,051 --> 18:38:22,811
Seseorang di luar sana telah\nmembayar nama domain tersebut

19485
18:38:22,812 --> 18:38:26,202
safetyschool.org, hanya untuk\ndemonstrasi dua detik ini.

19486
18:38:26,202 --> 18:38:28,542
Tapi sekarang kita bisa menyimpulkan, bagaimana cara kerjanya?

19487
18:38:28,542 --> 18:38:31,452
Orang yang membeli nama\ndomain itu dan entah bagaimana mengonfigurasinya

19488
18:38:31,452 --> 18:38:35,502
DNS untuk menunjuk ke server web mereka,\n

19489
18:38:35,501 --> 18:38:37,871
apa yang server web mereka\nmungkin keluarkan

19490
18:38:37,872 --> 18:38:41,021
kapan pun browser meminta halaman tersebut?

19491
18:38:48,221 --> 18:38:49,911
Izinkan saya memperbesar jendela terminal saya.

19492
18:38:49,911 --> 18:38:58,271
Izinkan saya melakukan Curl-I-xget\nHTTP://safetyschool.org Enter

19493
18:38:58,271 --> 18:39:00,012
dan hanya itu yang dilakukan situs web ini.

19494
18:39:00,012 --> 18:39:02,322
Bahkan tidak ada\situs web sebenarnya di sana.

19495
18:39:02,322 --> 18:39:04,842
Tanpa HTML, tanpa bahasa CSS\nkita akan melihatnya.

19496
18:39:04,842 --> 18:39:09,702
Itu benar-benar hanya ada di\n

19497
18:39:09,702 --> 18:39:13,362
Sejujurnya, ada yang lain.

19498
18:39:13,361 --> 18:39:15,611
Izinkan saya melakukan yang lain di sini.

19499
18:39:15,611 --> 18:39:19,511
Alih-alih safetyschool.org,\nternyata ada seseorang

19500
18:39:19,512 --> 18:39:25,572
beberapa tahun lalu, membeli\nHarvardSucks.org Enter.

19501
18:39:25,572 --> 18:39:30,072
Dan saat kami melakukan ini, Anda akan melihatnya,\n

19502
18:39:36,762 --> 18:39:38,785
Demo ini sebenarnya\nberfungsi selama bertahun-tahun.

19503
18:39:38,785 --> 18:39:41,202
Namun seseorang telah berhenti membayar\nuntuk akun Squarespace

19504
18:39:46,471 --> 18:39:52,111
Oke, untungnya, kami\nsudah menyimpan video YouTubenya

19505
18:39:53,672 --> 18:39:56,255
Jadi, letakkan ini\ninke dalam konteksnya, karena memang demikian

19506
18:39:56,255 --> 18:39:58,422
sudah beberapa tahun berlalu,\nHarvard dan Yale, tentu saja

19507
18:39:58,422 --> 18:40:00,272
memiliki persaingan yang sudah berlangsung lama ini.

19508
18:40:00,271 --> 18:40:02,891
Ada tradisi\nmengolok-olok satu sama lain.

19509
18:40:02,892 --> 18:40:06,822
Dan sejujurnya, salah satu\n

19510
18:40:09,062 --> 18:40:10,741
Ini tentang retrospektif tiga menit.

19511
18:40:10,741 --> 18:40:13,074
Saya yakin ini adalah salah satu\nvideo paling awal di YouTube

19512
18:40:13,074 --> 18:40:15,512
jadi kualitasnya\nmewakili hal tersebut.

19513
18:40:15,512 --> 18:40:18,402
Tapi izinkan saya melanjutkan dan\nmelayari halaman saya secara penuh di sini.

19514
18:40:18,402 --> 18:40:22,892
Dan yang dulu ada di\nHarvardSucks.org adalah video ini.

19515
18:40:22,892 --> 18:40:25,738
Jika kami dapat meredupkan lampu\nselama sekitar tiga menit.

19516
18:40:53,975 --> 18:40:55,892
- Sebenarnya kita sedang menuju ke puncak.

19517
18:41:01,142 --> 18:41:04,322
- Kami di sini untuk mengunjungi Harvard.

19518
18:41:06,750 --> 18:41:08,402
- Lulus dari atas, lewati ke bawah.

19519
18:41:09,714 --> 18:41:12,822
- Senang rasanya mengatakan ERA itu jelek.

19520
18:41:19,732 --> 18:41:22,402
Itu harus terjadi.

19521
18:41:22,402 --> 18:41:25,032
- Ini benar-benar akan terjadi.

19522
18:41:25,032 --> 18:41:26,452
Saya tidak dapat [BIP] mempercayai hal ini.

19523
18:41:26,452 --> 18:41:28,512
- Apa pendapatmu tentang Yale?

19524
18:41:33,334 --> 18:41:34,542
- Karena mereka tidak memilikinya.

19525
18:41:37,013 --> 18:41:40,341
- Mungkin itu akan\nterbaca, sangat kecil.

19526
18:41:45,801 --> 18:41:47,512
- Katanya, apakah kita berada di perahu sekarang?

19527
18:41:48,262 --> 18:41:49,387
- Berapa banyak tambahan yang ada?

19528
18:41:54,445 --> 18:41:55,903
- Kalian dari Harvard, kan?

19529
18:41:58,611 --> 18:42:00,039
- Pastikan semua orang punya satu.

19530
18:42:35,631 --> 18:42:38,891
- Apa pendapat Anda tentang Yale, Pak?

19531
18:42:38,892 --> 18:42:41,376
- Akan, lakukan sekali lagi.

19532
18:43:08,812 --> 18:43:13,222
PEMBICARA 1: Baiklah, terima kasih kepada\n

19533
18:43:13,221 --> 18:43:17,129
Mari lanjutkan ke sini dan pertimbangkan, di\n

19534
18:43:17,130 --> 18:43:18,922
turun ke dalam\nenvelope, karena kita sekarang

19535
18:43:18,922 --> 18:43:24,202
memiliki kemampuan untuk mendapatkan data dari,\n

19536
18:43:25,342 --> 18:43:30,082
Mari kita pertimbangkan sejenak\n

19537
18:43:30,081 --> 18:43:33,652
bahwa kita sekarang memiliki kemampuan untuk\n

19538
18:43:33,652 --> 18:43:37,490
Dan kami memiliki kemampuan untuk\nmenentukan apa saja yang ada di dalamnya

19539
18:43:37,490 --> 18:43:38,782
itu yang kami inginkan dari situs web.

19540
18:43:38,782 --> 18:43:40,192
Kami ingin mendapatkan halaman beranda.

19541
18:43:40,191 --> 18:43:41,932
Kami ingin mendapatkan kembali HTML.

19542
18:43:43,247 --> 18:43:46,372
Faktanya, kami belum memiliki bahasanya\n

19543
18:43:46,372 --> 18:43:48,494
ditulis yaitu HTML dan CSS.

19544
18:43:48,494 --> 18:43:50,702
Tapi mari kita istirahat\na lima menit di sini.

19545
18:43:50,702 --> 18:43:54,182
Dan saat kami kembali, kami akan\nmempelajari kedua bahasa tersebut.

19546
18:43:56,072 --> 18:43:58,372
Jadi kita punya tiga\nbahasa untuk dilihat hari ini.

19547
18:43:58,372 --> 18:44:00,832
Namun dua di antaranya bukan\sebenarnya bahasa pemrograman.

19548
18:44:00,831 --> 18:44:05,152
Apa yang membuat sesuatu menjadi pemrograman\n

19549
18:44:05,152 --> 18:44:08,472
adalah bahwa ada konstruksi ini melalui\n

19550
18:44:08,471 --> 18:44:10,971
Anda mungkin memiliki variabel, Anda\nmungkin memiliki konstruksi perulangan.

19551
18:44:10,971 --> 18:44:13,341
Anda memiliki kemampuan,\npada akhirnya, untuk mengekspresikan logika.

19552
18:44:13,342 --> 18:44:16,912
HTML dan CSS tidak begitu banyak tentang\n

19553
18:44:16,911 --> 18:44:18,441
dan estetika sebuah halaman.

19554
18:44:18,441 --> 18:44:21,262
Jadi kita akan membuat\nkerangka halaman web menggunakan

19555
18:44:21,262 --> 18:44:23,190
pasangan bahasa ini, HTML dan CSS.

19556
18:44:23,190 --> 18:44:24,982
Lalu menjelang\nakhir hari ini, kita akan melakukannya

19557
18:44:24,982 --> 18:44:26,872
memperkenalkan\nbahasa pemrograman yang sebenarnya

19558
18:44:26,872 --> 18:44:30,232
itu sebenarnya sangat mirip\nin semangat dan sintaksisnya

19559
18:44:30,232 --> 18:44:34,101
ke C dan Python, tapi itu saja\n

19560
18:44:34,101 --> 18:44:38,251
hanya statis, hal-hal yang Anda lihat,\n

19561
18:44:38,251 --> 18:44:42,771
Lalu minggu depan lagi, minggu ke 9,\n

19562
18:44:42,771 --> 18:44:46,251
satukan semua ini, sehingga Anda\n

19563
18:44:46,251 --> 18:44:49,221
berbicara dengan\nserver back-end, dan membuat

19564
18:44:49,221 --> 18:44:53,151
pengalaman yang Anda dan saya ambil sekarang\n

19565
18:44:53,812 --> 18:44:55,187
Baiklah, mari kita lanjutkan dan lakukan ini.

19566
18:44:55,187 --> 18:44:58,402
Mari kita segera menyiapkan sesuatu\dalam bahasa ini yang disebut HTML.

19567
18:44:59,601 --> 18:45:04,101
Saya akan melanjutkan dan membuat\n

19568
18:45:04,101 --> 18:45:07,491
Konvensi biasanya untuk\nmengakhiri nama file Anda dalam dot html.

19569
18:45:07,491 --> 18:45:09,783
Dan saya akan melanjutkan\ndan menyelesaikannya dengan sangat cepat.

19570
18:45:09,783 --> 18:45:12,842
Namun kemudian kita akan melangkah lebih lambat\n

19571
18:45:12,842 --> 18:45:17,482
Jadi saya akan mengatakan doctype\nhtml braket terbuka html

19572
18:45:17,482 --> 18:45:22,072
dan kemudian perhatikan saya akan melakukan open\n

19573
18:45:22,072 --> 18:45:25,672
Dan saya memanfaatkan fitur VS\n

19574
18:45:25,672 --> 18:45:27,601
umumnya, untuk melakukan sedikit pelengkapan otomatis.

19575
18:45:27,601 --> 18:45:30,831
Jadi Anda akan melihat bahwa ada simetri ini\n

19576
18:45:30,831 --> 18:45:32,631
tapi saya tidak mengetik semua hal ini.

19577
18:45:32,631 --> 18:45:37,611
VS Code secara otomatis menghasilkan\n

19578
18:45:37,611 --> 18:45:41,511
Izinkan saya melanjutkan dan\nmengatakan, Buka tag head.

19579
18:45:42,831 --> 18:45:44,932
Saya akan mengatakan sesuatu yang lucu\nseperti, Halo, judul.

19580
18:45:44,932 --> 18:45:47,661
Lalu di sini, saya akan\n

19581
18:45:47,661 --> 18:45:49,461
dan katakan sesuatu seperti Halo, tubuh.

19582
18:45:49,461 --> 18:45:53,241
Dan izinkan saya menentukannya di bagian paling atas,\n

19583
18:45:54,592 --> 18:46:00,562
Jadi saat ini, saya memiliki file di\n

19584
18:46:00,562 --> 18:46:03,484
VS Code yang kami gunakan,\ntentu saja, berbasis cloud.

19585
18:46:03,483 --> 18:46:05,691
Kami menggunakannya di browser,\walaupun Anda juga bisa

19586
18:46:05,691 --> 18:46:07,792
unduh dan jalankan di Mac dan PC.

19587
18:46:07,792 --> 18:46:10,491
Jadi kita berada dalam situasi\naneh seperti yang saya alami

19588
18:46:10,491 --> 18:46:12,771
menggunakan cloud untuk\nmembuat halaman web, dan I

19589
18:46:12,771 --> 18:46:17,781
ingin laman web tersebut juga aktif di\n

19590
18:46:17,782 --> 18:46:21,082
Tapi masalahnya tentang VS\nCode, atau situs web apa pun

19591
18:46:21,081 --> 18:46:24,741
yang mungkin Anda gunakan di browser, oleh\n

19592
18:46:24,741 --> 18:46:29,361
Port TCP nomor 80 atau\nTCP port nomor 443

19593
18:46:29,361 --> 18:46:32,061
yaitu HTTP dan HTTPS masing-masing.

19594
18:46:32,062 --> 18:46:34,912
Namun di sinilah saya, saya sendiri adalah seorang programmer

19595
18:46:34,911 --> 18:46:39,241
mencoba membuat\nsitus web saya sendiri di situs web yang sudah ada.

19596
18:46:39,241 --> 18:46:40,732
Jadi ini situasi yang agak aneh.

19597
18:46:40,732 --> 18:46:43,222
Tapi tidak apa-apa, karena\nyang menarik dari TCP

19598
18:46:43,221 --> 18:46:47,572
apakah Anda dan saya cukup memilih port\n

19599
18:46:49,312 --> 18:46:51,802
Artinya, kita dapat mengontrol\nlingkungan sepenuhnya

19600
18:46:51,801 --> 18:46:57,711
dengan hanya menjalankan server web kami sendiri\n

19601
18:46:58,732 --> 18:47:01,445
Ini adalah perintah yang kami\ninstal sebelumnya di VS Code di sini.

19602
18:47:01,445 --> 18:47:03,112
Dan Anda akan melihat pop-up baru saja muncul.

19603
18:47:03,111 --> 18:47:05,841
Aplikasi Anda yang menjalankan\non port 8080 tersedia.

19604
18:47:05,842 --> 18:47:09,172
Itu adalah nomor port TCP yang umum digunakan, ketika 80 sudah digunakan

19605
18:47:09,172 --> 18:47:11,932
dan 443 sudah digunakan,\nAnda dapat menjalankan server Anda sendiri

19606
18:47:11,932 --> 18:47:14,521
di port Anda sendiri, 8080 dalam hal ini.

19607
18:47:14,521 --> 18:47:18,592
Saya sudah membuka tab itu sebelumnya, dan\n

19608
18:47:18,592 --> 18:47:22,252
di sini saya melihat apa yang disebut direktori\n

19609
18:47:22,251 --> 18:47:24,322
Jadi saya tidak melihat file saya yang lain.

19610
18:47:24,322 --> 18:47:27,351
Saya tidak melihat apa pun\nmilik VS Code itu sendiri.

19611
18:47:27,351 --> 18:47:30,562
Saya hanya melihat file yang saya buat\n

19612
18:47:31,851 --> 18:47:36,232
Jadi jika saya mengklik file ini\nsekarang, saya akan melihat Halo, isi.

19613
18:47:37,312 --> 18:47:39,262
Tapi itu karena\njudul halaman web

19614
18:47:39,262 --> 18:47:41,699
saat ini biasanya\tertanam di tab.

19615
18:47:41,698 --> 18:47:44,031
Dan jika saya berada dalam layar penuh di\nbrowser saya, tidak ada tab.

19616
18:47:44,032 --> 18:47:45,652
Jadi izinkan saya memperkecil jendelanya sedikit.

19617
18:47:45,652 --> 18:47:50,032
Dan sekarang Anda dapat melihatnya di sini\n

19618
18:47:50,032 --> 18:47:52,382
di sini, Halo, isi, ada\di pojok kiri atas.

19619
18:47:52,381 --> 18:47:54,801
Dan kalau saya zoom, ada judul Halo.

19620
18:47:56,271 --> 18:48:01,491
Saya telah melanjutkan dan membuat\nlaman web saya sendiri dalam HTML

19621
18:48:01,491 --> 18:48:04,851
dalam file bernama Hello.html.

19622
18:48:04,851 --> 18:48:09,251
Dan kemudian saya membuka\na server web saya sendiri

19623
18:48:09,251 --> 18:48:11,591
mengkonfigurasinya untuk mendengarkan\non port TCP 8080

19624
18:48:11,592 --> 18:48:14,982
yang hanya berkata ke internet, hai,\n

19625
18:48:14,982 --> 18:48:18,612
bukan pada nomor port standar,\n80 atau 443, dengarkan di 8080.

19626
18:48:18,611 --> 18:48:22,481
Dan ini berarti saya dapat mengembangkan situs web\n

19627
18:48:22,482 --> 18:48:24,851
di sini, yang\nsemakin umum saat ini.

19628
18:48:24,851 --> 18:48:28,691
Baiklah, sekarang mari kita pertimbangkan\n

19629
18:48:28,691 --> 18:48:32,891
HTML ditandai dengan hanya\n

19630
18:48:33,732 --> 18:48:36,972
Kebanyakan yang baru saya ketik adalah tag,\n

19631
18:48:37,732 --> 18:48:41,872
Ini kode sumber yang sama dengan yang saya\n

19632
18:48:41,872 --> 18:48:43,122
Mari kita pertimbangkan apa ini.

19633
18:48:43,122 --> 18:48:46,631
Baris\nkode pertama di sini, doctype html

19634
18:48:47,892 --> 18:48:51,522
Ini satu-satunya yang dimulai dengan\n

19635
18:48:52,782 --> 18:48:55,392
Tidak ada lagi tanda seru\nsetelahnya, untuk saat ini.

19636
18:48:55,392 --> 18:48:58,842
Ini adalah deklarasi tipe dokumen,\n

19637
18:48:58,842 --> 18:49:00,432
itu hanya harus ada di sana saat ini.

19638
18:49:00,432 --> 18:49:02,974
Ini seperti sedikit remah roti\nat di awal file itu

19639
18:49:02,974 --> 18:49:08,021
mengatakan kepada browser, Anda akan\n

19640
18:49:08,021 --> 18:49:11,000
Baris kode tersebut telah berubah\nseiring waktu, selama bertahun-tahun.

19641
18:49:11,000 --> 18:49:13,542
Versi terbarunya\nbagus dan ringkas seperti ini

19642
18:49:13,542 --> 18:49:16,572
dan itu hanya petunjuk bagi\nbrowser mengenai versi HTML apa

19643
18:49:16,572 --> 18:49:18,881
sedang digunakan oleh Anda, programmer.

19644
18:49:18,881 --> 18:49:20,781
Baiklah, apa yang terjadi setelah itu?

19645
18:49:20,782 --> 18:49:23,592
Nah, setelah itu, dan saya telah\nmenyorot dua hal dengan warna kuning

19646
18:49:23,592 --> 18:49:26,442
inilah yang akan kita\nmulai memanggil tag terbuka

19647
18:49:26,441 --> 18:49:30,911
atau tag awal, buka braket HTML\nlalu sesuatu, tutup braket

19648
18:49:30,911 --> 18:49:32,991
adalah apa yang disebut tag awal atau terbuka.

19649
18:49:32,991 --> 18:49:35,741
Kemudian tag close\nor end yang sesuai ada di sini.

19650
18:49:37,092 --> 18:49:40,252
Anda menggunakan nomor tag yang sama, Anda\nmenggunakan tanda kurung siku yang sama.

19651
18:49:40,251 --> 18:49:43,121
Namun Anda menambahkan garis miring, dan\nAnda tidak mengulanginya lagi

19652
18:49:43,122 --> 18:49:46,032
dengan salah satu hal\nyang disebut atribut

19653
18:49:46,032 --> 18:49:47,772
karena, benda apa ini di sini?

19654
18:49:47,771 --> 18:49:50,891
Lang sama dengan kutipan tanpa tanda kutip\n"en," artinya bahasa

19655
18:49:50,892 --> 18:49:53,632
halaman saya ditulis\nin dalam bahasa Inggris.

19656
18:49:53,631 --> 18:49:56,771
Manusia telah membakukan\nkode dua dan tiga huruf

19657
18:49:56,771 --> 18:49:59,451
untuk setiap bahasa manusia, saat ini.

19658
18:49:59,452 --> 18:50:03,131
Jadi ini hanyalah petunjuk untuk\n

19659
18:50:03,131 --> 18:50:06,402
dan tujuan aksesibilitas,\nbahasa apa halaman web tersebut

19660
18:50:07,331 --> 18:50:10,661
Bukan tagnya, tapi kata-katanya, seperti\nHalo, judul dan Halo, isi

19661
18:50:10,661 --> 18:50:13,182
yang meskipun minimalis,\nar memang dalam bahasa Inggris.

19662
18:50:13,182 --> 18:50:16,142
Jadi saat Anda menutup sebuah tag, tutup\nnama tag tersebut dengan garis miring

19663
18:50:17,111 --> 18:50:19,319
Anda tidak mengulangi atributnya.

19664
18:50:19,320 --> 18:50:21,862
Akan menjengkelkan jika\nharus mengetik semuanya lagi.

19665
18:50:21,861 --> 18:50:23,028
Namun perhatikan polanya di sini.

19666
18:50:24,262 --> 18:50:27,551
Namun ini adalah contoh lain\npasangan nilai kunci dalam komputasi.

19667
18:50:27,551 --> 18:50:31,631
Kuncinya Lang,\nnilainya E-N untuk bahasa Inggris.

19668
18:50:31,631 --> 18:50:34,182
Atributnya disebut\nLang, nilainya adalah

19669
18:50:34,182 --> 18:50:38,142
disebut, itu E-N. Jadi sekali lagi,\ini hanyalah pasangan nilai kunci

19670
18:50:38,142 --> 18:50:39,552
hanya dalam konteks lain.

19671
18:50:39,551 --> 18:50:41,682
Mungkin browser menggunakan\ntabel hash di bawahnya

19672
18:50:41,682 --> 18:50:44,807
untuk melacak hal ini, seperti\n

19673
18:50:44,807 --> 18:50:48,292
Sekali lagi, manusia tetap menggunakan hal yang sama\n

19674
18:50:49,732 --> 18:50:52,241
Penyarangannya penting\nsecara visual, bukan bagi komputer

19675
18:50:52,241 --> 18:50:54,491
tapi bagi kami, manusia,\nkarena hal itu menyiratkan hal tersebut

19676
18:50:54,491 --> 18:50:55,971
bahwa ada beberapa hierarki di sini.

19677
18:50:55,971 --> 18:50:59,781
Dan sebenarnya, apa yang ada di dalam\ntag HTML di sini?

19678
18:50:59,782 --> 18:51:02,892
Ya, kita punya apa\nyang kita sebut tag kepala.

19679
18:51:02,892 --> 18:51:06,252
Tag headnya bertuliskan, hai, browser,\n

19680
18:51:06,251 --> 18:51:08,519
Lalu tag body\nberkata, hai, browser

19681
18:51:08,519 --> 18:51:09,851
inilah isi halamannya.

19682
18:51:09,851 --> 18:51:13,902
Tubuhnya seperti 99% milik pengguna\n

19683
18:51:13,902 --> 18:51:17,532
Kepala sebenarnya hanyalah alamat\n

19684
18:51:17,532 --> 18:51:20,292
seperti judul yang kita lihat beberapa saat yang lalu.

19685
18:51:20,292 --> 18:51:24,732
Sekadar memperkenalkan bahasa daerah,\n

19686
18:51:24,732 --> 18:51:29,202
sebagai sebuah elemen, memiliki dua anak,\n

19687
18:51:29,202 --> 18:51:31,961
artinya kepala\ntubuh sekarang bersaudara.

19688
18:51:31,961 --> 18:51:35,111
Jadi Anda bisa menggunakan jenis\n yang sama

19689
18:51:35,111 --> 18:51:37,421
ketika berbicara tentang pohon, beberapa minggu yang lalu.

19690
18:51:37,422 --> 18:51:41,802
Kalau kita lihat pada tag headnya bagaimana\n

19691
18:51:41,801 --> 18:51:44,591
Saya melihatnya, dan,\nintentu saja, setidaknya jika kita

19692
18:51:44,592 --> 18:51:48,851
abaikan semua spasi,\n

19693
18:51:48,851 --> 18:51:51,072
hanya ada satu anak, elemen judul.

19694
18:51:51,072 --> 18:51:55,032
Dan elemen adalah terminologi itu\n

19695
18:51:56,422 --> 18:51:58,242
Jadi inilah elemen judulnya.

19696
18:51:58,241 --> 18:52:01,812
Dan elemen judul memiliki satu\nanak, yang hanya berupa teks murni

19697
18:52:01,812 --> 18:52:03,792
atau dikenal sebagai simpul teks.

19698
18:52:03,792 --> 18:52:06,911
Ingat, simpul, dari diskusi kami\ntentang struktur data beberapa minggu yang lalu.

19699
18:52:06,911 --> 18:52:10,961
Jika kita melompat lalu ke badan, yang mana\n

19700
18:52:10,961 --> 18:52:14,922
ia juga mempunyai satu anak, yang baru saja\n

19701
18:52:14,922 --> 18:52:17,292
yang berbunyi, kutip tanda kutip "Halo, badan.

19702
18:52:17,292 --> 18:52:21,042
Apa yang bagus dari lekukan ini,\n

19703
18:52:21,042 --> 18:52:25,312
tidak akan peduli, apakah itu\nmenyiratkan struktur seperti ini.

19704
18:52:25,312 --> 18:52:28,902
Dan di sinilah kita terhubung,\nseperti minggu ke 5 dan sekarang minggu ke 8, di sini

19705
18:52:28,902 --> 18:52:33,282
adalah struktur pohon yang kami mulai\n

19706
18:52:33,282 --> 18:52:35,585
Ini bukan pohon biner,\meskipun hal ini terjadi

19707
18:52:35,585 --> 18:52:37,002
untuk memiliki tidak lebih dari dua anak.

19708
18:52:37,001 --> 18:52:40,961
Itu adalah pohon sembarang yang bisa\n

19709
18:52:40,961 --> 18:52:43,842
Tetapi jika kita memiliki simpul khusus\ndi sini yang merujuk ke dokumen tersebut

19710
18:52:43,842 --> 18:52:47,082
simpul akar, bisa dikatakan, adalah\nHTML, digambar dengan persegi panjang

19711
18:52:47,081 --> 18:52:48,671
di sini, hanya untuk diskusi saja.

19712
18:52:48,672 --> 18:52:51,522
Ia memiliki dua anak, kepala\nbadan, juga persegi panjang.

19713
18:52:51,521 --> 18:52:54,851
Kepala mempunyai judul anak,\ndan kemudian badan

19714
18:52:54,851 --> 18:52:57,861
memiliki simpul teks, yang saya\gambar dengan oval.

19715
18:52:57,861 --> 18:53:01,301
Artinya, ketika\n

19716
18:53:01,301 --> 18:53:03,762
mengunduh halaman web,\nmembuka amplop itu

19717
18:53:03,762 --> 18:53:06,771
dan melihat konten yang\nkembali dari server

19718
18:53:06,771 --> 18:53:10,221
itu pada dasarnya membaca\nkode yang ditulis seseorang

19719
18:53:10,221 --> 18:53:12,631
kode HTML, atas\nbawah, kiri ke kanan

19720
18:53:12,631 --> 18:53:16,402
dan dibuat di\nmemori browser, di Mac atau PC Anda

19721
18:53:16,402 --> 18:53:20,241
atau memori atau RAM ponsel Anda,\nstruktur data semacam ini.

19722
18:53:20,241 --> 18:53:22,131
Itulah yang terjadi\ndi balik terpal.

19723
18:53:22,131 --> 18:53:24,592
Dan itulah mengapa secara estetis,\ini sangat bagus, sebagai manusia

19724
18:53:24,592 --> 18:53:27,802
untuk membuat indentasi sesuai gaya,\nkarena sangat jelas

19725
18:53:27,801 --> 18:53:32,701
untuk Anda, dan pemrogram lain,\n

19726
18:53:32,702 --> 18:53:36,112
Jadi itu saja untuk\ndasar-dasar HTML.

19727
18:53:36,111 --> 18:53:38,451
Kita akan melihat banyak tag\ndan banyak contoh sekarang.

19728
18:53:38,452 --> 18:53:40,682
Tapi HTML hanyalah tag dan atribut.

19729
18:53:40,682 --> 18:53:43,432
Dan itu adalah hal yang\n

19730
18:53:43,432 --> 18:53:45,142
Akhirnya, banyak dari mereka yang sudah mendarah daging.

19731
18:53:45,142 --> 18:53:47,939
Saya terus-menerus memeriksa referensi\npanduan atau stack overflow

19732
18:53:47,938 --> 18:53:50,271
jika saya mencoba mencari tahu,\nbagaimana cara memaparkan sesuatu.

19733
18:53:50,271 --> 18:53:52,063
Ini sebenarnya hanya\nblok penyusunnya saja

19734
18:53:52,063 --> 18:53:55,131
memungkinkan Anda merakit\nstruktur halaman web.

19735
18:53:55,131 --> 18:53:58,551
Yang ini sangat sederhana,\n

19736
18:53:58,551 --> 18:54:01,101
Ada pertanyaan tentang\nkerangka ini, sebelum kita

19737
18:54:01,101 --> 18:54:05,489
mulai menambahkan lebih banyak tag, lebih banyak\nkosakata, jika Anda mau?

19738
18:54:06,322 --> 18:54:09,301
AUDIENCE: Apa yang akan terjadi\njika kita memasang tag judul?

19739
18:54:09,301 --> 18:54:13,091
SPEAKER 1: Jika kita memasang tag hello\n

19740
18:54:13,751 --> 18:54:20,251
Jadi izinkan saya membahasnya,\ndan ucapkan judul braket terbuka

19741
18:54:20,251 --> 18:54:23,461
ups, terkadang kamu tidak mau\n

19742
18:54:24,601 --> 18:54:27,031
Saya sudah melanjutkan dan mengubah file.

19743
18:54:27,032 --> 18:54:30,362
Biarkan aku pergi dan membuka diri, beri aku\n

19744
18:54:30,361 --> 18:54:34,411
dan kembali ke URL yang berisi halaman saya.

19745
18:54:41,161 --> 18:54:45,891
Dan izinkan saya melanjutkan sekarang\ndan klik Hello.html.

19746
18:54:45,892 --> 18:54:49,352
Dan dalam kasus ini, sepertinya\nkita sebenarnya tidak melihat apa pun.

19747
18:54:49,351 --> 18:54:50,631
Jadi browser menyembunyikannya.

19748
18:54:50,631 --> 18:54:54,051
Secara teknis, browser\ncenderung cukup murah hati.

19749
18:54:54,051 --> 18:54:56,331
Dan separuhnya lagi, ketika\nAnda membuat kesalahan dalam HTML

19750
18:54:56,331 --> 18:54:58,101
itu akan ditampilkan, itu mungkin ditampilkan--

19751
18:54:58,101 --> 18:54:59,437
tidak ditampilkan sesuai keinginan Anda.

19752
18:54:59,437 --> 18:55:03,022
Ini mungkin tidak menampilkan hal yang sama di\n

19753
18:55:03,021 --> 18:55:05,211
Namun, ada sebuah alat\nyang akan kita lihat, yaitu

19754
18:55:05,211 --> 18:55:07,042
dapat membantu menjawab pertanyaan ini untuk Anda.

19755
18:55:07,042 --> 18:55:11,032
Misalnya, jika saya membuka\nke Validator.w3.org

19756
18:55:11,032 --> 18:55:13,072
W3 adalah World Wide\nWeb Consortium, sebuah grup

19757
18:55:13,072 --> 18:55:15,232
orang-orang yang membakukan\nhal-hal semacam ini

19758
18:55:15,232 --> 18:55:17,631
Saya dapat mengklik Validasi\ndengan masukan langsung, dan cukup

19759
18:55:17,631 --> 18:55:21,411
salin tempel contoh HTML saya ke\nkotak ini, dan klik Periksa.

19760
18:55:21,411 --> 18:55:24,051
Dan saya akan melihat,\nmudah-mudahan memang demikian

19761
18:55:24,051 --> 18:55:25,671
kesalahan, apa yang Anda usulkan agar saya lakukan.

19762
18:55:25,672 --> 18:55:27,744
Browser baru saja melakukan\nyang terbaik untuk melakukan sesuatu

19763
18:55:27,744 --> 18:55:30,952
yang setidaknya tidak menunjukkan apa-apa kepadaku,\n

19764
18:55:30,952 --> 18:55:34,491
Namun jika saya mengembalikan perubahan itu, dan\nizinkan saya membatalkan apa yang baru saja kita lakukan

19765
18:55:34,491 --> 18:55:39,411
izinkan saya menyalin kembali kode asli saya\n

19766
18:55:39,411 --> 18:55:41,831
sekarang Anda dapat melihat, sebaliknya,\nkode saya sekarang sudah benar.

19767
18:55:41,831 --> 18:55:43,581
Dan ada\nalat otomatis untuk memeriksanya.

19768
18:55:43,581 --> 18:55:45,873
Namun kami akan mendorong Anda, untuk\nrangkaian masalah dan proyek

19769
18:55:45,873 --> 18:55:48,831
untuk menggunakan alat manual tertentu.

19770
18:55:48,831 --> 18:55:51,621
Baiklah, mari kita lanjutkan\ndan tingkatkan ini sedikit

19771
18:55:51,622 --> 18:55:53,572
dengan memperkenalkan sejumlah\nbanyak tag

19772
18:55:53,572 --> 18:55:55,952
untuk memberi Anda gambaran tentang beberapa\nelemen dasar di sini.

19773
18:55:55,952 --> 18:56:01,292
Jadi saya akan melanjutkan dan membuat\n

19774
18:56:01,292 --> 18:56:04,292
Dan saya hanya akan melakukan banyak\n

19775
18:56:04,292 --> 18:56:07,432
jadi saya tidak terus-menerus mengetik semua\n

19776
18:56:07,432 --> 18:56:09,411
karena saya ingin semuanya\nsama di sini

19777
18:56:09,411 --> 18:56:12,441
kecuali saya akan mengubah judul saya\n

19778
18:56:12,441 --> 18:56:16,028
Dan di dalam tubuh, saya memerlukan\n

19779
18:56:16,028 --> 18:56:18,111
Dan saya sebenarnya tidak ingin\nmuncul teks apa pun.

19780
18:56:18,111 --> 18:56:21,682
Jadi izinkan saya mengunjungi beberapa situs web acak\n

19781
18:56:21,682 --> 18:56:25,051
yang jika Anda terlibat di dalamnya\n

19782
18:56:25,051 --> 18:56:28,581
ini adalah teks placeholder, semacam tampilan\n

19783
18:56:28,581 --> 18:56:32,121
Namun di sini, saya punya cara praktis\n

19784
18:56:32,122 --> 18:56:33,801
dalam sesuatu yang terlihat seperti bahasa Latin.

19785
18:56:33,801 --> 18:56:36,012
Dan saya telah menaruhnya,\nperhatikan, di dalam tubuh.

19786
18:56:37,012 --> 18:56:40,112
Lihat berapa panjang\nkata-kata yang dibuat-buat di sini.

19787
18:56:40,111 --> 18:56:46,251
Jadi izinkan saya membuka\ntab browser saya di sini.

19788
18:56:46,251 --> 18:56:50,301
Izinkan saya memuat ulang halaman ini, dan Anda akan\n

19789
18:56:50,301 --> 18:56:53,001
Paragraphs.html, yang merupakan\nyang baru bagi saya, dan Hello.html.

19790
18:56:53,001 --> 18:56:58,351
Biarkan saya mengklik Paragraphs.html,\n

19791
18:57:00,172 --> 18:57:03,172
PEMBICARA 1: Ya, jelas sekali\n

19792
18:57:03,172 --> 18:57:07,762
Jadi itu menarik, tapi itu hanya\n

19793
18:57:07,762 --> 18:57:09,142
Itu hanya akan melakukan apa yang Anda katakan.

19794
18:57:09,142 --> 18:57:12,412
Dan masing-masing tag ini memberitahukan\n

19795
18:57:12,411 --> 18:57:15,801
lalu mungkin berhenti melakukan sesuatu,\n

19796
18:57:15,801 --> 18:57:17,676
Hai browser, ini dia\nbagian atas halaman saya.

19797
18:57:17,676 --> 18:57:20,211
Hai browser, ini dia\njudul laman saya, Halo, judul.

19798
18:57:20,211 --> 18:57:22,042
Hai browser, itu saja judulnya.

19799
18:57:22,042 --> 18:57:24,661
Itu saja untuk kepalanya,\ninilah tag tubuhnya.

19800
18:57:24,661 --> 18:57:27,411
Jadi ini seperti melakukan\npercakapan antar browser

19801
18:57:27,411 --> 18:57:30,471
antara HTML dan browser,\melakukan apa yang tertulis di dalamnya.

19802
18:57:30,471 --> 18:57:32,721
So if you want a\nparagraph, you're probably

19803
18:57:32,721 --> 18:57:35,481
going to want to use\nthe P tag for paragraph.

19804
18:57:35,482 --> 18:57:38,642
Dan saya akan melanjutkan\ndan menambahkan ini ke kode saya.

19805
18:57:38,642 --> 18:57:41,392
I'm going to keep things neat,\n

19806
18:57:43,072 --> 18:57:47,032
Biarkan saya membuat paragraf\ntag lain di sini, dan menutupnya

19807
18:57:47,032 --> 18:57:49,522
right after that one,\nindenting again, and I'm

19808
18:57:49,521 --> 18:57:51,232
keeping everything nice and orderly.

19809
18:57:53,402 --> 18:57:58,892
Izinkan saya membuat indentasinya, lalu izinkan saya\n

19810
18:57:58,892 --> 18:58:02,672
Jadi sekali lagi, sedikit membosankan, tapi sekarang saya\n

19811
18:58:02,672 --> 18:58:04,101
hai browser, mulai satu paragraf.

19812
18:58:04,101 --> 18:58:05,721
Hai browser, hentikan paragraf itu.

19813
18:58:07,682 --> 18:58:09,961
Biarkan saya kembali ke\njendela browser di sini.

19814
18:58:09,961 --> 18:58:13,491
Biarkan saya menekan Command R atau\nControl R untuk memuat ulang halaman.

19815
18:58:13,491 --> 18:58:16,732
Dan voila, sekarang saya punya tiga\nparagraf yang lebih bersih, oke?

19816
18:58:16,732 --> 18:58:18,562
Jadi ada tag P untuk paragraf.

19817
18:58:18,562 --> 18:58:20,572
Jadi sekarang kita memiliki\nblok penyusun khusus itu.

19818
18:58:20,572 --> 18:58:23,839
Bagaimana jika saya ingin menambahkan, misalnya,\nbeberapa judul ke halaman ini?

19819
18:58:23,839 --> 18:58:25,672
Ya, itu juga\nmungkin saja.

19820
18:58:25,672 --> 18:58:29,152
Biarkan saya melanjutkan dan membuat\nfile baru bernama Headings.html.

19821
18:58:29,152 --> 18:58:31,911
Izinkan saya menyalin dan menempelkan\nkode yang sama seperti sebelumnya.

19822
18:58:31,911 --> 18:58:36,021
Namun sekarang, mari kita mengawali setiap\nparagraf dengan mungkin H1.

19823
18:58:36,021 --> 18:58:38,482
Dan saya akan\nmenulis kata satu saja.

19824
18:58:38,482 --> 18:58:41,452
Dan di sini saya akan mengatakan H2, dua.

19825
18:58:41,452 --> 18:58:44,572
Dan di sini saya mungkin mengatakan H3, tiga.

19826
18:58:44,572 --> 18:58:49,184
Jadi ini tag lain,\nantiga tag lainnya, H1, H2, H3.

19827
18:58:49,184 --> 18:58:51,351
Seperti yang mungkin sudah Anda simpulkan\ndari nama file yang saya pilih

19828
18:58:51,351 --> 18:58:55,342
ini hanya memberi Anda judul, seperti di\n

19829
18:58:55,342 --> 18:58:57,412
atau subbagian, atau dalam makalah akademis, Anda

19830
18:58:57,411 --> 18:59:00,182
memiliki hierarki yang berbeda dengan\nteks yang Anda tulis.

19831
18:59:00,182 --> 18:59:04,461
Jadi sekarang saya telah menambahkan tag H1,\n

19832
18:59:04,461 --> 18:59:07,491
dua, tag H3 dan kata tiga,\nmari kita kembali ke browser

19833
18:59:07,491 --> 18:59:12,232
muat ulang halaman itu lagi,\ndan voila, setelah halaman itu selesai

19834
18:59:12,232 --> 18:59:17,152
memuat ulang, saya akan melakukannya dengan tombol\nmanual, memuat ulang halaman.

19835
18:59:20,331 --> 18:59:21,623
HADIRIN: Tidak ada dalam file judul.

19836
18:59:21,623 --> 18:59:23,581
PEMBICARA 1: Benar, saya\ntidak ada di file judul.

19837
18:59:27,601 --> 18:59:29,301
Oke, sekarang kita lihat beberapa buktinya.

19838
18:59:29,301 --> 18:59:30,921
Sekali lagi, itu konten yang tidak masuk akal.

19839
18:59:30,922 --> 18:59:33,982
Namun Anda dapat melihat bahwa\nH1 tampak besar dan tebal

19840
18:59:33,982 --> 18:59:36,922
H2 sedikit lebih kecil, namun tetap berani.

19841
18:59:36,922 --> 18:59:38,752
H3 sama tetapi sedikit lebih kecil.

19842
18:59:38,751 --> 18:59:40,366
Dan itu terus berlanjut hingga H6.

19843
18:59:40,366 --> 18:59:42,741
Setelah itu, Anda mungkin harus\nmenata ulang pemikiran Anda.

19844
18:59:42,741 --> 18:59:44,631
Namun ada enam\nhierarki berbeda di sini

19845
18:59:44,631 --> 18:59:48,831
seperti yang mungkin Anda gunakan untuk bab, bagian,\n

19846
18:59:48,831 --> 18:59:53,061
Jadi itulah judul, sebagai tag\nHTML, dalam kosa kata kita.

19847
18:59:53,062 --> 18:59:59,902
Yang umum juga ya, biar\n

19848
18:59:59,902 --> 19:00:04,851
dan dapatkan beberapa boilerplate di sini,\nbuat file bernama List.html.

19849
19:00:04,851 --> 19:00:07,641
Mari buat\ndaftar sederhana di dalam tubuh saya

19850
19:00:07,642 --> 19:00:10,522
dan saya akan memberi ini judul Daftar.

19851
19:00:10,521 --> 19:00:13,531
Dan izinkan saya memperbaiki judul ini\none menjadi Judul juga.

19852
19:00:13,532 --> 19:00:19,172
Jadi di List.html, misalkan saya ingin memiliki\n

19853
19:00:19,172 --> 19:00:21,172
itu seperti kata-kata yang berguna bagi\nsilmuwan komputer

19854
19:00:21,172 --> 19:00:23,302
seperti yang mungkin dikatakan ahli matematika xyz.

19855
19:00:23,301 --> 19:00:26,122
Foo, bar, pemandian ada di List.html.

19856
19:00:26,122 --> 19:00:29,991
Biarkan saya kembali ke\nbrowser saya, tekan tombol Kembali.

19857
19:00:29,991 --> 19:00:33,921
Ada List.html, dan, semoga,\n

19858
19:00:33,922 --> 19:00:37,892
di setiap baris seperti daftar\nkecil yang bagus, tapi, tentu saja, saya tidak melakukannya.

19859
19:00:38,961 --> 19:00:41,001
Chrome mengira itu mungkin bahasa Arab.

19860
19:00:41,001 --> 19:00:44,748
Tapi itu juga membuat penasaran,\nkarena atribut Lang

19861
19:00:45,831 --> 19:00:48,023
Jadi Google mencoba menimpanya.

19862
19:00:48,024 --> 19:00:49,732
Baiklah, apa\penjelasannya yang jelas

19863
19:00:49,732 --> 19:00:52,762
mengapa kita melihat foo, bar, dan\nbaths di baris yang sama, dan tidak

19864
19:00:53,932 --> 19:00:55,342
HADIRIN: Kami tidak memberitahukannya.

19865
19:00:55,342 --> 19:00:57,009
PEMBICARA 1: Kami tidak menyuruhnya melakukan itu.

19866
19:00:57,009 --> 19:00:59,272
Jadi kita memerlukan tag paragraf,\atau mungkin yang lainnya.

19867
19:00:59,271 --> 19:01:00,921
Ternyata ada hal lain.

19868
19:01:00,922 --> 19:01:04,972
Ada tag UL, untuk\ndaftar tak berurutan dalam HTML

19869
19:01:04,971 --> 19:01:08,596
di dalamnya Anda dapat\nmemiliki tag LI, untuk item daftar

19870
19:01:08,596 --> 19:01:10,221
di dalamnya Anda dapat menaruh kata-kata Anda.

19871
19:01:10,221 --> 19:01:13,861
Jadi itu foo saya, itu\nbar saya, itu kamar mandi saya.

19872
19:01:13,861 --> 19:01:16,671
Dan, sekali lagi, perhatikan bahwa VS Code\sudah menyelesaikan pemikiran saya.

19873
19:01:16,672 --> 19:01:21,412
Namun perhatikan hierarkinya, buka\nUL, buka LI, tutup LI, buka LI

19874
19:01:21,411 --> 19:01:24,771
tutup LI, buka LI, tutup LI, tutup UL.

19875
19:01:24,771 --> 19:01:27,141
Jadi ini semacam selesai\nurutannya terbalik di sini.

19876
19:01:27,142 --> 19:01:33,172
Biarkan saya kembali ke browser saya, muat ulang\n

19877
19:01:33,172 --> 19:01:36,382
daftar poin default, yang\ntampaknya masih dalam bahasa Arab.

19878
19:01:36,381 --> 19:01:38,152
Bagaimana jika saya ingin daftar ini diberi nomor?

19879
19:01:38,152 --> 19:01:39,801
Ya, Anda mungkin bisa menebaknya.

19880
19:01:39,801 --> 19:01:43,372
Jika Anda tidak menginginkan daftar yang tidak berurutan, tetapi\n

19881
19:01:44,661 --> 19:01:46,641
PEMBICARA 1: OL, tentu saja, jadi mari kita coba.

19882
19:01:46,642 --> 19:01:49,312
Tidak selalu semudah\nmenebak saja, tapi dalam kasus ini

19883
19:01:49,312 --> 19:01:51,062
OL akan melakukan triknya.

19884
19:01:51,062 --> 19:01:52,582
Biarkan saya kembali ke browser saya yang lain.

19885
19:01:52,581 --> 19:01:55,664
Biarkan saya memuat ulang halamannya, dan sekarang\n

19886
19:01:55,664 --> 19:01:58,111
Memang hal kecil, tapi\nini sebenarnya berguna

19887
19:01:58,111 --> 19:02:00,451
jika Anda memiliki\ndaftar data yang sangat panjang, dan mungkin Anda

19888
19:02:00,452 --> 19:02:02,612
mungkin menambahkan beberapa hal di\ntengah, awal, atau akhir.

19889
19:02:02,611 --> 19:02:04,944
Akan menjengkelkan jika\nharus pergi dan memberi nomor ulang.

19890
19:02:04,945 --> 19:02:07,772
Sebaliknya, komputer melakukannya\nuntuk kita

19891
19:02:07,771 --> 19:02:10,152
penomoran dari atas ke bawah di sini.

19892
19:02:10,152 --> 19:02:12,211
Baiklah, bagaimana dengan\nantipe tata letak lainnya

19893
19:02:12,211 --> 19:02:14,959
bukan hanya paragraf, bukan hanya\n

19894
19:02:14,959 --> 19:02:17,042
Anda memiliki beberapa data\npenelitian yang ingin Anda presentasikan

19895
19:02:17,042 --> 19:02:20,334
beberapa data keuangan yang ingin Anda sajikan,\n

19896
19:02:20,334 --> 19:02:23,222
Bagaimana cara kita meletakkan\ndata, seperti tabel?

19897
19:02:23,221 --> 19:02:26,221
Baiklah, izinkan saya membuat\nfile bernama Table.html

19898
19:02:26,221 --> 19:02:28,921
dan saya hanya akan copy paste\ndi tempat kita memulai tadi.

19899
19:02:28,922 --> 19:02:31,292
Biarkan saya mulai menutup\nbeberapa file lainnya.

19900
19:02:31,292 --> 19:02:34,688
Dan di Table.html, ini\nakan menjadi lebih banyak HTML

19901
19:02:34,688 --> 19:02:36,271
tapi aku akan melanjutkan dan melakukan ini.

19902
19:02:36,271 --> 19:02:40,592
Tabel dan tutup tabel, tabel\ndapat memiliki judul tabel.

19903
19:02:40,592 --> 19:02:45,881
Jadi T head adalah nama tag itu, dan\n

19904
19:02:45,881 --> 19:02:47,161
Jadi saya akan menambahkan tag itu.

19905
19:02:47,161 --> 19:02:49,619
Dan ini adalah teknik yang umum,\nmulai berpikir

19906
19:02:49,619 --> 19:02:52,721
selesaikan pemikiranmu, lalu pergi\n

19907
19:02:52,721 --> 19:02:54,301
Apa yang ingin saya masukkan ke dalam tabel ini?

19908
19:02:54,301 --> 19:02:58,391
Bagaimana dengan sekumpulan nama dan nomor.

19909
19:02:58,392 --> 19:03:02,352
Jadi, misalnya, seperti nama kolom kiri\n, nomor kolom kanan.

19910
19:03:02,351 --> 19:03:05,641
Jadi mari kita buat baris tabel,\ndengan apa yang disebut tag TR.

19911
19:03:05,642 --> 19:03:10,382
Mari buat judul tabel dengan\n

19912
19:03:10,381 --> 19:03:14,262
Mari buat tabel lain\njudul nomor yang dipanggil di sini.

19913
19:03:14,262 --> 19:03:17,612
Dan semua itu, untuk lebih jelasnya, ada dalam satu baris tabel.

19914
19:03:17,611 --> 19:03:21,331
Sementara itu, di badan tabel,\nizinkan saya membuat baris tabel lainnya

19915
19:03:21,331 --> 19:03:23,101
tapi kali ini, itu bukan sebuah judul.

19916
19:03:23,101 --> 19:03:24,581
Sekarang aku berada di dalam perut mejaku.

19917
19:03:24,581 --> 19:03:28,171
Mari kita kerjakan data tabel, yang sinonim\n

19918
19:03:28,172 --> 19:03:30,872
seperti spreadsheet Excel\atau spreadsheet Google.

19919
19:03:30,872 --> 19:03:33,722
Dalam TD ini, saya akan\nmengucapkan seperti nama Carter

19920
19:03:33,721 --> 19:03:39,481
lalu ambil nomor Carter\n

19921
19:03:39,482 --> 19:03:43,211
Kalau begitu ayo masukkan aku ke dalamnya, dan\n

19922
19:03:44,342 --> 19:03:47,461
Namun kita akan melihat bahwa ada banyak\nstruktur bersama dengan HTML.

19923
19:03:47,461 --> 19:03:53,771
Biar aku yang mengerjakan tugasku,\n

19924
19:03:53,771 --> 19:03:56,191
Jadi kita akan menjadi\na banyak lekukan.

19925
19:03:56,191 --> 19:03:59,711
Saya menggunakan empat spasi secara default.\n

19926
19:03:59,711 --> 19:04:02,191
Selama Anda konsisten,\nitu dianggap sebagai gaya yang baik.

19927
19:04:02,191 --> 19:04:04,981
Namun izinkan saya kembali ke\nbrowser saya di sini, dan membalas.

19928
19:04:04,982 --> 19:04:07,232
Itu kemudian membawa saya ke\ndaftar direktori saya lagi.

19929
19:04:07,232 --> 19:04:10,562
Inilah Table.html, dan ini\nbelum terlalu menarik.

19930
19:04:10,562 --> 19:04:13,532
Namun Anda dapat melihat bahwa ada\ndua kolom, nama dan nomor.

19931
19:04:13,532 --> 19:04:18,302
Karena itu adalah judul tabel, TH,\n

19932
19:04:18,301 --> 19:04:22,111
Di sana, di tabel, ada dua\n

19933
19:04:22,111 --> 19:04:25,261
Agak, oh, saya lupa\nnomor satu, maaf ya.

19934
19:04:25,262 --> 19:04:28,197
Satu dan satu, ini bukan\nmeja tercantik, bukan?

19935
19:04:28,197 --> 19:04:30,072
Saya merasa seperti\ningin memisahkan beberapa hal

19936
19:04:30,072 --> 19:04:32,154
sedikit lagi, mungkin memberi\nbeberapa batas atau sejenisnya.

19937
19:04:32,154 --> 19:04:36,281
Namun dengan HTML saja, saya benar-benar\nberfokus pada strukturnya saja.

19938
19:04:36,282 --> 19:04:37,902
Jadi kami akan segera membuat ini lebih cantik.

19939
19:04:37,902 --> 19:04:41,331
Namun untuk saat ini, beginilah cara Anda\nmenyusun data tabel.

19940
19:04:41,331 --> 19:04:44,081
Baiklah, izinkan saya berhenti sebentar di sini\n

19941
19:04:44,081 --> 19:04:46,411
Namun, sekali lagi, tujuannya saat ini\adalah hanya untuk menyerang Anda

19942
19:04:46,411 --> 19:04:49,801
beberapa elemen dasar, sekali lagi,\n

19943
19:04:49,801 --> 19:04:53,671
Namun kami juga akan segera mulai\nmenyesuaikan gaya hal ini.

19944
19:04:55,691 --> 19:04:57,387
PEMBICARA 1: Bagaimana cara membuat indentasi paragraf?

19945
19:04:58,262 --> 19:04:59,822
Untuk itu, kita mungkin\nmenginginkan sesuatu

19946
19:04:59,822 --> 19:05:01,308
disebut CSS, Cascading Style Sheet.

19947
19:05:01,308 --> 19:05:03,391
Jadi izinkan saya kembali ke\nitu sebentar lagi.

19948
19:05:03,392 --> 19:05:06,782
Untuk penataan gaya pada benda-benda ini,\n

19949
19:05:06,782 --> 19:05:10,172
kita akan membutuhkan\nbahasa yang berbeda sama sekali.

19950
19:05:10,172 --> 19:05:13,172
Baiklah, mari\nsekarang kita membuat web

19951
19:05:13,172 --> 19:05:17,702
penuh, yaitu seperti\nfoto dan gambar dan sejenisnya.

19952
19:05:17,702 --> 19:05:22,832
Biarkan saya melanjutkan dan membuat file baru\n

19953
19:05:22,831 --> 19:05:25,781
dan ubah judul\ndi sini menjadi, katakanlah, Gambar.

19954
19:05:25,782 --> 19:05:29,189
Lalu, di isi halaman ini,\n

19955
19:05:29,188 --> 19:05:31,771
Hal yang menarik tentang sebuah\ngambar adalah sebenarnya tidak

19956
19:05:31,771 --> 19:05:35,251
akan memiliki tag awal dan akhir\n

19957
19:05:35,251 --> 19:05:38,281
Misalnya, bagaimana cara memulai sebuah gambar\dan akhirnya menyelesaikannya?

19958
19:05:38,282 --> 19:05:39,902
Entah itu ada atau tidak.

19959
19:05:39,902 --> 19:05:42,542
Jadi beberapa tag tidak memiliki tag akhir.

19960
19:05:42,542 --> 19:05:49,081
Jadi izinkan saya membuat gambar, IMG,\nsumber sama dengan Harvard.jpeg.

19961
19:05:49,081 --> 19:05:51,902
Dan izinkan saya melanjutkan, dan,\di jendela terminal saya

19962
19:05:51,902 --> 19:05:54,301
Saya sebenarnya datang dengan foto Harvard.

19963
19:05:54,301 --> 19:05:57,751
Izinkan saya mengambil ini sebentar.

19964
19:05:57,751 --> 19:06:01,171
Izinkan saya mengambil Harvard.jpeg dan\nmemasukkannya ke dalam direktori saya

19965
19:06:01,172 --> 19:06:03,822
anggap saja saya mengunduh\nitu sebelumnya.

19966
19:06:03,822 --> 19:06:06,422
Jadi yang saya maksud sekarang adalah file bernama

19967
19:06:06,422 --> 19:06:12,032
Harvard.jpeg, rupanya ada di\n

19968
19:06:12,032 --> 19:06:15,211
Jika gambar ini ada di\ninternet, seperti server Harvard

19969
19:06:15,211 --> 19:06:21,402
Saya juga bisa mengatakan seperti\nHTTPS://www.Harvard.edu/FolderName

19970
19:06:21,402 --> 19:06:25,562
apa pun itu, /Harvard.jpeg, tapi\n

19971
19:06:25,562 --> 19:06:28,772
ke lingkungan Scode Anda sendiri,\nseperti yang saya lakukan sebelum kelas

19972
19:06:28,771 --> 19:06:32,072
dengan menarik dan melepas\nseluruh file ini, foto Harvard ini

19973
19:06:32,072 --> 19:06:35,402
Anda cukup merujuknya\nsecara relatif.

19974
19:06:35,402 --> 19:06:38,521
Ini akan menjadi hal yang sama\nas katakan ./Harvard.jpeg

19975
19:06:38,521 --> 19:06:41,941
buka direktori saat ini dan\n

19976
19:06:41,941 --> 19:06:43,861
Tapi itu tidak perlu diketik.

19977
19:06:43,861 --> 19:06:47,461
Namun, untuk tujuan aksesibilitas,\n

19978
19:06:47,461 --> 19:06:51,122
idealnya kita juga memberikan\nan teks alternatif ini, sesuatu

19979
19:06:51,122 --> 19:06:55,021
seperti Universitas Harvard,\nin yang disebut tag Alt

19980
19:06:55,021 --> 19:06:57,331
dan ini agar\npembaca layar dapat membacanya

19981
19:06:57,331 --> 19:06:59,581
apa itu fotonya,\nbagi yang tidak bisa melihatnya.

19982
19:06:59,581 --> 19:07:02,072
Dan jika koneksi Anda\nlambat, terkadang Anda akan mengalaminya

19983
19:07:02,072 --> 19:07:04,051
lihat teks dari apa\nyang akan Anda lihat

19984
19:07:04,051 --> 19:07:07,601
sebelum gambar itu sendiri diunduh,\n

19985
19:07:07,601 --> 19:07:12,241
Jadi sekarang mari kembali ke browser saya yang terbuka\n

19986
19:07:12,241 --> 19:07:16,531
Saya sekarang memiliki Harvard.jpeg, yang saya\n

19987
19:07:16,532 --> 19:07:20,252
Izinkan saya mengeklik Image.html,\ndan ini dia

19988
19:07:20,251 --> 19:07:25,171
gambaran besar tentang Memorial\n

19989
19:07:25,172 --> 19:07:29,762
Cukuplah untuk mengatakan bahwa saya mungkin harus memperbaikinya\n

19990
19:07:29,762 --> 19:07:33,271
Namun untuk melakukan hal tersebut, kami mungkin akan\n

19991
19:07:33,271 --> 19:07:36,842
Ada beberapa atribut\historis yang masih Anda dapat

19992
19:07:36,842 --> 19:07:39,283
digunakan untuk mengontrol lebar dan\ntinggi, dan sebagainya.

19993
19:07:39,283 --> 19:07:41,491
Namun kami akan melakukannya\ndengan cara yang lebih baik

19994
19:07:41,491 --> 19:07:44,042
dengan bahasa yang dirancang untuk hal itu.

19995
19:07:45,482 --> 19:07:50,402
Saya juga sudah siap,\nbiarkan saya mengambil file lain di sini

19996
19:07:50,402 --> 19:07:55,782
izinkan saya mengambil file bernama\nHalloween.mp4, yang merupakan file MPEG.

19997
19:07:55,782 --> 19:08:02,822
Dan izinkan saya melanjutkan dan mengubahnya\n

19998
19:08:02,822 --> 19:08:04,592
Saya akan mengubah judul saya menjadi Video.

19999
19:08:04,592 --> 19:08:07,982
Dan mari kita lanjutkan dan sekarang\ninperkenalkan tag lain, tag video

20000
19:08:07,982 --> 19:08:13,172
buka video braket, lalu biarkan saya pergi\n

20001
19:08:13,172 --> 19:08:17,461
Lalu di dalam tag video,\n

20002
19:08:17,461 --> 19:08:22,501
akan menjadi spesifik\n

20003
19:08:22,501 --> 19:08:27,511
Saya tahu, itu Video/mp4, karena saya melihat\n

20004
19:08:27,512 --> 19:08:29,702
Dan tag video sebenarnya\nmemiliki beberapa atribut.

20005
19:08:29,702 --> 19:08:31,711
Saya dapat memutar hal ini secara otomatis.

20006
19:08:33,392 --> 19:08:36,602
Saya bisa menonaktifkannya, sehingga tidak ada\n

20007
19:08:36,601 --> 19:08:41,381
Kebanyakan browser, untuk mencegah iklan, tidak\n

20008
19:08:41,381 --> 19:08:44,581
Jadi jika Anda membisukan video, video\nakan diputar otomatis, namun mungkin tidak

20009
19:08:45,601 --> 19:08:49,932
Dan izinkan saya mengatur lebar benda ini\n

20010
19:08:49,932 --> 19:08:51,581
Tapi saya bisa membuatnya sesuai ukuran yang saya inginkan.

20011
19:08:51,581 --> 19:08:55,292
Jadi saya mengetahuinya hanya dari memiliki\n

20012
19:08:57,122 --> 19:08:59,822
Terkadang atribut tidak memiliki nilai.

20013
19:09:01,051 --> 19:09:04,387
Itu hanya satu kata,\nautoplay, loop, tidak bersuara

20014
19:09:04,387 --> 19:09:06,512
dan hal semacam itu masuk akal\nuntuk atribut apa pun itu

20015
19:09:08,342 --> 19:09:11,372
Sepertinya, tidak masuk akal\nmengatakan mute sama dengan sesuatu.

20016
19:09:11,372 --> 19:09:12,722
Sepertinya itu diredam atau tidak.

20017
19:09:12,721 --> 19:09:14,322
Atributnya ada atau tidak.

20018
19:09:14,322 --> 19:09:16,361
Demikian pula untuk orang lain ini.

20019
19:09:16,361 --> 19:09:19,981
Jadi izinkan saya kembali ke browser saya yang lain\n

20020
19:09:19,982 --> 19:09:24,122
Ada mp4\ndan saya juga Video.html

20021
19:09:24,122 --> 19:09:26,202
yang merupakan halaman web yang menyematkannya.

20022
19:09:26,202 --> 19:09:29,792
Dan ini sebenarnya adalah video yang\n

20023
19:09:30,941 --> 19:09:35,221
Jadi kami memasukkannya ke dalam demo ini di sini.

20024
19:09:35,221 --> 19:09:41,792
Ini adalah video yang ditayangkan\n

20025
19:09:41,792 --> 19:09:44,009
Namun di sini Anda mungkin dapat melihat\nan gambar itu saja

20026
19:09:44,009 --> 19:09:45,301
tidak akan memberikan efek yang sama.

20027
19:09:45,301 --> 19:09:48,494
Ini sebenarnya adalah sebuah film, file\nvideo kecil yang sekarang diulang.

20028
19:09:48,494 --> 19:09:51,661
Sekarang ada beberapa artefak di sini, seperti\n

20029
19:09:51,661 --> 19:09:53,494
Saya rasa akan\nnmenyenangkan jika memenuhi layar.

20030
19:09:53,494 --> 19:09:58,031
Namun sekali lagi, kita akan kembali ke bahasa\n

20031
19:09:58,032 --> 19:10:00,272
Ya, bukan hanya\nvideo seperti ini saja, tetapi Anda

20032
19:10:00,271 --> 19:10:01,982
mungkin ingin dimasukkan ke dalam halaman web.

20033
19:10:01,982 --> 19:10:06,283
Izinkan saya membuat\nfile lain bernama iFrame.html.

20034
19:10:06,283 --> 19:10:09,241
Jika Anda pernah melihat-lihat, jika\n

20035
19:10:09,241 --> 19:10:12,565
atau jika Anda memiliki blog sendiri atau\n

20036
19:10:12,565 --> 19:10:14,732
Anda mungkin memiliki\nkebiasaan menyematkan video

20037
19:10:14,732 --> 19:10:17,672
di situs web, menggunakan\pemutar YouTube yang tertanam.

20038
19:10:17,672 --> 19:10:21,362
Hal ini juga bisa dilakukan dengan menggunakan\n

20039
19:10:22,411 --> 19:10:25,531
Dan iFrame hanyalah sebuah tag\nyang secara harfiah adalah iFrame.

20040
19:10:25,532 --> 19:10:28,960
Ini memiliki sumber yang sama,\ndan kemudian URL, dan jika itu

20041
19:10:28,960 --> 19:10:32,252
kebetulan ada video YouTube, ada\n

20042
19:10:32,251 --> 19:10:33,811
per dokumentasi YouTube.

20043
19:10:33,812 --> 19:10:41,652
Jadi, Anda dapat melakukan www.youtube.com, menyematkan,\n

20044
19:10:41,652 --> 19:10:47,191
Jadi pada dasarnya inilah yang kita lakukan, jika\n

20045
19:10:47,191 --> 19:10:50,402
video, di situs kursus, atau\n

20046
19:10:50,402 --> 19:10:53,911
Jika saya ingin mengizinkan layar penuh,\nSaya juga dapat menambahkan atribut ini

20047
19:10:53,911 --> 19:10:56,661
yang saya tahu ada, hanya dengan\nmemeriksa dokumentasinya.

20048
19:10:56,661 --> 19:11:00,720
Dan jika sekarang saya kembali ke browser saya\n

20049
19:11:02,039 --> 19:11:03,872
Itu tidak akan memenuhi\nlayar, karena saya

20050
19:11:03,872 --> 19:11:05,760
belum menyesuaikan estetikanya.

20051
19:11:05,760 --> 19:11:10,111
Tapi tampaknya itu menyematkan sedikit\n

20052
19:11:10,721 --> 19:11:13,801
Jadi kita bisa mengubah lebarnya, ubah\n

20053
19:11:14,471 --> 19:11:19,171
Namun iFrame adalah cara menyematkan\n

20054
19:11:19,171 --> 19:11:21,961
halaman, jika mereka mengizinkan\nit, untuk membuat semuanya

20055
19:11:21,961 --> 19:11:25,652
semakin banyak pengalaman interaktif\n

20056
19:11:25,652 --> 19:11:28,652
Baiklah, web sudah ada\n

20057
19:11:28,652 --> 19:11:32,072
Mari lanjutkan dan buat\na file bernama Link.html.

20058
19:11:32,072 --> 19:11:35,581
Dan jika kita ingin membuat halaman web itu\n

20059
19:11:35,581 --> 19:11:40,100
jika tidak, ayo kita lakukan ini,\n

20060
19:11:44,551 --> 19:11:48,182
Sekarang, di Facebook, Instagram, banyak sekali\n

20061
19:11:48,182 --> 19:11:50,851
dalam nama domain, atau\nnama domain yang memenuhi syarat

20062
19:11:50,851 --> 19:11:52,771
secara otomatis menjadi tautan.

20063
19:11:52,771 --> 19:11:56,161
Itu karena situs web tersebut memiliki\n

20064
19:11:56,161 --> 19:12:00,550
mendeteksi sesuatu yang tampak seperti\n

20065
19:12:00,551 --> 19:12:02,452
HTML sendiri tidak melakukan hal itu untuk Anda.

20066
19:12:02,452 --> 19:12:06,822
Jadi jika saya kembali ke halaman\nweb saya di sini, klik Link.html

20067
19:12:06,822 --> 19:12:09,851
jika Anda mengetik visit\nHarvard.edu period, itu saja

20068
19:12:09,851 --> 19:12:11,592
semua yang benar-benar akan Anda lihat.

20069
19:12:11,592 --> 19:12:15,192
Namun secara naluriah, meskipun Anda sudah\n

20070
19:12:15,191 --> 19:12:19,326
mungkin kita lakukan di sini\nuntuk mengatasi masalah ini?

20071
19:12:19,327 --> 19:12:20,952
Apa yang bisa kita lakukan untuk mengatasi masalah ini.

20072
19:12:20,952 --> 19:12:22,244
Apa yang mungkin ingin saya tambahkan.

20073
19:12:24,461 --> 19:12:27,702
PEMBICARA 1: Ya, jadi saya ingin mengelilingi\n

20074
19:12:27,702 --> 19:12:30,285
Dan Anda belum tentu\mengetahui hal ini sampai seseorang memberi tahu Anda

20075
19:12:30,285 --> 19:12:33,342
atau Anda mencarinya, tetapi tag untuk\n

20076
19:12:33,342 --> 19:12:35,832
disebut tag A untuk jangkar.

20077
19:12:35,831 --> 19:12:39,251
Ia memiliki atribut yang disebut\nHREF untuk hyper-reference

20078
19:12:39,251 --> 19:12:42,791
yang seperti tautan di\ndunia maya ke sebuah URL.

20079
19:12:42,792 --> 19:12:45,881
Jadi izinkan saya mengetikkan\nURL Harvard yang lengkap dan tepat di sini.

20080
19:12:45,881 --> 19:12:48,101
Lalu saya akan menutup tagnya.

20081
19:12:48,101 --> 19:12:53,411
Dan kemudian saya masih bisa mengatakan Harvard.edu,\n

20082
19:12:53,411 --> 19:12:58,961
Tapi tempat yang akan mereka tuju\n

20083
19:13:00,971 --> 19:13:03,281
Sekarang jika saya kembali ke sini\ndan memuat ulang halaman

20084
19:13:03,282 --> 19:13:05,322
sekarang secara otomatis digarisbawahi.

20085
19:13:05,322 --> 19:13:07,092
Secara default warnanya ungu. Mengapa?

20086
19:13:07,092 --> 19:13:09,292
Karena kami mengunjungi\nHarvard.edu beberapa menit yang lalu.

20087
19:13:09,292 --> 19:13:12,642
Jadi browser saya, secara default, menunjukkan\n

20088
19:13:12,642 --> 19:13:14,592
Tapi sekarang saya punya link\nyang bisa saya klik

20089
19:13:14,592 --> 19:13:18,881
dan jika saya mengarahkan kursor ke atasnya tetapi tidak mengklik,\n

20090
19:13:18,881 --> 19:13:22,842
ada sedikit petunjuk di mana\n

20091
19:13:24,012 --> 19:13:26,082
Dan tanpa melangkah terlalu jauh\nke lubang kelinci

20092
19:13:26,081 --> 19:13:29,471
namun untuk menyatukan diskusi kita\ntentang keamanan siber baru-baru ini

20093
19:13:29,471 --> 19:13:32,861
bagaimana jika saya melakukan\nsesuatu seperti ini.

20094
19:13:32,861 --> 19:13:37,331
Saat ini Anda sedang mengalami awal\nsemacam serangan phishing

20095
19:13:37,331 --> 19:13:42,281
P-H-I-S-H-I-N-G, dimana Anda bisa\n

20096
19:13:42,282 --> 19:13:46,542
bahkan email menggunakan HTML, yang memberitahu\n

20097
19:13:46,542 --> 19:13:49,612
tapi mereka benar-benar akan\npergi ke tempat lain.

20098
19:13:49,611 --> 19:13:52,121
Dan itulah inti dari\nserangan phishing saat ini.

20099
19:13:52,122 --> 19:13:55,452
Jika Anda pernah menerima\nemail palsu yang berpura-pura berasal dari PayPal

20100
19:13:55,452 --> 19:13:57,912
atau bank Anda atau\situs web lain, kemungkinan besar ada

20101
19:13:57,911 --> 19:14:00,432
mereka baru saja menulis HTML\nyang menyatakan apa pun yang mereka inginkan

20102
19:14:00,432 --> 19:14:04,042
namun tag yang mendasarinya mungkin\ndo melakukan sesuatu yang sangat berbeda.

20103
19:14:04,042 --> 19:14:06,792
Dan memiliki naluri untuk melihat\n

20104
19:14:06,792 --> 19:14:10,211
atau menjadi sedikit curiga saat Anda\n

20105
19:14:10,211 --> 19:14:13,601
semudah itu untuk merekayasa orang secara sosial

20106
19:14:13,601 --> 19:14:18,342
menipu mereka, dengan hanya mengatakan satu\nhal dan menghubungkan ke hal lain.

20107
19:14:18,342 --> 19:14:22,572
Nah, bagaimana jika saya ingin menautkan halaman saya\n

20108
19:14:22,572 --> 19:14:25,422
Baiklah, jika saya ingin menautkan\nke foto Harvard itu

20109
19:14:25,422 --> 19:14:28,722
Saya hanya bisa melakukan HREF = sama dengan kutipan\n

20110
19:14:28,721 --> 19:14:32,121
di akun saya yang sama, itu\itu sendiri adalah laman web.

20111
19:14:32,122 --> 19:14:35,682
Jadi beginilah cara Anda membuat\ntautan relatif, web multi-halaman

20112
19:14:35,682 --> 19:14:38,271
halaman, situs web multi-halaman, diri Anda sendiri.

20113
19:14:38,271 --> 19:14:41,652
Jadi jika sekarang saya memuat ulang\nhalaman ini, arahkan kursor ke Harvard.edu

20114
19:14:41,652 --> 19:14:45,191
Anda akan melihat di sudut kiri\nbawah sebuah URL yang sangat panjang.

20115
19:14:45,191 --> 19:14:48,101
Tapi itu karena saya berada di ruang kode\nsaat ini, VS Kode

20116
19:14:48,101 --> 19:14:51,762
dan itu ditambahkan secara otomatis\nke akhir URL saya saat ini

20117
19:14:54,822 --> 19:14:57,251
Ketika saya mengklik ini, saya\nlangsung menuju ke sana

20118
19:14:57,251 --> 19:15:01,151
file yang kita buat sebelumnya, dengan\nversi gambar yang besar dan gila.

20119
19:15:01,152 --> 19:15:03,822
Namun itu hanya cara\nsatu halaman di situs web

20120
19:15:03,822 --> 19:15:07,721
dapat menautkan ke halaman lain di situs web.

20121
19:15:07,721 --> 19:15:11,711
Mari kita lakukan satu hal lagi di sini,\nmembuat segalanya lebih responsif

20122
19:15:11,711 --> 19:15:14,622
karena, kenyataannya, situs tersebut\ntidak terlalu responsif.

20123
19:15:14,622 --> 19:15:17,702
Responsif berarti menanggapi\n

20124
19:15:17,702 --> 19:15:20,202
sangat penting ketika seseorang\nmungkin berada di layar seperti ini

20125
19:15:20,202 --> 19:15:22,032
atau di layar seperti ini akhir-akhir ini.

20126
19:15:22,032 --> 19:15:26,892
Ada tag khusus yang dapat kita gunakan untuk\n

20127
19:15:28,271 --> 19:15:32,381
Jadi izinkan saya membuat file\nbernama Responsive.html.

20128
19:15:32,381 --> 19:15:36,131
Saya akan menyalin/menempelkan beberapa permulaan\n

20129
19:15:36,131 --> 19:15:40,751
Dan biarkan aku lanjutkan dan ambil saja, ayo\n

20130
19:15:40,751 --> 19:15:46,341
dari sebelumnya, supaya kita punya\n

20131
19:15:46,342 --> 19:15:50,172
Dan izinkan saya melanjutkan dan\ngambil teks ini di sini.

20132
19:15:50,172 --> 19:15:53,632
Dan saya hanya akan menempelkan\nini ke badan halaman ini.

20133
19:15:54,411 --> 19:15:57,762
Jadi saya hanya punya paragraf besar,\n

20134
19:15:57,762 --> 19:15:59,532
Biarkan saya kembali ke browser saya.

20135
19:15:59,532 --> 19:16:02,622
Izinkan saya membuka file ini,\nbernama Responsive.html

20136
19:16:02,622 --> 19:16:05,442
untuk menyatakan bahwa\nit belum responsif.

20137
19:16:05,441 --> 19:16:07,781
Biarkan saya melanjutkan dan\nklik Responsive.html.

20138
19:16:08,961 --> 19:16:12,381
Namun ini trik lain yang bisa Anda lakukan,\n

20139
19:16:12,881 --> 19:16:14,921
Anda bisa berpura-pura menjadi perangkat lain.

20140
19:16:14,922 --> 19:16:19,332
Izinkan saya membuka lagi Tampilan, pengembang,\nalat pengembang.

20141
19:16:19,331 --> 19:16:21,779
Terakhir kali kami menggunakan ini untuk\nmenggunakan tab Jaringan, yang mana

20142
19:16:21,779 --> 19:16:24,822
agak menarik, karena kami\n

20143
19:16:25,822 --> 19:16:29,111
Namun perhatikan, kita juga dapat mengeklik\nikon ini, setidaknya di Chrome

20144
19:16:29,111 --> 19:16:31,151
itu terlihat seperti ponsel.

20145
19:16:31,152 --> 19:16:36,199
Saya dapat mengubah laptop saya menjadi seperti apa\n

20146
19:16:36,198 --> 19:16:39,281
Saya akan mengklik titik titik titik\n

20147
19:16:39,282 --> 19:16:41,502
Daripada di bawah,\ndi tempat yang mungkin secara default

20148
19:16:41,501 --> 19:16:43,281
Saya akan memindahkannya\nke sisi kanan.

20149
19:16:43,282 --> 19:16:45,312
Sehingga sekarang di sebelah kiri,\nAnda melihat apa yang tampak lebih jauh

20150
19:16:45,312 --> 19:16:47,082
seperti bentuk telepon vertikal.

20151
19:16:47,081 --> 19:16:49,841
Dan sebenarnya, jika saya masuk\nke dimensi saya di sini

20152
19:16:49,842 --> 19:16:53,741
Saya akan memilih sesuatu seperti\niPhone X, jadi beberapa tahun yang lalu.

20153
19:16:53,741 --> 19:16:57,661
Inilah yang mungkin terjadi pada situs web yang sama\n

20154
19:16:57,661 --> 19:17:01,322
itu terlihat sangat\nkecil, untuk dapat membacanya.

20155
19:17:01,322 --> 19:17:03,842
Dan itu karena\nwebsite belum otomatis

20156
19:17:03,842 --> 19:17:07,771
menanggapi dimensi\niPhone yang cukup sempit

20157
19:17:07,771 --> 19:17:09,971
yang dimaksud, atau perangkat\nAndroid, atau yang lainnya.

20158
19:17:09,971 --> 19:17:11,411
Jadi izinkan saya melanjutkan dan melakukan ini.

20159
19:17:11,411 --> 19:17:13,391
Biarkan saya kembali ke kode saya.

20160
19:17:13,392 --> 19:17:16,382
Dan izinkan saya masuk ke bagian atas\nhalaman, dan untuk pertama kalinya

20161
19:17:18,149 --> 19:17:20,191
Kata ini sekarang ada di\ninternet, tapi tetap ada

20162
19:17:20,191 --> 19:17:23,131
adalah metatag yang\ndisebut, yang memungkinkan Anda

20163
19:17:23,131 --> 19:17:27,009
untuk menentukan nama beberapa jenis\ndetail konfigurasi di sini

20164
19:17:28,051 --> 19:17:31,081
Area pandang adalah istilah teknis\nuntuk wilayah persegi panjang

20165
19:17:31,081 --> 19:17:32,741
yang dilihat manusia di browser.

20166
19:17:32,741 --> 19:17:35,491
Ini pada dasarnya adalah tubuh\n

20167
19:17:37,051 --> 19:17:39,751
Dan Anda dapat menentukan\nkonten area pandang

20168
19:17:39,751 --> 19:17:41,761
harus mempunyai skala awal 1.

20169
19:17:41,762 --> 19:17:43,652
Jadi tidak boleh diperbesar atau diperkecil.

20170
19:17:43,652 --> 19:17:46,292
Dan lebar yang seharusnya digunakan\nbrowser

20171
19:17:46,292 --> 19:17:48,812
harus sama dengan lebar perangkat.

20172
19:17:48,812 --> 19:17:51,722
Ini adalah semacam pernyataan ajaib\nyang perlu Anda ketahui

20173
19:17:51,721 --> 19:17:55,771
atau salin/tempel atau transkripsikan,\nhanya tersurat, ke browser

20174
19:17:55,771 --> 19:17:59,611
asumsikan lebar halaman adalah\n

20175
19:17:59,611 --> 19:18:03,451
Jangan menganggap kemewahan\nlaptop besar atau komputer desktop.

20176
19:18:03,452 --> 19:18:08,432
Sekarang, dengan hanya melakukan perubahan itu, mari\n

20177
19:18:08,432 --> 19:18:10,682
di sini, menggunakan alat pengembang Chrome.

20178
19:18:13,232 --> 19:18:18,722
Dan sekarang, cara ini tidak terlalu efektif dalam hal ini\n

20179
19:18:23,501 --> 19:18:28,351
Jadi jika saya perbesar hingga 100%, hasilnya adalah\n

20180
19:18:28,351 --> 19:18:30,372
lebih mudah dibaca daripada\nbeberapa saat yang lalu

20181
19:18:30,372 --> 19:18:33,039
meskipun saya menyadari bahwa setan\nbelum tentu dapat meyakinkan.

20182
19:18:33,039 --> 19:18:34,832
Tapi itu semudah\nmemberi tahu browser

20183
19:18:34,831 --> 19:18:38,801
untuk mengubah ukuran objek menjadi\nlebar halaman.

20184
19:18:38,801 --> 19:18:41,971
Baiklah, izinkan saya berhenti sejenak di sini untuk melihat\n

20185
19:18:41,971 --> 19:18:43,591
rasanya sudah cukup tag HTML.

20186
19:18:43,592 --> 19:18:45,312
Kami akan menambahkan beberapa lagi.

20187
19:18:45,312 --> 19:18:47,402
Namun sebagian besar,\nseperti tag HTML

20188
19:18:47,402 --> 19:18:51,241
hal-hal yang Anda cari di Google dan pahami\n

20189
19:18:51,241 --> 19:18:54,182
Blok penyusun dasar\na adalah tag, atribut.

20190
19:18:54,182 --> 19:18:55,652
Beberapa atribut mempunyai nilai.

20191
19:18:56,461 --> 19:19:00,175
Dan itulah\nstruktur HTML pada dasarnya.

20192
19:19:00,175 --> 19:19:01,592
Namun, ada pertanyaan tentang semua ini.

20193
19:19:02,330 --> 19:19:03,961
AUDIENCE: Apakah atribut mempunyai urutan?

20194
19:19:03,961 --> 19:19:05,611
PEMBICARA 1: Apakah atribut mempunyai urutan?

20195
19:19:05,611 --> 19:19:08,701
Tidak, atribut bisa dalam\nurutan apa pun, dari kiri ke kanan.

20196
19:19:08,702 --> 19:19:11,702
Saya cenderung sedikit rewel,\ndan saya menyusunnya berdasarkan abjad

20197
19:19:11,702 --> 19:19:14,917
jika saja karena dengan begitu saya dapat dengan mudah\nsmengidentifikasi jika ada sesuatu yang hilang

20198
19:19:14,917 --> 19:19:16,292
jika tidak ada di sana menurut abjad.

20199
19:19:16,292 --> 19:19:21,952
Kebanyakan orang di internet\ntampaknya tidak melakukan hal itu.

20200
19:19:24,801 --> 19:19:26,811
Saya menyebutkan bahwa HTML\nis mulai digantikan

20201
19:19:26,812 --> 19:19:28,851
bahasa lain untuk antarmuka pengguna.

20202
19:19:28,851 --> 19:19:30,292
Dan itu bukan hanya HTML saja.

20203
19:19:30,292 --> 19:19:34,101
Ini HTML dengan CSS, dengan JavaScript,\n

20204
19:19:35,211 --> 19:19:37,911
Ini adalah\ntren portabilitas

20205
19:19:37,911 --> 19:19:40,581
dan kemampuan untuk perusahaan,\nuntuk pemrogram individu

20206
19:19:40,581 --> 19:19:42,951
untuk menulis satu versi\naplikasi dan memilikinya

20207
19:19:42,952 --> 19:19:47,092
berfungsi di perangkat Android dan iPhone\n

20208
19:19:48,351 --> 19:19:51,411
Sangat memakan waktu\nmempelajari bahasa seperti Java

20209
19:19:51,411 --> 19:19:54,322
dan menulis aplikasi Android, pelajari\nbahasa lain yang disebut Swift

20210
19:19:54,322 --> 19:19:56,991
dan membuat aplikasi iOS, belum lagi\nmenciptakan tampilan dan perilakunya

20211
19:19:56,991 --> 19:19:59,123
sama, belum lagi\nmemperbaiki bug di dalamnya

20212
19:19:59,123 --> 19:20:00,831
lalu ingat untuk\nmemperbaikinya di yang lain.

20213
19:20:00,831 --> 19:20:05,061
Maksud saya, ini sangat menyakitkan\nmemakan waktu dan biaya.

20214
19:20:05,062 --> 19:20:09,351
Jadi standarisasi ini pada\nHTML, CSS, dan JavaScript

20215
19:20:09,351 --> 19:20:13,432
bahkan untuk aplikasi seluler dan aplikasi web,\n

20216
19:20:13,432 --> 19:20:16,012
karena memecahkan masalah seperti itu.

20217
19:20:16,012 --> 19:20:19,851
Baiklah, mari kita lanjutkan dan sekarang lakukan\n

20218
19:20:19,851 --> 19:20:22,161
Semua halaman ini\nsejauh ini hanyalah sekedar selera

20219
19:20:22,161 --> 19:20:25,042
konten statis, konten\nyang tidak berubah.

20220
19:20:25,042 --> 19:20:27,991
Baiklah, mari kita lanjutkan dan lakukan ini.

20221
19:20:27,991 --> 19:20:31,012
Izinkan saya memperkenalkan\nformat URL lainnya, yang terlihat

20222
19:20:31,012 --> 19:20:33,051
sesuatu seperti yang terjadi sebelumnya.

20223
19:20:33,051 --> 19:20:36,451
Jadi potong jalurnya, tapi\sebenarnya bisa jadi seperti ini

20224
19:20:36,452 --> 19:20:40,012
tanda tanya jalur garis miring\n, kunci sama dengan nilai.

20225
19:20:40,012 --> 19:20:42,021
Anda mungkin tidak menyadarinya,\atau tidak peduli untuk menyadarinya

20226
19:20:42,021 --> 19:20:44,641
URL di bilah URL Anda setiap hari.

20227
19:20:44,642 --> 19:20:46,282
Tapi hal-hal ini ada dimana-mana.

20228
19:20:46,282 --> 19:20:49,222
Seringkali saat Anda mengetik di\nmesin telusur seperti Google

20229
19:20:49,221 --> 19:20:52,491
kueri penelusuran, apa pun yang Anda\nketikkan akan berakhir di URL.

20230
19:20:52,491 --> 19:20:55,099
Saat Anda mengeklik tautan yang\nberisi beberapa informasi

20231
19:20:55,099 --> 19:20:57,682
mungkin ada tanda tanya,\ndan ada beberapa kunci dan nilai.

20232
19:20:57,682 --> 19:21:00,471
Mungkin ada ampersand\ndan lebih banyak kunci dan nilai.

20233
19:21:00,471 --> 19:21:02,901
Sekali lagi, ini adalah\nparadigma pemrograman yang umum

20234
19:21:02,902 --> 19:21:05,062
hanya mengasosiasikan kunci dengan nilai.

20235
19:21:07,021 --> 19:21:11,391
Izinkan saya membuka\ngoogle.com melalui browser

20236
19:21:11,392 --> 19:21:16,042
di sini, dan izinkan saya mencari sesuatu\n

20237
19:21:16,042 --> 19:21:20,482
Masuk, perhatikan sekarang\nURL saya berubah dari google.com

20238
19:21:20,482 --> 19:21:23,991
ke google.com garis miring\ntelusuri tanda tanya

20239
19:21:23,991 --> 19:21:27,081
Q sama dengan kucing, ampersand\ndan banyak hal lainnya

20240
19:21:27,081 --> 19:21:28,581
yang saya tidak mengerti atau tahu.

20241
19:21:28,581 --> 19:21:33,501
Jadi mari kita hapus saja untuk saat ini, dan\n

20242
19:21:34,559 --> 19:21:37,101
Jika saya perkecil di sini, bertahun-tahun yang lalu\nAnda akan mendapatkan gambar kucing.

20243
19:21:37,101 --> 19:21:41,122
Sekarang Anda mendapatkan video dari film tersebut.

20244
19:21:41,122 --> 19:21:44,332
Lalu pertanyaan teratas\ndi sana, adalah Cats adalah film yang buruk.

20245
19:21:44,331 --> 19:21:46,822
Namun kita juga dapat\ntentu saja mengeklik Gambar.

20246
19:21:46,822 --> 19:21:49,521
Dan ada\kucing yang menggemaskan, kucing yang menyeramkan.

20247
19:21:49,521 --> 19:21:52,342
Baiklah, hal ini tidak biasa\nterjadi saat kami menelusuri kucing.

20248
19:21:52,342 --> 19:21:57,922
Tapi bagaimanapun, intinya adalah URL\n

20249
19:21:57,922 --> 19:22:00,562
Dan ini adalah hal yang sederhana,\nnamun sangat bermanfaat.

20250
19:22:00,562 --> 19:22:04,822
Beginilah cara manusia\nmemberikan masukan ke server.

20251
19:22:04,822 --> 19:22:07,741
Mereka tidak membuat\nURL secara manual, seperti yang baru saja saya lakukan.

20252
19:22:07,741 --> 19:22:10,792
Namun ketika Anda mengisi formulir\non web dan Anda menekan Enter

20253
19:22:10,792 --> 19:22:13,672
biasanya URL tiba-tiba\nberubah menjadi disertakan

20254
19:22:13,672 --> 19:22:16,552
apa pun yang Anda ketik,\nin URL-nya, dengan asumsi

20255
19:22:16,551 --> 19:22:18,891
bentuknya menggunakan kata kerja GET.

20256
19:22:20,331 --> 19:22:22,123
Jika Anda mengetik\nama pengguna, kata sandi

20257
19:22:22,123 --> 19:22:25,331
informasi kartu kredit, karena Anda\n

20258
19:22:25,331 --> 19:22:27,951
di laptop Anda untuk melihat\segala sesuatu yang Anda ketik

20259
19:22:29,331 --> 19:22:32,061
Jadi ada kata kerja lain, POST,\nyang bisa menyembunyikan semua itu.

20260
19:22:32,062 --> 19:22:33,772
Dan itu hanya dikirim sedikit berbeda.

20261
19:22:33,771 --> 19:22:36,501
Namun hal seperti ini\nbiasanya dikirim melalui GET

20262
19:22:36,501 --> 19:22:39,921
dan apa artinya di bawah\n

20263
19:22:39,922 --> 19:22:43,432
membuat permintaan seperti ini, Dapatkan/cari?

20264
19:22:43,432 --> 19:22:47,752
Q sama dengan, apa pun yang Anda ketik,\n

20265
19:22:47,751 --> 19:22:52,822
Dan mudah-mudahan yang muncul kembali adalah sebuah halaman\n

20266
19:22:52,822 --> 19:22:57,961
Dan yang menarik di sini sekarang adalah, jika\n

20267
19:22:57,961 --> 19:23:04,792
dan izinkan saya melanjutkan dan membuat\n

20268
19:23:04,792 --> 19:23:09,682
Di Search.html, saya akan memulai\n

20269
19:23:11,032 --> 19:23:14,612
Dan di badan laman ini, saya\nakan memperkenalkan tag formulir.

20270
19:23:14,611 --> 19:23:18,531
Dan dalam tag formulir ini, saya akan\nmemiliki beberapa masukan.

20271
19:23:18,532 --> 19:23:25,252
Dan jenis masukannya akan\n

20272
19:23:28,448 --> 19:23:30,531
Dan ini belum\nmenarik, tapi mari kita lihat

20273
19:23:30,532 --> 19:23:32,422
apa yang terjadi di halaman itu sendiri.

20274
19:23:32,422 --> 19:23:34,762
Biarkan saya kembali ke daftar direktori saya.

20275
19:23:34,762 --> 19:23:36,922
Biarkan saya mengklik Search.html.

20276
19:23:36,922 --> 19:23:39,442
Tampaknya saya mempunyai awal\nmesin pencari saya sendiri.

20277
19:23:40,551 --> 19:23:43,201
Itu hanya kotak teks\ndan tombol kirim.

20278
19:23:43,202 --> 19:23:45,002
Tapi mari kita selesaikan pemikiranku di sini.

20279
19:23:45,001 --> 19:23:49,911
Jadi mari kita beri\nkotak teks ini nama Q

20280
19:23:49,911 --> 19:23:53,751
yang mana, jika Anda kembali ke akhir tahun 90an\n

20281
19:23:53,751 --> 19:23:58,041
membuat Google.com, Q mewakili kueri,\n

20282
19:23:58,042 --> 19:24:01,822
Jadi nama\nkotak teks ini adalah teks

20283
19:24:01,822 --> 19:24:05,842
adalah Q. Formulirnya\nakan menggunakan metode apa?

20284
19:24:05,842 --> 19:24:07,702
Secara teknis ini menggunakan GET\nsecara default, tapi saya akan melakukannya

20285
19:24:07,702 --> 19:24:10,282
jelaskan secara eksplisit dan ucapkan method\nequals quote unquote "get.

20286
19:24:10,282 --> 19:24:14,632
Bodohnya, ini huruf kecil di HTML, bahkan\n

20287
19:24:16,851 --> 19:24:21,491
Tindakan formulir ini, khususnya,\n

20288
19:24:21,491 --> 19:24:24,351
Namun saat ini kami tidak mempunyai waktu\nuntuk mengimplementasikan Google itu sendiri.

20289
19:24:24,351 --> 19:24:28,941
Jadi kami hanya akan mengirimkan\n

20290
19:24:28,941 --> 19:24:31,152
Jadi saya membuat formulir,\naksinya

20291
19:24:31,152 --> 19:24:35,711
adalah mengirim data ke garis miring Google\n

20292
19:24:35,711 --> 19:24:41,021
Ini akan mengirimkan masukan bernama Q,\n

20293
19:24:41,021 --> 19:24:44,081
Biarkan saya kembali ke\nbrowser, memuat ulang halaman.

20294
19:24:44,081 --> 19:24:48,911
Sepertinya belum ada yang berubah,\n

20295
19:24:50,351 --> 19:24:53,952
Saat ini saya berada di Search.html.

20296
19:24:53,952 --> 19:24:57,282
Jika saya memperkecil dan mencari\nkucing sekarang dan klik Kirim

20297
19:24:57,282 --> 19:24:59,262
Saya dibawa ke google.com.

20298
19:24:59,262 --> 19:25:02,952
Namun perhatikan bahwa URL tersebut\nberparameter, dengan nilai kunci tersebut

20299
19:25:04,572 --> 19:25:06,432
Dan saya mendapatkan kembali sejumlah\nhasil kucing.

20300
19:25:06,432 --> 19:25:08,771
Dan sekarang saya dapat dengan mudah\nmembuatnya sedikit lebih cantik.

20301
19:25:08,771 --> 19:25:11,801
Saat ini, hal seperti itu tidak ideal\n

20302
19:25:13,116 --> 19:25:15,491
Dan agak menjengkelkan\npelengkapan otomatis diaktifkan.

20303
19:25:15,491 --> 19:25:17,292
Jika saya tidak ingin\nmencari kucing lagi

20304
19:25:17,292 --> 19:25:21,282
baiklah, menurut dokumentasi HTML,\n

20305
19:25:21,282 --> 19:25:25,362
Pelengkapan otomatis sama dengan nonaktif, untuk mematikan\nmematikan pelengkapan otomatis, fokus otomatis

20306
19:25:25,361 --> 19:25:28,521
untuk secara otomatis menempatkan\nkursor di dalam kotak teks itu.

20307
19:25:28,521 --> 19:25:32,292
Jika saya ingin teks penjelasan, saya bisa\n

20308
19:25:33,521 --> 19:25:35,652
Dan sekarang jika saya kembali ke\nhalaman ini dan memuat ulang

20309
19:25:35,652 --> 19:25:37,461
sekarang ini sedikit lebih ramah pengguna.

20310
19:25:37,461 --> 19:25:39,641
Anda melihat kueri dalam bentuk teks abu-abu.

20311
19:25:39,642 --> 19:25:41,472
Kursor sudah\nada dan berkedip.

20312
19:25:41,471 --> 19:25:43,001
Saya bahkan tidak perlu menggerakkan kursor.

20313
19:25:43,001 --> 19:25:46,121
Saya bisa mencari anjing sekarang, dan Anda\n

20314
19:25:46,122 --> 19:25:48,911
Tekan enter untuk mengirimkan, dan\nsekarang saya sedang mencari

20315
19:25:48,911 --> 19:25:51,831
ini dia, anjing-anjing menggemaskan.

20316
19:25:52,762 --> 19:25:56,851
Saya telah mengimplementasikan bagian depan\n

20317
19:25:56,851 --> 19:25:58,601
Untuk mengimplementasikan back\nend, kami jelas melakukannya

20318
19:25:58,601 --> 19:26:01,812
akan membutuhkan yang sangat besar\n

20319
19:26:01,812 --> 19:26:05,484
Kita akan membutuhkan beberapa kode seperti\n

20320
19:26:06,191 --> 19:26:08,091
Kita akan membutuhkan Python\nuntuk hal seperti itu.

20321
19:26:08,092 --> 19:26:09,912
Faktanya, itulah arah\nyang akan kami arahkan minggu depan

20322
19:26:09,911 --> 19:26:11,262
ketika kita mengimplementasikan back end itu.

20323
19:26:11,262 --> 19:26:14,592
Tapi hari ini semuanya tentang front end ini.

20324
19:26:14,592 --> 19:26:20,682
Atau pertanyaan apa pun tentang formulir,\n

20325
19:26:20,682 --> 19:26:24,680
transisi untuk membuat segalanya tampak\na sedikit lebih cantik, dengan CSS?

20326
19:26:24,679 --> 19:26:27,221
Dan kemudian kita akan mengakhirinya dengan membuat\nsegalanya menjadi sedikit lebih fungsional

20327
19:26:31,941 --> 19:26:35,121
Baiklah, mari kita mulai menjawab\n

20328
19:26:35,122 --> 19:26:40,232
muncul, dengan membuat halaman ini menjadi\n

20329
19:26:40,232 --> 19:26:45,872
Mari kita lanjutkan sekarang dan perkenalkan kepada\n

20330
19:26:45,872 --> 19:26:48,562
Biarkan saya melanjutkan dan membuat\na file bernama Home.html

20331
19:26:48,562 --> 19:26:51,292
seolah-olah saya sedang membuat halaman\nberanda untuk pertama kalinya.

20332
19:26:51,292 --> 19:26:53,961
Dan di halaman ini, saya akan\nmemberi judul Beranda.

20333
19:26:53,961 --> 19:26:55,891
Dan saya hanya akan\nmemiliki tiga hal.

20334
19:26:55,892 --> 19:27:00,292
Pertama, saya mungkin akan memiliki\na paragraf teks di sini

20335
19:27:00,292 --> 19:27:03,322
di bagian atas, ada pesan\nyang menyambut halaman beranda saya

20336
19:27:03,322 --> 19:27:06,741
seperti nama saya, John Harvard, untuk\n

20337
19:27:06,741 --> 19:27:10,072
Lalu di tengah halaman,\n

20338
19:27:10,072 --> 19:27:12,982
selamat datang di tanda seru beranda\nhalaman saya!

20339
19:27:12,982 --> 19:27:16,042
Dan di bagian bawah halaman, saya\n

20340
19:27:16,042 --> 19:27:19,672
mengatakan sesuatu seperti hak cipta,\nsimbol hak cipta, John

20341
19:27:19,672 --> 19:27:21,172
Harvard, atau semacamnya.

20342
19:27:21,172 --> 19:27:25,432
Baiklah, jadi seperti laman web\n

20343
19:27:26,721 --> 19:27:27,981
Ini tidak terlalu menarik.

20344
19:27:27,982 --> 19:27:32,422
Jika saya membuka halaman bernama\nRumah.html ini, izinkan saya melanjutkan

20345
19:27:32,422 --> 19:27:35,932
dan buat tiga paragraf singkat,\n

20346
19:27:35,932 --> 19:27:39,292
Di tengah-tengah, saya akan mengatakan\n

20347
19:27:40,232 --> 19:27:42,472
Dan di bagian bawah,\nwah, di bagian bawah

20348
19:27:42,471 --> 19:27:45,651
footer kecil yang bertuliskan\nsesuatu seperti hak cipta

20349
19:27:45,652 --> 19:27:50,331
sedikit simbol hak cipta\nsederhana, dan nama John Harvard.

20350
19:27:50,331 --> 19:27:52,364
Baiklah, sekarang izinkan saya memuat ulang halaman ini.

20351
19:27:53,032 --> 19:27:57,292
Ini sangat sederhana, sangat mengecewakan\n

20352
19:27:57,292 --> 19:28:00,188
Sekarang mari kita mulai menata\nini dengan cara yang menarik

20353
19:28:00,188 --> 19:28:02,271
sehingga sedikit lebih\estetis.

20354
19:28:02,271 --> 19:28:04,251
Pertama, ini sebenarnya bukan paragraf.

20355
19:28:04,251 --> 19:28:08,104
Itu seperti area halaman,\n

20356
19:28:08,104 --> 19:28:09,771
Itu seperti bagian utama layar saya.

20357
19:28:09,771 --> 19:28:11,521
Lalu ada\nfooter layar saya.

20358
19:28:11,521 --> 19:28:13,813
Jadi paragrafnya kurang tepat\njika sebenarnya tidak tepat

20359
19:28:15,152 --> 19:28:17,722
Saya mungkin lebih tepat menyebutnya\ndiv atau divisi

20360
19:28:17,721 --> 19:28:21,831
halaman, yang merupakan hal yang sangat umum\n

20361
19:28:21,831 --> 19:28:24,121
wilayah persegi panjang umum ini padanya.

20362
19:28:24,122 --> 19:28:28,192
Itu tidak memberikan keindahan apa pun,\n

20363
19:28:28,191 --> 19:28:32,601
Itu hanya menciptakan wilayah\npersegi panjang yang tidak terlihat, di dalamnya

20364
19:28:32,601 --> 19:28:34,342
Anda dapat mulai menata teksnya.

20365
19:28:34,342 --> 19:28:36,262
Atau saya bisa mengambil satu langkah lebih jauh.

20366
19:28:36,262 --> 19:28:40,461
Ada beberapa tag lain dalam HTML,\n

20367
19:28:40,461 --> 19:28:42,869
memiliki nama yang menjelaskan\njenis laman Anda, yang mana

20368
19:28:42,869 --> 19:28:45,411
juga semakin menarik\nsaat ini dalam hal aksesibilitas

20369
19:28:45,411 --> 19:28:49,881
untuk pembaca layar, untuk mesin telusur,\n

20370
19:28:49,881 --> 19:28:52,584
mesin dapat menyadari bahwa footer\nmungkin sedikit mengembang.

20371
19:28:52,584 --> 19:28:54,292
Headernya mungkin\nasedikit menarik.

20372
19:28:54,292 --> 19:28:57,202
Bagian utama laman\mungkin merupakan bagian yang menarik

20373
19:28:57,202 --> 19:29:01,762
yang saya ingin agar pengguna dapat menelusuri\n

20374
19:29:01,762 --> 19:29:04,672
Jadi mari kita mulai menata\nhalaman ini dengan cara apa pun.

20375
19:29:04,672 --> 19:29:08,482
Mari kita perkenalkan style\nattribute dalam HTML

20376
19:29:08,482 --> 19:29:13,101
di dalamnya akan ada\nteks seperti ini, ukuran font titik dua

20377
19:29:13,101 --> 19:29:16,851
besar, ratakan teks di tengah titik dua.

20378
19:29:16,851 --> 19:29:20,182
Di Utama, saya akan menambahkan atribut\nstyle dan menyebutkan ukuran font

20379
19:29:24,021 --> 19:29:27,741
Lalu di bagian bawah, saya akan\nmengatakan gaya sama dengan ukuran font

20380
19:29:34,232 --> 19:29:36,592
Yang berwarna biru adalah\nbahasa yang kami janjikan

20381
19:29:36,592 --> 19:29:39,112
disebut CSS, untuk Cascading Style Sheets.

20382
19:29:39,111 --> 19:29:42,231
Kami belum benar-benar melihat\nCascading Style Sheet-nya.

20383
19:29:42,232 --> 19:29:46,192
Namun yang berwarna biru di sini, pemberitahuan adalah\nparadigma yang sangat umum.

20384
19:29:46,191 --> 19:29:48,861
Sintaksnya berbeda\nsekarang, tetapi bagaimana menurut Anda

20385
19:29:48,861 --> 19:29:52,461
jelaskan apa yang Anda\nlihat di sini dengan warna biru?

20386
19:29:52,461 --> 19:29:56,902
Ini adalah contoh lain dari\nkonvensi pemrograman seperti apa?

20387
19:29:57,789 --> 19:30:00,081
PEMBICARA 1: Ya, itu hanya\nlebih banyak pasangan nilai kunci, bukan?

20388
19:30:00,081 --> 19:30:03,031
Alangkah baiknya jika dunia melakukan standarisasi\n

20389
19:30:03,032 --> 19:30:07,260
karena sekarang kita telah melihat tanda sama dengan\n

20390
19:30:07,801 --> 19:30:10,009
Tapi itu hanya berbeda\nbahasa, pilihan berbeda.

20391
19:30:10,009 --> 19:30:13,121
Kuncinya di sini adalah ukuran font,\nnilainya besar.

20392
19:30:13,122 --> 19:30:16,922
Kunci lainnya adalah perataan teks,\ntitik dua, nilainya di tengah.

20393
19:30:16,922 --> 19:30:20,642
Titik koma hanya memisahkan\none pasangan nilai kunci dari yang lain.

20394
19:30:20,642 --> 19:30:24,482
Sama seperti di URL, ampersand\ndid, dalam konteks HTTP.

20395
19:30:24,482 --> 19:30:27,392
Perancang CSS\menggunakan titik koma sebagai gantinya.

20396
19:30:27,392 --> 19:30:30,149
Sebenarnya,\nstitik koma ini tidak diperlukan.

20397
19:30:30,149 --> 19:30:32,732
Saya cenderung memasukkannya hanya untuk\nsimetri, tapi itu tidak masalah

20398
19:30:32,732 --> 19:30:34,322
karena tidak ada apa pun setelah itu.

20399
19:30:34,322 --> 19:30:36,301
Ini adalah contoh yang agak aneh.

20400
19:30:36,301 --> 19:30:41,341
Ini adalah perpaduan\nCSS di dalam JavaScript.

20401
19:30:41,342 --> 19:30:46,682
Jadi untuk saat ini, Anda dapat menggunakan CSS\n

20402
19:30:46,682 --> 19:30:49,441
dalam nilai atribut gaya.

20403
19:30:49,441 --> 19:30:52,542
Kami melakukan sesuatu\nhal serupa pada dua minggu terakhir

20404
19:30:52,542 --> 19:30:57,032
seminggu lebih yang lalu, ketika kami memasukkan\nbeberapa SQL ke dalam Python.

20405
19:30:57,032 --> 19:30:59,764
Jadi sekali lagi, bahasa bisa\nmelintaskan hambatan secara bersama-sama.

20406
19:30:59,764 --> 19:31:01,682
Namun kami akan membereskannya\nini, karena ini

20407
19:31:01,682 --> 19:31:04,599
akan menjadi berantakan dengan cepat,\n

20408
19:31:04,599 --> 19:31:07,211
dari Harvard atau Yale, atau sejenisnya.

20409
19:31:07,211 --> 19:31:09,372
Jadi mari kita lihat seperti apa bentuknya.

20410
19:31:09,372 --> 19:31:13,142
Izinkan saya kembali ke\njendela browser saya di sini, muat ulang halaman.

20411
19:31:13,142 --> 19:31:14,922
Dan itu tidak jauh berbeda.

20412
19:31:14,922 --> 19:31:19,412
Tapi itu memang terpusat, dan\n

20413
19:31:19,411 --> 19:31:20,732
Dan izinkan saya membuat satu penyempurnaan.

20414
19:31:20,732 --> 19:31:22,771
Simbol hak cipta\sebenarnya dapat diungkapkan

20415
19:31:22,771 --> 19:31:25,021
tapi tidak ada tombol di\nkeyboard AS saya di sini.

20416
19:31:25,021 --> 19:31:30,902
Saya sebenarnya bisa secara ajaib mengatakan\nampersand hash 169 titik koma

20417
19:31:30,902 --> 19:31:33,167
menggunakan apa yang disebut entitas HTML.

20418
19:31:33,167 --> 19:31:36,991
Ternyata ada angka\n

20419
19:31:36,991 --> 19:31:40,351
memungkinkan Anda menentukan simbol yang\n

20420
19:31:40,351 --> 19:31:42,361
tapi itu tidak ada di sebagian besar keyboard.

20421
19:31:42,361 --> 19:31:46,051
Jika saya memuat ulang halaman sekarang, sekarang\itu adalah simbol hak cipta yang tepat.

20422
19:31:46,051 --> 19:31:50,221
Estetika yang sangat kecil, namun\ninmemperkenalkan kita pada entitas HTML ini.

20423
19:31:50,221 --> 19:31:53,671
Jadi meskipun Anda belum pernah\nmelihat CSS sebelumnya, Anda

20424
19:31:53,672 --> 19:31:56,522
mungkin dapat menemukan sesuatu\nyang bodoh tentang apa

20425
19:31:56,521 --> 19:31:58,201
Saya melakukannya di sini, seperti desain yang buruk.

20426
19:31:58,202 --> 19:32:02,582
Memang benar, jika tujuan saya kecil,\n

20427
19:32:02,581 --> 19:32:07,081
sepertinya desainnya buruk,\nmungkin, meskipun Anda belum pernah melakukannya

20428
19:32:09,872 --> 19:32:12,122
PEMBICARA 1: Ya, saya telah menggunakan\ngaya yang sama tiga kali

20429
19:32:12,122 --> 19:32:14,942
seperti menyalin/menempel, atau mengetik\hal yang sama berulang kali.

20430
19:32:14,941 --> 19:32:17,221
Ini jarang merupakan hal yang baik.

20431
19:32:17,221 --> 19:32:21,691
Nah, di sinilah kita dapat mengambil\nakeuntungan dari desain CSS

20432
19:32:21,691 --> 19:32:24,121
karena mendukung apa\nkita sebut warisan

20433
19:32:24,122 --> 19:32:29,461
dimana anak-anak mewarisi properti,\n

20434
19:32:30,572 --> 19:32:32,471
Dan artinya, saya bisa melakukan ini.

20435
19:32:32,471 --> 19:32:34,231
Biarkan saya menghilangkan perataan teks ini.

20436
19:32:34,232 --> 19:32:36,032
Biarkan saya menghilangkan perataan teks ini.

20437
19:32:37,232 --> 19:32:40,142
Saya bisa menghilangkan titik koma,\n

20438
19:32:40,142 --> 19:32:46,502
Dan izinkan saya menambahkan semua gaya itu\n

20439
19:32:46,501 --> 19:32:51,511
sehingga mengalir ke\n

20440
19:32:52,331 --> 19:32:54,451
Dan izinkan saya menutup kutipan saya di sana juga.

20441
19:32:54,452 --> 19:32:58,381
Sekarang, jika saya kembali ke browser\ndan menekan muat ulang, tidak ada perubahan.

20442
19:32:58,381 --> 19:33:00,241
Namun desainnya sedikit\nlebih baik, bukan?

20443
19:33:00,241 --> 19:33:03,601
Karena jika saya ingin mengubah teks\n

20444
19:33:03,601 --> 19:33:06,491
Sekarang saya dapat memuat ulang halaman tersebut, dan\nvoila, sekarang sudah ada di sana.

20445
19:33:06,491 --> 19:33:08,952
Saya mengubahnya di satu tempat, bukan\ndi tiga tempat berbeda.

20446
19:33:08,952 --> 19:33:11,822
Jadi sepertinya\ndesainnya sedikit lebih baik.

20447
19:33:11,822 --> 19:33:14,441
Dan bisakah kita melakukan ini\dengan cara yang lebih berbeda?

20448
19:33:14,441 --> 19:33:20,251
Yah, itu tidak terlalu elegan\n

20449
19:33:20,251 --> 19:33:22,621
Hal ini umumnya cenderung\nmenjadi praktik yang buruk

20450
19:33:22,622 --> 19:33:26,012
Anda menggabungkan HTML dan\n

20451
19:33:26,012 --> 19:33:28,622
mungkin sangat ahli dalam menata\nstruktur laman web

20452
19:33:28,622 --> 19:33:31,411
dan konten serta datanya, dan Anda\n

20453
19:33:31,411 --> 19:33:32,822
atau hanya tidak peduli dengan estetika.

20454
19:33:32,822 --> 19:33:34,572
Anda mungkin bekerja dengan\ndesainer, seniman

20455
19:33:34,572 --> 19:33:37,741
siapa yang jauh lebih baik dalam semua\npenyetelan bagus ini secara estetis.

20456
19:33:37,741 --> 19:33:41,921
Bukankah lebih baik jika Anda bisa bekerja\n

20457
19:33:41,922 --> 19:33:43,982
Dan Anda tidak perlu\nmenyukainya secara harfiah

20458
19:33:43,982 --> 19:33:46,112
edit baris\nkode yang sama satu sama lain.

20459
19:33:46,111 --> 19:33:50,131
Ya, sama seperti kita dapat memindahkan\nhal-hal ke dalam file header di C

20460
19:33:50,131 --> 19:33:53,895
atau paket dengan Python, kita\ndapat melakukan hal yang sama di CSS.

20461
19:33:53,895 --> 19:33:55,812
Jadi saya sebenarnya akan\nmelakukannya.

20462
19:33:55,812 --> 19:33:58,382
Biarkan saya menghilangkan semua\natribut gaya ini

20463
19:33:58,381 --> 19:34:03,842
dan izinkan saya mulai berlatih\n

20464
19:34:05,221 --> 19:34:10,051
Izinkan saya memindahkannya ke\n

20465
19:34:11,611 --> 19:34:14,011
Ini adalah salah satu\ncontoh langka yang ada

20466
19:34:14,012 --> 19:34:16,862
adalah atribut yang memiliki\nnama tag yang sama dan sebaliknya.

20467
19:34:16,861 --> 19:34:19,441
Ini tidak terlalu umum,\ntapi yang ini memang ada.

20468
19:34:19,441 --> 19:34:22,891
Berikut sintaks yang sedikit berbeda untuk\n

20469
19:34:22,892 --> 19:34:26,912
Jika saya ingin menerapkan properti CSS,\nyaitu pasangan nilai kunci

20470
19:34:26,911 --> 19:34:31,201
ke header halaman, kataku\n

20471
19:34:31,202 --> 19:34:38,101
dan di dalamnya saya katakan\nukuran font besar, perataan teks di tengah.

20472
19:34:38,101 --> 19:34:42,131
Lalu, jika saya ingin menerapkan beberapa properti\n

20473
19:34:42,131 --> 19:34:47,072
Saya kembali melakukan ukuran font, katakanlah, sedang,\n

20474
19:34:47,072 --> 19:34:49,622
Lalu, yang terakhir, pada\nfooter halaman, I

20475
19:34:49,622 --> 19:34:55,021
dapat menetapkan beberapa properti seperti\n

20476
19:34:57,532 --> 19:35:00,442
Dan saya tidak perlu melakukan\apa pun lagi di HTML saya.

20477
19:35:00,441 --> 19:35:03,871
Itu semua hanya mewakili\nstruktur halaman saya.

20478
19:35:03,872 --> 19:35:06,313
Namun, karena gaya\ntag ini di bagian atas halaman

20479
19:35:06,313 --> 19:35:08,271
browser mengetahui terlebih dahulu\namo saat itu

20480
19:35:08,271 --> 19:35:10,851
menemukan tag header,\ntag utama, atau tag footer

20481
19:35:10,851 --> 19:35:14,062
itu harus menerapkan\nproperti itu, gaya itu.

20482
19:35:14,062 --> 19:35:17,032
Jika saya memuat ulang halaman tersebut, selain itu sedang di-restart sekarang

20483
19:35:18,111 --> 19:35:21,171
Yang kami lakukan hanyalah\n

20484
19:35:21,172 --> 19:35:24,322
Namun sekarang semuanya ada\di bagian atas file.

20485
19:35:24,322 --> 19:35:26,241
Tapi masih ada desain yang buruk di sini.

20486
19:35:26,241 --> 19:35:30,202
Apa yang bisa saya lakukan sekarang\nyang lebih cerdas?

20487
19:35:33,952 --> 19:35:35,932
SPEAKER 1: Oke, buat\nfile baru hanya dengan CSS.

20488
19:35:36,411 --> 19:35:37,828
Ayo pergi ke sana hanya dalam satu detik.

20489
19:35:37,828 --> 19:35:40,161
Namun meski kita ada di sini,\nmasih ada redundansi

20490
19:35:40,161 --> 19:35:41,902
kita mungkin bisa mengatasinya.

20491
19:35:41,902 --> 19:35:45,232
Ya, hilangkan bagian tengah perataan teks\n

20492
19:35:45,232 --> 19:35:47,601
sepertinya tidak perlu,\nandan mungkin seseorang

20493
19:35:47,601 --> 19:35:53,991
jika tidak, jika saya menghilangkan pusat perataan teks,\n

20494
19:35:53,991 --> 19:35:56,991
untuk mengembalikannya, tapi\n

20495
19:35:56,991 --> 19:35:59,822
Dan halamannya, jika saya gulir\nke bawah, terlihat seperti ini, dalam HTML.

20496
19:36:01,282 --> 19:36:02,792
SPEAKER 1: Ya, jadi body tagnya.

20497
19:36:02,792 --> 19:36:04,711
Jadi izinkan saya melanjutkan dan mengatakan tubuh.

20498
19:36:04,711 --> 19:36:07,282
Dan kemudian di sini, letakkan text-align center.

20499
19:36:07,282 --> 19:36:10,282
Dan sekarang, jika saya memuat ulang\nhalamannya, tidak ada efek visualnya

20500
19:36:10,282 --> 19:36:12,142
tapi desainnya lebih baik\nkarena sekarang saya

20501
19:36:12,142 --> 19:36:14,242
memperhitungkan kesamaan semacam itu.

20502
19:36:14,241 --> 19:36:16,521
Jadi, hanya untuk memperjelas\napa yang telah kita lakukan di sini

20503
19:36:16,521 --> 19:36:19,491
ini semua, sekali lagi, properti CSS\n, pasangan nilai kunci ini.

20504
19:36:19,491 --> 19:36:22,461
Dan ada berbagai jenis\ncara menggunakannya.

20505
19:36:22,461 --> 19:36:24,797
Dan itulah keseluruhan taksonominya.

20506
19:36:24,797 --> 19:36:27,922
Apa yang telah kami lakukan sejauh ini adalah\n

20507
19:36:27,922 --> 19:36:30,172
dimana tipenya adalah nama sebuah tag.

20508
19:36:30,172 --> 19:36:33,172
Namun ternyata tidak ada\cara lain untuk melakukan hal ini.

20509
19:36:33,172 --> 19:36:35,211
Dan mari kita menuju ke arah ini.

20510
19:36:35,211 --> 19:36:38,782
Mari kita lanjutkan dan mungkin menulis\nCSS kita sedikit berbeda

20511
19:36:38,782 --> 19:36:40,282
karena kamu tahu apa yang menyenangkan.

20512
19:36:40,282 --> 19:36:44,512
Aku yakin, setelah hari ini, setelah aku mulai\n

20513
19:36:44,512 --> 19:36:46,222
atau beranda\nJohn Harvard, saya mungkin mau

20514
19:36:46,221 --> 19:36:48,741
untuk menempatkan teks di tengah pada halaman lain.

20515
19:36:48,741 --> 19:36:52,012
Dan saya mungkin ingin memiliki\n yang besar

20516
19:36:52,012 --> 19:36:55,012
Akan lebih baik jika saya dapat menggunakan kembali\nproperti ini lagi dan lagi

20517
19:36:55,012 --> 19:36:57,292
dan semacam membuat\perpustakaan saya yang sekarang, bahkan mungkin

20518
19:36:57,292 --> 19:36:59,812
akhirnya menempatkannya\ di file terpisah.

20519
19:37:00,562 --> 19:37:04,042
Daripada secara eksplisit menerapkan\ntext-align center ke badan

20520
19:37:04,042 --> 19:37:07,101
izinkan saya membuat\nkata benda baru, atau kata sifat

20521
19:37:07,101 --> 19:37:09,441
sebaliknya, bagi saya sendiri, disebut terpusat.

20522
19:37:09,441 --> 19:37:12,021
Itu harus dimulai dengan\ndot, karena apa yang saya lakukan

20523
19:37:12,021 --> 19:37:14,781
sedang menciptakan kelas saya sendiri.

20524
19:37:14,782 --> 19:37:17,662
Ini tidak ada hubungannya dengan\nkelas di Java atau Python.

20525
19:37:17,661 --> 19:37:20,271
Kelas di sini adalah fitur estetika ini.

20526
19:37:20,271 --> 19:37:22,971
Dan sebenarnya, izinkan saya mengganti nama\nini, menjadi titik besar

20527
19:37:26,001 --> 19:37:29,931
Bagi saya, hal ini menghasilkan kata-kata baru

20528
19:37:29,932 --> 19:37:33,232
kata-kata yang terkenal, yang sekarang dapat saya gunakan dalam file ini

20529
19:37:33,232 --> 19:37:36,211
atau mungkin di halaman\nweb lain yang saya buat, sebagai berikut.

20530
19:37:36,211 --> 19:37:39,322
Sekarang saya dapat mengatakan, jika saya ingin\nmemusatkan seluruh tubuh

20531
19:37:39,322 --> 19:37:41,631
Saya dapat mengatakan bahwa kelas sama-sama terpusat.

20532
19:37:41,631 --> 19:37:45,171
Pada tag header, saya bisa\nmengatakan kelas sama dengan besar.

20533
19:37:45,172 --> 19:37:48,222
Pada tag utama saya dapat\nmengatakan kelas sama dengan medium.

20534
19:37:48,221 --> 19:37:50,631
Pada tag footer, saya dapat\nmengatakan kelas sama dengan kecil.

20535
19:37:50,631 --> 19:37:53,391
Tapi izinkan saya mengambil satu langkah lebih jauh.

20536
19:37:53,392 --> 19:37:56,212
Seperti saran Anda, mengapa\nsaya tidak melanjutkannya sekarang

20537
19:37:56,211 --> 19:37:59,452
dan izinkan saya membuang\n-- izinkan saya mengambil semua CSSnya

20538
19:38:01,312 --> 19:38:08,362
Biarkan saya menghilangkan tag gaya di sini,\n

20539
19:38:08,361 --> 19:38:13,432
dan izinkan saya menyimpan semuanya\n

20540
19:38:13,432 --> 19:38:15,622
tidak ada yang lain, tidak ada HTML apa pun.

20541
19:38:15,622 --> 19:38:18,801
Tapi izinkan saya kembali ke halaman\nBeranda.html saya, dan ini

20542
19:38:18,801 --> 19:38:21,951
adalah salah satu nama yang paling menjengkelkan\n

20543
19:38:21,952 --> 19:38:30,052
maksudnya, Tautan HREF\nHome.css rel sama dengan stylesheet.

20544
19:38:30,051 --> 19:38:33,292
Jadi idealnya kita akan menggunakan\n

20545
19:38:33,292 --> 19:38:36,112
tapi ini adalah tautan dalam\nsemacam pengertian konseptual.

20546
19:38:36,111 --> 19:38:39,981
Kami menautkan file ini ke file lain\n

20547
19:38:39,982 --> 19:38:43,612
menggunakan hyper-reference ini,\nHome.css, hubungannya

20548
19:38:43,611 --> 19:38:46,281
dari file itu ke file ini\nis file stylesheet.

20549
19:38:46,282 --> 19:38:48,472
Stylesheet adalah file\nyang berisi sejumlah besar

20550
19:38:48,471 --> 19:38:52,581
stilisasi, sejumlah\nproperti, seperti yang baru saja kita lakukan.

20551
19:38:52,581 --> 19:38:54,621
Jadi di sini juga, efeknya\nmengecewakan.

20552
19:38:54,622 --> 19:38:57,002
Jika saya memuat ulang halaman tersebut, tidak ada yang berubah.

20553
19:38:57,001 --> 19:39:01,881
Namun sekarang, saya tidak hanya memiliki\na desain yang lebih baik di sini

20554
19:39:01,881 --> 19:39:06,921
karena sekarang saya dapat menggunakan kelas yang sama\n

20555
19:39:06,922 --> 19:39:11,211
halaman ketigaku, halaman keempat, biodataku,\n

20556
19:39:11,211 --> 19:39:15,021
membuat di situs web saya di sini, saya\ndapat menggunakan kembali gaya tersebut hanya dengan

20557
19:39:15,021 --> 19:39:19,251
termasuk satu baris kode, bukan\n

20558
19:39:19,251 --> 19:39:21,841
memasukkan barang ke dalam file demi file demi file.

20559
19:39:21,842 --> 19:39:24,322
Dan sialnya, jika seluruh\nodunia memang demikian

20560
19:39:24,322 --> 19:39:28,197
terkesan dengan kelas terpusat saya, dan\n

20561
19:39:28,197 --> 19:39:31,072
Saya bisa menggabungkannya, biarkan yang lain\n

20562
19:39:31,072 --> 19:39:35,482
dan saya memiliki perpustakaan sendiri, CSS saya sendiri\n

20563
19:39:35,482 --> 19:39:37,881
Mengapa Anda harus menciptakan\na kelas terpusat lagi

20564
19:39:37,881 --> 19:39:41,331
jika aku sudah melakukannya untukmu,\nsbodoh dan sekecil ini.

20565
19:39:41,331 --> 19:39:43,191
Namun alangkah baiknya\nsekarang mengemasnya

20566
19:39:43,191 --> 19:39:47,911
dengan cara yang dapat digunakan\noleh orang lain juga.

20567
19:39:47,911 --> 19:39:51,351
Jadi ini mungkin desain\nterbaik dalam hal CSS.

20568
19:39:51,351 --> 19:39:56,601
Gunakan kelas jika Anda bisa, gunakan\n

20569
19:39:56,601 --> 19:40:00,971
tapi jangan gunakan atribut style\n

20570
19:40:00,971 --> 19:40:06,531
mulai menjadi berantakan dengan cepat,\nterutama untuk file besar.

20571
19:40:06,532 --> 19:40:08,617
Baiklah, ada pertanyaan tentang ini.

20572
19:40:11,361 --> 19:40:13,731
Tidak, baiklah, jadi\nitulah pemilih kelas.

20573
19:40:13,732 --> 19:40:16,131
Saat Anda menentukan titik\nsesuatu, itu artinya

20574
19:40:16,131 --> 19:40:20,211
Anda memilih semua tag di\n

20575
19:40:20,211 --> 19:40:21,661
dan menerapkan properti tersebut.

20576
19:40:21,661 --> 19:40:23,828
Jadi ada beberapa\nlainnya di sini, hanya untuk diberikan kepada Anda

20577
19:40:23,828 --> 19:40:25,432
rasakan sekarang tentang apa yang mungkin.

20578
19:40:25,432 --> 19:40:29,072
Masih banyak lagi yang bisa Anda\n

20579
19:40:29,072 --> 19:40:33,501
Izinkan saya membuka beberapa\n

20580
19:40:33,501 --> 19:40:35,391
Biarkan saya melanjutkan dan membuka VS Code.

20581
19:40:35,392 --> 19:40:43,502
Dan izinkan saya menyalin\ndirektori sumber delapan saya.

20582
19:40:43,501 --> 19:40:47,041
Beri saya waktu sebentar untuk mengambil sumbernya\n

20583
19:40:47,042 --> 19:40:51,872
sehingga sekarang saya bisa masuk ke\nbrowser saya, masuk ke beberapa

20584
19:40:51,872 --> 19:40:53,822
dari contoh yang telah dibuat\nin sumber delapan

20585
19:40:53,822 --> 19:40:57,461
dan izinkan saya membuka paragraf satu di sini.

20586
19:40:57,461 --> 19:41:00,691
Jadi, ada sesuatu yang\namun sedikit halus.

20587
19:41:00,691 --> 19:41:04,292
Namun adakah yang memerhatikan\nbagaimana gaya ini dibuat?

20588
19:41:04,292 --> 19:41:07,142
Ini hanyalah teks umum\nlorem ipsum lagi.

20589
19:41:07,142 --> 19:41:12,972
Namun yang perlu diperhatikan\nsecara gaya, sebuah buku mungkin bisa melakukan hal ini.

20590
19:41:14,432 --> 19:41:15,932
PEMBICARA 1: Ya,\nparagraf pertama sedikit lebih besar.

20591
19:41:16,322 --> 19:41:18,691
Siapa tahu itu hanya gaya\n

20592
19:41:18,691 --> 19:41:19,981
Paragraf pertama lebih besar.

20593
19:41:21,072 --> 19:41:23,562
Sebenarnya, kita dapat menjelajahi\nhal ini dengan beberapa cara.

20594
19:41:23,562 --> 19:41:26,101
Pertama, saya jelas bisa masuk ke\nVS Code dan menunjukkan kodenya kepada Anda.

20595
19:41:26,101 --> 19:41:29,281
Namun, sekarang kami menggunakan Chrome dan\n

20596
19:41:30,572 --> 19:41:33,661
Lihat pengembang, alat\npengembang, dan sekarang perhatikan

20597
19:41:33,661 --> 19:41:37,201
izinkan saya menonaktifkan fitur seluler,\n

20598
19:41:37,202 --> 19:41:39,752
ke bawah, supaya\nlebar sepenuhnya.

20599
19:41:39,751 --> 19:41:41,641
Kami melihat tab Jaringan sebelumnya.

20600
19:41:41,642 --> 19:41:44,072
Kami melihat tombol seluler sebelumnya.

20601
19:41:44,072 --> 19:41:45,971
Sekarang izinkan saya mengklik Elemen.

20602
19:41:45,971 --> 19:41:49,651
Apa yang menarik dari tab Elemen\n

20603
19:41:49,652 --> 19:41:54,752
versi HTML laman web,\n

20604
19:41:54,751 --> 19:41:58,831
untukmu, sehingga kamu bisa melakukannya sekarang\n

20605
19:41:58,831 --> 19:42:02,461
kode, kode sumber HTML, dari\nan halaman web mana pun di internet.

20606
19:42:02,461 --> 19:42:05,221
Perhatikan halaman web saya\ndi sini, tidak begitu menarik.

20607
19:42:05,221 --> 19:42:08,072
Ada banyak paragraf\ntag teks lorem ipsum.

20608
19:42:09,482 --> 19:42:12,452
Yang pertama, saya memberikan ID.

20609
19:42:12,452 --> 19:42:14,851
Ini adalah sesuatu yang dapat dilakukan oleh Anda,\sebagai seorang desainer web.

20610
19:42:14,851 --> 19:42:18,452
Anda dapat memberikan atribut ID\nke tag mana pun di laman

20611
19:42:18,452 --> 19:42:20,222
untuk memberinya pengenal unik.

20612
19:42:20,221 --> 19:42:22,951
Tanggung jawab ada pada Anda, untuk tidak\nmenggunakan kembali kata tersebut, di mana pun.

20613
19:42:22,952 --> 19:42:24,932
Jika Anda menggunakannya kembali, Anda telah gagal.

20614
19:42:26,402 --> 19:42:30,362
Tapi saya memilih ID\npertama, supaya saya

20615
19:42:30,361 --> 19:42:34,271
punya cara untuk merujuk ke\n

20616
19:42:34,271 --> 19:42:37,572
Jika saya melihat di bagian atas\nhalaman, dan tag gaya di sini

20617
19:42:37,572 --> 19:42:40,292
perhatikan bahwa saya memiliki hash terlebih dahulu.

20618
19:42:40,292 --> 19:42:43,411
Jadi sama seperti saya menggunakan titik untuk\nkelas, dunia CSS

20619
19:42:43,411 --> 19:42:46,741
menggunakan simbol hash untuk\nmewakili ID, ID unik.

20620
19:42:46,741 --> 19:42:51,721
Dan hal ini memberitahukan browser,\n

20621
19:42:51,721 --> 19:42:57,182
PERTAMA, tanpa hash,\nterapkan ukuran font yang lebih besar.

20622
19:42:57,182 --> 19:43:00,542
Dan itulah sebabnya paragraf pertama,\n

20623
19:43:01,952 --> 19:43:04,502
Jika saya benar-benar masuk ke\nVS Code sekarang, dan biarkan

20624
19:43:04,501 --> 19:43:06,121
saya masuk ke direktori sumber delapan saya.

20625
19:43:06,122 --> 19:43:09,002
Izinkan saya membuka Paragraphs1.html.

20626
19:43:10,622 --> 19:43:14,521
Jika saya ingin mengubah warnanya\n

20627
19:43:14,521 --> 19:43:16,351
Saya bisa melakukan warna titik dua: hijau.

20628
19:43:16,351 --> 19:43:19,861
Biarkan saya menutup alat\npengembang, memuat ulang halaman.

20629
19:43:19,861 --> 19:43:22,572
Dan sekarang halaman itu juga berwarna hijau.

20630
19:43:22,572 --> 19:43:24,152
Anda tidak harus hanya menggunakan kata-kata.

20631
19:43:27,271 --> 19:43:31,081
Apa kode hex untuk warna hijau di RGB?

20632
19:43:31,081 --> 19:43:34,691
Seperti tidak ada merah, banyak hijau, tidak ada biru.

20633
19:43:34,691 --> 19:43:38,881
Jadi Anda bisa melakukan 00 FF 00, menggunakan\na hash, yang kebetulan

20634
19:43:38,881 --> 19:43:41,131
adalah simbol yang sama, namun\ntidak ada hubungannya dengan ID.

20635
19:43:41,131 --> 19:43:44,792
Beginilah cara Photoshop dan\nhalaman web merepresentasikan warna.

20636
19:43:44,792 --> 19:43:46,050
Ayo kembali ke sini dan muat ulang.

20637
19:43:46,050 --> 19:43:48,842
Sama saja, meskipun itu a\n

20638
19:43:50,251 --> 19:43:56,131
Jika saya ingin mengubahnya menjadi merah, itu\n

20639
19:43:56,131 --> 19:43:58,081
dan di sini saya bisa pergi dan memuat ulang.

20640
19:43:58,081 --> 19:43:59,932
Sekarang paragraf pertama berwarna merah.

20641
19:43:59,932 --> 19:44:01,682
Ini sebenarnya menjadi\nsangat membosankan dengan cepat.

20642
19:44:01,682 --> 19:44:04,622
Misalnya, jika Anda seorang desainer web yang mencoba\n

20643
19:44:04,622 --> 19:44:06,961
sebenarnya mungkin menyenangkan\nmengutak-atik situs web

20644
19:44:06,961 --> 19:44:09,422
sebelum Anda membuka editor\ndan mulai membuat perubahan

20645
19:44:11,771 --> 19:44:14,611
Jadi perhatikan apa yang dapat\ndo Anda lakukan dengan alat pengembang

20646
19:44:14,611 --> 19:44:16,591
juga, di Chrome dan browser lainnya.

20647
19:44:16,592 --> 19:44:19,982
Saat saya menyorot\nparagraf ini, di bawah tab Elemen

20648
19:44:19,982 --> 19:44:22,502
perhatikan bahwa, satu, itu\ngdisorot dengan warna biru.

20649
19:44:22,501 --> 19:44:24,714
Jika saya menggerakkan kursor, kursor\ndotidak tersorot.

20650
19:44:24,714 --> 19:44:26,131
Jika saya memindahkannya, itu akan disorot.

20651
19:44:26,131 --> 19:44:29,641
Jadi ini menunjukkan kepada saya apa\ntag yang diwakilinya.

20652
19:44:29,642 --> 19:44:32,342
Namun perhatikan di sini\nsebelah kanan, Anda juga bisa

20653
19:44:32,342 --> 19:44:35,938
lihat semua stilisasi\nelemen tertentu tersebut.

20654
19:44:37,021 --> 19:44:40,561
Yang dicetak miring di sini, di\n

20655
19:44:40,562 --> 19:44:44,772
Artinya inilah yang dibuat oleh Google\n

20656
19:44:44,771 --> 19:44:48,432
Namun jika tidak dicetak miring\ndi sini, Anda akan melihat hash terlebih dahulu

20657
19:44:48,432 --> 19:44:50,441
yang merupakan kode saya, yang baru saja saya ubah.

20658
19:44:50,441 --> 19:44:55,981
Dan jika saya ingin mulai mengutak-atik\n

20659
19:44:57,211 --> 19:45:02,101
Namun perhatikan, jika saya kembali ke VS Code, saya\n

20660
19:45:02,101 --> 19:45:04,141
Ini sekarang murni sisi klien.

20661
19:45:05,221 --> 19:45:08,281
Ketika saya menggambar gambar itu\lebih dekat dengan browser yang berjalan

20662
19:45:08,282 --> 19:45:11,252
membuat permintaan ke cloud,\n

20663
19:45:11,251 --> 19:45:14,491
kembali lagi, browser,\nMac Anda, PC Anda, ponsel Anda

20664
19:45:14,491 --> 19:45:18,641
memiliki salinan semua HTML dan\nCSS, jadi Anda dapat mengubahnya di sini

20665
19:45:20,664 --> 19:45:22,831
Dan, misalnya, Anda dapat\melakukannya dengan situs web mana pun.

20666
19:45:22,831 --> 19:45:29,011
Mari kita melakukan karyawisata\ndi sini, misalnya, ke Stanford.edu.

20667
19:45:29,012 --> 19:45:31,771
Inilah\nsitus web Stanford hari ini.

20668
19:45:31,771 --> 19:45:34,141
Mari kita lanjutkan ke sini\ndan lihat, ada

20669
19:45:34,142 --> 19:45:36,642
halaman penerimaan mereka,\nkehidupan kampus, dan sebagainya.

20670
19:45:36,642 --> 19:45:41,282
Biarkan saya melanjutkan dan melihat alat\npengembang di halaman Stanford

20671
19:45:41,282 --> 19:45:45,242
alat pengembang, elemen,\nAnda dapat melihat semua HTML-nya.

20672
19:45:45,241 --> 19:45:48,221
Dan perhatikan bahwa itu diciutkan,\njadi inilah headernya.

20673
19:45:48,221 --> 19:45:51,121
Inilah bagian utamanya, dan\nSaya menggunakan pintasan keyboard saya

20674
19:45:51,122 --> 19:45:54,203
untuk sekadar membuka dan menutup tag,\nuntuk mendalami lebih dalam lagi.

20675
19:45:54,203 --> 19:45:56,161
Misalkan Anda ingin\nmembuat kekacauan dengan Stanford

20676
19:45:56,161 --> 19:45:58,861
Anda sebenarnya dapat menyukai\nklik kanan pada elemen halaman mana pun

20677
19:45:58,861 --> 19:46:03,121
atau kontrol klik, Periksa, dan itu\n

20678
19:46:03,122 --> 19:46:07,062
ke tag di tab Elemen\nyang menunjukkan tautan itu kepada Anda.

20679
19:46:07,062 --> 19:46:11,882
Dan perhatikan, jika saya mengarahkan kursor ke ini\n

20680
19:46:11,881 --> 19:46:13,921
sebagai daftar tidak berurutan dari kiri ke kanan.

20681
19:46:13,922 --> 19:46:16,255
Namun tidak harus berupa\ndaftar berpoin dari atas ke bawah.

20682
19:46:16,255 --> 19:46:20,202
Mereka telah menggunakan CSS untuk mengubahnya menjadi\n

20683
19:46:20,202 --> 19:46:22,862
penelitian, perawatan kesehatan,\npenerimaan kampus, tentang.

20684
19:46:22,861 --> 19:46:25,691
Ya, begitu banyak untuk\napendaftarannya, hilang.

20685
19:46:25,691 --> 19:46:29,911
Jadi sekarang, jika saya menutup alat pengembang,\n

20686
19:46:29,911 --> 19:46:32,971
Tapi, tentu saja, apa yang sebenarnya telah saya lakukan.

20687
19:46:32,971 --> 19:46:35,404
Saya baru saja bermutasi\nsalinan lokal saya sendiri.

20688
19:46:35,404 --> 19:46:37,322
Jadi ini bukan peretasan,\walaupun bisa saja terjadi

20689
19:46:37,322 --> 19:46:38,947
bagaimana mereka melakukannya di TV dan film.

20690
19:46:38,947 --> 19:46:40,691
Itu masih ada jika saya memuat ulang halamannya.

20691
19:46:40,691 --> 19:46:44,601
Namun ini adalah cara yang sangat ampuh\n

20692
19:46:44,601 --> 19:46:46,351
hal-hal yang berbeda\ngayanya, cari tahu

20693
19:46:46,351 --> 19:46:48,902
bagaimana Anda ingin mendesain\nsesuatu, dan kedua, pelajari saja

20694
19:46:50,381 --> 19:46:53,339
Jadi, misalnya, jika saya klik kanan\n

20695
19:46:53,339 --> 19:46:56,831
pergi untuk memeriksa, dan biarkan\nsaya pergi ke tag LI.

20696
19:46:56,831 --> 19:47:00,211
Biarkan saya terus naik, naik,\nnaik, naik, hingga tag UL.

20697
19:47:00,211 --> 19:47:02,322
Akan ada banyak hal yang terjadi di sini.

20698
19:47:02,322 --> 19:47:06,271
Namun perhatikan, mereka telah menerapkan\nsemua properti CSS ini

20699
19:47:08,702 --> 19:47:11,912
Tapi perhatikan, ini\nbagaimana caranya, kira-kira seperti ini.

20700
19:47:11,911 --> 19:47:15,872
Dan kami harus membaca lebih lanjut untuk mempelajari\n

20701
19:47:15,872 --> 19:47:18,122
inilah cara mereka\nmenghilangkan peluru.

20702
19:47:18,122 --> 19:47:19,682
Dan yang bisa Anda lakukan hanyalah bermain-main.

20703
19:47:19,682 --> 19:47:21,389
Seperti, baiklah,\napa fungsinya?

20704
19:47:22,771 --> 19:47:26,101
Baiklah, tidak terlalu berubah\n

20705
19:47:26,922 --> 19:47:30,572
Jadi sekarang marginnya sudah berubah,\npadding di sekitarnya sudah berubah.

20706
19:47:31,801 --> 19:47:34,081
Kita bisa mulai menyalakan\ndan mematikannya saja

20707
19:47:34,081 --> 19:47:35,792
untuk memahami cara\nhalaman web bekerja.

20708
19:47:35,792 --> 19:47:37,831
Saya belum benar-benar mempelajari\apa pun di sini sejauh ini.

20709
19:47:37,831 --> 19:47:43,801
Biarkan aku pergi ke LI di sini, ayo\n

20710
19:47:47,432 --> 19:47:50,229
Jadi ketika ada\ndisplay properti di CSS

20711
19:47:50,229 --> 19:47:53,312
hal itu tampaknya berubah secara efektif\n

20712
19:47:53,312 --> 19:47:56,491
jika saya mematikannya, sekarang\ntautan Stanford semuanya terlihat seperti ini.

20713
19:47:56,491 --> 19:47:57,721
Dan ada peluru-peluru itu.

20714
19:47:57,721 --> 19:48:00,841
Jadi sekali lagi, hanya gaya default,\nyang entah bagaimana sudah diganti

20715
19:48:00,842 --> 19:48:03,782
dan seorang desainer web yang baik\nakan mengetahuinya pada akhirnya

20716
19:48:03,782 --> 19:48:06,500
bagaimana melakukan hal-hal semacam ini.

20717
19:48:06,500 --> 19:48:08,792
Baiklah, bagaimana dengan beberapa\nblok penyusun terakhir

20718
19:48:08,792 --> 19:48:09,991
sebelum kita istirahat sekali lagi.

20719
19:48:09,991 --> 19:48:12,616
Lalu kita akan mendalami\nJavaScript untuk memanipulasi hal ini

20720
19:48:13,771 --> 19:48:17,432
Izinkan saya membukanya,\nbagaimana dengan Paragraf2 di sini.

20721
19:48:17,432 --> 19:48:21,631
Biarkan aku menutup tab ini, biarkan aku pergi\n

20722
19:48:21,631 --> 19:48:25,051
Dan yang ini tampak\nsama, kecuali, kapan

20723
19:48:25,051 --> 19:48:27,661
Saya lanjutkan dan memeriksa\nparagraf pertama ini

20724
19:48:27,661 --> 19:48:29,822
perhatikan bahwa saya dapat\nmenghilangkan ID tersebut

20725
19:48:29,822 --> 19:48:32,202
entah bagaimana, maksudnya, ada banyak

20726
19:48:32,202 --> 19:48:34,562
banyak cara untuk menyelesaikan\nmasalah dalam HTML dan CSS

20727
19:48:34,562 --> 19:48:36,422
seperti yang ada di C dan Python.

20728
19:48:36,422 --> 19:48:39,422
Biarkan saya melihat bagian kepala dan\ngaya halamannya sekarang.

20729
19:48:39,422 --> 19:48:45,812
Inilah yang mungkin kita sebut\nanjenis pemilih lainnya

20730
19:48:45,812 --> 19:48:49,382
yang memungkinkan kita menentukan\ntag paragraf

20731
19:48:49,381 --> 19:48:52,111
itu sendiri terjadi pada\nanak pertama saja.

20732
19:48:52,111 --> 19:48:56,001
Jadi Anda bisa menerapkan CSS ke\n

20733
19:48:56,001 --> 19:48:58,686
Ada juga sintaks untuk\nanak terakhir, jika hanya yang pertama

20734
19:48:58,687 --> 19:49:00,312
seharusnya terlihat sedikit berbeda.

20735
19:49:00,312 --> 19:49:02,432
Jadi, di sini, saya baru saja\nkeluar dari bisnis ini

20736
19:49:02,432 --> 19:49:05,282
untuk membuat pengenal\unik saya sendiri dan, sebagai gantinya, sayalah yang melakukannya

20737
19:49:05,282 --> 19:49:08,142
menggunakan pemilih jenis ini juga.

20738
19:49:09,282 --> 19:49:14,072
Izinkan saya membahas contoh lain\ndi sini, bernama Link1.html

20739
19:49:14,072 --> 19:49:17,411
dan di sini kita mempunyai cara yang sangat sederhana\n

20740
19:49:17,411 --> 19:49:19,411
Namun perhatikan warnanya ungu\nsecara default, karena kita sudah melakukannya

20741
19:49:21,271 --> 19:49:24,331
Mari kita lihat apakah kita tidak bisa\nmenyesuaikan gaya tautan Harvard

20742
19:49:25,812 --> 19:49:30,702
Biarkan saya masuk ke versi Tautan\n2, sekarang, yang terlihat seperti ini.

20743
19:49:30,702 --> 19:49:33,012
Dan sekarang Harvard sangat merah.

20744
19:49:33,971 --> 19:49:36,451
Baiklah, izinkan saya klik kanan\non, klik Inspect

20745
19:49:36,452 --> 19:49:37,952
dan saya bisa mulai melihat-lihat.

20746
19:49:37,952 --> 19:49:40,381
Sepertinya HTML saya\nsama sekali tidak penting.

20747
19:49:40,381 --> 19:49:43,952
Ini hanya HTML yang sangat sederhana,\nanchor tag dengan HREF.

20748
19:49:46,629 --> 19:49:48,461
Dan kita dapat melihatnya\nin dalam dua cara berbeda.

20749
19:49:48,461 --> 19:49:51,422
Kami benar-benar dapat melihat\ngayanya, isinya di sini

20750
19:49:51,422 --> 19:49:55,472
atau kita dapat melihat\nversi cantik Chrome, di sini.

20751
19:49:55,471 --> 19:49:59,521
Ini terlihat seperti style\nsheet saya, di tag gaya

20752
19:49:59,521 --> 19:50:04,001
telah berubah warna menjadi merah, dan\n

20753
19:50:04,001 --> 19:50:06,121
tapi itu adalah properti CSS lain, tidak ada.

20754
19:50:06,122 --> 19:50:08,911
Perhatikan, jika saya mematikannya\n, tautan di internet

20755
19:50:08,911 --> 19:50:10,831
digarisbawahi secara\ndifault, yang cenderung demikian

20756
19:50:10,831 --> 19:50:13,591
baik untuk keakraban, untuk\nvisibilitas, untuk aksesibilitas.

20757
19:50:13,592 --> 19:50:18,152
Tapi, kalau sudah jelas sekali apa itu teks dan apa itu link

20758
19:50:18,152 --> 19:50:21,062
mungkin Anda mengubah text\ndecoration menjadi none.

20759
19:50:21,062 --> 19:50:25,142
Tapi mungkin, tonton ini, mungkin\ntautannya muncul, salurannya muncul kembali

20760
19:50:26,611 --> 19:50:29,161
Baiklah, mari kita lihat bagaimana\nsaya melakukan ini dengan penuh gaya.

20761
19:50:29,161 --> 19:50:34,111
Perhatikan bahwa saya memiliki stilisasi, dan saya\n

20762
19:50:34,111 --> 19:50:36,572
di sini, seperti yang cenderung menjadi konvensi dalam CSS.

20763
19:50:36,572 --> 19:50:38,581
Warnanya merah, hiasan teks tidak ada.

20764
19:50:38,581 --> 19:50:42,961
Namun, setiap kali tag\anchor diarahkan

20765
19:50:42,961 --> 19:50:47,881
Anda dapat mengubah dekorasi teks\n

20766
19:50:47,881 --> 19:50:51,251
Jadi, sekali lagi, hanya sedikit cara bermain\n

20767
19:50:51,251 --> 19:50:52,831
setelah Anda memahami\nitu, sungguh, ada

20768
19:50:52,831 --> 19:50:54,091
hanya jenis penyeleksi yang berbeda.

20769
19:50:54,092 --> 19:50:56,131
Dan Anda mungkin harus mengingatkan\n

20770
19:50:57,361 --> 19:51:02,551
Namun ini hanyalah cara lain untuk melakukan pelingkupan\n

20771
19:51:02,551 --> 19:51:06,451
Mari kita lihat versi 3 ini\n

20772
19:51:06,452 --> 19:51:11,702
Jika saya membuka Link3.html, mungkin saya\ningin link Harvard berwarna merah

20773
19:51:14,471 --> 19:51:17,011
Baiklah, klik kanan,\ndan klik Inspect.

20774
19:51:17,012 --> 19:51:21,872
Dan di sini kita mungkin memiliki dua tautan,\ndengan beberapa teknik

20775
19:51:21,872 --> 19:51:24,631
hanya untuk menekankan sekali lagi, Anda bisa\n

20776
19:51:24,631 --> 19:51:30,061
Saya memberikan tautan Harvard saya ID\n

20777
19:51:30,062 --> 19:51:34,802
Di CSS saya, jika kita pergi ke bagian atas\nhalaman, saya kemudian melakukan ini.

20778
19:51:34,801 --> 19:51:37,441
Tag dengan ID Harvard, alias.

20779
19:51:37,441 --> 19:51:41,671


20780
19:51:41,672 --> 19:51:45,572
lalu tag jangkar mana pun tidak boleh\nmemiliki hiasan teks

20781
19:51:45,572 --> 19:51:48,721
kecuali Anda mengarahkan kursor ke atasnya, pada saat\n

20782
19:51:48,721 --> 19:51:52,231
Jadi, jika saya mengarahkan kursor ke Harvard,\itu digarisbawahi merah, Yale

20783
19:51:53,262 --> 19:51:56,262
Jika saya ingin menghilangkan ID tersebut, saya\n

20784
19:51:57,542 --> 19:52:00,601
Efeknya sama, tapi perhatikan,\nSaya sudah menghapus ID-nya sekarang.

20785
19:52:00,601 --> 19:52:02,281
Bagaimana lagi saya bisa mengekspresikan diri?

20786
19:52:02,282 --> 19:52:03,992
Baiklah, mari kita lihat CSSnya di sini.

20787
19:52:03,991 --> 19:52:06,512
Tag jangkar tidak memiliki dekorasi\teks secara default

20788
19:52:06,512 --> 19:52:08,051
kecuali Anda melayang di atasnya.

20789
19:52:09,461 --> 19:52:11,881
Inilah yang kami\nsebutkan dalam daftar kami di sini

20790
19:52:11,881 --> 19:52:16,801
pemilih atribut, tempat Anda\nmemilih tag menggunakan notasi CSS

20791
19:52:18,372 --> 19:52:21,692
Jadi maksudnya, lanjutkan\ndtemukan tag jangkar apa pun

20792
19:52:21,691 --> 19:52:26,341
nilai HREF siapa yang kebetulan\sama dengan URL ini, dan menjadikannya merah.

20793
19:52:26,342 --> 19:52:28,327
Lakukan hal yang sama untuk Yale, dan buatlah menjadi biru.

20794
19:52:28,327 --> 19:52:31,452
Sekarang, ini mungkin tidak ideal, karena\n

20795
19:52:31,452 --> 19:52:33,601
tanda sama dengan ini tidak\nberfungsi, karena jika berhasil

20796
19:52:33,601 --> 19:52:37,202
Harvard yang berbeda atau Yale yang berbeda\n

20797
19:52:37,202 --> 19:52:40,412
Jadi izinkan saya melihat versi\n5 di sini, dari Link.html.

20798
19:52:40,411 --> 19:52:43,951
Lihat gaya ini, dan saya\ndilakukan ini sedikit lebih cerdas.

20799
19:52:44,941 --> 19:52:46,951
Dan, sekali lagi, hal\nyang Anda cari.

20800
19:52:46,952 --> 19:52:54,542
Bintang sama artinya, ubah jangkar apa pun\n

20801
19:52:54,542 --> 19:52:59,551
Harvard.edu menjadi merah, dan lakukan hal yang sama\n

20802
19:52:59,551 --> 19:53:01,141
Jadi bintang di sini berkonotasi dengan wildcard.

20803
19:53:01,142 --> 19:53:04,652
Jadi telusuri Harvard.edu atau\nYale.edu di mana saja di HREF

20804
19:53:04,652 --> 19:53:07,652
dan jika ada, warnai tautannya.

20805
19:53:07,652 --> 19:53:11,732
Dan, sekali lagi, kita bisa melakukan ini semua\n

20806
19:53:11,732 --> 19:53:15,012
untuk benar-benar mencapai hal yang sama\n

20807
19:53:15,012 --> 19:53:17,115
Dan seiring proyek\nsemakin besar dan besar

20808
19:53:17,115 --> 19:53:19,032
Anda hanya perlu mengambil\nlebih banyak keputusan untuk diambil.

20809
19:53:19,032 --> 19:53:21,752
Jadi Anda memiliki\nkonvensi tertentu yang mulai Anda adopsi.

20810
19:53:21,751 --> 19:53:25,171
Dan, kalau boleh,\nAnda sudah mendapatkan pendahuluannya

20811
19:53:25,172 --> 19:53:28,142
dari apa yang pada akhirnya disebut\nkerangka kerja.

20812
19:53:28,142 --> 19:53:30,512
Jika Anda seorang\npengembang web penuh waktu, atau memang demikian

20813
19:53:30,512 --> 19:53:33,889
bekerja di perusahaan yang melakukan hal yang sama,\n

20814
19:53:34,682 --> 19:53:38,372
Misalnya, perusahaan mungkin berkata,\n

20815
19:53:38,372 --> 19:53:41,222
Atau selalu gunakan atribut\npemilih, atau jangan gunakan ini.

20816
19:53:41,221 --> 19:53:44,221
Dan belum tentu\namun kejam seperti itu.

20817
19:53:44,221 --> 19:53:46,471
Namun mereka mungkin memiliki\nsemacam panduan gaya.

20818
19:53:46,471 --> 19:53:49,441
Namun, apa yang dilakukan banyak orang, dan\nbanyak perusahaan saat ini

20819
19:53:49,441 --> 19:53:53,402
apakah mereka tidak membuat semua\nproperti CSS mereka sendiri.

20820
19:53:53,402 --> 19:53:57,241
Mereka memulai dengan sesuatu yang baru,\n

20821
19:53:57,241 --> 19:54:00,781
kerangka sumber, yang hanya memberikan\n

20822
19:54:00,782 --> 19:54:04,172
gratis, hanya dengan menggunakan\na perpustakaan pihak ketiga.

20823
19:54:04,172 --> 19:54:05,912
Dan salah satu yang paling\npopuler saat ini

20824
19:54:05,911 --> 19:54:07,861
adalah sesuatu yang disebut\nBootstrap, yang digunakan CS50

20825
19:54:07,861 --> 19:54:11,161
di semua situs webnya,\njuga sangat populer di industri.

20826
19:54:11,161 --> 19:54:17,161
Ada di getbootstrap.com, dan ini\n

20827
19:54:17,161 --> 19:54:20,611
situs web yang mendokumentasikan\nperpustakaan yang mereka tawarkan.

20828
19:54:20,611 --> 19:54:24,751
Dan ada banyak sekali dokumentasi di sini,\n

20829
19:54:26,521 --> 19:54:30,122
Itu hanya memberi Anda, di luar kotak, CSS yang Anda gunakan

20830
19:54:31,322 --> 19:54:33,392
Jika Anda pernah memperhatikan\non situs web CS50

20831
19:54:33,392 --> 19:54:36,002
peringatan kecil berwarna-warni di\nbagian atas halaman, atau hubungi

20832
19:54:36,001 --> 19:54:37,861
keluar, untuk menarik perhatian Anda pada sesuatu.

20833
19:54:38,851 --> 19:54:41,491
Ini mungkin berupa paragraf\ntag atau tag div

20834
19:54:41,491 --> 19:54:43,111
dan mungkin kami mengubah warna font.

20835
19:54:43,111 --> 19:54:44,731
Kami mengubah warna latar belakang.

20836
19:54:44,732 --> 19:54:47,282
Atau ada banyak hal yang\ndapat kami lakukan dari awal

20837
19:54:47,282 --> 19:54:49,747
tapi, tahukah Anda,\nmengapa kami harus melakukan inovasi ulang

20838
19:54:49,747 --> 19:54:51,372
roda jika kita bisa menggunakan Bootstrap saja.

20839
19:54:51,372 --> 19:54:53,252
Jadi, misalnya, izinkan\nsaya gulir ke bawah.

20840
19:54:53,251 --> 19:54:57,851
Jika Anda pernah melihatnya di situs web CS50\n

20841
19:54:57,851 --> 19:55:00,542
izinkan saya memperbesar ini.

20842
19:55:00,542 --> 19:55:03,271
Kami hanya menggunakan HTML seperti ini.

20843
19:55:03,271 --> 19:55:06,241
Kami menggunakan tag div, yang,\nagain, merupakan divisi yang tidak terlihat

20844
19:55:06,241 --> 19:55:07,812
wilayah persegi panjang pada halaman.

20845
19:55:07,812 --> 19:55:12,812
Namun kami menggunakan kelas yang disebut alert\n

20846
19:55:12,812 --> 19:55:17,461
Itu adalah kelas-kelas yang diciptakan oleh\norang-orang di Bootstrap.

20847
19:55:17,461 --> 19:55:19,982
Mereka mengaitkan\nwarna teks dan latar belakang tertentu

20848
19:55:19,982 --> 19:55:23,042
warna, bantalan, dan margin\ndan seperti estetika lainnya

20849
19:55:23,042 --> 19:55:25,411
jadi yang harus kita lakukan\nis menggunakan kelas-kelas itu.

20850
19:55:25,411 --> 19:55:28,441
Peran sama dengan kewaspadaan, hanya memperjelas\n

20851
19:55:28,441 --> 19:55:30,512
adalah sebuah peringatan, yang mungkin harus\ndiucapkan

20852
19:55:30,512 --> 19:55:33,601
dan apa pun yang ada di antara\ntag pembuka dan tag penutup

20853
19:55:33,601 --> 19:55:35,312
itulah yang akan dilihat manusia.

20854
19:55:35,312 --> 19:55:37,262
Bagaimana Anda menggunakan sesuatu seperti Bootstrap?

20855
19:55:37,262 --> 19:55:39,032
Nah, Anda tinggal membaca dokumentasinya.

20856
19:55:39,032 --> 19:55:44,272
Di bagian Memulai, ada\n

20857
19:55:45,232 --> 19:55:49,312
Jadi di Table.html, kami memiliki kode seperti ini.

20858
19:55:49,312 --> 19:55:52,182
Izinkan saya membaca\ndodokumentasi Bootstrap dengan sangat cepat.

20859
19:55:55,542 --> 19:55:57,551
Saya akan menempatkan ini\nindi bagian atas halaman saya.

20860
19:55:57,551 --> 19:55:59,981
Dan itu cukup panjang, tapi\nperhatikan, itu adalah tag tautan

20861
19:55:59,982 --> 19:56:03,851
yang saya gunakan sebelumnya untuk\file CSS saya yang sekarang, yang HREF-nya

20862
19:56:03,851 --> 19:56:06,491
apakah tautan CDN ini, jaringan pengiriman konten\n, itu

20863
19:56:06,491 --> 19:56:09,732
mengacu pada versi tertentu\n

20864
19:56:09,732 --> 19:56:13,752
Dan file yang saya sertakan\nis bernama Bootstrap.min.css.

20865
19:56:13,751 --> 19:56:17,291
Ini adalah file aktual yang\ndapat saya kunjungi dengan browser saya.

20866
19:56:17,292 --> 19:56:20,622
Jika saya membukanya di tab\nterpisah, ini adalah CSSnya

20867
19:56:20,622 --> 19:56:23,532
yang telah disediakan Bootstrap\ntersedia secara gratis untuk kami.

20868
19:56:25,221 --> 19:56:27,221
Itu karena sudah\ndiminimalkan, hanya saja tidak

20869
19:56:27,221 --> 19:56:29,771
membuang-buang ruang dengan menambahkan banyak\nruang putih dan komentar.

20870
19:56:29,771 --> 19:56:33,221
Tapi ini berisi banyak sekali,\nratusan, properti CSS

20871
19:56:33,221 --> 19:56:36,851
yang dapat kita gunakan kembali, berkat\nkelas yang mereka ciptakan.

20872
19:56:36,851 --> 19:56:40,285
Jika saya ingin menggunakan beberapa JavaScript\n

20873
19:56:40,285 --> 19:56:41,952
Tapi kita akan kembali lagi ke sana tak lama lagi.

20874
19:56:41,952 --> 19:56:45,522
Izinkan saya sekarang membuat beberapa\nperbaikan pada tabel ini.

20875
19:56:45,521 --> 19:56:48,551
Jika saya masuk ke browser\ndari sebelumnya, ini

20876
19:56:48,551 --> 19:56:51,461
adalah tampilan sebelumnya,\ndi mana nama dan nomornya berada

20877
19:56:51,461 --> 19:56:54,086
tebal, namun berada di tengah, lalu\nCarter dan David berada di sebelah kiri

20878
19:56:54,086 --> 19:56:55,504
dan angkanya ada di sebelah kanan.

20879
19:56:56,202 --> 19:56:59,662
Memang tidak terlalu cantik, tapi akan menyenangkan\n

20880
19:56:59,661 --> 19:57:03,101
Jadi jika kita menambahkan Bootstrap ke dalamnya,\nperhatikan ada satu hal yang terjadi terlebih dahulu

20881
19:57:04,872 --> 19:57:08,262
Gaya\ndifault Chrome tidak lagi digunakan.

20882
19:57:08,262 --> 19:57:10,482
Sekarang gaya\ndefault Bootstrap digunakan, yang mana

20883
19:57:10,482 --> 19:57:14,112
adalah cara untuk menegakkan kesamaan\nadi Chrome, Edge, Firefox

20884
19:57:15,461 --> 19:57:18,042
Perhatikan bahwa font tersebut berubah dari font\nserif menjadi sans serif

20885
19:57:18,042 --> 19:57:19,792
font, dan sesuatu yang lebih bersih seperti ini.

20886
19:57:19,792 --> 19:57:24,221
Tampilannya masih jelek, tapi biarkan\n

20887
19:57:24,221 --> 19:57:30,311
Biarkan saya membuka\ntab kontennya, untuk tabel.

20888
19:57:30,312 --> 19:57:32,532
Dan jika saya\nmulai membaca sepintas ini

20889
19:57:32,532 --> 19:57:34,392
ini beberapa tabel\nyang bagus, bukan?

20890
19:57:34,392 --> 19:57:38,442
Misalnya, ada garis bawah\ndi sini, font lebih tebal.

20891
19:57:39,672 --> 19:57:41,790
Kalau aku teruskan, ooh,\nitu juga jadi cantik

20892
19:57:41,789 --> 19:57:44,831
jika saya ingin memiliki meja berwarna-warni,\n

20893
19:57:44,831 --> 19:57:47,981
keluar sendiri jika saya ingin\nmode gelap di sini

20894
19:57:47,982 --> 19:57:51,472
jika saya ingin memiliki\nsorotan bergantian, dan sebagainya.

20895
19:57:51,471 --> 19:57:54,491
Ada begitu banyak gaya yang berbeda\n

20896
19:57:54,491 --> 19:57:58,211
Tapi saya ingin membuat buku telepon,\n

20897
19:57:58,211 --> 19:58:02,982
Jadi jika saya membaca dokumentasinya dengan cermat,\n

20898
19:58:02,982 --> 19:58:06,881
adalah menambahkan tabel\nkelas Bootstrap ke tag tabel saya

20899
19:58:06,881 --> 19:58:11,592
dan menonton dengan memuat ulang sederhana, apa\n

20900
19:58:13,331 --> 19:58:16,391
Mungkin bukan itu yang Anda inginkan, tapi,\n

20901
19:58:16,392 --> 19:58:18,262
Aku hanya mempercantik semuanya.

20902
19:58:18,262 --> 19:58:21,112
Jadi inilah nilai\n

20903
19:58:21,111 --> 19:58:27,311
Ini memungkinkan Anda untuk\nmenciptakan lebih indah, lebih banyak lagi

20904
19:58:27,312 --> 19:58:32,232
situs web yang ramah pengguna daripada Anda\n

20905
19:58:34,211 --> 19:58:37,842
Faktanya, mari kita mengulangi satu\nkali lagi pada satu contoh lainnya

20906
19:58:37,842 --> 19:58:39,862
sebelum kami memperkenalkan sedikit kode itu.

20907
19:58:39,861 --> 19:58:44,691
Izinkan saya membuka\nup Search.html dari sebelumnya

20908
19:58:44,691 --> 19:58:49,331
yang, ingat, terlihat seperti ini,\ndan Search.html di browser saya

20909
19:58:49,331 --> 19:58:52,511
adalah pencarian Google yang sangat sederhana ini.

20910
19:58:52,512 --> 19:58:56,801
Dan misalkan saya ingin menemukan kembali\nUI Google.com sedikit lagi.

20911
19:58:56,801 --> 19:58:59,711
Berikut tangkapan layar\nGoogle.com pada hari-hari biasa.

20912
19:58:59,711 --> 19:59:03,581
Ada tautan tentang, toko\n

20913
19:59:05,360 --> 19:59:07,152
Ini tidak muncul dengan baik\di luar layar di sini

20914
19:59:07,152 --> 19:59:09,851
tapi ada kotak teks besar di\ntengahnya, dan ada dua tombol

20915
19:59:09,851 --> 19:59:12,131
Pencarian Google, dan saya merasa beruntung.

20916
19:59:12,131 --> 19:59:15,851
Baiklah, bolehkah saya\nmengimplementasikan UI ini sendiri

20917
19:59:15,851 --> 19:59:19,872
menggunakan beberapa HTML, beberapa CSS,\ndan mungkin bantuan Bootstrap

20918
19:59:19,872 --> 19:59:23,110
supaya aku tidak perlu mencari tahu\n

20919
19:59:23,110 --> 19:59:24,402
Nah, inilah titik awal saya.

20920
19:59:24,402 --> 19:59:29,631
Di Search.html, mari buka dan tambahkan\n

20921
19:59:29,631 --> 19:59:34,342
sehingga kami memiliki akses ke semua\n

20922
19:59:34,342 --> 19:59:37,732
Biarkan saya melanjutkan dan\nmencari tahu cara melakukan ini.

20923
19:59:37,732 --> 19:59:43,392
Seperti yang dimiliki situs Stanford\n

20924
19:59:43,392 --> 19:59:46,362
tapi mereka mengubahnya dari menjadi\n

20925
19:59:46,361 --> 19:59:48,322
Saya yakin saya bisa melakukan sesuatu\nseperti ini sendiri.

20926
19:59:48,322 --> 19:59:50,562
Jadi izinkan saya masuk ke badan\nohalaman saya dan, pertama

20927
19:59:50,562 --> 19:59:54,851
berdasarkan dokumentasi Bootstrap,\nizinkan saya menambahkan div bernama

20928
19:59:54,851 --> 19:59:57,641
div dengan kelas cairan kontainer.

20929
19:59:57,642 --> 19:59:59,832
Cairan kontainer\nhanyalah kelas yang hadir

20930
19:59:59,831 --> 20:00:03,491
dengan Bootstrap yang mengatakan, jadikan\nhalaman web Anda lancar

20931
20:00:04,961 --> 20:00:07,032
Jadi dengan begitu ukurannya akan diubah dengan baik.

20932
20:00:07,032 --> 20:00:09,392
Saya akan melanjutkan dan\nmemperbaiki lekukan saya di sini.

20933
20:00:09,392 --> 20:00:11,142
Jika Anda belum menemukan\nini, jika Anda

20934
20:00:11,142 --> 20:00:13,032
sorot beberapa baris\nin VS Code, Anda bisa

20935
20:00:13,032 --> 20:00:15,082
tekan Tab dan indentasi semuanya sekaligus.

20936
20:00:15,081 --> 20:00:17,451
Jadi sekarang, saya memiliki semua\nitu di dalam div ini.

20937
20:00:17,452 --> 20:00:23,052
Sekarang, seperti di situs Stanford, mari\n

20938
20:00:23,051 --> 20:00:32,561
LI, dipanggil dengan kelas item NAV,\n

20939
20:00:32,562 --> 20:00:42,702
izinkan saya melanjutkan dan berkata, A\nHREF=https://about.google

20940
20:00:42,702 --> 20:00:44,972
yang merupakan URL asli\nolaman tentang Google.

20941
20:00:44,971 --> 20:00:46,771
Dan saya akan meletakkan teks tentang di sana.

20942
20:00:46,771 --> 20:00:50,911
Lalu saya akan menutup tag LI saya\n

20943
20:00:50,911 --> 20:00:52,381
karena saya menggunakan Bootstrap.

20944
20:00:52,381 --> 20:00:54,391
Dokumentasi Bootstrap,\njika saya membacanya dengan cermat

20945
20:00:54,392 --> 20:00:59,642
meminta untuk menambahkan kelas ke tautan Anda,\n

20946
20:00:59,642 --> 20:01:04,712
untuk menjadikannya gelap, seperti hitam atau gelap\n

20947
20:01:04,711 --> 20:01:08,551
Baiklah, jadi saya rasa sekarang saya\nmemiliki tautan tentang

20948
20:01:08,551 --> 20:01:10,661
di bagian navigasi layar saya.

20949
20:01:10,661 --> 20:01:14,161
Biarkan saya melanjutkan\nsimpan ini dan muat ulang.

20950
20:01:14,161 --> 20:01:16,351
Baiklah, jadi bukan itu yang kuinginkan.

20951
20:01:16,351 --> 20:01:19,741
Ini masih berupa daftar poin, jadi\nSaya harus menggantinya.

20952
20:01:19,741 --> 20:01:22,831
Izinkan saya membaca\ndodokumentasi Bootstrap sedikit lebih jelas.

20953
20:01:22,831 --> 20:01:25,021
Dan izinkan saya berpura-pura melakukan\nitu, demi waktu.

20954
20:01:25,021 --> 20:01:28,682
Jika saya masuk ke bagian konten, oops,\njika saya masuk ke bagian komponen

20955
20:01:28,682 --> 20:01:32,801
dan saya membuka Navs dan\nTabs, singkat cerita

20956
20:01:32,801 --> 20:01:35,701
jika Anda ingin membuat menu cantik\n

20957
20:01:35,702 --> 20:01:37,802
dari kiri ke\nkanan, seperti Stanford

20958
20:01:37,801 --> 20:01:40,001
Saya pada dasarnya membutuhkan HTML seperti ini.

20959
20:01:40,001 --> 20:01:42,271
Dan ini tidak kentara, tapi\nSaya meninggalkan kelas ini.

20960
20:01:42,271 --> 20:01:45,902
Saya seharusnya menambahkan\nkelas bernama NAV di UL saya.

20961
20:01:46,831 --> 20:01:49,322
Izinkan saya masuk ke sini dan\nkatakan tambahkan kelas yang setara

20962
20:01:49,322 --> 20:01:53,702
NAV, dan sekali lagi, item kelas\nNAV ini, Bootstrap menyuruh saya melakukannya

20963
20:01:53,702 --> 20:01:56,461
Teks tautan NAV gelap,\nBootstrap menyuruh saya melakukannya.

20964
20:01:56,461 --> 20:02:02,521
Biarkan saya kembali ke halaman saya di sini,\n

20965
20:02:02,521 --> 20:02:05,161
Tapi setidaknya link Tentang ada\di pojok kiri atas

20966
20:02:05,161 --> 20:02:07,891
seperti seharusnya\di Google.com yang sebenarnya.

20967
20:02:07,892 --> 20:02:10,142
Sekarang izinkan saya menyiapkan beberapa\ntautan lagi dengan sangat cepat.

20968
20:02:10,142 --> 20:02:13,472
Biarkan saya pergi dan melakukan sedikit\nsalin/tempel, meskipun saya yakin minggu depan

20969
20:02:13,471 --> 20:02:15,811
kita dapat menghindari salin/tempel seperti ini.

20970
20:02:15,812 --> 20:02:20,252
Izinkan saya mengubah tautan ini\nmenjadi Store.google.com.

20971
20:02:22,471 --> 20:02:26,941
Biarkan saya melanjutkan dan membuat\nan lain di sini untuk Gmail.

20972
20:02:26,941 --> 20:02:31,682
Jadi yang ini akan dilaksanakan\nsecara resmi, bagaimana kalau

20973
20:02:31,682 --> 20:02:35,642
secara teknis itu www.google.com/gmail.

20974
20:02:37,172 --> 20:02:39,332
Dan izinkan saya mengambil satu lagi ini.

20975
20:02:39,331 --> 20:02:42,691
Dan untuk Gambar Google, dan saya\nakan menempelkan ini, ups

20976
20:02:44,042 --> 20:02:45,631
Aku akan menaruhnya di sini juga.

20977
20:02:45,631 --> 20:02:53,251
Ini akan berupa gambar, dan\nURL tersebut adalah IMG.hp, itulah URL-nya.

20978
20:02:53,251 --> 20:02:56,281
Baiklah, izinkan saya melanjutkan\ndan memuat ulang halaman browser.

20979
20:02:56,282 --> 20:02:57,842
Sekarang sudah datang, kan?

20980
20:02:57,842 --> 20:02:59,491
Tentang, simpan, Gmail, gambar.

20981
20:02:59,491 --> 20:03:01,057
Bukan itu yang kuinginkan.

20982
20:03:01,057 --> 20:03:03,182
Jadi saya harus membaca\ndodokumentasi untuk mengetahuinya

20983
20:03:03,182 --> 20:03:07,395
bagaimana mungkin menyenggol salah satu dari ini\n

20984
20:03:07,395 --> 20:03:09,062
Dan ada beberapa cara untuk melakukan ini.

20985
20:03:09,062 --> 20:03:13,351
Namun salah satu caranya adalah jika saya ingin Gmail dipindahkan\n

20986
20:03:13,351 --> 20:03:23,161
jika tidak, saya dapat mengatakan bahwa tambahkan sedikit margin ke\n

20987
20:03:23,161 --> 20:03:27,721
Ini ada dalam dokumentasi Bootstrap, a\n

20988
20:03:27,721 --> 20:03:29,941
secara otomatis\nsmemisahkan semuanya.

20989
20:03:29,941 --> 20:03:34,441
Dan sekarang, jika saya memuat ulang halaman\n

20990
20:03:35,461 --> 20:03:37,336
Baiklah, jadi sekarang kita\nselanjutnya.

20991
20:03:37,336 --> 20:03:40,422
Biarkan saya melanjutkan dan menambahkan\ntombol biru besar untuk masuk.

20992
20:03:40,422 --> 20:03:45,422
Jadi, dengan masuk, biarkan saya pergi\n

20993
20:03:45,422 --> 20:03:49,202
jadi mari lanjutkan dan lakukan satu\nLI lagi, kelas sama dengan item NAV.

20994
20:03:49,202 --> 20:03:52,442
Lalu, di dalam tag LI\nini, apa yang harus saya lakukan?

20995
20:03:52,441 --> 20:03:58,111
Ternyata ada kelas yang bisa berubah\n

20996
20:03:58,111 --> 20:04:01,411
untuk tombol, lalu tombol\nutama, menjadikannya biru

20997
20:04:01,411 --> 20:04:04,554
HREF untuk yang ini\nmenjadi https://accounts.goo

20998
20:04:04,554 --> 20:04:08,491
gle.com/service/login, yaitu\n

20999
20:04:09,631 --> 20:04:11,941
Peran tautan ini adalah sebagai tombol.

21000
20:04:11,941 --> 20:04:15,241
Lalu masuk,\nakan ada teks di dalamnya.

21001
20:04:15,241 --> 20:04:18,744
Jika sekarang saya memuat ulang halamannya, sekarang\nkita semakin dekat

21002
20:04:18,744 --> 20:04:20,161
meskipun terlihat sedikit bodoh.

21003
20:04:20,161 --> 20:04:22,921
Perhatikan bahwa proses masuk berada di\n pojok kanan atas

21004
20:04:22,922 --> 20:04:26,492
padahal google.com asli punya\n

21005
20:04:26,491 --> 20:04:28,021
Oke, itu juga perbaikan yang mudah.

21006
20:04:28,021 --> 20:04:30,061
Biarkan saya kembali ke HTML saya di sini.

21007
20:04:31,849 --> 20:04:33,182
Ini juga merupakan masalah Bootstrap.

21008
20:04:33,182 --> 20:04:35,702
Mereka memiliki kelas yang disebut m-sesuatu.

21009
20:04:35,702 --> 20:04:38,461
Sesuatu itu adalah\nangka dari 1 hingga 5

21010
20:04:38,461 --> 20:04:41,982
Saya yakin, hal ini hanya menambah\nsejumlah ruang kosong.

21011
20:04:41,982 --> 20:04:45,672
Jadi kalau saya muat ulang sekarang, oke,\ni sedikit lebih cantik.

21012
20:04:47,191 --> 20:04:50,671
Sekadar menunjukkan bagaimana saya dapat\nmembawa pulang ini, izinkan saya melanjutkan

21013
20:04:50,672 --> 20:04:55,232
dan buka versi\nbuatan saya ini, dimana

21014
20:04:55,232 --> 20:04:58,862
Saya menambahkan ini beberapa perkembangan terakhir.

21015
20:04:58,861 --> 20:05:02,281
Jika saya membuka Search2.html, saya\nmemutuskan untuk mengganti logonya

21016
20:05:02,282 --> 20:05:05,582
hanya dengan ini dari seekor\nkucing, dan perhatikan bahwa I

21017
20:05:05,581 --> 20:05:07,664
diimplementasikan kembali pada dasarnya google.com.

21018
20:05:07,664 --> 20:05:10,081
Ini kotak teks, ini dua\ntombol, meskipun keduanya ada

21019
20:05:10,081 --> 20:05:11,641
sedikit pudar di layar.

21020
20:05:11,642 --> 20:05:14,882
Saya bahkan menemukan cara mendapatkan titik\n

21021
20:05:14,881 --> 20:05:18,421
Dan jika kami melihat sumbernya, Anda dapat melihat\n

21022
20:05:18,422 --> 20:05:25,322
Jika saya membuka alat pengembang, dan saya\n

21023
20:05:25,322 --> 20:05:31,081
dan saya masuk ke div ini, Anda akan melihat\n

21024
20:05:31,081 --> 20:05:35,531
Dan saya menambahkan beberapa kelas di sana untuk membuat\n

21025
20:05:35,532 --> 20:05:38,652
Kalau saya masuk ke tag form, ini\nis tag form yang sama seperti sebelumnya.

21026
20:05:38,652 --> 20:05:40,952
Namun perhatikan, kali ini saya menggunakan\ntag tombol

21027
20:05:40,952 --> 20:05:43,672
dengan kelas tombol dan lampu tombol.

21028
20:05:43,672 --> 20:05:45,961
Lalu saya menatanya\ndengan cara tertentu.

21029
20:05:45,961 --> 20:05:49,221
Dan pada hasil akhirnya, jika saya mau\n

21030
20:05:49,221 --> 20:05:51,981
dan klik pencarian Google,\nvoila, saya sudah menerapkannya

21031
20:05:51,982 --> 20:05:54,982
sesuatu yang cukup\ndarn mirip dengan Google.com

21032
20:05:54,982 --> 20:05:57,952
bahkan tanpa menyentuh CSS mentah sendiri.

21033
20:05:57,952 --> 20:06:00,502
Dan inilah nilai\nkemudian, sebuah kerangka kerja.

21034
20:06:00,501 --> 20:06:02,811
Anda dapat langsung mulai menggunakan\nfungsi yang tersedia

21035
20:06:02,812 --> 20:06:04,622
yang dibuat orang lain untuk Anda.

21036
20:06:04,622 --> 20:06:07,101
Namun jika Anda ingin melakukan\nperbaikan, Anda tidak perlu melakukannya

21037
20:06:07,101 --> 20:06:09,831
seperti warna biru yang\nBootstrap pilih, atau tombol abu-abu

21038
20:06:09,831 --> 20:06:11,748
atau Anda ingin membuat\nlebih melengkung, itu saja

21039
20:06:11,748 --> 20:06:14,122
tempat Anda dapat membuat\nfile CSS Anda sendiri, dan melakukannya

21040
20:06:14,122 --> 20:06:16,372
mil terakhir, menyelesaikan\nhal-hal yang telah diperbaiki.

21041
20:06:16,372 --> 20:06:17,961
Dan itu cenderung menjadi praktik terbaik.

21042
20:06:17,961 --> 20:06:21,051
Berdirilah di bahu orang lain sebagai\n

21043
20:06:21,051 --> 20:06:23,551
Lalu jika Anda benar-benar tidak\nmenyukai apa yang dilakukan perpustakaan

21044
20:06:23,551 --> 20:06:26,301
lalu gunakan keahlian dan\npemahaman Anda tentang HTML dan CSS

21045
20:06:26,301 --> 20:06:29,551
untuk memperbaiki keadaan sedikit lebih jauh.

21046
20:06:29,551 --> 20:06:33,262
Namun tetap saja, setelah semua itu, semuanya\n

21047
20:06:33,262 --> 20:06:35,752
masih statis, selain Google

21048
20:06:35,751 --> 20:06:37,671
yang mencari di Google.com asli.

21049
20:06:37,672 --> 20:06:39,532
Mari kita istirahat 5\nmenit terakhir dan kita akan melakukannya

21050
20:06:39,532 --> 20:06:43,282
memberi Anda gambaran tentang apa yang bisa kami lakukan selanjutnya\n

21051
20:06:44,822 --> 20:06:48,381
Baiklah, jadi menurutku\tidak adil untuk mengatakan, ya

21052
20:06:48,381 --> 20:06:50,819
akan melihat bahasa terakhir kami.

21053
20:06:50,820 --> 20:06:52,612
Minggu depan dan\nproyek akhir sudah selesai

21054
20:06:52,611 --> 20:06:55,101
akan membahas tentang\nmensintesis begitu banyak hal tersebut.

21055
20:06:55,101 --> 20:06:58,042
Untungnya, bahasa yang disebut\nJavaScript ini cukup mirip

21056
20:06:58,042 --> 20:07:00,229
secara sintaksis ke C dan Python.

21057
20:07:00,229 --> 20:07:03,021
Dan tentu saja, jika Anda bisa membayangkan\n

21058
20:07:03,021 --> 20:07:05,391
Anda mungkin dapat melakukannya dalam\nbentuk tertentu dalam JavaScript.

21059
20:07:05,392 --> 20:07:07,742
Namun, perbedaan\nyang paling mendasar saat ini

21060
20:07:07,741 --> 20:07:11,122
adalah ketika Anda telah menulis kode C\ncode dan Python sejauh ini

21061
20:07:11,122 --> 20:07:12,379
Anda telah melakukannya di server.

21062
20:07:12,379 --> 20:07:14,461
Anda telah melakukannya di\nlingkungan jendela terminal.

21063
20:07:14,461 --> 20:07:17,812
Dan ketika Anda menjalankan kodenya, itu\n

21064
20:07:17,812 --> 20:07:20,122
Bedanya sekarang\ndengan JavaScript adalah

21065
20:07:20,122 --> 20:07:23,362
meskipun Anda akan menulis\nit di cloud menggunakan VS Code

21066
20:07:23,361 --> 20:07:27,981
ingat itu, ketika browser mendapatkan\nhalaman yang berisi kode ini

21067
20:07:27,982 --> 20:07:32,012
itu akan mendapatkan salinan HTML,\n

21068
20:07:32,012 --> 20:07:37,012
Jadi JavaScript yang kita lihat saat ini adalah\n

21069
20:07:37,012 --> 20:07:40,732
di Mac, PC, dan\nponsel milik pengguna, bukan di server.

21070
20:07:40,732 --> 20:07:44,062
JavaScript dapat digunakan di server,\n

21071
20:07:44,062 --> 20:07:47,752
Ini merupakan alternatif dari Python atau\n

21072
20:07:47,751 --> 20:07:51,361
Kami menggunakannya saat ini di sisi klien\n, yang merupakan perbedaan utama.

21073
20:07:51,361 --> 20:07:53,932
Jadi di Scratch, ayo\ndo lakukan ini untuk terakhir kalinya.

21074
20:07:53,932 --> 20:07:56,991
Jika Anda ingin membuat variabel\n

21075
20:07:56,991 --> 20:07:59,331
Dalam JavaScript,\nakan terlihat seperti ini.

21076
20:07:59,331 --> 20:08:02,241
Anda tidak menentukan jenisnya,\ntetapi Anda menggunakan kata kunci biarkan

21077
20:08:02,241 --> 20:08:07,581
dan masih ada beberapa lainnya juga, itu\n

21078
20:08:07,581 --> 20:08:11,631
Jika Anda ingin menambah\nvariabel itu satu per satu, Anda menggunakan JavaScript

21079
20:08:11,631 --> 20:08:14,932
bisa mengatakan sesuatu seperti,\npenghitung sama dengan penghitung ditambah 1

21080
20:08:14,932 --> 20:08:17,512
atau Anda dapat melakukannya dengan lebih\nsingkat, dengan plus sama dengan

21081
20:08:17,512 --> 20:08:20,092
atau plus plusnya kembali dalam JavaScript.

21082
20:08:20,092 --> 20:08:23,122
Kini Anda dapat mengucapkan counter\nplus plus titik koma lagi.

21083
20:08:23,122 --> 20:08:26,122
Di Scratch, jika Anda ingin\ndo kondisi seperti ini

21084
20:08:26,122 --> 20:08:30,741
menanyakan apakah x lebih kecil dari y, sepertinya\n

21085
20:08:32,361 --> 20:08:35,691
Tanda kurung kurawal di sini muncul kembali, jika Anda\n

21086
20:08:35,691 --> 20:08:39,951
Namun, secara sintaksis, jumlahnya cukup banyak\n

21087
20:08:39,952 --> 20:08:42,502
dan bahkan untuk itu lain jika lain.

21088
20:08:42,501 --> 20:08:45,621
Tidak seperti Python, ini terdiri dari dua\nkata lagi, jika tidak.

21089
20:08:45,622 --> 20:08:49,347
Benar sekali, seperti C,\ntidak ada yang baru selain itu.

21090
20:08:49,346 --> 20:08:52,221
Jika Anda ingin melakukan sesuatu selamanya\n

21091
20:08:52,221 --> 20:08:55,731
Dalam JavaScript, Anda dapat melakukannya beberapa\n

21092
20:08:57,172 --> 20:09:00,652
Di JavaScript, Boolean\ndigunakan huruf kecil lagi, sama seperti di C.

21093
20:09:02,073 --> 20:09:04,281
Jika Anda ingin melakukan sesuatu\na jumlah yang terbatas

21094
20:09:04,282 --> 20:09:08,042
seperti mengulang tiga kali,\nkelihatannya hampir seperti C juga.

21095
20:09:08,042 --> 20:09:12,452
Satu-satunya perbedaan sebenarnya adalah penggunaan\n

21096
20:09:12,452 --> 20:09:15,142
Dan, sekali lagi, Anda akan menggunakan let untuk\nmembuat string, atau INT

21097
20:09:15,142 --> 20:09:17,362
atau jenis\nvariabel lainnya dalam JavaScript.

21098
20:09:17,361 --> 20:09:21,021
Browser akan mengetahui\ntipe apa yang Anda maksud berdasarkan konteks.

21099
20:09:21,021 --> 20:09:24,232
Di C kita akan mengatakan INT sebagai gantinya.

21100
20:09:24,232 --> 20:09:27,952
Pada akhirnya, bahasa ini, dan itu\n

21101
20:09:27,952 --> 20:09:30,502
Ada banyak\nfitur lain, tetapi secara sintaksis memang demikian

21102
20:09:30,501 --> 20:09:32,841
akan menjadi mudah diakses,\nsecara relatif.

21103
20:09:32,842 --> 20:09:35,572
Kekuatan JavaScript\nberjalan di browser pengguna

21104
20:09:35,572 --> 20:09:39,232
adalah Anda dapat\nmengubah hal ini di memori.

21105
20:09:39,232 --> 20:09:43,432
Bayangkan hampir semua situs web, itu\n

21106
20:09:43,432 --> 20:09:45,771
Biasanya sangat\ninteraktif dan dinamis.

21107
20:09:45,771 --> 20:09:49,581
Jika Anda sedang menggunakan Gmail di\n

21108
20:09:49,581 --> 20:09:52,141
terbuka, dan seseorang mengirimi Anda\nan email secara tiba-tiba

21109
20:09:52,142 --> 20:09:55,402
baris lain muncul di\ninbox Anda, baris lain, baris lain.

21110
20:09:56,721 --> 20:09:58,711
Sejujurnya, ini bisa berupa tabel HTML.

21111
20:09:58,711 --> 20:10:00,741
Mungkin itu sekumpulan\ndiv dari atas ke bawah.

21112
20:10:00,741 --> 20:10:04,072
Namun intinya adalah, Anda tidak\n

21113
20:10:04,072 --> 20:10:06,532
R untuk memuat ulang halaman untuk melihat lebih banyak email.

21114
20:10:06,532 --> 20:10:10,072
Secara otomatis muncul\tidak setiap beberapa detik atau menit.

21115
20:10:11,751 --> 20:10:14,811
Saat Anda mengunjungi Gmail.com,\nAnda tidak hanya mengunduh

21116
20:10:14,812 --> 20:10:18,322
HTML dan CSS dengan\nikotak masuk awal Anda, mungkin.

21117
20:10:18,322 --> 20:10:20,392
Anda sedang mengunduh beberapa\nkode JavaScript, itu

21118
20:10:20,392 --> 20:10:24,592
dirancang untuk terus berkomunikasi setiap\n

21119
20:10:24,592 --> 20:10:28,282
ke server Gmail, dan mereka\nkemudian menggunakan kodenya

21120
20:10:28,282 --> 20:10:31,492
untuk menambahkan elemen lain, elemen\lain, elemen lain

21121
20:10:31,491 --> 20:10:36,771
ke DOM yang ada, objek dokumen\n

21122
20:10:36,771 --> 20:10:40,851
dalam memori yang mewakili HTML,\n

21123
20:10:43,232 --> 20:10:46,101
Jika Anda mengeklik, menyeret, dan menyeret\ndan menyeret, browser Anda tidak melakukannya

21124
20:10:46,101 --> 20:10:49,351
unduh seluruh dunia ke\nMac atau PC Anda secara default.

21125
20:10:49,351 --> 20:10:52,491
Itu hanya mengunduh apa yang ada di\n Anda

21126
20:10:52,491 --> 20:10:55,491
Namun saat Anda mengeklik dan menyeret, itu\n

21127
20:10:55,491 --> 20:10:58,702
beberapa gambar lagi, beberapa\ngambar lagi, seiring Anda terus menyeret, menggunakan

21128
20:10:58,702 --> 20:11:01,312
JavaScript, sekali lagi, di balik layar.

21129
20:11:01,312 --> 20:11:04,672
Jadi mari kita gunakan JavaScript\n

21130
20:11:05,979 --> 20:11:08,271
Kita dapat menempatkan kode\nJavaScript di bagian atas halaman

21131
20:11:08,271 --> 20:11:12,182
di badan laman, atau bahkan\n

21132
20:11:13,131 --> 20:11:17,601
Ini adalah versi baru\nHello.html, saat istirahat

21133
20:11:17,601 --> 20:11:20,781
Saya baru saja menambahkan formulir, karena itu\n

21134
20:11:20,782 --> 20:11:24,472
ucapkan Halo, judul, Halo, isi, katanya,\n

21135
20:11:25,672 --> 20:11:28,672
Saya mempunyai formulir yang saya pinjam\ndari beberapa kode kita sebelumnya

21136
20:11:28,672 --> 20:11:34,882
dan formulir itu memiliki masukan dengan ID\n

21137
20:11:34,881 --> 20:11:36,572
Tapi belum ada kodenya.

21138
20:11:36,572 --> 20:11:39,601
Jadi mari kita tambahkan sedikit\nkode JavaScript sebagai berikut.

21139
20:11:39,601 --> 20:11:43,101
Misalkan, ketika formulir ini\n

21140
20:11:44,282 --> 20:11:47,302
Baiklah, mari kita lakukan dengan\ncara yang agak berantakan terlebih dahulu.

21141
20:11:47,301 --> 20:11:51,351
Saya dapat menambahkan atribut yang disebut\non kirim ke elemen formulir

21142
20:11:51,351 --> 20:11:56,452
dan saya dapat mengatakan saat mengirimkan, hubungi\n

21143
20:11:56,452 --> 20:11:58,552
Sayangnya,\nfungsi ini belum ada.

21144
20:11:59,769 --> 20:12:01,101
Tapi ada detail lain di sini.

21145
20:12:01,101 --> 20:12:04,851
Saat pengguna mengklik kirim, biasanya\n

21146
20:12:04,851 --> 20:12:06,381
Saya tidak ingin melakukan itu hari ini.

21147
20:12:06,381 --> 20:12:10,372
Saya hanya ingin mengirimkan formulir ke\n

21148
20:12:10,372 --> 20:12:13,142
dan cukup cetak ke layar,\nHalo, David, atau sebagainya.

21149
20:12:13,142 --> 20:12:15,862
Jadi saya juga akan melanjutkan\nake depan dan mengatakan, return false.

21150
20:12:15,861 --> 20:12:20,301
Dan ini adalah cara JavaScript untuk memberitahukannya\n

21151
20:12:20,301 --> 20:12:21,831
untuk mengirimkan formulir, kembalikan false.

21152
20:12:21,831 --> 20:12:24,171
Misalnya, tidak, jangan biarkan mereka\nbenarnya mengirimkan formulir.

21153
20:12:24,172 --> 20:12:26,362
Tapi panggil fungsi ini dengan sebutan salam.

21154
20:12:26,361 --> 20:12:30,951
Di bagian atas halaman saya, saya akan menambahkan\n

21155
20:12:30,952 --> 20:12:33,682
secara implisit JavaScript,\ndan tidak memiliki hubungan

21156
20:12:33,682 --> 20:12:37,402
bagi anda yang mengambil APCS dengan\n

21157
20:12:37,402 --> 20:12:41,542
tapi tidak ada hubungannya, saya akan\nmemberi nama fungsi bernama Greet.

21158
20:12:41,542 --> 20:12:44,631
Rupanya dalam JavaScript,\ncara Anda membuat suatu fungsi adalah Anda

21159
20:12:44,631 --> 20:12:47,361
secara harfiah ucapkan kata\nfungsi alih-alih Def.

21160
20:12:47,361 --> 20:12:49,701
Anda tidak menentukan tipe pengembalian.

21161
20:12:49,702 --> 20:12:54,381
Dan dalam fungsi ini, saya dapat melakukan\n

21162
20:12:54,381 --> 20:12:57,801
tanda kutip, bagaimana dengan, Halo, itu.

21163
20:12:57,801 --> 20:13:01,501
Awalnya saya akan membuatnya sederhana,\n

21164
20:13:01,501 --> 20:13:03,031
yang bukan antarmuka pengguna yang baik.

21165
20:13:03,032 --> 20:13:04,407
Ada cara yang lebih baik untuk melakukan ini.

21166
20:13:04,407 --> 20:13:06,382
Tapi kami melakukan sesuatu yang sederhana terlebih dahulu.

21167
20:13:06,381 --> 20:13:09,232
Izinkan saya melanjutkan dan\nmemuat halaman ini lagi.

21168
20:13:09,232 --> 20:13:12,562
Tampilannya masih sederhana seperti sebelumnya,\nhanya dengan kotak teks sederhana.

21169
20:13:12,562 --> 20:13:13,942
Saya akan memperbesarnya untuk membuatnya lebih besar.

21170
20:13:13,941 --> 20:13:15,471
Saya akan mengetikkan nama saya,\ntapi menurut saya akan berhasil

21171
20:13:15,471 --> 20:13:17,241
untuk diabaikan ketika saya mengklik Kirim.

21172
20:13:18,831 --> 20:13:21,111
Dan ini, sekali lagi, ini merupakan antarmuka pengguna yang buruk.

21173
20:13:21,111 --> 20:13:24,381
Secara harfiah menyatakan seluruh\nruang kode URL laman web

21174
20:13:25,581 --> 20:13:29,456
Ini sebenarnya hanya dimaksudkan untuk hal sederhana\n

21175
20:13:29,456 --> 20:13:31,581
Baiklah, mari kita\nmengucapkan Halo, David, entah bagaimana caranya.

21176
20:13:33,032 --> 20:13:37,222
Nah, jika elemen di\nhalaman ini saya beri ID unik

21177
20:13:37,221 --> 20:13:41,331
alangkah baiknya jika, seperti di CSS, saya\n

21178
20:13:45,572 --> 20:13:49,461
Biarkan saya menyimpan, dalam sebuah variabel\ndisebut nama, hasilnya

21179
20:13:49,461 --> 20:13:54,381
untuk memanggil fungsi khusus\nyang disebut document.queryselector.

21180
20:13:54,381 --> 20:13:57,682
Fungsi pemilih kueri ini\nis versi JavaScript

21181
20:13:57,682 --> 20:14:00,142
dari apa yang kami lakukan\nin CSS, untuk memilih node

21182
20:14:00,142 --> 20:14:02,962
menggunakan hash atau titik atau sintaksis lainnya.

21183
20:14:04,441 --> 20:14:09,391
Jadi jika saya ingin memilih\elemen yang ID uniknya adalah nama

21184
20:14:09,392 --> 20:14:12,712
Saya benar-benar bisa lulus begitu saja, di\n

21185
20:14:14,211 --> 20:14:17,032
Itu memberi saya\nnnode aktual dari pohon.

21186
20:14:17,032 --> 20:14:21,202
Ini memberi saya salah satu dari persegi panjang ini\n

21187
20:14:21,202 --> 20:14:24,351
Jika saya benar-benar ingin mendapatkan\nnilai spesifik di dalamnya

21188
20:14:24,351 --> 20:14:27,301
Saya perlu melangkah lebih jauh\ndan mengatakan .value.

21189
20:14:27,301 --> 20:14:29,301
Jadi, serupa dalam semangat\ndengan Python, di mana kita

21190
20:14:29,301 --> 20:14:32,211
melihat banyak notasi titik, di mana\nAnda dapat masuk ke dalam suatu objek

21191
20:14:32,211 --> 20:14:34,191
di dalam suatu objek,\nitulah yang terjadi.

21192
20:14:34,191 --> 20:14:38,091
Singkat cerita, dalam JavaScript,\n

21193
20:14:38,092 --> 20:14:41,392
disebut dokumen, yang memungkinkan Anda melakukan\n

21194
20:14:42,021 --> 20:14:44,361
Salah satu fungsi tersebut\nis disebut pemilih kueri.

21195
20:14:44,361 --> 20:14:47,781
Fungsi itu kembali kepada Anda\napa pun yang Anda pilih.

21196
20:14:47,782 --> 20:14:51,032
Dan nilai titik berarti masuk\nke dalam persegi panjang itu

21197
20:14:51,032 --> 20:14:54,272
dan ambil teks sebenarnya\nyang diketik manusia itu.

21198
20:14:54,271 --> 20:14:58,251
Jadi kalau sekarang saya ingin mengatakan,\nHalo, kepada orang itu

21199
20:14:58,251 --> 20:15:01,011
sintaksnya sedikit\nberbeda dari C dan Python.

21200
20:15:01,012 --> 20:15:03,741
Saya bisa menggunakan penggabungan, yang\sebenarnya ada di Python

21201
20:15:04,941 --> 20:15:10,371
Saya dapat melanjutkan dan menyapa,\nkutip tanda kutip "Halo", plus nama.

21202
20:15:10,372 --> 20:15:13,131
Baiklah, sekarang, jika saya kembali\nke jendela browser

21203
20:15:13,131 --> 20:15:16,911
muat ulang halaman, untuk mendapatkan yang terbaru\n

21204
20:15:16,911 --> 20:15:20,031
dan klik Kirim, sekarang\nSaya mengerti, Halo, David.

21205
20:15:20,032 --> 20:15:23,422
Bukan situs web terbaik, namun\nmenunjukkan caranya

21206
20:15:23,422 --> 20:15:25,832
Saya dapat mulai berinteraksi dengan halaman tersebut.

21207
20:15:25,831 --> 20:15:29,211
Namun izinkan saya menetapkan bahwa\nini adalah percampuran bahasa

21208
20:15:30,661 --> 20:15:33,171
Tidak masalah menggunakan\nkelas, tetapi menggunakan gaya

21209
20:15:33,172 --> 20:15:35,345
sama dengan kutipan tanda kutip dan\na sejumlah besar CSS

21210
20:15:35,345 --> 20:15:38,512
itu tidak akan berjalan dengan baik, sekali\n

21211
20:15:38,512 --> 20:15:40,672
Sama halnya di sini, setelah Anda\nmemiliki lebih banyak kode

21212
20:15:40,672 --> 20:15:44,461
Anda tidak ingin hanya memasukkan kode Anda\n

21213
20:15:45,751 --> 20:15:48,301
Mari kita hilangkan atribut\non-puncak itu

21214
20:15:48,301 --> 20:15:50,131
dan benar-benar tidak pernah menggunakannya lagi.

21215
20:15:50,131 --> 20:15:52,411
Itu hanya demi demonstrasi.

21216
20:15:53,801 --> 20:15:57,661
Izinkan saya memindahkan tag skrip,\sebenarnya, tepat di bawah formulir

21217
20:15:57,661 --> 20:16:01,591
tapi masih di dalam body, jadi\nhanya tag script yang ada

21218
20:16:01,592 --> 20:16:04,482
setelah tag formulir ada, secara logis.

21219
20:16:04,482 --> 20:16:08,411
Sama seperti di Python, kode Anda adalah\n

21220
20:16:10,751 --> 20:16:13,591
Izinkan saya mendefinisikan fungsi ini\ndisebut Menyapa, lalu

21221
20:16:13,592 --> 20:16:18,902
izinkan saya melakukan ini, document.queryselector,\n

21222
20:16:18,902 --> 20:16:20,232
Itu tidak memiliki ID unik.

21223
20:16:21,062 --> 20:16:24,302
Saya hanya bisa mereferensikannya berdasarkan nama, bentuk,\n

21224
20:16:24,301 --> 20:16:28,411
Dan izinkan saya memanggil fungsi\nkhusus ini, menambahkan pendengar acara.

21225
20:16:28,411 --> 20:16:31,471
Ini adalah fungsi yang\nmendengarkan peristiwa.

21226
20:16:31,471 --> 20:16:34,201
Ini sebenarnya adalah sebuah istilah\noseni dalam pemrograman.

21227
20:16:34,202 --> 20:16:37,172
Banyak bahasa berbeda\na diatur oleh peristiwa.

21228
20:16:37,172 --> 20:16:40,652
Dan hampir semua antarmuka pengguna\n

21229
20:16:40,652 --> 20:16:45,264
Di ponsel, Anda memiliki sentuhan, dan Anda\n

21230
20:16:45,264 --> 20:16:47,432
dan Anda mendapat cubitan, dan semua\no isyarat lainnya ini.

21231
20:16:47,432 --> 20:16:49,711
Di Mac atau PC, Anda\ndapat mengeklik, Anda harus menyeret

21232
20:16:49,711 --> 20:16:52,982
Anda memiliki kunci bawah, kunci atas, sebagai\n

21233
20:16:53,861 --> 20:16:57,121
Ini adalah daftar\nseluruh peristiwa yang tidak lengkap

21234
20:16:57,122 --> 20:16:59,919
yang dapat Anda dengarkan dalam\nkonteks pemrograman web.

21235
20:16:59,918 --> 20:17:02,251
Dan ini mungkin merupakan kemunduran\nke Scratch, ingat

21236
20:17:02,251 --> 20:17:04,411
Scratch memungkinkan Anda menyiarkan acara.

21237
20:17:04,411 --> 20:17:07,741
Dan kami punya dua boneka itu\n

21238
20:17:07,741 --> 20:17:11,611
Dalam dunia pemrograman web, game\n

21239
20:17:11,611 --> 20:17:14,131
saat ini, hal tersebut\nhanya diatur oleh peristiwa.

21240
20:17:14,131 --> 20:17:16,961
Dan Anda menulis kode yang mendengarkan\nkejadian ini terjadi.

21241
20:17:16,961 --> 20:17:18,301
Jadi apa yang ingin saya dengarkan?

21242
20:17:18,301 --> 20:17:21,461
Baiklah, saya ingin menambahkan event\nlistener untuk event Submit.

21243
20:17:21,461 --> 20:17:26,771
Dan ketika itu terjadi, saya ingin\n

21244
20:17:26,771 --> 20:17:28,801
Jadi ini menarik.

21245
20:17:28,801 --> 20:17:32,432
Terima kasih, fungsi Sapa saya seperti sebelumnya, tidak ada perubahan.

21246
20:17:32,432 --> 20:17:34,952
Tapi saya menambahkan satu\nbaris kode di sini.

21247
20:17:34,952 --> 20:17:38,072
Saya meminta browser untuk\nmenggunakan document.queryselector

21248
20:17:39,331 --> 20:17:42,551
Lalu saya menambahkan pendengar acara,\n

21249
20:17:42,551 --> 20:17:44,671
Dan ketika itu terjadi, saya menelepon Greet.

21250
20:17:44,672 --> 20:17:47,461
Perhatikan saya tidak menggunakan\ntanda kurung setelah Greet.

21251
20:17:47,461 --> 20:17:49,381
Saya tidak ingin langsung menelepon Greet.

21252
20:17:49,381 --> 20:17:55,891
Saya ingin memberitahu browser untuk menelepon\n

21253
20:17:55,892 --> 20:18:03,992
Sekarang izinkan saya melanjutkan dan dengan sengaja,\n

21254
20:18:03,991 --> 20:18:08,012
di sini, izinkan saya mengetikkan nama saya,\nDavid, kirimkan, dan ini dia.

21255
20:18:09,361 --> 20:18:13,231
Baiklah, tapi sekarang mari kita buat\ndesainnya sedikit lebih baik.

21256
20:18:13,232 --> 20:18:16,572
Saat ini, saya sedang mendefinisikan\nfungsi Menyapa, dan itu tidak masalah.

21257
20:18:16,572 --> 20:18:18,551
Tapi saya hanya menggunakannya di satu tempat.

21258
20:18:18,551 --> 20:18:21,122
Dan Anda mungkin ingat, kami\nmenemukan ini dengan Python

21259
20:18:21,122 --> 20:18:24,211
seperti apa saya dulu, mengapa kita membuat\n

21260
20:18:24,211 --> 20:18:26,461
ketika kita hanya menggunakan\nit seperti satu baris nanti?

21261
20:18:26,461 --> 20:18:29,842
Dan kami memperkenalkan jenis\nfungsi apa di Python beberapa hari yang lalu?

21262
20:18:30,601 --> 20:18:33,221
SPEAKER 1: Ya, jadi fungsi lambda\n, fungsi anonim.

21263
20:18:33,221 --> 20:18:35,611
Anda sebenarnya juga dapat melakukan ini\nin JavaScript.

21264
20:18:35,611 --> 20:18:40,001
Jika saya ingin mendefinisikan suatu fungsi, semua\n

21265
20:18:40,001 --> 20:18:43,661
Izinkan saya memotongnya ke\nclipboard saya, lalu menempelkannya di sini.

21266
20:18:43,661 --> 20:18:45,451
Biarkan saya memperbaiki semua keselarasan.

21267
20:18:46,982 --> 20:18:50,672
Dan saya sebenarnya bisa, sekarang, melakukan ini.

21268
20:18:50,672 --> 20:18:52,351
Sintaksnya agak aneh.

21269
20:18:52,351 --> 20:18:56,021
Tapi sekarang hanya dengan menggunakan empat\nbaris kode ini, saya bisa melakukan ini.

21270
20:18:56,021 --> 20:18:59,531
Saya dapat memberitahu browser untuk menambahkan\n

21271
20:18:59,532 --> 20:19:03,331
Lalu ketika mendengar hal itu, telepon\n

21272
20:19:03,331 --> 20:19:06,151
Dan tidak seperti Python, fungsi ini\ndapat memiliki banyak baris

21273
20:19:06,150 --> 20:19:07,650
yang sebenarnya merupakan hal yang menyenangkan.

21274
20:19:08,714 --> 20:19:11,131
Ada banyak lekukan\nin kurung kurawal yang terjadi saat ini.

21275
20:19:11,131 --> 20:19:15,452
Namun Anda dapat menganggap ini hanya\n

21276
20:19:15,452 --> 20:19:18,149
saat formulir diserahkan.

21277
20:19:18,149 --> 20:19:20,732
Tetapi jika saya ingin memblokir formulir\n agar tidak dikirimkan

21278
20:19:20,732 --> 20:19:21,722
Aku harus melakukan satu hal lagi.

21279
20:19:21,721 --> 20:19:24,929
Dan Anda hanya akan mengetahui hal ini dari keberadaan\n

21280
20:19:24,929 --> 20:19:28,291
Saya perlu melakukan fungsi\nini, mencegah default

21281
20:19:28,292 --> 20:19:32,122
meneruskan argumen E ini, yang\nisanya merupakan variabel yang mewakili

21282
20:19:32,122 --> 20:19:33,872
acaranya, lebih lanjut\ndi lain waktu, itu

21283
20:19:33,872 --> 20:19:36,482
hanya memungkinkan kita untuk mencegah\napa pun defaultnya

21284
20:19:36,482 --> 20:19:39,512
penanganan peristiwa tertentu adalah.

21285
20:19:39,512 --> 20:19:42,782
Singkat cerita, ini\nmewakili jenis kode

21286
20:19:42,782 --> 20:19:45,961
Anda mungkin menulis dalam JavaScript,\ndi mana Anda benar-benar dapat berinteraksi

21287
20:19:45,961 --> 20:19:48,422
dengan kode Anda, bentuk sebenarnya pengguna.

21288
20:19:48,422 --> 20:19:50,192
Dan kita juga bisa melakukan hal-hal menarik.

21289
20:19:50,191 --> 20:19:53,531
Dibangun ke dalam browser saat ini\nis fungsi seperti ini.

21290
20:19:53,532 --> 20:19:57,251
Jadi inilah contoh yang sangat sederhana, yaitu\n

21291
20:19:58,381 --> 20:20:00,751
Ternyata dengan menggunakan\nJavaScript, Anda bisa mengontrolnya

21292
20:20:00,751 --> 20:20:02,881
CSS halaman secara terprogram.

21293
20:20:02,881 --> 20:20:05,281
Saya dapat mengubah latar belakang\nbadan halaman

21294
20:20:05,282 --> 20:20:10,382
ke merah, ke hijau, ke biru, cukup\n

21295
20:20:10,381 --> 20:20:12,482
dan kemudian mengubah properti CSS.

21296
20:20:12,482 --> 20:20:15,271
Sekadar memberi gambaran kepada Anda,\njika saya melihat sumber halamannya

21297
20:20:15,271 --> 20:20:19,711
kode serupa di sini, saya dapat\nmemilih tombol merah dengan ID

21298
20:20:19,711 --> 20:20:22,441
yang rupanya saya definisikan\bukan itu, tepat di sini.

21299
20:20:22,441 --> 20:20:25,871
Saya dapat menambahkan pendengar acara, ini\n

21300
20:20:25,872 --> 20:20:28,199
Dan ketika diklik, saya\menjalankan satu baris kode ini.

21301
20:20:28,198 --> 20:20:30,240
Dan satu baris kode ini\nbelum pernah kita lihat sebelumnya

21302
20:20:30,240 --> 20:20:33,871
namun Anda dapat masuk ke isi\nhalaman, properti gayanya

21303
20:20:33,872 --> 20:20:36,331
dan Anda dapat mengubah\nwarna latar belakangnya menjadi merah.

21304
20:20:36,331 --> 20:20:38,851
Ini adalah salah satu contoh\ndua kelompok berbeda

21305
20:20:38,851 --> 20:20:40,562
tidak berbicara satu sama lain sebelumnya.

21306
20:20:40,562 --> 20:20:43,911
Dalam CSS, properti yang memiliki dua\nkata biasanya diberi tanda hubung

21307
20:20:45,592 --> 20:20:48,501
Sayangnya, dalam JavaScript, if\n

21308
20:20:48,501 --> 20:20:52,142
itu adalah pengurangan, yang\nsecara logika tidak masuk akal di sini.

21309
20:20:52,142 --> 20:20:56,932
Jadi di CSS, Anda dapat mengonversi\nwarna latar belakang menjadi, di JavaScript

21310
20:20:56,932 --> 20:20:59,601
warna latar belakang, dengan\nAnda menggunakan huruf C

21311
20:20:59,601 --> 20:21:01,851
dan Anda menghilangkan tanda minus.

21312
20:21:03,182 --> 20:21:05,900
Dulu,\dulu ada tag kedip.

21313
20:21:05,900 --> 20:21:07,971
Dan ini adalah salah satu dari\nsedikit contoh sejarah

21314
20:21:07,971 --> 20:21:12,682
dari tag yang telah dihapus dari HTML,\n

21315
20:21:12,682 --> 20:21:14,122
seperti inilah tampilan webnya.

21316
20:21:14,122 --> 20:21:16,176
Ada banyak hal semacam ini.

21317
20:21:16,176 --> 20:21:18,051
Bahkan ada tenda\nyang dapat memindahkan teks

21318
20:21:18,051 --> 20:21:19,509
dari kiri ke kanan di atas layar.

21319
20:21:19,509 --> 20:21:21,781
Dan web adalah tempat yang sangat jelek.

21320
20:21:21,782 --> 20:21:25,071
Saya akui, halaman web pertama saya\n

21321
20:21:25,070 --> 20:21:26,542
Tapi bagaimana kita bisa mengembalikannya?

21322
20:21:26,542 --> 20:21:29,691
Ini adalah versi\n

21323
20:21:30,202 --> 20:21:35,722
Saya menulis beberapa kode dalam contoh ini, yaitu\n

21324
20:21:35,721 --> 20:21:39,471
CSS halaman menjadi\nterlihat, tidak terlihat, terlihat

21325
20:21:39,471 --> 20:21:42,891
tidak terlihat, karena bawaan\nJavaScript mendukung jam.

21326
20:21:42,892 --> 20:21:45,452
Jadi Anda bisa melakukan sesuatu\bukan semacam jadwal.

21327
20:21:45,452 --> 20:21:47,782
Izinkan saya membuka\ncontoh ini, pelengkapan otomatis.

21328
20:21:49,251 --> 20:21:53,751
Di Autocomplete.html, saya menyiapkannya sebagai\n

21329
20:21:53,751 --> 20:21:56,482
tapi saya juga mengambil\ndictionary dari masalah

21330
20:21:56,482 --> 20:22:00,711
atur 5 ejaan, sehingga jika saya mau\n

21331
20:22:00,711 --> 20:22:04,491
ini mencari 140.000\nkata itu, menggunakan JavaScript

21332
20:22:04,491 --> 20:22:07,380
untuk membuat apa yang kita ketahui di\ndunia web sebagai pelengkapan otomatis.

21333
20:22:07,380 --> 20:22:09,172
Saat Anda mulai mencari\nsesuatu, Anda

21334
20:22:09,172 --> 20:22:11,632
akan mulai melihat kata\nyang dimulai dengan frasa tersebut.

21335
20:22:11,631 --> 20:22:14,164
Dan benar saja, jika saya mencari\nsesuatu seperti pisang

21336
20:22:14,164 --> 20:22:17,331
inilah tiga varian pisang\n

21337
20:22:18,381 --> 20:22:21,811
Hanya JavaScript, ketika\nit menemukan kata yang cocok

21338
20:22:21,812 --> 20:22:24,862
itu hanya memperbarui DOM,\npohon di memori komputer

21339
20:22:24,861 --> 20:22:27,921
untuk menampilkan lebih banyak teks, atau lebih sedikit.

21340
20:22:27,922 --> 20:22:34,162
Dan untuk satu contoh terakhir, begini caranya\n

21341
20:22:35,872 --> 20:22:40,042
Anda telah membangun beberapa browser saat ini\n

21342
20:22:40,042 --> 20:22:44,152
antarmuka, di mana Anda dapat meminta\n

21343
20:22:44,152 --> 20:22:47,601
Misalnya, di sini, saya menulis\n

21344
20:22:47,601 --> 20:22:49,448
rupanya menanyakan lokasiku.

21345
20:22:49,448 --> 20:22:51,531
Baiklah, izinkan saya melanjutkan\dan mengizinkannya kali ini

21346
20:22:51,532 --> 20:22:54,202
jika itu adalah sesuatu yang\nAnda rasa nyaman di perangkat Anda sendiri.

21347
20:22:54,202 --> 20:22:57,202
Butuh waktu beberapa saat, karena terkadang\n

21348
20:22:58,081 --> 20:23:02,601
Tapi, mudah-mudahan, sebentar lagi, sudah\n

21349
20:23:02,601 --> 20:23:06,232
dan sebagai perkembangan terakhir hari ini, untuk apa\n

21350
20:23:06,232 --> 20:23:08,601
untuk struktur Anda, CSS\nuntuk gaya Anda, dan sekarang

21351
20:23:08,601 --> 20:23:13,372
JavaScript untuk logika Anda, yang akan kami\n

21352
20:23:13,372 --> 20:23:15,982
dan telusuri Google untuk\nkoordinat GPS tersebut.

21353
20:23:15,982 --> 20:23:21,472
Perbesar di sini di Google Maps,\ndan jika kita memperbesar, memperbesar, memperbesar

21354
20:23:22,461 --> 20:23:26,122
Kita tidak berada di jalan itu, tapi\ndi sana, oh, sebenarnya itu dia.

21355
20:23:26,122 --> 20:23:27,832
Ada penanda yang diberikannya untuk kita.

21356
20:23:27,831 --> 20:23:30,118
Kami memang berada di sini di Memorial Hall.

21357
20:23:30,119 --> 20:23:32,452
Jadi semua itu dengan JavaScript,\ntetapi pemahaman dasarnya

21358
20:23:32,452 --> 20:23:34,252
dari DOM dan model objek\ndocument

21359
20:23:34,251 --> 20:23:36,481
kita akan melanjutkan\nminggu depan.

21360
20:24:57,172 --> 20:25:01,222
Jadi ini CS50 dan ini\nminggu kesembilan, dan ini dia

21361
20:25:01,221 --> 20:25:03,471
dalam hal dasar-dasar pemrograman.

21362
20:25:03,471 --> 20:25:06,250
Saat ini, kita telah mencapai lingkaran penuh\ndengan begitu banyak bahasa

21363
20:25:06,250 --> 20:25:08,542
yang telah kami lihat\nselama beberapa minggu terakhir.

21364
20:25:08,542 --> 20:25:11,512
Dan dengan HTML dan CSS\ndan JavaScript minggu lalu

21365
20:25:11,512 --> 20:25:14,782
kita akan menambahkan kembali ke dalam\ncampuran, Python dan SQL.

21366
20:25:14,782 --> 20:25:18,182
Dan dengan itu, apakah kita mempunyai\nkemampuan untuk memprogram untuk web.

21367
20:25:18,182 --> 20:25:20,601
Dan meskipun ini bukan\nsatu-satunya antarmuka pengguna yang keluar

21368
20:25:20,601 --> 20:25:23,691
di sana, semakin-- atau orang\n

21369
20:25:23,691 --> 20:25:26,721
dan browser untuk mengakses aplikasi\nyang ditulis orang

21370
20:25:26,721 --> 20:25:31,311
namun hal ini juga semakin menjadi cara\n

21371
20:25:31,312 --> 20:25:33,532
Ada bahasa\nyang disebut Swift untuk iOS

21372
20:25:33,532 --> 20:25:35,692
ada bahasa\nyang disebut Java untuk Android

21373
20:25:35,691 --> 20:25:38,512
tetapi mengkodekan aplikasi\nin kedua bahasa tersebut

21374
20:25:38,512 --> 20:25:42,292
berarti mengetahui bahasa dua kali lebih banyak,\n

21375
20:25:42,952 --> 20:25:45,502
Jadi, kita semakin sering melihat,\nbaik atau buruk

21376
20:25:45,501 --> 20:25:47,601
bahwa dunia mulai\nbenar-benar melakukan standarisasi

21377
20:25:47,601 --> 20:25:51,501
setidaknya untuk beberapa\n berikutnya

21378
20:25:51,501 --> 20:25:55,491
ditambah dengan bahasa lain seperti\n

21379
20:25:55,491 --> 20:25:57,929
Jadi hari ini, kita akan menyatukan\semuanya

21380
20:25:57,929 --> 20:26:00,471
dan memberi Anda\nalat terakhir dalam perangkat Anda yang dapat digunakan

21381
20:26:00,471 --> 20:26:03,051
untuk menangani proyek akhir\ndilaksanakan di dunia nyata

21382
20:26:03,051 --> 20:26:05,961
pada akhirnya, dan memecahkan\nmasalah pemrograman.

21383
20:26:05,961 --> 20:26:11,072
Namun saat ini kami memerlukan alat tambahan,\n

21384
20:26:11,072 --> 20:26:14,239
Ini hanyalah sebuah program yang\nmuncul pada komputer tertentu

21385
20:26:14,239 --> 20:26:16,072
yang kebetulan dapat Anda instal\ngratis

21386
20:26:16,072 --> 20:26:18,741
ditulis dalam bahasa yang disebut\nJavaScript, namun merupakan sebuah program

21387
20:26:18,741 --> 20:26:22,101
yang telah kami gunakan untuk\nmenjalankan server web di VSCO.

21388
20:26:22,101 --> 20:26:24,932
Namun Anda dapat menjalankannya di\nMac atau PC Anda sendiri atau di mana pun.

21389
20:26:24,932 --> 20:26:28,702
Namun yang dilakukan server\nHTTP ini hanyalah

21390
20:26:28,702 --> 20:26:32,512
menyajikan konten statis\nseperti file HTML, file CSS

21391
20:26:32,512 --> 20:26:36,982
File JavaScript, mungkin gambar, mungkin\n

21392
20:26:36,982 --> 20:26:41,362
Ia tidak memiliki kemampuan untuk benar-benar berinteraksi\n

21393
20:26:41,361 --> 20:26:46,561
Anda dapat membuat formulir web dan menyajikan\n

21394
20:26:46,562 --> 20:26:50,392
tetapi jika manusia mengetikkan input ke\n

21395
20:26:50,392 --> 20:26:53,842
kirimkan ke tempat lain ke sesuatu seperti\n

21396
20:26:53,842 --> 20:26:56,961
sebenarnya tidak akan kemana-mana\n

21397
20:26:56,961 --> 20:26:59,221
memproses permintaan yang masuk.

21398
20:26:59,221 --> 20:27:02,151
Jadi hari ini, kami akan memperkenalkan\nantipe server lain itu

21399
20:27:02,152 --> 20:27:06,112
hadir dengan Python yang memungkinkan\nus tidak hanya melayani halaman web

21400
20:27:06,111 --> 20:27:07,731
tetapi juga memproses input pengguna.

21401
20:27:07,732 --> 20:27:11,482
Dan ingat bahwa semua masukan itu adalah\n

21402
20:27:11,482 --> 20:27:14,062
atau lebih dalam lagi di dalam\namplop virtual tersebut.

21403
20:27:14,062 --> 20:27:17,902
Jadi inilah URL kanonis yang kita bicarakan\n

21404
20:27:20,042 --> 20:27:23,782
Dan saya telah menyorot garis miring ke\n

21405
20:27:23,782 --> 20:27:26,302
seperti folder default\ndi mana, mungkin, ada

21406
20:27:26,301 --> 20:27:29,911
sebuah file bernama index.html\atau sesuatu yang lain di sana.

21407
20:27:29,911 --> 20:27:32,122
Jika tidak, Anda mungkin akan\na menyebutkan lebih eksplisit

21408
20:27:32,122 --> 20:27:34,551
dari file sebenarnya bernama file.html.

21409
20:27:34,551 --> 20:27:37,634
Anda dapat memiliki folder, mungkin\n

21410
20:27:38,134 --> 20:27:40,221
Anda dapat memiliki file di\nfolder seperti ini, dan ini

21411
20:27:40,221 --> 20:27:44,091
semuanya merupakan contoh dari apa yang dilakukan seorang programmer\n

21412
20:27:44,092 --> 20:27:45,922
Jadi mungkin bukan hanya\nsatu kata saja

21413
20:27:45,922 --> 20:27:49,832
mungkin memiliki banyak garis miring dan banyak\n

21414
20:27:49,831 --> 20:27:51,831
Namun ini lebih\numumnya dikenal sebagai jalan.

21415
20:27:51,831 --> 20:27:54,470
Namun ada istilah lain dari kami,\nyang pada dasarnya setara

21416
20:27:54,471 --> 20:27:55,652
yang akan kami perkenalkan hari ini.

21417
20:27:55,652 --> 20:27:59,062
Ini juga secara sinonim\ndisebut rute, yang mungkin

21418
20:27:59,062 --> 20:28:03,022
deskripsi umum yang lebih baik tentang apa\n

21419
20:28:03,021 --> 20:28:05,512
mereka tidak perlu\nmemetakannya, yaitu merujuk

21420
20:28:05,512 --> 20:28:08,572
ke folder tertentu\atau file tertentu, Anda

21421
20:28:08,572 --> 20:28:11,095
dapat menemukan\rute Anda saat ini di situs web.

21422
20:28:11,095 --> 20:28:13,762
Dan pastikan bahwa ketika\pengguna mengunjunginya, Anda memberikannya

21423
20:28:14,661 --> 20:28:17,369
Jika mereka mengunjungi tempat lain, Anda\n

21424
20:28:17,369 --> 20:28:20,241
Tidak harus dipetakan ke\n

21425
20:28:20,241 --> 20:28:23,421
Dan jika Anda ingin mendapatkan masukan dari\n

21426
20:28:23,422 --> 20:28:28,222
seperti q=cats, Anda dapat menambahkan pertanyaan\n

21427
20:28:28,221 --> 20:28:32,061
Kuncinya, atau nama parameter HTTP\n

21428
20:28:32,062 --> 20:28:35,025
lalu nilai jumlah yang sama dengan yang,\nmungkin, diketik oleh manusia.

21429
20:28:35,024 --> 20:28:37,191
Jika Anda memiliki lebih banyak,\nAnda dapat memberi tanda ampersand

21430
20:28:37,191 --> 20:28:41,902
lalu lebih banyak pasangan kunci sama dengan nilai\n

21431
20:28:41,902 --> 20:28:46,532
Namun, tangkapannya adalah menggunakan\n

21432
20:28:46,532 --> 20:28:51,682
kami tidak benar-benar mempunyai kemampuan untuk\n

21433
20:28:53,601 --> 20:28:56,661
Anda dapat menambahkan pertanyaan\n

21434
20:28:56,661 --> 20:29:00,561
ke salah satu URL di laman\nberanda Anda untuk kumpulan masalah delapan

21435
20:29:00,562 --> 20:29:04,222
namun hal tersebut tidak benar-benar memberikan\apa pun yang berguna

21436
20:29:04,221 --> 20:29:06,111
kecuali Anda menggunakan JavaScript yang mewah.

21437
20:29:06,111 --> 20:29:09,241
Server tidak akan repot\nbahkan mencarinya untuk Anda.

21438
20:29:09,241 --> 20:29:12,141
Namun hari ini, kami akan\ninmemperkenalkan penggunaan sedikit Python.

21439
20:29:12,142 --> 20:29:15,982
Dan faktanya, kita akan menggunakan web\n

21440
20:29:15,982 --> 20:29:19,312
menggunakan server HTTP saja,\nsecara otomatis, untuk Anda

21441
20:29:19,312 --> 20:29:22,192
cari pasangan nilai kunci\nsetelah tanda tanya

21442
20:29:22,191 --> 20:29:25,881
lalu menyerahkannya kepada Anda dalam\nbentuk kamus Python.

21443
20:29:25,881 --> 20:29:29,781
Ingatlah bahwa kamus dengan Python, a\n

21444
20:29:29,782 --> 20:29:33,917
Sepertinya ini sangat cocok\nuntuk parameter semacam ini.

21445
20:29:33,917 --> 20:29:36,292
Dan Anda tidak perlu\nmenulis kode itu sendiri.

21446
20:29:36,292 --> 20:29:39,902
Ini akan diserahkan kepada Anda oleh\n

21447
20:29:39,902 --> 20:29:41,782
Jadi ini akan menjadi\nkerangka kerja kedua dari dua kerangka kerja

21448
20:29:41,782 --> 20:29:43,324
sungguh, yang kita lihat di kelas.

21449
20:29:43,323 --> 20:29:46,011
Dan kerangka kerja pada dasarnya adalah\na sekumpulan perpustakaan

21450
20:29:46,012 --> 20:29:48,502
yang ditulis orang lain\ndan serangkaian konvensi

21451
20:29:48,501 --> 20:29:49,951
oleh karena itu, untuk melakukan sesuatu.

21452
20:29:49,952 --> 20:29:52,762
Jadi bagi Anda yang benar-benar\nmulai mencoba-coba Bootstrap

21453
20:29:52,762 --> 20:29:56,441
seminggu terakhir ini untuk membuat rumah Anda\n

21454
20:29:58,211 --> 20:30:01,872
Nah, Anda menggunakan perpustakaan, kodekan itu\n

21455
20:30:01,872 --> 20:30:04,961
mungkin beberapa JavaScript itu\n

21456
20:30:04,961 --> 20:30:08,741
Namun ini juga merupakan kerangka kerja di\n

21457
20:30:08,741 --> 20:30:11,262
Anda harus menggunakan kelas Bootstraps\n, dan Anda

21458
20:30:11,262 --> 20:30:15,582
harus menata div atau\nrentang atau tag tabel Anda

21459
20:30:15,581 --> 20:30:17,424
dengan cara yang ramah Bootstrap.

21460
20:30:17,425 --> 20:30:19,842
Dan ini tidak terlalu memberatkan, namun\nAnda mengikuti konvensi

21461
20:30:19,842 --> 20:30:21,682
yang distandarisasi oleh sekelompok manusia.

21462
20:30:21,682 --> 20:30:25,422
Demikian pula, di dunia\nPython, apakah ada kerangka kerja lain

21463
20:30:25,422 --> 20:30:26,802
kita akan mulai menggunakannya hari ini.

21464
20:30:26,801 --> 20:30:30,191
Sedangkan Bootstrap\digunakan untuk CSS dan JavaScript

21465
20:30:30,191 --> 20:30:32,231
Flask akan digunakan untuk Python.

21466
20:30:32,232 --> 20:30:34,932
Dan itu memecahkan banyak\nmasalah umum bagi kami.

21467
20:30:34,932 --> 20:30:38,142
Ini akan memudahkan\nkami menganalisis URL

21468
20:30:38,142 --> 20:30:40,782
dan mendapatkan pasangan nilai kunci,\ini akan mempermudahnya

21469
20:30:40,782 --> 20:30:43,872
agar kami dapat menemukan file atau\ngambar yang diinginkan manusia

21470
20:30:43,872 --> 20:30:45,312
untuk dilihat ketika mengunjungi website kami.

21471
20:30:45,312 --> 20:30:48,204
Bahkan akan mempermudah\nkirim email secara otomatis

21472
20:30:48,203 --> 20:30:49,661
seperti ketika seseorang mengisi formulir.

21473
20:30:49,661 --> 20:30:52,971
Anda juga dapat secara dinamis menggunakan kode\nmengirimkan email kepada mereka.

21474
20:30:52,971 --> 20:30:55,271
Jadi Flask, dan bersamanya\nbeberapa perpustakaan terkait

21475
20:30:55,271 --> 20:30:58,512
itu hanya akan membuat hal\nseperti itu lebih mudah bagi kita.

21476
20:30:58,512 --> 20:31:03,101
Dan untuk melakukan ini, yang harus kita lakukan\n

21477
20:31:03,101 --> 20:31:05,211
persyaratan kerangka ini.

21478
20:31:05,211 --> 20:31:08,411
Kita harus membuat\n

21479
20:31:08,411 --> 20:31:11,411
di sinilah aplikasi web atau\aplikasi kita akan dijalankan.

21480
20:31:11,411 --> 20:31:15,881
Jika kami memiliki perpustakaan yang ingin kami\n

21481
20:31:15,881 --> 20:31:19,512
adalah memiliki file\nteks yang sangat sederhana bernama persyaratan.txt

21482
20:31:19,512 --> 20:31:21,851
tempat Anda mencantumkan nama\nperpustakaan tersebut

21483
20:31:21,851 --> 20:31:26,652
dari atas ke bawah, dalam file teks itu,\n

21484
20:31:26,652 --> 20:31:30,411
atau pernyataan import yang kami\n

21485
20:31:30,411 --> 20:31:33,461
Kita akan memiliki folder\nstatis atau direktori statis, yang mana

21486
20:31:33,461 --> 20:31:36,611
berarti file apa pun yang Anda buat\ntidak akan pernah berubah

21487
20:31:36,611 --> 20:31:39,203
seperti gambar, file CSS,\nfile JavaScript

21488
20:31:39,203 --> 20:31:40,661
mereka akan masuk ke folder ini.

21489
20:31:40,661 --> 20:31:43,512
Dan yang terakhir,\nHTML apa pun yang Anda tulis

21490
20:31:43,512 --> 20:31:45,911
laman web yang ingin\ndilihat manusia, akan dibuka

21491
20:31:45,911 --> 20:31:47,751
untuk masuk ke folder bernama templates.

21492
20:31:47,751 --> 20:31:50,711
Jadi, sekali lagi, ini adalah bukti\napa yang kami maksud dengan kerangka kerja.

21493
20:31:50,711 --> 20:31:52,512
Apakah Anda harus membuat aplikasi web seperti ini?

21494
20:31:52,512 --> 20:31:54,702
Tidak, tetapi jika Anda menggunakan\nkerangka kerja khusus ini

21495
20:31:54,702 --> 20:31:58,752
inilah yang diputuskan orang\nsebagai konvensi manusia.

21496
20:31:58,751 --> 20:32:02,961
Jika Anda pernah mendengar kerangka lain seperti\n

21497
20:32:02,961 --> 20:32:06,131
hanya ada konvensi yang berbeda\n

21498
20:32:06,131 --> 20:32:10,152
Flask adalah\nmicroframework yang sangat bagus.

21499
20:32:10,152 --> 20:32:13,631
Yang perlu Anda lakukan hanyalah mematuhi\n

21500
20:32:13,631 --> 20:32:16,601
untuk mengaktifkan dan menjalankan beberapa kode.

21501
20:32:16,601 --> 20:32:19,381
Baiklah, mari kita lanjutkan\nabuat aplikasi web.

21502
20:32:19,381 --> 20:32:21,131
Biarkan saya melanjutkan dan\nsberalih ke VS Code

21503
20:32:21,131 --> 20:32:23,173
di sini, dan izinkan saya mempraktikkan\napa yang saya khotbahkan di sini

21504
20:32:25,482 --> 20:32:29,172
Dan mari kita lanjutkan dan membuat\nan aplikasi dengan sangat sederhana

21505
20:32:29,172 --> 20:32:31,461
mungkin, menyapa pengguna.

21506
20:32:31,461 --> 20:32:35,922
Jadi sesuatu yang, pada awalnya, bukanlah segalanya\n

21507
20:32:35,922 --> 20:32:37,882
Namun kami akan mengembangkan hal tersebut\namun sudah selalu kami lakukan.

21508
20:32:37,881 --> 20:32:41,861
Jadi di app.py, apa yang akan saya lakukan\n

21509
20:32:41,861 --> 20:32:43,182
Saya ada di layar sebelumnya.

21510
20:32:43,182 --> 20:32:49,601
Dari Flask, impor Flask, dengan huruf kapital\n

21511
20:32:49,601 --> 20:32:52,152
Dan saya juga akan\nmengimpor terlebih dahulu

21512
20:32:52,152 --> 20:32:56,202
beberapa fungsi,\nrender template, dan permintaan.

21513
20:32:56,202 --> 20:32:58,122
Lebih lanjut tentang itu sebentar lagi.

21514
20:32:58,122 --> 20:33:00,762
Lalu di bawahnya, saya akan\nmengatakan, lanjutkan dan lakukan ini.

21515
20:33:00,762 --> 20:33:03,491
Beri saya web-- aplikasi bernama\nvariabel itu

21516
20:33:03,491 --> 20:33:07,691
akan menjadi hasil dari panggilan\n

21517
20:33:07,691 --> 20:33:10,161
mantra aneh ini, nama.

21518
20:33:10,161 --> 20:33:13,572
Jadi kita telah melihatnya beberapa minggu yang lalu\n

21519
20:33:13,572 --> 20:33:16,301
dan kami memiliki hal utama itu\na di bagian bawah layar.

21520
20:33:16,301 --> 20:33:21,851
Untuk saat ini, cukup ketahui __nama__\n itu

21521
20:33:21,851 --> 20:33:26,322
Jadi baris ini, sesederhana\n

21522
20:33:26,322 --> 20:33:30,072
ubah file ini menjadi aplikasi Flask.

21523
20:33:30,072 --> 20:33:33,792
Flask adalah fungsi yang hanya menggambarkan\n

21524
20:33:33,792 --> 20:33:37,392
Hal terakhir yang akan saya lakukan untuk ini\n

21525
20:33:37,392 --> 20:33:41,052
Saya akan mengatakan bahwa saya\nakan memanggil suatu fungsi

21526
20:33:41,051 --> 20:33:42,971
indeks yang tidak memerlukan argumen.

21527
20:33:42,971 --> 20:33:44,891
Dan kapan pun\nfungsi ini dipanggil, saya menginginkannya

21528
20:33:44,892 --> 20:33:50,322
untuk mengembalikan hasil rendering\na template bernama index.html.

21529
20:33:51,277 --> 20:33:53,652
Jadi anggap saja ada file\ndi suatu tempat, belum dibuat

21530
20:33:55,482 --> 20:33:57,702
Namun render template\nberarti merender file ini

21531
20:33:57,702 --> 20:34:01,162
yang dicetak ke\layar pengguna, boleh dikatakan demikian.

21532
20:34:01,161 --> 20:34:03,971
Hal terakhir yang ingin kulakukan\ndo adalah memberitahu Flask

21533
20:34:03,971 --> 20:34:06,261
kapan harus memanggil fungsi indeks ini.

21534
20:34:06,262 --> 20:34:11,927
Jadi saya akan memerintahkannya untuk mendefinisikan\n

21535
20:34:13,029 --> 20:34:15,072
Jadi mari kita lihat\napa yang baru saja saya buat di sini.

21536
20:34:15,072 --> 20:34:18,042
Ini adalah sintaksis yang sedikit baru, dan\inilah satu-satunya keanehan

21537
20:34:18,042 --> 20:34:19,812
yang akan kita miliki hari ini dengan Python.

21538
20:34:19,812 --> 20:34:22,512
Inilah yang dikenal dalam Python\nis apa yang disebut dekorator.

21539
20:34:22,512 --> 20:34:24,521
Dekorator adalah\ntipe fungsi khusus

21540
20:34:24,521 --> 20:34:27,072
yang pada dasarnya mengubah\fungsi lain.

21541
20:34:27,072 --> 20:34:30,111
Untuk tujuan kita, ketahuilah\nbahwa di baris enam tertulis demikian

21542
20:34:30,111 --> 20:34:33,461
hai Python, tentukan rute\nuntuk garis miring, defaultnya

21543
20:34:33,461 --> 20:34:35,262
halaman di aplikasi situs web saya.

21544
20:34:35,262 --> 20:34:37,661
Dua baris berikutnya, tujuh\nd delapan, ucapkan, hai Python

21545
20:34:37,661 --> 20:34:40,391
mendefinisikan fungsi yang disebut\nindex, tidak memerlukan argumen.

21546
20:34:40,392 --> 20:34:45,282
Dan satu-satunya hal yang harus Anda lakukan adalah\n

21547
20:34:48,411 --> 20:34:51,461
Jadi, pertanyaan berikutnya,\n

21548
20:34:55,251 --> 20:34:56,991
Baiklah, izinkan saya melanjutkan dan melakukannya selanjutnya.

21549
20:34:56,991 --> 20:35:00,262
Biarkan saya membuat direktori bernama\ntemplates, berlatih lagi

21550
20:35:01,521 --> 20:35:04,281
Jadi saya akan membuat direktori\kosong baru bernama templates

21551
20:35:04,282 --> 20:35:08,002
Saya akan pergi dan\nCD ke direktori itu

21552
20:35:08,001 --> 20:35:11,661
dan kemudian lakukan kode index.html.

21553
20:35:11,661 --> 20:35:13,281
Jadi inilah halaman indeks saya.

21554
20:35:13,282 --> 20:35:16,227
Dan saya akan membuat halaman web yang\nsederhana, tipe dokumen HTML.

21555
20:35:16,226 --> 20:35:18,351
Saya hanya akan meminjam\nbeberapa barang dari minggu lalu.

21556
20:35:18,351 --> 20:35:20,601
Bahasa HTML sama dengan bahasa Inggris.

21557
20:35:21,771 --> 20:35:25,491
Saya kemudian akan melakukan tag kepala, saya akan melakukan meta\n

21558
20:35:25,491 --> 20:35:28,012
Ini membuat penarikan kembali situs saya menjadi responsif.

21559
20:35:28,012 --> 20:35:30,741
Artinya, ia hanya membesar dan menyusut\nagar sesuai dengan ukuran perangkat.

21560
20:35:30,741 --> 20:35:34,221
Skala awal yang akan digunakan\n

21561
20:35:34,221 --> 20:35:36,261
akan menjadi lebar perangkat.

21562
20:35:36,262 --> 20:35:38,301
Jadi saya mengetik ini,\nSaya sudah mencetaknya di sini.

21563
20:35:38,301 --> 20:35:40,251
Ini adalah hal yang biasanya saya salin tempel.

21564
20:35:40,251 --> 20:35:42,951
Namun yang terakhir, saya akan\menambahkan judul saya, yang mana saja

21565
20:35:42,952 --> 20:35:44,512
jadilah halo untuk nama aplikasi ini.

21566
20:35:46,402 --> 20:35:50,271
Badan tag ini akan menjadi--

21567
20:35:51,232 --> 20:35:54,902
Isi halaman ini\nhanya berupa hello comma world.

21568
20:35:54,902 --> 20:35:58,441
Sangat tidak menarik dan benar-benar a\n

21569
20:35:58,441 --> 20:36:01,792
Namun mari kita mulai sekarang dan bereksperimen\ndengan kedua file ini.

21570
20:36:01,792 --> 20:36:03,652
Saya tidak akan repot\ndengan folder statis

21571
20:36:03,652 --> 20:36:06,652
saat ini, karena saya tidak punya\n

21572
20:36:06,652 --> 20:36:08,752
Tidak ada gambar, tidak ada CSS, tidak ada yang seperti itu.

21573
20:36:08,751 --> 20:36:11,761
Dan sejujurnya, persyaratan.txt\nis akan menjadi cukup sederhana.

21574
20:36:11,762 --> 20:36:15,562
Saya akan membuka persyaratan.txt dan\n

21575
20:36:15,562 --> 20:36:18,952
akses ke perpustakaan Flask itu sendiri.

21576
20:36:18,952 --> 20:36:21,952
Baiklah, tapi itu satu-satunya\n

21577
20:36:21,952 --> 20:36:27,232
Baiklah, jadi sekarang saya punya dua file,\n

21578
20:36:27,232 --> 20:36:30,711
Tapi index.html terima kasih ada\nindi dalam direktori templat saya

21579
20:36:30,711 --> 20:36:33,211
jadi bagaimana cara memulai\na server web minggu lalu

21580
20:36:33,211 --> 20:36:34,491
Saya akan mengatakan server HTTP.

21581
20:36:34,491 --> 20:36:36,831
Tapi server HTTP bukanlah sesuatu yang berhubungan dengan Python.

21582
20:36:36,831 --> 20:36:41,152
Ia tidak tahu tentang Flask atau\nPython atau apa pun yang baru saja saya tulis.

21583
20:36:41,152 --> 20:36:43,982
Server HTTP hanya akan\nmengeluarkan file statis.

21584
20:36:43,982 --> 20:36:47,286
Jadi jika saya menjalankan server HTTP, dan\nkemudian saya mengklik app.py

21585
20:36:47,286 --> 20:36:49,251
Saya benar-benar akan melihat kode Python saya.

21586
20:36:49,251 --> 20:36:53,421
Itu tidak akan dieksekusi karena HTTP\n

21587
20:36:53,422 --> 20:36:57,502
Tapi hari ini, saya akan menjalankan\n

21588
20:36:57,501 --> 20:37:01,251
Jadi framework Flask ini yang sebenarnya sudah saya instal sebelumnya

21589
20:37:01,251 --> 20:37:04,941
jadi aku tidak terlalu perlu\n

21590
20:37:04,941 --> 20:37:08,902
namun, hadir dengan program bernama Flask,\n

21591
20:37:08,902 --> 20:37:12,472
kata lari, dan saat saya melakukannya, Anda akan\n

21592
20:37:12,471 --> 20:37:14,661
minggu di mana Anda akan melihat namanya--

21593
20:37:14,661 --> 20:37:17,629
URL Anda untuk\npratinjau uniknya.

21594
20:37:17,629 --> 20:37:20,211
Anda mungkin melihat pop up yang menyatakan\nbahwa aplikasi Anda sedang berjalan

21595
20:37:20,211 --> 20:37:22,161
pada port TCP, sesuatu atau lainnya.

21596
20:37:22,161 --> 20:37:24,591
Secara default, minggu lalu,\nkami menggunakan port 8080.

21597
20:37:24,592 --> 20:37:27,622
Flask, hanya karena, lebih menyukai port 5.000.

21598
20:37:28,702 --> 20:37:31,432
Saya akan melanjutkan\ndan membuka URL ini sekarang.

21599
20:37:31,432 --> 20:37:33,652
Dan setelah itu mengautentikasi\ndan mengalihkan saya

21600
20:37:33,652 --> 20:37:37,222
hanya untuk memastikan saya diizinkan mengakses\n

21601
20:37:37,221 --> 20:37:40,221
Voila, sejauh itulah\naplikasi ini.

21602
20:37:40,221 --> 20:37:43,911
Jika saya melihat sumber dengan mengklik kanan\atau mengontrol mengklik

21603
20:37:43,911 --> 20:37:45,891
itu HTML saya yang sudah dimuntahkan.

21604
20:37:45,892 --> 20:37:48,832
Jadi sungguh, saya baru saja menemukan kembali\nroda dari minggu lalu

21605
20:37:48,831 --> 20:37:51,271
karena tidak ada dinamisme\nsekarang, tidak ada sama sekali.

21606
20:37:52,968 --> 20:37:54,801
Biarkan saya menutup sumbernya\dan biarkan saya memperkecil.

21607
20:37:56,422 --> 20:37:59,601
Coba saya perbesar sekarang, dan saya punya\na URL rahasia yang sangat unik.

21608
20:37:59,601 --> 20:38:01,581
Tapi intinya\nit berakhir tanpa hasil.

21609
20:38:01,581 --> 20:38:03,801
Atau secara implisit diakhiri dengan garis miring.

21610
20:38:03,801 --> 20:38:05,691
Ini hanya Chrome\nsedikit membantu.

21611
20:38:05,691 --> 20:38:08,762
Tidak ada gunanya menampilkan garis miring,\n

21612
20:38:08,762 --> 20:38:14,872
Tapi izinkan saya melakukan sesuatu yang eksplisit seperti\n

21613
20:38:14,872 --> 20:38:17,241
Jadi ada nilai kunci\npasangan yang saya miliki secara manual

21614
20:38:17,241 --> 20:38:20,661
ketik di bilah URL saya dan tekan Enter.

21615
20:38:20,661 --> 20:38:22,161
Tidak ada yang terjadi, tidak ada yang berubah.

21616
20:38:23,661 --> 20:38:27,982
Namun peluangnya saat ini adalah\n

21617
20:38:27,982 --> 20:38:31,172
dari URL itu dan mulai\nmenampilkannya kepada pengguna.

21618
20:38:31,172 --> 20:38:35,372
Jadi izinkan saya kembali ke sini ke\njendela dan kode terminal saya.

21619
20:38:35,372 --> 20:38:37,822
Biarkan saya memindahkannya ke bawah\nke bagian bawah sana.

21620
20:38:37,822 --> 20:38:41,042
Dan bagaimana jika saya ingin\nmengucapkan, ya, halo, nama.

21621
20:38:41,042 --> 20:38:42,771
Saya idealnya ingin mengatakan sesuatu seperti--

21622
20:38:42,771 --> 20:38:44,391
Saya tidak ingin membuat kode keras\nDavid karena itu tidak akan pernah terjadi

21623
20:38:44,392 --> 20:38:46,282
akan menyapa orang lain.

21624
20:38:46,282 --> 20:38:51,772
Saya ingin memasukkan nama variabel\n

21625
20:38:51,771 --> 20:38:55,311
Tapi ini bukan tag HTML, jadi saya\nmembutuhkan semacam pengganti.

21626
20:38:57,441 --> 20:39:02,572
Jika saya kembali ke kode Python saya, saya bisa\n

21627
20:39:02,572 --> 20:39:06,562
Dan saya dapat meminta Flask untuk melanjutkan\ninke permintaan saat ini

21628
20:39:06,562 --> 20:39:10,432
ke dalam argumennya, yaitu\nin URL, demikian sebutannya

21629
20:39:10,432 --> 20:39:14,721
dan dapatkan berapa pun nilai\nparameter yang disebut nama.

21630
20:39:14,721 --> 20:39:16,792
Itu menjadikannya sebuah variabel bagi saya.

21631
20:39:16,792 --> 20:39:19,702
Dan kemudian, dalam template render--\nini adalah salah satu fungsinya

21632
20:39:19,702 --> 20:39:21,562
yang bisa memerlukan lebih dari satu argumen.

21633
20:39:21,562 --> 20:39:23,542
Jika perlu\argumen lain, Anda bisa lulus

21634
20:39:23,542 --> 20:39:25,502
atas nama variabel apa pun yang Anda inginkan.

21635
20:39:25,501 --> 20:39:29,971
Jadi jika saya ingin menyampaikan atas nama saya, saya\n

21636
20:39:29,971 --> 20:39:34,731
Jadi ini adalah nama variabel\n

21637
20:39:34,732 --> 20:39:39,682
Ini adalah variabel aktual yang\nsaya ingin mendapatkan nilainya.

21638
20:39:39,682 --> 20:39:45,682
Dan sekarang yang terakhir, di index.html saya,\n

21639
20:39:45,682 --> 20:39:49,792
adalah dengan membuat dua kurung kurawal dan\nlalu memasukkan nama variabelnya

21640
20:39:51,354 --> 20:39:53,622
Jadi inilah yang kami maksud dengan template.

21641
20:39:53,622 --> 20:39:56,711
Templat itu seperti cetak biru\di dunia nyata, di mana

21642
20:39:56,711 --> 20:39:58,842
itu rencana untuk membuat sesuatu.

21643
20:39:58,842 --> 20:40:02,711
Ini adalah rencana untuk membuat halaman web\n

21644
20:40:02,711 --> 20:40:06,221
tapi ada placeholder dengan\ndua kurung kurawal di sini dan di sini

21645
20:40:06,221 --> 20:40:10,641
yang mengatakan lanjutkan dan colokkan\n

21646
20:40:10,642 --> 20:40:13,212
Jadi dalam hal ini, semangatnya mirip dengan string f kita

21647
20:40:13,211 --> 20:40:14,741
atau memformat string dengan Python.

21648
20:40:14,741 --> 20:40:17,658
Sintaksnya sedikit berbeda\nhanya karena orang berakal sehat

21649
20:40:17,658 --> 20:40:19,991
tidak setuju, orang berbeda,\nkerangka kerja berbeda muncul

21650
20:40:19,991 --> 20:40:21,116
dengan konvensi yang berbeda.

21651
20:40:21,116 --> 20:40:23,982
Konvensi di Flask,\nin templatnya

21652
20:40:23,982 --> 20:40:26,442
adalah dengan menggunakan dua kurung kurawal di sini.

21653
20:40:26,441 --> 20:40:28,721
Harapannya adalah Anda,\nprogrammer, tidak akan pernah melakukan hal tersebut

21654
20:40:28,721 --> 20:40:32,241
ingin menampilkan dua kurung kurawal\ndi laman web Anda yang sebenarnya.

21655
20:40:32,241 --> 20:40:34,432
Namun meskipun Anda melakukannya,\nada solusinya.

21656
20:40:35,572 --> 20:40:39,012
Jadi sekarang izinkan saya melanjutkan\nkembali ke tab browser saya di sini.

21657
20:40:39,012 --> 20:40:41,922
Sebelumnya, meskipun\nSaya menambahkan nama sama dengan David

21658
20:40:41,922 --> 20:40:44,952
di akhir URL yang berisi pertanyaan\n

21659
20:40:44,952 --> 20:40:47,682
Tapi sekarang, mudah-mudahan, jika\nsaya melakukan perubahan ini

21660
20:40:47,682 --> 20:40:51,350
izinkan saya membuka\njendela terminal saya.

21661
20:40:51,350 --> 20:40:55,432
Izinkan saya memulai ulang Flask agar\nmemuat perubahan saya secara default.

21662
20:40:55,432 --> 20:40:59,380
Izinkan saya kembali ke tab halo dan\n

21663
20:41:01,001 --> 20:41:02,471
Dan ini dia, halo, David.

21664
20:41:02,471 --> 20:41:05,501
Saya bisa bermain-main sekarang dan saya bisa berubah\n

21665
20:41:07,842 --> 20:41:10,552
Dan sekarang kita memiliki sesuatu yang lebih dinamis.

21666
20:41:10,551 --> 20:41:14,741
Jadi bagian baru di sini adalah, di\nPython, kami memiliki beberapa kode di sini

21667
20:41:14,741 --> 20:41:18,551
yang memungkinkan kita mengakses,\nsecara terprogram, semuanya

21668
20:41:18,551 --> 20:41:20,711
itu setelah\ntanda tanya di URL.

21669
20:41:20,711 --> 20:41:26,622
Dan satu-satunya hal yang harus kita lakukan adalah\n

21670
20:41:26,622 --> 20:41:28,452
Anda dan saya tidak perlu\nbersusah payah mencari tahu

21671
20:41:28,452 --> 20:41:30,869
dimana tanda tanyanya,\ndimana tanda sama dengan, dimana

21672
20:41:30,869 --> 20:41:32,442
adalah ampersand, secara potensial.

21673
20:41:32,441 --> 20:41:36,221
Frameworknya, Flask,\ndomelakukan semua itu untuk kita.

21674
20:41:36,221 --> 20:41:43,251
Oke, ada pertanyaan tentang\nprinsip-prinsip ini sejauh ini?

21675
20:41:44,557 --> 20:41:50,142
AUDIENCE: Mengapa Anda menyebutkan\ntanda tanya di URL?

21676
20:41:50,142 --> 20:41:52,572
DAVID: Mengapa Anda memerlukan\ntanda tanya di URL?

21677
20:41:52,572 --> 20:41:59,152
Jawaban singkatnya adalah hanya karena itu\n

21678
20:41:59,152 --> 20:42:02,752
Jika Anda membuat permintaan GET\ndari browser ke server

21679
20:42:02,751 --> 20:42:07,451
konvensi, yang distandarisasi oleh\n

21680
20:42:07,452 --> 20:42:11,152
setelah yang disebut rute atau\njalur, lalu tanda tanya.

21681
20:42:11,152 --> 20:42:13,601
Dan itu menggambarkan\nbagian mana dari akar atau jalurnya

21682
20:42:13,601 --> 20:42:17,751
dan apa yang menjadi bagian\nmasukan manusia ke kanan.

21683
20:42:19,226 --> 20:42:22,872
HADIRIN: Bisakah Anda menjelaskan alasannya lagi\n

21684
20:42:23,372 --> 20:42:25,502
Ini adalah hal\nyang menjengkelkan tentang Python.

21685
20:42:25,501 --> 20:42:29,551
Saat Anda meneruskan parameter,\ndua fungsi yang memiliki nama

21686
20:42:29,551 --> 20:42:32,471
Anda biasanya mengatakan sesuatu\nesama dengan sesuatu yang lain.

21687
20:42:32,471 --> 20:42:35,042
Jadi izinkan saya membuat sedikit perubahan di sini.

21688
20:42:35,042 --> 20:42:39,372
Bagaimana kalau saya sebutkan nama orangnya di sini.

21689
20:42:39,372 --> 20:42:44,222
Hal ini memungkinkan saya untuk menciptakan\variabel saya yang sekarang untuk template saya

21690
20:42:44,221 --> 20:42:46,211
dan berikan nilai nama.

21691
20:42:46,211 --> 20:42:52,676
Namun, sekarang saya harus masuk ke\n

21692
20:42:57,072 --> 20:43:00,452
Jadi ini bodoh karena\itu terlalu bertele-tele.

21693
20:43:00,452 --> 20:43:04,442
Jadi yang biasanya dilakukan orang adalah\n

21694
20:43:04,441 --> 20:43:08,361
sendiri, meskipun memang terlihat\n

21695
20:43:08,361 --> 20:43:10,111
Yang ada di sebelah kiri\ntanda sama dengan adalah

21696
20:43:10,111 --> 20:43:14,221
nama variabel yang ingin Anda gunakan\n

21697
20:43:14,221 --> 20:43:16,231
adalah nilai sebenarnya yang Anda tetapkan.

21698
20:43:16,232 --> 20:43:18,092
Dan ini karena tujuan umumnya.

21699
20:43:18,092 --> 20:43:21,332
Saya dapat menggantinya dan saya selalu dapat\nmengatakan sesuatu seperti nama

21700
20:43:21,331 --> 20:43:23,881
sama dengan Emma, apa pun\nvariabelnya.

21701
20:43:23,881 --> 20:43:26,191
Dan sekarang jika saya kembali ke\nbrowser saya dan memuat ulang

21702
20:43:26,191 --> 20:43:30,121
tidak peduli apa yang ada di URL,\nDavid atau Carter, Itu selalu--

21703
20:43:34,142 --> 20:43:36,602
Oh, saya tidak mengubah template saya kembali.

21704
20:43:37,142 --> 20:43:40,412
Biarkan saya mengubahnya kembali menjadi\nnama, sehingga namanya ada di sana

21705
20:43:41,342 --> 20:43:43,892
Tapi aku sudah melakukan hardcode\nnama Emma, jadi sekarang kita yang melakukannya

21706
20:43:43,892 --> 20:43:47,492
hanya akan melihat Emma tidak peduli siapa namanya di URL.

21707
20:43:48,521 --> 20:43:51,781
Baiklah, jadi ini\nantarmuka pengguna yang buruk.

21708
20:43:51,782 --> 20:43:54,692
Jika, untuk mendapatkan ucapan\nuntuk hari itu, Anda, pengguna

21709
20:43:54,691 --> 20:43:57,182
harus mengubah\nURL secara manual, yang tidak pernah kami lakukan.

21710
20:43:57,182 --> 20:43:58,982
Ini bukan cara kerja halaman web.

21711
20:43:58,982 --> 20:44:02,972
Mekanisme apa yang lebih normal\n

21712
20:44:02,971 --> 20:44:06,661
dan memasukkannya ke\nURL itu secara otomatis?

21713
20:44:06,661 --> 20:44:09,542
Bagaimana kita melakukannya minggu lalu?

21714
20:44:11,262 --> 20:44:15,952
AUDIENCE: Kami memiliki bilah\npenelusuran dan kami [TIDAK TERDENGAR] Anda memilikinya

21715
20:44:15,952 --> 20:44:22,101
untuk membuat sesuatu di sana [Tak terdengar].

21716
20:44:22,101 --> 20:44:25,732
DAVID: Oke, jadi kita sudah membuat sesuatu di\n

21717
20:44:25,732 --> 20:44:29,601
Dan secara khusus, apa tagnya\n

21718
20:44:30,831 --> 20:44:32,761
DAVID: Maaf, sedikit lebih keras?

21719
20:44:36,441 --> 20:44:38,792
DAVID: Jadi tag masukan,\nindi dalam tag formulir.

21720
20:44:38,792 --> 20:44:41,536
Singkatnya, bentuk, atau\ntentu saja, cara kerja web

21721
20:44:41,536 --> 20:44:43,411
dan bagaimana kami biasanya\nmendapatkan masukan dari pengguna

21722
20:44:43,411 --> 20:44:46,739
apakah itu tombol atau kotak teks\n

21723
20:44:46,740 --> 20:44:48,782
Jadi mari kita lanjutkan dan menambahkan\nitu ke dalam campuran di sini.

21724
20:44:48,782 --> 20:44:52,702
Jadi mari kita tingkatkan aplikasi hello ini\n

21725
20:44:54,001 --> 20:44:58,101
Biarkan aku menyingkirkan\nhal-hal ini dan biarkan aku saja

21726
20:44:58,101 --> 20:45:03,891
punya file index.html yang sangat sederhana\n

21727
20:45:03,892 --> 20:45:06,242
pengguna untuk beberapa masukan sebagai berikut.

21728
20:45:06,241 --> 20:45:10,851
Aku akan kembali ke\n

21729
20:45:10,851 --> 20:45:13,851
nama pengguna, ini halaman saya\n

21730
20:45:14,642 --> 20:45:16,972
Jadi saya akan membuat tag formulir.

21731
20:45:16,971 --> 20:45:20,631
Metode yang akan saya gunakan untuk saat ini\n

21732
20:45:20,631 --> 20:45:23,092
Lalu, di dalam formulir itu, saya\nakan memiliki tag input.

21733
20:45:23,092 --> 20:45:25,634
Dan saya akan mematikan\autocomplete seperti yang kita lakukan minggu lalu.

21734
20:45:25,634 --> 20:45:29,542
Saya akan mengaktifkan fokus otomatis, jadi\n

21735
20:45:29,542 --> 20:45:33,263
Saya akan memberi nama\ndari masukan ini nama, nama.

21736
20:45:33,263 --> 20:45:35,971
Agar tidak terlalu membingungkan, tapi saya\n

21737
20:45:35,971 --> 20:45:39,531
Jadi masuk akal jika nama\n

21738
20:45:39,532 --> 20:45:42,232
Placeholder yang saya ingin\nmanusia lihat dalam teks abu-abu terang

21739
20:45:42,232 --> 20:45:45,262
akan menjadi Nama dengan huruf kapital N,\n

21740
20:45:45,262 --> 20:45:47,512
Dan kemudian ketik bidang teks ini--

21741
20:45:47,512 --> 20:45:49,372
jenis masukan ini akan berupa teks.

21742
20:45:49,372 --> 20:45:52,312
Kalau begitu aku akan memberikan diriku sendiri,\n

21743
20:45:52,312 --> 20:45:54,229
Dan saya tidak peduli apa yang\nit katakan, itu berjalan begitu saja

21744
20:45:54,229 --> 20:45:56,582
untuk mengatakan terminologi pengiriman default.

21745
20:45:56,581 --> 20:46:01,072
Biarkan saya melanjutkan sekarang, dan membuka\njendela terminal saya lagi.

21746
20:46:01,072 --> 20:46:06,232
Izinkan saya membuka URL yang sama\nagar saya dapat melihat-- ups.

21747
20:46:11,751 --> 20:46:13,301
Jadi itu baru saja di-cache dari sebelumnya.

21748
20:46:13,301 --> 20:46:16,601
Izinkan saya kembali ke\nURL yang sama, URL pratinjau.dev GitHub saya

21749
20:46:18,021 --> 20:46:19,932
Dan sekarang, saya bisa mengetik apa pun yang saya mau.

21750
20:46:19,932 --> 20:46:23,601
Namun kendalanya adalah ketika saya mengeklik\n

21751
20:46:24,642 --> 20:46:28,002
Itu memang memiliki nilai default,\ntapi izinkan saya masuk ke index.html saya

21752
20:46:28,001 --> 20:46:30,761
dan izinkan saya menambahkan, seperti yang\ndilakukan minggu lalu, Google.

21753
20:46:30,762 --> 20:46:36,188
Padahal sebelumnya saya mengatakan sesuatu\n

21754
20:46:36,188 --> 20:46:38,021
kami tidak akan bergantung\non pada pihak ketiga.

21755
20:46:38,021 --> 20:46:40,482
Saya akan menerapkan\nyang disebut backend

21756
20:46:40,482 --> 20:46:44,752
dan saya akan mendapatkan pengguna\n

21757
20:46:44,751 --> 20:46:47,381
bukan sekedar garis miring, bagaimana dengan /sapa.

21758
20:46:47,381 --> 20:46:48,941
Saya bisa menebusnya, apa pun yang saya inginkan.

21759
20:46:48,941 --> 20:46:53,411
Sapaan terasa seperti kata kunci yang bagus,\n

21760
20:46:53,411 --> 20:46:56,411
dikirim ketika mereka mengklik\nKirim formulir ini.

21761
20:46:56,411 --> 20:46:59,891
Baiklah, mari kita lanjutkan sekarang\nd kembali ke tab browser saya.

21762
20:46:59,892 --> 20:47:02,592
Biarkan saya melanjutkan,\ndbiarkan saya memuat ulang Flask

21763
20:47:02,592 --> 20:47:05,082
di sini agar memuat ulang\nsemua perubahan saya.

21764
20:47:05,081 --> 20:47:09,161
Biarkan saya memuat ulang tab ini sehingga saya mendapatkan\n

21765
20:47:10,271 --> 20:47:13,391
Jika saya melihat sumber laman, kami\nmemang melihatnya di browser saya

21766
20:47:13,392 --> 20:47:15,252
telah mengunduh HTML terbaru.

21767
20:47:15,251 --> 20:47:16,916
Jadi sudah pasti sudah berubah.

21768
20:47:16,917 --> 20:47:18,292
Mari kita lanjutkan dan ketikkan David.

21769
20:47:18,292 --> 20:47:22,062
Dan ketika saya mengklik Kirim\ndi sini, apa yang akan terjadi?

21770
20:47:25,262 --> 20:47:28,381
Apa yang akan terjadi secara visual,\nsecara fungsional, bagaimanapun Anda

21771
20:47:28,381 --> 20:47:32,301
ingin menafsirkan ketika saya klik Kirim.

21772
20:47:32,801 --> 20:47:34,346
AUDIENCE: [Tak terdengar] halaman kosong.

21773
20:47:34,346 --> 20:47:36,471
DAVID: Oke, pengguna akan\npergi ke halaman kosong.

21774
20:47:36,471 --> 20:47:37,763
Naluri yang cukup bagus, karena--

21775
20:47:37,763 --> 20:47:40,641
tidak di tempat lain, kalau saya sebutkan\n/sapa, sepertinya tidak ada.

21776
20:47:40,642 --> 20:47:44,872
Bagaimana URL-nya\nberubah, agar jelas?

21777
20:47:44,872 --> 20:47:47,122
Apa yang akan muncul\ntiba-tiba di URL?

21778
20:47:53,563 --> 20:47:56,438
Khususnya di URL, ada sesuatu\n

21779
20:47:56,994 --> 20:47:58,202
AUDIENCE: Pasangan nilai kunci?

21780
20:47:58,202 --> 20:47:59,577
DAVID: Pasangan nilai kunci, kanan.

21781
20:48:00,661 --> 20:48:02,941
Itu sebabnya\ntrik Google kami minggu lalu berhasil.

21782
20:48:02,941 --> 20:48:05,604
Saya semacam membuat ulang\nformulir di situs web saya sendiri.

21783
20:48:05,604 --> 20:48:08,521
Dan meskipun saya tidak berkeliling\n

21784
20:48:08,521 --> 20:48:12,182
Saya masih dapat mengirimkan informasinya\n

21785
20:48:13,351 --> 20:48:16,232
untuk pertanyaan Anda sebelumnya, yaitu\nsetiap kali Anda mengirimkan formulir

21786
20:48:16,232 --> 20:48:19,502
secara otomatis berakhir setelah\na tanda tanya di URL

21787
20:48:20,432 --> 20:48:23,221
Jadi kalian berdua\nbenar, ini akan pecah.

21788
20:48:23,221 --> 20:48:26,761
Dan Anda bertiga benar,\nin efeknya, 404 tidak ditemukan.

21789
20:48:26,762 --> 20:48:28,211
Anda dapat melihatnya di tab di sini.

21790
20:48:28,211 --> 20:48:29,711
Itulah kesalahan yang muncul kembali.

21791
20:48:29,711 --> 20:48:33,482
Namun yang menarik, dan yang paling\npenting, URL-nya memang berubah.

21792
20:48:33,482 --> 20:48:37,652
Dan itu pergi ke /greet?name=david.

21793
20:48:37,652 --> 20:48:40,021
Jadi sekarang saya hanya perlu menambahkan\nbeberapa logika yang sebenarnya

21794
20:48:40,021 --> 20:48:41,762
mencari apa yang disebut rute itu.

21795
20:48:41,762 --> 20:48:44,282
Jadi izinkan saya kembali ke app.py saya.

21796
20:48:44,282 --> 20:48:49,442
Izinkan saya menentukan rute lain untuk,\nkutipan tanda kutip, "salam garis miring.

21797
20:48:49,441 --> 20:48:52,961
Lalu, di dalam-- di bawah ini,\n

21798
20:48:52,961 --> 20:48:56,042
Saya akan menyebutnya salam, namun saya\nbisa menyebutnya apa pun yang saya inginkan.

21799
20:48:56,042 --> 20:48:58,711
Tidak ada argumen, untuk saat ini,\nuntuk ini, dan kemudian

21800
20:48:58,711 --> 20:49:02,191
izinkan saya melanjutkan dan\melakukan ini di app.py saya.

21801
20:49:02,191 --> 20:49:05,051
Kali ini, saya ingin\nmengetahui nama manusianya.

21802
20:49:05,051 --> 20:49:09,061
Jadi izinkan saya mengatakan requeste.args\nget quote tanda kutip "nama"

21803
20:49:09,062 --> 20:49:11,101
dan izinkan saya menyimpannya di\na variabel bernama nama.

21804
20:49:11,101 --> 20:49:14,792
Kalau begitu izinkan saya mengembalikan\ntemplatnya, dan Anda tahu

21805
20:49:14,792 --> 20:49:17,372
apa, saya akan memberikan sendiri\na template baru,greet.html.

21806
20:49:17,372 --> 20:49:19,622
Karena ini mempunyai\ntujuan yang berbeda, maka ini bukan bentuk.

21807
20:49:19,622 --> 20:49:22,562
Saya ingin menyapa\pengguna di file HTML ini

21808
20:49:22,562 --> 20:49:27,722
dan saya ingin menyampaikan, ke dalamnya,\n

21809
20:49:27,721 --> 20:49:34,081
Baiklah, jadi sekarang jika saya naik dan\n

21810
20:49:36,241 --> 20:49:39,691
Jika saya melanjutkan dan menekan muat ulang atau kirim ulang\n

21811
20:49:46,241 --> 20:49:48,652
Biarkan aku mencoba, jadi mari kita coba ini.

21812
20:49:48,652 --> 20:49:50,232
Mari lanjutkan dan muat ulang halaman ini.

21813
20:49:50,232 --> 20:49:51,741
Sebelumnya tidak ditemukan.

21814
20:49:51,741 --> 20:49:55,661
Sekarang lebih buruk, dan ini\nkesalahan 500, server internal

21815
20:49:55,661 --> 20:49:59,891
kesalahan yang saya janjikan minggu depan akan kami lakukan\n

21816
20:49:59,892 --> 20:50:01,782
Namun di sini kami mengalami kesalahan\ninserver internal.

21817
20:50:01,782 --> 20:50:05,512
Karena ini kesalahan internal, ini\n

21818
20:50:05,512 --> 20:50:09,042
Jadi rutenya benar-benar ditemukan\n

21819
20:50:09,042 --> 20:50:14,502
Namun jika kita masuk ke VS Code di sini dan\n

21820
20:50:17,622 --> 20:50:21,042
ini sebenarnya agak menyesatkan.

21821
20:50:32,202 --> 20:50:34,872
Oke, ini\nkesalahan ini, dan ini

21822
20:50:34,872 --> 20:50:37,241
di sinilah jendela terminal Anda\nis akan berguna.

21823
20:50:37,241 --> 20:50:40,152
Di jendela terminal Anda,\nsecara default, biasanya

21824
20:50:40,152 --> 20:50:43,271
akan pergi ke hal-hal yang berguna\nseperti log, L-O-G

21825
20:50:43,271 --> 20:50:46,608
tentang apa yang dilihat\server dari browser.

21826
20:50:46,608 --> 20:50:48,941
Misalnya, inilah yang\nserver lihat dalam warna ungu.

21827
20:50:48,941 --> 20:50:54,072
Dapatkan /greet?name=david\nusing HTTP versi 1.0.

21828
20:50:54,072 --> 20:50:57,551
Ini adalah kode status\nyang dikembalikan server, 500.

21829
20:50:58,601 --> 20:51:02,021
Nah, di sinilah kita mendapatkan ini\n

21830
20:51:02,021 --> 20:51:03,851
help50 itu mungkin\npada akhirnya membantu Anda

21831
20:51:03,851 --> 20:51:07,164
atau di sini, kami mungkin\nmemiliki petunjuk di bagian bawah.

21832
20:51:07,164 --> 20:51:09,581
Dan ini sebenarnya cukup\njelas, meskipun kita belum pernah melakukannya

21833
20:51:11,892 --> 20:51:14,472
Saya hanya tidak membuatgreet.html, kan?

21834
20:51:15,498 --> 20:51:17,831
Baiklah, jadi itu pasti\nkepingan terakhir dari teka-teki ini.

21835
20:51:17,831 --> 20:51:21,221
Dan sekali lagi, mewakili cara Anda\n

21836
20:51:21,221 --> 20:51:24,311
izinkan saya masuk ke jendela terminal saya.

21837
20:51:24,312 --> 20:51:28,812
Setelah menekan Kontrol C, yang\nmembatalkan atau menghentikan suatu proses

21838
20:51:28,812 --> 20:51:30,792
izinkan saya masuk ke direktori templat saya.

21839
20:51:30,792 --> 20:51:33,672
Jika saya mengetik ls, saya hanya punya index.html.

21840
20:51:33,672 --> 20:51:36,222
Jadi mari kita membuat kodegreet.html.

21841
20:51:36,221 --> 20:51:40,121
Dan dalam file ini mari\ncepat melakukan tipe doc.

21842
20:51:40,122 --> 20:51:44,922
Jenis dokumen HTML, kurung buka\nHTML, bahasa sama dengan bahasa Inggris.

21843
20:51:44,922 --> 20:51:48,851
Di dalamnya, saya akan memiliki tag kepala,\n

21844
20:51:48,851 --> 20:51:53,501
Namanya adalah area pandang,\nisinya adalah--

21845
20:51:55,782 --> 20:52:02,982
Isinya adalah skala awal\n

21846
20:52:02,982 --> 20:52:05,892
Kutip tanda kutip, judul\nimasih akan ada

21847
20:52:05,892 --> 20:52:08,292
Saya akan menyebutnya salam\nkarena ini adalah template saya.

21848
20:52:08,292 --> 20:52:13,642
Lalu di sini, di badan, saya\nakan menggunakan nama koma halo.

21849
20:52:13,642 --> 20:52:17,862
Jadi saya bisa tetap menggunakan yang lama\n

21850
20:52:17,861 --> 20:52:19,331
pada dasarnya, template kedua saya.

21851
20:52:19,331 --> 20:52:22,961
Jadi index.html sekarang hampir sama\ntapi judulnya berbeda

21852
20:52:24,342 --> 20:52:27,552
greet.html hampir sama,\ntetapi tidak memiliki bentuk.

21853
20:52:27,551 --> 20:52:29,781
Itu hanya memiliki nama koma halo.

21854
20:52:29,782 --> 20:52:34,272
Jadi izinkan saya melanjutkan dan\nmenjalankannya kembali di direktori yang benar.

21855
20:52:34,271 --> 20:52:38,842
Anda harus menjalankan Flask di mana pun app.py\n

21856
20:52:38,842 --> 20:52:41,802
Jadi izinkan saya melakukan Flask run untuk\ngkembali ke tempat saya berada.

21857
20:52:41,801 --> 20:52:43,661
Biarkan saya masuk ke tab saya yang lain.

21858
20:52:43,661 --> 20:52:46,841
Silangkan jariku kali ini\nitu, saat aku kembali menebas

21859
20:52:46,842 --> 20:52:51,792
dan saya mendapatkan formulir index.html, sekarang\n

21860
20:52:54,491 --> 20:52:58,001
Dan sekarang kami memiliki web yang lengkap\n

21861
20:52:58,001 --> 20:53:03,191
garis miring dan /sapa, yang terakhir dari\n

21862
20:53:03,191 --> 20:53:05,231
menggunakan templat, keluarkan.

21863
20:53:05,232 --> 20:53:08,752
Namun mungkin ada yang tidak beres,\nandan mari kita lihat apa yang terjadi di sini.

21864
20:53:08,751 --> 20:53:11,381
Misalkan saya tidak mengetik apa pun.

21865
20:53:11,381 --> 20:53:13,631
Biarkan saya pergi ke sini dan klik Kirim.

21866
20:53:13,631 --> 20:53:16,423
Maksudku, itu terlihat bodoh.

21867
20:53:16,423 --> 20:53:18,381
Jadi ada banyak\ncara yang bisa kita lakukan untuk mengatasi masalah ini.

21868
20:53:18,381 --> 20:53:21,822
Saya dapat meminta pengguna\nmemiliki masukan pada halaman sebelumnya

21869
20:53:21,822 --> 20:53:23,955
Saya dapat melakukan semacam\npemeriksaan kesalahan untuk ini.

21870
20:53:23,955 --> 20:53:26,622
Namun ada mekanisme lain yang dapat saya\ngunakan dan akan saya tunjukkan kepada Anda.

21871
20:53:26,622 --> 20:53:30,911
Ternyata fungsi GET ini,\dalam konteks HTTP

21872
20:53:30,911 --> 20:53:33,161
dan juga secara umum dengan\nkamus Python

21873
20:53:33,161 --> 20:53:35,572
Anda sebenarnya dapat memberikan nilai default.

21874
20:53:35,572 --> 20:53:39,941
Jadi jika tidak ada parameter nama\n

21875
20:53:39,941 --> 20:53:42,591
Anda sebenarnya dapat memberikannya\na nilai default seperti ini.

21876
20:53:42,592 --> 20:53:44,771
Jadi saya akan mengatakan dunia, misalnya.

21877
20:53:46,211 --> 20:53:48,342
Izinkan saya tidak mengetik apa pun\na lagi dan klik Kirim.

21878
20:53:48,342 --> 20:53:52,032
Dan mudah-mudahan kali ini,\nsaya akan melakukannya-- ups, maaf.

21879
20:53:52,032 --> 20:53:54,792
Izinkan saya memulai ulang Flask\nuntuk memuat ulang template.

21880
20:53:54,792 --> 20:53:57,851
Izinkan saya melanjutkan dan tidak mengetik apa pun\nkali ini, klik Kirim.

21881
20:54:05,622 --> 20:54:09,461
Misalkan alasannya ini--

21882
20:54:11,021 --> 20:54:15,191
Misalkan saya hanya menghilangkan nama\n

21883
20:54:15,191 --> 20:54:17,831
Sekarang saya melihat halo, dunia,\dan ini adalah kehalusan

21884
20:54:17,831 --> 20:54:19,961
bahwa saya tidak bermaksud untuk masuk ke sini.

21885
20:54:19,961 --> 20:54:23,381
Bila Anda memiliki tanda tanya\nnama tidak berarti apa-apa

21886
20:54:23,381 --> 20:54:25,421
Anda meneruskan\napa namanya-- ups.

21887
20:54:25,422 --> 20:54:29,112
Saat Anda menyapa pertanyaan\ntandai nama sama dengan sesuatu

21888
20:54:29,111 --> 20:54:31,841
Anda sebenarnya memberi nilai pada nama.

21889
20:54:31,842 --> 20:54:34,482
Ini adalah kutipan tanpa tanda kutip\ntanpa ada apa pun di antaranya.

21890
20:54:34,482 --> 20:54:36,952
Hal ini berbeda dengan\ntidak mempunyai nilai sama sekali.

21891
20:54:36,952 --> 20:54:40,965
Jadi izinkan saya untuk mengusulkan\nbahwa kesalahannya ada di sini, kami

21892
20:54:40,964 --> 20:54:42,881
ingin meminta\nini dengan cara yang berbeda.

21893
20:54:42,881 --> 20:54:45,372
Dan mungkin cara paling\nkuat untuk melakukan ini

21894
20:54:45,372 --> 20:54:51,021
akan masuk ke sini, di HTML saya, dan\n

21895
20:54:51,021 --> 20:54:55,751
Sekarang, jika saya kembali ke formulir\nsetelah memulai ulang Flask di sini

21896
20:54:55,751 --> 20:54:59,711
dan saya lanjutkan dan klik muat ulang\bukan formulir saya dan tidak mengetik apa pun

21897
20:54:59,711 --> 20:55:03,342
dan klik Kirim, sekarang\nbrowser akan membentak saya.

21898
20:55:03,342 --> 20:55:05,502
Tapi hanya sebagai teaser\nuntuk sesuatu yang akan kita lakukan

21899
20:55:05,501 --> 20:55:08,231
lakukan di kumpulan masalah berikutnya\nin dalam hal pemeriksaan kesalahan

21900
20:55:08,232 --> 20:55:14,771
Anda tidak boleh pernah mengandalkan\n

21901
20:55:14,771 --> 20:55:19,301
Karena kita tahu, dari minggu lalu, itu\n

21902
20:55:19,301 --> 20:55:21,682
dan izinkan saya melihat-lihat HTML di sini.

21903
20:55:21,682 --> 20:55:24,042
Biarkan aku masuk ke dalam tubuh, wujud.

21904
20:55:24,042 --> 20:55:26,661
Oke, Anda bilang wajib,\nSaya bilang tidak wajib.

21905
20:55:26,661 --> 20:55:29,721
Anda cukup menghapus apa yang ada\di dalam dom, di browser

21906
20:55:29,721 --> 20:55:32,682
dan sekarang saya dapat melanjutkan\nmenyerahkan formulir ini.

21907
20:55:32,682 --> 20:55:34,271
Dan tampaknya rusak.

21908
20:55:34,271 --> 20:55:37,461
Bukan masalah besar dengan hal kecil yang konyol\n

21909
20:55:37,461 --> 20:55:40,512
Namun jika Anda mencoba\nmembutuhkan manusia itu sebenarnya

21910
20:55:40,512 --> 20:55:43,902
memberikan masukan yang diperlukan untuk\n

21911
20:55:43,902 --> 20:55:49,452
Anda tidak ingin mempercayai HTML\n

21912
20:55:49,452 --> 20:55:52,332
Baiklah, ada pertanyaan,\ntentang aplikasi khusus ini

21913
20:55:52,331 --> 20:55:56,211
sebelum kita menambahkan fitur lain di sini?

21914
20:55:59,947 --> 20:56:01,911
HADIRIN: Apakah kalian [Tak terdengar].

21915
20:56:04,255 --> 20:56:05,422
DAVID: Maaf, sedikit lebih keras.

21916
20:56:14,270 --> 20:56:15,812
DAVID: Apakah akan menjadi masalah jika apa?

21917
20:56:15,812 --> 20:56:17,285
HADIRIN: Anda harus [Tak terdengar].

21918
20:56:22,122 --> 20:56:24,521
Apa yang sebenarnya harus Anda lakukan adalah sesuatu\n

21919
20:56:24,521 --> 20:56:26,092
di mana saya akan memulai\npemeriksaan kesalahan.

21920
20:56:26,092 --> 20:56:27,792
Jadi izinkan saya melambaikan tangan\nitu dan mengusulkan agar kita melakukannya

21921
20:56:27,792 --> 20:56:29,259
selesaikan ini dengan lebih baik sebentar lagi.

21922
20:56:29,259 --> 20:56:31,301
Tapi tidak buruk untuk melakukan\napa yang baru saja saya lakukan di sini, itu

21923
20:56:31,301 --> 20:56:34,241
hanya akan menangani salah satu\n

21924
20:56:35,751 --> 20:56:38,051
Baiklah, meskipun\nini adalah hal baru bagi sebagian besar dari kita

21925
20:56:38,051 --> 20:56:43,391
di sini, pertimbangkan index.html,\n pertama saya

21926
20:56:45,551 --> 20:56:48,783
Apa yang mungkin dirancang dengan buruk?

21927
20:56:48,783 --> 20:56:50,741
Meskipun ini mungkin\npertama kalinya Anda melakukannya

21928
20:56:50,741 --> 20:56:54,461
pernah menyentuh pemrograman web seperti ini.

21929
20:56:54,461 --> 20:57:01,902
Apa yang buruk atau bodoh tentang ini\n

21930
20:57:01,902 --> 20:57:05,831
Dan ada alasannya juga, aku bosan\n

21931
20:57:06,642 --> 20:57:11,415
HADIRIN: [TIDAK TERDENGAR] Anda bilang,\n

21932
20:57:11,414 --> 20:57:13,081
DAVID: Ya, ada banyak pengulangan.

21933
20:57:13,081 --> 20:57:16,322
Maksudku, itu sengaja dibuat membosankan\n

21934
20:57:16,322 --> 20:57:19,351
Jenis dokumen, tag HTML,\ntag kepala, tag judul.

21935
20:57:19,351 --> 20:57:21,991
Dan ada hal-hal kecil yang berubah\ndalam prosesnya, seperti judulnya

21936
20:57:21,991 --> 20:57:24,031
dan yang pasti, isi tubuhnya.

21937
20:57:24,032 --> 20:57:27,302
Tapi sebagian besarnya, maksud saya, hampir seluruh halaman

21938
20:57:27,301 --> 20:57:30,599
adalah salinan dirinya sendiri dalam banyak file.

21939
20:57:30,599 --> 20:57:33,932
Dan Tuhan melarang kita memiliki template ketiga,\n

21940
20:57:35,072 --> 20:57:37,441
Ini akan menjadi sangat\nmembosankan dengan sangat cepat.

21941
20:57:37,441 --> 20:57:39,970
Dan misalkan Anda ingin\nmengubah sesuatu di satu tempat

21942
20:57:39,970 --> 20:57:43,262
Anda harus mengubahnya sekarang di\n

21943
20:57:43,961 --> 20:57:46,741
Jadi sama seperti dalam\npemrograman secara umum

21944
20:57:46,741 --> 20:57:49,230
kami memiliki kemampuan untuk\nmemfaktorkan kesamaan.

21945
20:57:49,230 --> 20:57:51,480
Begitu juga dengan Anda dalam konteks\npemrograman web

21946
20:57:51,480 --> 20:57:54,271
dan khususnya\ntemplate, memiliki kemampuan

21947
20:57:54,271 --> 20:57:56,379
untuk memperhitungkan semua\nkesamaan tersebut.

21948
20:57:56,379 --> 20:57:58,171
Sintaksnya akan\nmenjadi sedikit membuat penasaran

21949
20:57:58,171 --> 20:58:01,092
namun secara fungsional\ncukup mudah.

21950
20:58:02,292 --> 20:58:06,301
Izinkan saya menyalin\nkonten index.html.

21951
20:58:06,301 --> 20:58:09,182
Biarkan saya masuk ke direktori\ntemplate saya dan membuat kode file itu

21952
20:58:09,182 --> 20:58:12,131
secara default, disebut layout.html.

21953
20:58:12,131 --> 20:58:15,751
Dan izinkan saya melanjutkan, dan sesuai\njawaban Anda, salin semuanya

21954
20:58:15,751 --> 20:58:18,282
kesamaan ke dalam\nfile ini sekarang.

21955
20:58:18,282 --> 20:58:21,151
Jadi di sini saya punya file\nbernama layout.html.

21956
20:58:21,150 --> 20:58:26,311
Saya tidak ingin memberikan setiap halaman yang sama\n

21957
20:58:26,312 --> 20:58:27,782
Saya akan menyebut semuanya halo.

21958
20:58:27,782 --> 20:58:30,662
Namun di bagian isi halaman,\nyang akan saya lakukan di sini hanyalah

21959
20:58:30,661 --> 20:58:35,262
memiliki placeholder untuk\nkonten aktual yang berubah.

21960
20:58:35,262 --> 20:58:38,131
Jadi dalam tata letak ini, saya\nakan melanjutkan ke sini

21961
20:58:38,131 --> 20:58:42,822
dan letakkan saja di badan\nhalaman saya, bagaimana dengan sintaksis ini?

21962
20:58:44,372 --> 20:58:48,782
Blok isi, lalu tanda persen\ntanda kurung kurawal tutup.

21963
20:58:48,782 --> 20:58:50,972
Dan kemudian saya akan melakukan blok akhir.

21964
20:58:50,971 --> 20:58:55,891
Jadi sintaksnya aneh di sini, tapi\nini lebih merupakan sintaksis templat.

21965
20:58:55,892 --> 20:58:59,222
Sintaks templat lain yang kami lihat\n

21966
20:58:59,221 --> 20:59:01,051
Itu hanya untuk memasukkan nilai.

21967
20:59:01,051 --> 20:59:05,311
Ada sintaks lain dengan Flask\n

21968
20:59:05,312 --> 20:59:10,112
kurung kurawal, tanda persen, lalu beberapa\n

21969
20:59:10,892 --> 20:59:13,382
Dan yang ini agak aneh\nkarena memang ada

21970
20:59:13,381 --> 20:59:16,721
tidak ada apa pun di antara kurung kurawal dekat\ndan kurung kurawal terbuka di sini.

21971
20:59:16,721 --> 20:59:19,201
Tapi mari kita lihat apa manfaatnya bagi kita.

21972
20:59:19,202 --> 20:59:25,682
Sekarang izinkan saya masuk ke index.html saya, yang mana\n

21973
20:59:25,682 --> 20:59:28,952
dari, dan izinkan saya fokus pada\nhal yang sedikit berbeda.

21974
20:59:28,952 --> 20:59:33,881
Satu-satunya hal yang benar-benar berbeda\n

21975
20:59:33,881 --> 20:59:37,682
Jadi biarkan saya melanjutkan dan memotong\nformulir itu ke clipboard saya.

21976
20:59:37,682 --> 20:59:40,441
Izinkan saya mengubah\nbaris pertama index.html

21977
20:59:40,441 --> 20:59:46,741
untuk mengatakan file ini akan\ndiperluas layout.html

21978
20:59:46,741 --> 20:59:48,932
dan perhatikan saya menggunakan\nkurung kurawal lagi.

21979
20:59:48,932 --> 20:59:52,381
Dan file ini akan\nmemiliki blok bodynya sendiri

21980
20:59:52,381 --> 20:59:57,301
yang di dalamnya hanyalah\nHTML yang saya sebenarnya

21981
20:59:57,301 --> 20:59:59,792
ingin membuat spesifik untuk halaman ini.

21982
20:59:59,792 --> 21:00:02,051
Dan saya akan menjaga lekukan saya\nnbagus dan rapi di sini.

21983
21:00:02,051 --> 21:00:03,542
Dan mari kita pertimbangkan apa yang telah saya lakukan.

21984
21:00:03,542 --> 21:00:05,971
Ini mulai terlihat\naneh dengan cepat, dan inilah yang terjadi sekarang

21985
21:00:05,971 --> 21:00:09,871
campuran HTML dengan kode templating.

21986
21:00:09,872 --> 21:00:15,961
Index.html, baris pertama sekarang berkata, hei,\n

21987
21:00:17,072 --> 21:00:20,402
Baris berikutnya, tiga sampai\n10, berbunyi, hai, Flask, ini

21988
21:00:20,402 --> 21:00:23,732
adalah apa yang saya anggap sebagai blok tubuh saya.

21989
21:00:23,732 --> 21:00:27,362
Hubungkan ini ke placeholder tata letak.

21990
21:00:27,361 --> 21:00:33,611
Oleh karena itu, sekarang saya kembali\nke layout.html, dan layout.html

21991
21:00:33,611 --> 21:00:35,671
sebaliknya hampir semuanya HTML.

21992
21:00:35,672 --> 21:00:38,757
Namun ada pengganti ini, dan\n

21993
21:00:39,631 --> 21:00:41,402
Jika saya ingin memberikan\ndnilai default, saya bisa

21994
21:00:41,402 --> 21:00:45,002
masukkan nilai default di sana untuk berjaga-jaga\n

21995
21:00:45,001 --> 21:00:47,171
Namun secara umum, hal tersebut\ntidak akan relevan.

21996
21:00:47,172 --> 21:00:50,882
Jadi ini hanyalah pengganti,\n

21997
21:00:50,881 --> 21:00:54,491
masukkan konten\nkhusus laman di sini.

21998
21:00:54,491 --> 21:00:58,262
Jadi sekarang saya masuk kegree.html,\nyang ini lebih mudah.

21999
21:00:58,262 --> 21:01:01,262
Saya akan memotong konten ini\dan membuang yang lainnya.

22000
21:01:01,262 --> 21:01:06,842
Greet.html 2 akan diperluas\n

22001
21:01:06,842 --> 21:01:13,512
lalu aku akan membuat body blockku\n

22002
21:01:13,512 --> 21:01:15,961
Lalu saya akan melanjutkan\nadan mengakhiri blok itu di sini.

22003
21:01:15,961 --> 21:01:18,812
Ini bukan tag HTML,\nini bukan sintaksis HTML.

22004
21:01:18,812 --> 21:01:22,741
Secara teknis, sintaksisnya selalu kita\nlihat dengan kurung kurawal

22005
21:01:22,741 --> 21:01:28,982
dan ini sekarang kurung kurawal dengan persen\n

22006
21:01:28,982 --> 21:01:33,812
J-I-N-J-A, yang merupakan bahasa,\nyang ditemukan oleh beberapa manusia

22007
21:01:33,812 --> 21:01:35,732
untuk tujuan templating ini.

22008
21:01:35,732 --> 21:01:37,952
Dan orang-orang yang\nmenciptakan Flask memutuskan

22009
21:01:37,952 --> 21:01:40,052
kami tidak akan membuat\nsintaks kami sendiri

22010
21:01:40,051 --> 21:01:44,066
kita akan menggunakan yang lain\n

22011
21:01:44,066 --> 21:01:46,441
Jadi sekali lagi, mulai ada\nat titik ini dalam kursus ini

22012
21:01:46,441 --> 21:01:50,371
dan dalam bidang komputasi, banyak sekali\n

22013
21:01:50,952 --> 21:01:54,842
Jadi Flask menggunakan sintaks ini, tapi\n

22014
21:01:57,032 --> 21:02:01,832
Baiklah, jadi sekarang\nindex.html adalah setengah HTML

22015
21:02:01,831 --> 21:02:04,261
setengah kode templating, sintaksis Jinja.

22016
21:02:04,262 --> 21:02:08,012
Greet.html hampir semuanya\nsintaks Jinja, bahkan tidak ada tag

22017
21:02:08,012 --> 21:02:11,582
tetapi karena keduanya\nextend layout.html

22018
21:02:11,581 --> 21:02:14,911
sekarang saya rasa saya telah memperbaiki\ndesain benda ini.

22019
21:02:14,911 --> 21:02:18,941
Jika saya kembali ke app.py, semua ini\ntidak perlu diubah.

22020
21:02:18,941 --> 21:02:22,111
Saya tidak mengubah templat saya\nuntuk menyebutkan layout.html

22021
21:02:22,111 --> 21:02:25,621
itu sudah tersirat dalam fakta\n

22022
21:02:25,622 --> 21:02:28,741
Jadi sekarang jika saya melanjutkan dan\membuka jendela terminal saya

22023
21:02:28,741 --> 21:02:32,822
kembali ke folder yang sama\nas app.py dan jalankan Flask

22024
21:02:32,822 --> 21:02:35,732
baiklah, aplikasi saya\nberjalan pada port 5000.

22025
21:02:35,732 --> 21:02:39,392
Sekarang izinkan saya kembali ke /route\nin browser saya dan tekan Enter

22026
21:02:40,682 --> 21:02:44,252
Dan sebagai pemeriksaan kecil, izinkan\nsaya melihat sumber halamannya

22027
21:02:45,932 --> 21:02:48,361
Dan ada semua kodenya.

22028
21:02:48,361 --> 21:02:51,421
Tidak ada penyebutan Jinja, tidak ada kurung kurawal\n, tidak ada tanda persen.

22029
21:02:52,096 --> 21:02:54,721
Cetakannya kurang bagus\ndengan cara yang sama, tapi tidak masalah.

22030
21:02:54,721 --> 21:02:57,263
Karena sekarang, kami mulai\nmembuat situs web secara dinamis.

22031
21:02:57,263 --> 21:03:00,512
Maksudku, ini bukan\n

22032
21:03:01,111 --> 21:03:03,871
Jika diindentasi dalam versi\nkode sumber

22033
21:03:03,872 --> 21:03:05,911
tidak peduli apa\nyang sebenarnya dilihat browser.

22034
21:03:05,911 --> 21:03:08,402
Sekarang izinkan saya mengetik\n nama saya, klik Kirim.

22035
21:03:08,402 --> 21:03:10,051
Aku harus menemuinya, ya, halo, David.

22036
21:03:10,051 --> 21:03:12,152
Izinkan saya melihat\nsumber laman ini.

22037
21:03:12,152 --> 21:03:16,211
Dan kita akan melihat hal yang hampir sama\n

22038
21:03:16,211 --> 21:03:19,741
Jadi inilah pemrograman web\nin dalam arti sebenarnya.

22039
21:03:19,741 --> 21:03:23,042
Saya tidak melakukan hard coding pada halaman yang bertuliskan\n

22040
21:03:24,032 --> 21:03:27,752
Saya melakukan hardcode pada halaman yang memiliki\ntemplate dengan placeholder

22041
21:03:27,751 --> 21:03:31,471
dan sekarang saya menggunakan\nlogika aktual, beberapa kode di app.py

22042
21:03:31,471 --> 21:03:37,751
untuk benar-benar memberitahu server\napa yang harus dikirim ke browser.

22043
21:03:37,751 --> 21:03:42,901
Baiklah, ada pertanyaan,\nlalu, di mana kita berada di sini?

22044
21:03:42,902 --> 21:03:45,271
Ini sekarang menjadi aplikasi web.

22045
21:03:45,271 --> 21:03:49,051
Meski sederhana, ini\nbukan lagi sekadar situs web.

22046
21:03:49,922 --> 21:03:54,521
HADIRIN: Apakah yang kami lakukan menjadi lebih baik\n

22047
21:03:54,521 --> 21:03:57,232
DAVID: Lebih baik untuk\ndesain atau untuk memori?

22048
21:03:57,732 --> 21:03:59,922
Ini jelas lebih baik\nuntuk desain karena, sungguh

22049
21:03:59,922 --> 21:04:02,112
jika kita punya halaman ketiga,\nhalaman keempat, saya akan melakukannya

22050
21:04:02,111 --> 21:04:03,911
mulai hanya menggunakan copy paste.

22051
21:04:03,911 --> 21:04:07,031
Dan seperti yang Anda lihat di laman beranda,\seringkali, di bagian atas laman Anda

22052
21:04:07,032 --> 21:04:10,632
Anda mungkin ingin memasukkan beberapa CSS\n

22053
21:04:10,631 --> 21:04:13,122
Anda mungkin ingin\ninformasi lain di sana.

22054
21:04:13,122 --> 21:04:16,754
Jika Anda harus meningkatkan versi\n

22055
21:04:16,754 --> 21:04:18,461
jadi Anda ingin mengubah\tidak satupun dari baris tersebut

22056
21:04:18,461 --> 21:04:21,851
Anda benar-benar harus masuk ke\n

22057
21:04:26,501 --> 21:04:30,731
Secara teoritis, server, karena\n

22058
21:04:30,732 --> 21:04:33,394
secara teori ia dapat melakukan beberapa\npengoptimalan di balik layar.

22059
21:04:33,394 --> 21:04:36,101
Flask mungkin melakukan hal itu, tapi\n

22060
21:04:36,101 --> 21:04:38,021
Kami menggunakannya dalam\nmode pengembangan, yang mana

22061
21:04:38,021 --> 21:04:41,592
artinya biasanya\nmemuat ulang sesuatu setiap saat.

22062
21:04:41,592 --> 21:04:44,802
Pertanyaan lain tentang aplikasi ini?

22063
21:04:48,842 --> 21:04:54,461
Baiklah, izinkan saya mengajukan pertanyaan,\n

22064
21:04:54,461 --> 21:04:56,641
Bagaimana dengan implikasinya terhadap privasi?

22065
21:04:56,642 --> 21:05:02,192
Mengapa ini mungkin bukan desain terbaik\n

22066
21:05:05,066 --> 21:05:06,491
AUDIENCE: Untuk beberapa alasan,\nAnda menginginkan nama Anda.

22067
21:05:06,491 --> 21:05:08,682
Jadi orang-orang pribadi ini\nbisa saja melihat URL-nya.

22068
21:05:09,182 --> 21:05:11,042
Maksudku, kalau kamu punya\nsaudara kandung atau teman sekamar yang usil

22069
21:05:11,042 --> 21:05:13,051
dan mereka memiliki akses ke\nlaptop Anda dan mereka hanya

22070
21:05:13,051 --> 21:05:15,301
telusuri\autocomplete atau riwayat Anda

22071
21:05:15,301 --> 21:05:18,331
misalnya, apa yang Anda ketik\n

22072
21:05:18,331 --> 21:05:21,331
Bukan masalah besar jika itu nama Anda, tapi\n

22073
21:05:21,331 --> 21:05:23,551
kartu atau apa pun\nyang agak sensitif

22074
21:05:23,551 --> 21:05:26,941
Anda mungkin tidak ingin\nmuncul di URL sama sekali

22075
21:05:26,941 --> 21:05:29,402
meskipun Anda berada dalam\ninmode penyamaran atau yang lainnya.

22076
21:05:29,402 --> 21:05:34,152
Anda hanya tidak ingin mengekspos diri Anda sendiri\n

22077
21:05:34,152 --> 21:05:35,941
Jadi mungkin kita bisa melakukan lebih baik dari itu.

22078
21:05:35,941 --> 21:05:38,311
Dan untungnya, perubahan ini\sebenarnya merupakan perubahan yang mudah.

22079
21:05:38,312 --> 21:05:43,502
Izinkan saya masuk ke\nindex.html tempat formulir saya berada.

22080
21:05:43,501 --> 21:05:48,271
Dan di formulir saya, saya cukup mengubah\nmetode dari GET menjadi POST.

22081
21:05:48,271 --> 21:05:50,911
Ini masih akan mengirimkan pasangan kunci\nnilai ke server

22082
21:05:50,911 --> 21:05:52,951
tapi itu tidak akan\nmemasukkannya ke dalam URL.

22083
21:05:52,952 --> 21:05:56,256
Keuntungannya adalah kami\ndapat meredakan masalah privasi ini

22084
21:05:56,256 --> 21:05:58,381
tapi aku juga harus\nmelakukan satu perubahan lagi.

22085
21:05:58,381 --> 21:06:02,851
Karena sekarang, jika saya teruskan dan lari\n

22086
21:06:02,851 --> 21:06:07,331
dan sekarang saya memuat ulang formulir untuk membuat\n

22087
21:06:07,331 --> 21:06:10,171
Anda harus terbiasa\nmembuka Lihat, Pengembang

22088
21:06:10,172 --> 21:06:12,783
Lihat Sumber, atau Alat\nPengembang hanya untuk memastikan

22089
21:06:12,783 --> 21:06:15,241
bahwa apa yang Anda lihat di\nbrowser adalah apa yang Anda inginkan.

22090
21:06:15,241 --> 21:06:18,062
Dan ya, saya melihat apa yang saya inginkan.

22091
21:06:19,652 --> 21:06:22,381
Biarkan saya melanjutkan dan mengetik\nin David dan klik Kirim.

22092
21:06:22,381 --> 21:06:24,872
Sekarang saya mendapatkan kesalahan yang berbeda.

22093
21:06:24,872 --> 21:06:28,902
Yang ini HTTP 405,\nmetode tidak diizinkan.

22094
21:06:30,001 --> 21:06:34,081
Nah, di aplikasi Flask saya, saya sudah\n

22095
21:06:34,081 --> 21:06:37,601
Salah satunya adalah untuk garis miring,\nmaka itu berfungsi dengan baik.

22096
21:06:37,601 --> 21:06:40,751
Salah satunya adalah untuk /greet,\ndan dulu berfungsi dengan baik.

22097
21:06:40,751 --> 21:06:46,301
Namun ternyata, apa yang dilakukan Flask\n

22098
21:06:46,301 --> 21:06:51,512
Jadi jika saya ingin mengubah rute ini ke\n

22099
21:06:51,512 --> 21:06:56,682
kutip tanda kutip "POST" di dalam\nparameter ini di sini.

22100
21:06:56,682 --> 21:07:01,592
Sehingga sekarang, saya sebenarnya bisa\nmendukung POST, bukan hanya GET.

22101
21:07:01,592 --> 21:07:08,642
Dan jika saya sekarang me-restart Flask, maka Flask\n

22102
21:07:08,642 --> 21:07:11,282
Biarkan saya kembali satu layar\nke formulir, muat ulang

22103
21:07:11,282 --> 21:07:13,202
halaman ini hanya untuk memastikan\nsaya punya yang terbaru

22104
21:07:13,202 --> 21:07:14,785
meskipun tidak ada yang berubah di sana.

22105
21:07:14,785 --> 21:07:18,392
Ketik David dan klik Kirim sekarang,\nsekarang saya akan melihat halo, dunia.

22106
21:07:18,392 --> 21:07:25,142
Perhatikan bahwa saya berada di rute penyambutan,\n

22107
21:07:28,021 --> 21:07:30,331
Baiklah, jadi itu adalah\nhal yang menarik.

22108
21:07:30,331 --> 21:07:35,141
Ini adalah perubahan sederhana, tetapi GET\n

22109
21:07:35,142 --> 21:07:37,382
Namun ini masih berfungsi selama\nas Anda mengubah backend

22110
21:07:37,381 --> 21:07:41,971
agar terlihat sebagai permintaan POST, yang mana\n

22111
21:07:41,971 --> 21:07:44,521
Ini tidak akan semudah melihat URL itu sendiri.

22112
21:07:44,521 --> 21:07:46,322
Mengapa kita tidak selalu menggunakan POST saja?

22113
21:07:49,491 --> 21:07:53,751
Mengapa tidak menggunakan POST di mana saja?

22114
21:07:55,342 --> 21:07:58,822
Benar, karena itu menjengkelkan\n

22115
21:07:58,822 --> 21:08:02,084
jika kamu meninggalkan yang kecil ini\n

22116
21:08:02,084 --> 21:08:04,042
dapat melihat-lihat dan melihat\napa yang sedang Anda lakukan.

22117
21:08:09,138 --> 21:08:11,523
AUDIENCE: Anda seharusnya\nmenduplikasi [Tak terdengar]..

22118
21:08:15,532 --> 21:08:18,792
Maksud saya, jika Anda menghilangkan GET\n

22119
21:08:18,792 --> 21:08:22,194
riwayat Anda, pelengkapan otomatis Anda,\ngmenjadi kurang berguna.

22120
21:08:22,194 --> 21:08:25,152
Karena tidak ada informasi yang\n

22121
21:08:25,152 --> 21:08:26,569
buka menu dan tekan Enter.

22122
21:08:26,569 --> 21:08:28,182
Anda harus mengisi ulang formulir tersebut.

22123
21:08:28,182 --> 21:08:30,389
Dan ada gejala\nlainnya yang dapat Anda lihat di sini.

22124
21:08:30,389 --> 21:08:33,014
Izinkan saya memperkecil dan\nsaya memuat ulang halaman ini.

22125
21:08:33,014 --> 21:08:34,932
Perhatikan bahwa Anda akan mendapatkan\nperingatan ini, dan itu akan terjadi

22126
21:08:34,932 --> 21:08:39,551
terlihat berbeda di Safari dan Firefox\n

22127
21:08:40,342 --> 21:08:43,932
Jadi browser Anda mungkin mengingat apa\n

22128
21:08:43,932 --> 21:08:45,711
tapi saat Anda berada di halaman itu.

22129
21:08:45,711 --> 21:08:50,562
Dan ini berbeda dengan GET,\nyang menyatakan status adalah informasi.

22130
21:08:50,562 --> 21:08:53,957
Misalnya, pasangan nilai kunci\tertanam di URL itu sendiri.

22131
21:08:53,956 --> 21:08:56,081
Dan jika Anda melihat\nemail yang saya kirimkan hari ini

22132
21:08:56,081 --> 21:08:59,277
Saya sengaja menautkan\nke https://www.google.c

22133
21:08:59,277 --> 21:09:00,881
om/search?q=jam berapa sekarang.

22134
21:09:06,971 --> 21:09:11,471
Ini, menurut definisi, adalah permintaan GET\nsaat Anda mengekliknya.

22135
21:09:11,471 --> 21:09:14,861
Karena itu akan mengambil\ninformasi, pasangan nilai kunci

22136
21:09:14,861 --> 21:09:18,171
dari URL, kirimkan ke Google\n

22137
21:09:18,172 --> 21:09:20,592
Dan alasan saya mengirim ini\nmelalui email tadi adalah saya

22138
21:09:20,592 --> 21:09:23,812
ingin orang-orang dapat dengan cepat\n

22139
21:09:23,812 --> 21:09:27,732
Jadi saya bisa mengotomatiskan prosesnya\n

22140
21:09:27,732 --> 21:09:29,952
tapi itu Anda lakukan ketika\nAnda mengeklik tautan itu.

22141
21:09:29,952 --> 21:09:35,381
Jika Google tidak mendukung GET, mereka\n

22142
21:09:35,381 --> 21:09:38,171
mengirim Anda semua ke\nURL ini, sayangnya

22143
21:09:39,762 --> 21:09:42,972
Saya harus menambahkan ke\n

22144
21:09:44,812 --> 21:09:46,522
Jadi itu buruk untuk kegunaannya.

22145
21:09:46,521 --> 21:09:49,721
Jadi di sana juga, kita mungkin punya desain\n

22146
21:09:49,721 --> 21:09:53,261
namun juga desain terkait\npengalaman pengguna, atau UX

22147
21:09:53,262 --> 21:09:54,941
seperti yang disebut oleh ilmuwan komputer.

22148
21:09:54,941 --> 21:09:58,211
Pada akhirnya, hanya dalam kaitannya dengan apa yang ingin\nAnda optimalkan.

22149
21:09:58,211 --> 21:10:00,081
Jadi GET dan POST keduanya memiliki peran masing-masing.

22150
21:10:00,081 --> 21:10:02,581
Tergantung pada\nfungsi apa yang ingin Anda sediakan

22151
21:10:02,581 --> 21:10:06,911
dan sensitivitas\napa yang mungkin ada di sekitarnya.

22152
21:10:06,911 --> 21:10:10,122
Baiklah, jika ada pertanyaan, silakan\n

22153
21:10:10,122 --> 21:10:13,722
Sangat sederhana, cukup ambil\nnama seseorang dan cetak kembali.

22154
21:10:13,721 --> 21:10:16,031
Namun kini kami memiliki semua\nperpipaan yang dapat digunakan

22155
21:10:16,032 --> 21:10:19,032
untuk menciptakan apa pun yang kita inginkan.

22156
21:10:21,820 --> 21:10:24,112
Baiklah, mari kita lanjutkan\ndistirahat lima menit.

22157
21:10:24,111 --> 21:10:27,951
Dan ketika kami kembali, kami akan menambahkan\n

22158
21:10:30,202 --> 21:10:32,182
Dan ingat bahwa hal terakhir\nyang baru saja kita ubah

22159
21:10:32,182 --> 21:10:34,941
adalah rute untuk menggunakan\nPOST alih-alih GET.

22160
21:10:34,941 --> 21:10:37,851
Jadi hilanglah nama saya dan\nnilai apa pun di URL.

22161
21:10:37,851 --> 21:10:44,031
Namun ada sedikit bug atau perubahan\n

22162
21:10:44,032 --> 21:10:47,062
Saya mengetikkan David ke dalam\nformulir dan mengklik Kirim

22163
21:10:47,062 --> 21:10:50,452
namun ini dia\nmengatakan halo dunia koma.

22164
21:10:50,452 --> 21:10:53,491
Jadi sepertinya\nrusak secara tiba-tiba

22165
21:10:53,491 --> 21:10:56,572
meskipun kami menambahkan dukungan untuk POST.

22166
21:10:56,572 --> 21:10:58,792
Tapi pasti ada sesuatu yang salah.

22167
21:10:58,792 --> 21:11:01,342
Logikanya, hal ini pasti terjadi di sini.

22168
21:11:01,342 --> 21:11:05,461
Secara intuitif, jika saya melihatnya\n

22169
21:11:07,161 --> 21:11:10,101
Pasti\ntidak melihat kunci dipanggil

22170
21:11:10,101 --> 21:11:14,482
nama di request.args, yaitu ini.

22171
21:11:14,482 --> 21:11:16,851
Memberi Anda akses ke\semua hal setelah URL.

22172
21:11:16,851 --> 21:11:19,471
Itu karena ada\hal lain yang harus kita ketahui

22173
21:11:19,471 --> 21:11:21,741
yang bukan hanya\nrequest.args tetapi request.form.

22174
21:11:21,741 --> 21:11:26,211
Namanya jelek, tapi\nrequest.args ditujukan untuk permintaan GET

22175
21:11:26,211 --> 21:11:28,804
request.form adalah untuk permintaan POST.

22176
21:11:28,804 --> 21:11:31,012
Jika tidak, fungsinya hampir\nsama.

22177
21:11:31,012 --> 21:11:33,592
Namun tanggung jawab ada pada Anda,\npengguna atau pemrogram

22178
21:11:33,592 --> 21:11:35,832
untuk memastikan Anda menggunakan yang benar.

22179
21:11:35,831 --> 21:11:38,671
Jadi menurutku jika kita ingin\nmenyingkirkan dunia ini

22180
21:11:38,672 --> 21:11:41,002
dan benar-benar melihat\nsaya, sang manusia, mengetikkannya

22181
21:11:41,001 --> 21:11:45,201
Saya rasa saya bisa mengubah\nrequest.args menjadi request.form.

22182
21:11:45,202 --> 21:11:47,782
Masih dot get, tetap\nquote unquote "name

22183
21:11:47,782 --> 21:11:52,252
dan sekarang, jika saya melanjutkan dan menjalankan kembali\nFlask di jendela terminal saya

22184
21:11:52,251 --> 21:11:54,776
kembali ke browser saya,\nkembali ke-- dan sebenarnya

22185
21:11:54,777 --> 21:11:56,152
Aku bahkan tidak akan kembali ke formulir.

22186
21:11:56,152 --> 21:11:59,392
Saya hanya akan memuat ulang,\nCommand R atau Control R

22187
21:11:59,392 --> 21:12:02,572
dan apa yang dimaksud\nperingatan ini adalah bahwa ia akan dikirimkan

22188
21:12:02,572 --> 21:12:05,001
informasi yang sama ke situs web.

22189
21:12:05,001 --> 21:12:08,901
Ketika saya mengklik Lanjutkan, sekarang saya\nakan melihat koma halo David.

22190
21:12:08,902 --> 21:12:11,182
Jadi sekali lagi, Anda mungkin juga\nakan menemuinya

22191
21:12:11,182 --> 21:12:12,801
semua kehalusan kecil ini.

22192
21:12:12,801 --> 21:12:15,801
Namun jika Anda benar-benar fokus pada\nprinsip pertama minggu lalu

22193
21:12:15,801 --> 21:12:18,682
seperti apa itu HTTP, bagaimana\ndo cara membuat permintaan berfungsi

22194
21:12:18,682 --> 21:12:20,786
bagaimana cara kerja permintaan POST\nsaat ini, Anda harus melakukannya

22195
21:12:20,786 --> 21:12:22,911
memiliki banyak landasan\npembangunan mental yang dengannya

22196
21:12:22,911 --> 21:12:25,101
untuk memecahkan masalah seperti ini.

22197
21:12:25,101 --> 21:12:28,342
Dan izinkan saya memberi Anda satu mental lagi\n

22198
21:12:28,342 --> 21:12:32,662
Kerangka kerja yang disebut Flask ini hanyalah sebuah\n

22199
21:12:32,661 --> 21:12:36,262
yang semuanya menerapkan\nparadigma yang sama, cara berpikir yang sama

22200
21:12:36,262 --> 21:12:38,482
dan cara\npemrograman aplikasi yang sama.

22201
21:12:38,482 --> 21:12:41,932
Dan itu dikenal sebagai MVC,\npengontrol tampilan model.

22202
21:12:41,932 --> 21:12:46,432
Dan inilah diagram yang sangat sederhana\n

22203
21:12:46,432 --> 21:12:48,301
dan saya telah menerapkannya sejauh ini.

22204
21:12:48,301 --> 21:12:51,292
Dan sebenarnya, ini lebih dari\n

22205
21:12:51,292 --> 21:12:55,123
Di app.py itulah yang dimaksud dengan programmer\n

22206
21:12:55,123 --> 21:12:57,081
Itulah kode yang Anda\ntulis, inilah namanya

22207
21:12:57,081 --> 21:13:01,131
logika bisnis yang membuat semua\n

22208
21:13:01,131 --> 21:13:03,471
nilai-nilai apa yang ingin ditunjukkan, dan sebagainya.

22209
21:13:03,471 --> 21:13:09,861
Di layout.html, indeks.html, salam.html\n

22210
21:13:09,861 --> 21:13:12,651
itulah visualisasi\nmanusia sebenarnya

22211
21:13:14,271 --> 21:13:18,561
Hal-hal itu bodoh, cantik\n

22212
21:13:18,562 --> 21:13:20,991
Semua kerja keras dilakukan di app.py.

22213
21:13:20,991 --> 21:13:26,001
Jadi pengontrol, AKA app.py, adalah tempatnya\n

22214
21:13:26,001 --> 21:13:31,491
Dan dalam pandangan Anda adalah tempat HTML dan\n

22215
21:13:31,491 --> 21:13:35,512
kurung kurawal, kurung kurawal\n

22216
21:13:35,512 --> 21:13:39,411
Kami belum menambahkan model M\nto MVC

22217
21:13:39,411 --> 21:13:42,322
akan mengacu pada hal-hal\nseperti file CSV atau database.

22218
21:13:42,322 --> 21:13:46,116
Model tempat Anda menyimpan\data aktual, biasanya bersifat jangka panjang.

22219
21:13:46,116 --> 21:13:47,991
Jadi kita akan kembali ke\nitu, tapi gambar ini

22220
21:13:47,991 --> 21:13:52,312
di mana Anda memiliki salah satu dari ini-- masing-masing\n

22221
21:13:52,312 --> 21:13:55,222
yang lain mewakili\ncara kerja banyak kerangka kerja.

22222
21:13:55,221 --> 21:13:58,792
Apa yang kami ajarkan hari ini, minggu ini,\n

22223
21:13:58,792 --> 21:14:01,581
Ini tidak spesifik untuk Flask,\n

22224
21:14:01,581 --> 21:14:03,471
Ini benar-benar paradigma\numum yang Anda miliki

22225
21:14:03,471 --> 21:14:08,211
dapat diimplementasikan di Java, C sharp, atau\n

22226
21:14:08,211 --> 21:14:12,595
Baiklah, sekarang mari\nberalih kembali ke VS Code di sini.

22227
21:14:12,595 --> 21:14:14,512
Biarkan saya berhenti menjalankan\nFlask, dan biarkan saya melanjutkan

22228
21:14:14,512 --> 21:14:19,922
dan buat folder baru\n

22229
21:14:19,922 --> 21:14:24,592
Dan biarkan saya melanjutkan dan membuat\na folder bernama FroshIMS

22230
21:14:24,592 --> 21:14:27,862
mewakili mahasiswa baru intramural\n

22231
21:14:29,422 --> 21:14:32,601
Dan sekarang saya akan membuat kode app.py.

22232
21:14:32,601 --> 21:14:36,351
Dan sebagai antisipasi, saya akan\n

22233
21:14:36,351 --> 21:14:38,251
Yang ini ada di folder FroshIMS.

22234
21:14:38,251 --> 21:14:42,351
Dan kemudian di direktori templat saya,\n

22235
21:14:42,351 --> 21:14:44,482
dan saya akan\nmemulainya di sini.

22236
21:14:46,221 --> 21:14:48,741
Saya hanya menyalin tata letak saya\ndari sebelumnya karena sebagian besar

22237
21:14:48,741 --> 21:14:53,031
Salah satu karya saya yang menarik kali ini adalah\n

22238
21:14:53,032 --> 21:14:54,512
Jadi apa yang kita buat?

22239
21:14:54,512 --> 21:14:58,282
Jadi sebenarnya, hal pertama\nyang saya tulis sebagai aplikasi web

22240
21:14:58,282 --> 21:15:02,042
20 tahun yang lalu, ada sebuah situs yang\nterlihat seperti ini.

22241
21:15:02,042 --> 21:15:04,131
Jadi saya masih seperti mahasiswa tahun kedua\atau junior pada saat itu.

22242
21:15:04,131 --> 21:15:06,982
Saya hanya mengikuti CS50 dan\nkelas lanjutan.

22243
21:15:06,982 --> 21:15:08,889
Saya tidak tahu bagaimana melakukan pemrograman web.

22244
21:15:08,888 --> 21:15:11,721
Tak satu pun dari kedua mata kuliah tersebut yang mengajar\n

22245
21:15:11,721 --> 21:15:14,391
Jadi saya belajar sendiri, pada\nwaktu itu, bahasa yang disebut Perl.

22246
21:15:14,392 --> 21:15:18,000
Dan saya belajar sedikit tentang\n

22247
21:15:18,000 --> 21:15:20,542
bahkan tidak bisa mengatakan cukup mencari di Google,\nkarena Google tidak keluar

22248
21:15:22,142 --> 21:15:26,432
Baca secukupnya secara online untuk mengetahui cara\n

22249
21:15:26,432 --> 21:15:29,282
di kampus, tahun pertama,\nbisa mendaftar

22250
21:15:29,282 --> 21:15:32,162
melalui situs web untuk olahraga intramural.

22251
21:15:32,161 --> 21:15:35,161
Dulu, Anda\nhanya akan mengisi selembar kertas

22252
21:15:35,161 --> 21:15:38,491
lalu berjalan melintasi halaman menuju\n

22253
21:15:38,491 --> 21:15:40,861
geser ke bawah asrama\nProctor atau RA

22254
21:15:40,861 --> 21:15:43,381
dan dengan demikian Anda\nterdaftar untuk olahraga.

22255
21:15:46,532 --> 21:15:48,512
Ada internet,\nhanya tidak ada

22256
21:15:48,512 --> 21:15:50,801
banyak digunakan di kampus atau lebih umum.

22257
21:15:50,801 --> 21:15:54,301
Jadi gambar latar\nyang berulang tanpa batas

22258
21:15:54,301 --> 21:15:56,611
tampaknya sedang populer pada saat itu.

22259
21:15:56,611 --> 21:15:58,951
Semua ini seperti gambar\nyang harus saya buat sendiri

22260
21:15:58,952 --> 21:16:03,881
karena kami tidak memiliki fitur\n

22261
21:16:03,881 --> 21:16:07,801
Jadi sebenarnya hanya HTML, dan memang\n

22262
21:16:09,512 --> 21:16:12,301
Dan itu sebenarnya hanyalah\nkomponen penyusun yang sama

22263
21:16:12,301 --> 21:16:15,131
yang sudah kita dengar hari ini.

22264
21:16:15,131 --> 21:16:17,702
Jadi kita akan membuang semua\ngambaran tersebut dan lebih fokus

22265
21:16:17,702 --> 21:16:19,952
tentang fungsionalitas dan\estetikanya, tapi mari kita lihat

22266
21:16:19,952 --> 21:16:23,252
jika kita dapat menyiapkan aplikasi\web yang dapat digunakan oleh seseorang

22267
21:16:23,251 --> 21:16:26,281
mendaftar untuk salah satu olahraga intramural tersebut.

22268
21:16:26,282 --> 21:16:29,972
Jadi di app.py, saya lanjutkan dan\nimpor beberapa hal yang familier sekarang.

22269
21:16:29,971 --> 21:16:33,481
Dari Flask, mari kita impor\ncapital Flask, yang mana

22270
21:16:33,482 --> 21:16:36,482
apakah fungsi itu perlu kita jalankan\n

22271
21:16:36,482 --> 21:16:39,661
Render template, jadi kita punya\n

22272
21:16:39,661 --> 21:16:42,122
templat tersebut, dan minta\nagar kami mempunyai kemampuan

22273
21:16:42,122 --> 21:16:44,850
untuk mendapatkan masukan dari manusia.

22274
21:16:44,850 --> 21:16:46,892
Biarkan saya melanjutkan dan membuat\naplikasinya sendiri

22275
21:16:46,892 --> 21:16:49,302
menggunakan mantra ajaib ini di sini.

22276
21:16:49,301 --> 21:16:56,141
Lalu mari kita lanjutkan dan mendefinisikan a\n

22277
21:16:56,142 --> 21:16:58,022
Saya akan mendefinisikan\nfungsi yang disebut index.

22278
21:16:58,021 --> 21:17:00,661
Namun untuk lebih jelasnya,\nfungsi ini bisa berupa apa saja.

22279
21:17:00,661 --> 21:17:03,221
Foo, bar, baz, apa saja.

22280
21:17:03,221 --> 21:17:05,281
Tapi saya cenderung menamainya\ndengan cara seperti itu

22281
21:17:05,282 --> 21:17:07,022
konsisten dengan\nnama rutenya.

22282
21:17:07,021 --> 21:17:09,061
Tapi Anda bisa menyebutnya\apa pun yang Anda inginkan, itu saja

22283
21:17:09,062 --> 21:17:12,601
hanya fungsi yang akan didapat\n

22284
21:17:12,601 --> 21:17:14,851
Sekarang izinkan saya melanjutkan\ndan memulai semuanya.

22285
21:17:14,851 --> 21:17:18,294
Kembali, render template index.html.

22286
21:17:18,294 --> 21:17:19,711
Sederhanakan saja, tidak lebih.

22287
21:17:19,711 --> 21:17:22,622
Jadi tidak ada yang spesifik\nFroshIM tentang hal ini di sini

22288
21:17:22,622 --> 21:17:25,172
Saya hanya ingin memastikan saya\melakukan semuanya dengan benar.

22289
21:17:25,172 --> 21:17:27,152
Sementara itu, saya sudah mendapatkan tata letaknya.

22290
21:17:27,152 --> 21:17:31,562
Oke, izinkan saya melanjutkan, dan di direktori\ntemplate saya, kodekan sebuah file

22291
21:17:33,751 --> 21:17:40,051
Dan mari kita lakukan extends\nlayout.html di bagian atas

22292
21:17:40,051 --> 21:17:42,152
supaya kita mendapat\nmanfaat dari template itu.

22293
21:17:42,152 --> 21:17:44,012
Dan di sini, saya hanya\nakan mengatakan untuk melakukan.

22294
21:17:44,012 --> 21:17:47,012
Supaya saya punya sesuatu\nyang terjadi secara visual untuk memastikannya

22295
21:17:48,452 --> 21:17:51,782
Di direktori FroshIMS saya,\nbiarkan saya menjalankan Flask.

22296
21:17:51,782 --> 21:17:54,961
Biarkan saya kembali ke URL saya sebelumnya,\n

22297
21:17:54,961 --> 21:17:59,611
Namun sekarang, saya melayani\nsitus FroshIM.

22298
21:18:01,351 --> 21:18:04,622
Itu karena saya\nmengacaukan secara tidak sengaja.

22299
21:18:04,622 --> 21:18:07,851
Apa kesalahan saya di index.html?

22300
21:18:13,361 --> 21:18:16,229
File ini memperluas layout.html, tapi--

22301
21:18:16,229 --> 21:18:17,771
HADIRIN: Anda mengabaikan tag blokir?

22302
21:18:18,271 --> 21:18:22,661
Saya lupa memberi tahu Flask apa\nyang harus dipasang ke tata letak itu.

22303
21:18:22,661 --> 21:18:26,801
Jadi saya hanya perlu mengatakan blok badan, dan\n

22304
21:18:26,801 --> 21:18:28,841
atau apa pun yang ingin\nakhirnya saya lakukan.

22305
21:18:31,751 --> 21:18:34,091
Oke, jadi sekarang tampilannya jelek, lebih samar.

22306
21:18:34,092 --> 21:18:36,972
Namun ini, sekali lagi, adalah inti dari melakukan templating.

22307
21:18:36,971 --> 21:18:41,101
Izinkan saya memulai ulang Flask\ndi sini, izinkan saya kembali ke halaman.

22308
21:18:41,733 --> 21:18:43,691
Semoga kali ini\nkali ini, dan ini dia.

22309
21:18:44,081 --> 21:18:46,241
Jadi bukan aplikasinya\nyang saya inginkan, tapi setidaknya saya

22310
21:18:46,241 --> 21:18:48,630
tahu aku punya beberapa\npipa ledeng di sana secara default.

22311
21:18:48,630 --> 21:18:50,922
Baiklah, jadi jika saya ingin\penggunanya bisa mendaftar

22312
21:18:50,922 --> 21:18:53,112
untuk salah satu olahraga ini,\nmari kita tingkatkan sekarang

22313
21:18:53,111 --> 21:18:56,051
index.html untuk benar-benar\nmemiliki formulir itu

22314
21:18:56,051 --> 21:18:59,811
mungkin mendapat menu tarik-turun untuk semuanya\n

22315
21:18:59,812 --> 21:19:01,991
Jadi izinkan saya masuk ke template ini di sini.

22316
21:19:01,991 --> 21:19:05,171
Dan daripada melakukan, ayo\nmaju dan memberikan diri saya sendiri

22317
21:19:05,172 --> 21:19:08,922
bagaimana dengan tag H1 yang hanya bertuliskan\n

22318
21:19:09,732 --> 21:19:13,032
Bagaimana dengan tag formulir\nyang akan menggunakan POST

22319
21:19:13,032 --> 21:19:16,211
hanya karena itu tidak terlalu diperlukan\n

22320
21:19:17,292 --> 21:19:20,021
Tindakan untuk itu, bagaimana\nkita berencana untuk membuatnya

22321
21:19:20,021 --> 21:19:24,971
rute pendaftaran sehingga kami mengirim\n

22322
21:19:24,971 --> 21:19:26,531
Jadi kita harus kembali ke sana.

22323
21:19:26,532 --> 21:19:32,412
Di sini, izinkan saya melanjutkan dan membuat,\n

22324
21:19:35,782 --> 21:19:37,824
Bagaimana kalau sebuah nama sama dengan\nnama, karena saya adalah

22325
21:19:37,823 --> 21:19:40,781
akan menanyakan siswa tersebut\n

22326
21:19:41,629 --> 21:19:43,211
Dan tipe kotak ini adalah teks.

22327
21:19:43,211 --> 21:19:45,372
Jadi ini hampir\nidentik dengan sebelumnya.

22328
21:19:45,372 --> 21:19:48,822
Namun jika Anda belum melihatnya\nyet, mari buat menu pilihan

22329
21:19:48,822 --> 21:19:51,042
yang disebut menu tarik-turun dalam HTML.

22330
21:19:51,042 --> 21:19:54,551
Dan mungkin pilihan pertama\nSaya ingin berada di sana

22331
21:19:54,551 --> 21:19:58,331
akan menjadi, oh, bagaimana\ndengan ketiganya saat ini

22332
21:19:58,331 --> 21:20:05,322
olahraga untuk musim gugur, yaitu\nbasket, dan opsi lainnya

22333
21:20:05,322 --> 21:20:07,902
akan menjadi sepak bola,\ndan opsi ketiga adalah

22334
21:20:07,902 --> 21:20:13,461
akan menjadi frisbee terbaik untuk\n

22335
21:20:13,461 --> 21:20:14,922
Jadi saya punya tiga opsi itu.

22336
21:20:16,062 --> 21:20:20,412
Saya belum menerapkan rute saya,\n

22337
21:20:20,411 --> 21:20:23,682
untuk kembali sekarang dan memeriksa\napakah formulir saya telah dimuat ulang.

22338
21:20:23,682 --> 21:20:26,419
Jadi izinkan saya melanjutkan\nberhenti dan memulai Flask.

22339
21:20:26,419 --> 21:20:28,961
Anda akan melihat cara untuk\mengotomatiskan proses memulai ulang

22340
21:20:28,961 --> 21:20:31,122
server yang akan kami lakukan untuk\nAnda untuk kumpulan masalah sembilan

22341
21:20:31,122 --> 21:20:32,832
jadi Anda tidak perlu\nterus-menerus menghentikan Flask.

22342
21:20:32,831 --> 21:20:36,822
Biarkan saya memuat ulang rute indeks saya\ndan oke, itu tidak terlalu bagus.

22343
21:20:39,762 --> 21:20:41,832
Namun sekarang setidaknya memiliki\nbeberapa fungsi

22344
21:20:41,831 --> 21:20:44,921
di mana saya bisa mengetikkan nama saya\ndan mengetik olahraganya.

22345
21:20:44,922 --> 21:20:47,502
Sekarang, saya mungkin membuat\norang bias terhadap bola basket.

22346
21:20:47,501 --> 21:20:51,971
Seperti dari segi UX, dari segi pengalaman pengguna\n, memeriksa terlebih dahulu adalah hal yang menjengkelkan

22347
21:20:51,971 --> 21:20:53,572
bola basket tetapi tidak yang lain.

22348
21:20:53,572 --> 21:20:55,572
Jadi ada beberapa\ntkelemahan kecil yang bisa kita lakukan di sana.

22349
21:20:55,572 --> 21:20:57,822
Izinkan saya kembali ke index.html.

22350
21:20:57,822 --> 21:21:04,110
Izinkan saya membuat opsi kosong di sini\n

22351
21:21:04,110 --> 21:21:05,652
akan memiliki nama olahraga apa pun.

22352
21:21:05,652 --> 21:21:08,110
Tapi itu hanya berisi\nkata yang ingin dilihat manusia

22353
21:21:08,110 --> 21:21:12,622
jadi saya sebenarnya akan menonaktifkan ini\n

22354
21:21:12,622 --> 21:21:15,012
Tapi saya akan mengatakan olahraga di sini.

22355
21:21:15,012 --> 21:21:18,491
Dan ada berbagai cara untuk melakukan hal ini,\n

22356
21:21:22,422 --> 21:21:24,762
Membuat placeholder\nolahraga sehingga pengguna

22357
21:21:24,762 --> 21:21:26,862
melihat sesuatu di dropdown.

22358
21:21:26,861 --> 21:21:29,932
Biarkan saya melanjutkan dan memulai ulang\nFlask, memuat ulang halaman

22359
21:21:29,932 --> 21:21:31,932
dan sekarang semuanya akan\nmenjadi sedikit lebih baik.

22360
21:21:31,932 --> 21:21:34,122
Sekarang Anda melihat olahraga yang\ndicentang secara default

22361
21:21:34,122 --> 21:21:37,092
namun pada akhirnya Anda harus memeriksa salah satu\nyang lainnya.

22362
21:21:37,092 --> 21:21:38,482
Baiklah, jadi itu cukup bagus.

22363
21:21:38,482 --> 21:21:40,692
Jadi izinkan saya mengetik David.

22364
21:21:40,691 --> 21:21:43,121
Saya akan mendaftar untuk frisbee pamungkas.

22365
21:21:43,122 --> 21:21:46,512
Oke, saya pasti lupa sesuatu.

22366
21:21:48,702 --> 21:21:52,782
Baiklah, jadi tipe input sama dengan kirim.

22367
21:21:52,782 --> 21:21:54,102
Baiklah, mari kita masukkan itu.

22368
21:21:57,544 --> 21:21:58,961
Kirim bisa menjadi sedikit lebih cantik.

22369
21:21:58,961 --> 21:22:03,491
Ingatlah bahwa kita dapat mengubah beberapa\n

22370
21:22:03,491 --> 21:22:05,652
Nilai tombol ini\nmungkin harus didaftarkan

22371
21:22:05,652 --> 21:22:07,241
hanya untuk membuat segalanya sedikit lebih cantik.

22372
21:22:07,241 --> 21:22:10,456
Biarkan saya sekarang memuat ulang halaman dan mendaftar.

22373
21:22:10,456 --> 21:22:13,331
Baiklah, jadi sekarang kita sudah\n

22374
21:22:13,331 --> 21:22:17,741
yang saya buat beberapa tahun yang lalu untuk membiarkan\n

22375
21:22:17,741 --> 21:22:21,641
Jadi, ayo sekarang, dan buat mungkin\n

22376
21:22:22,691 --> 21:22:25,686
Dan di sini, jika kita ingin\nmengizinkan pengguna untuk mendaftar

22377
21:22:25,687 --> 21:22:28,812
mari kita lakukan sedikit pengecekan error\n

22378
21:22:28,812 --> 21:22:30,612
Kesalahan apa yang bisa dilakukan pengguna?

22379
21:22:30,611 --> 21:22:32,801
Karena berasumsi bahwa mereka akan melakukannya.

22380
21:22:32,801 --> 21:22:34,631
Pertama, mereka mungkin tidak mengetikkan namanya.

22381
21:22:34,631 --> 21:22:36,505
Kedua, mereka mungkin tidak memilih olahraga.

22382
21:22:36,505 --> 21:22:38,172
Jadi mereka mungkin hanya mengirimkan formulir kosong.

22383
21:22:38,172 --> 21:22:40,302
Jadi itulah dua hal yang\ndapat kami periksa

22384
21:22:40,301 --> 21:22:43,721
agar kami tidak mencetak gol palsu\n

22385
21:22:43,721 --> 21:22:47,351
Jadi mari kita buat\nrute lain yang disebut sapa, /sapa.

22386
21:22:47,351 --> 21:22:50,501
Lalu di rute ini, mari\nbuat fungsi bernama salam

22387
21:22:50,501 --> 21:22:52,661
tapi bisa disebut apapun yang kita mau.

22388
21:22:52,661 --> 21:22:56,054
Lalu mari kita lanjutkan, dan masuk\n

22389
21:22:56,054 --> 21:22:57,221
dan memvalidasi pengajuan.

22390
21:22:57,221 --> 21:22:59,351
Demikianlah sedikit komentar untuk diri saya sendiri di sini.

22391
21:22:59,351 --> 21:23:08,031
Bagaimana jika tidak ada nilai nama GET\nrequest.form

22392
21:23:08,032 --> 21:23:10,211
jadi itu jika\nfungsi itu tidak menghasilkan apa-apa

22393
21:23:10,211 --> 21:23:14,062
seperti kutipan tanda kutip, atau\nkata khusus tidak ada dengan Python.

22394
21:23:14,062 --> 21:23:25,042
Atau request.form.get"sport" bukan\nin mengutip tanda kutip, apa itu?

22395
21:23:25,042 --> 21:23:32,122
Bola basket, yang satu lagi sepak bola,\n

22396
21:23:32,122 --> 21:23:35,961
Agak lama, tapi perhatikan\n

22397
21:23:35,961 --> 21:23:39,051
Jika pengguna tidak\ngmemberi kami nama, itu saja

22398
21:23:39,051 --> 21:23:41,671
jika fungsi ini mengembalikan\nnilai yang setara dengan false

22399
21:23:41,672 --> 21:23:45,592
yaitu, kutipan tanda kutip, atau secara harfiah\n

22400
21:23:45,592 --> 21:23:52,252
Atau jika olahraga yang disediakan pengguna adalah\n

22401
21:23:52,251 --> 21:23:56,061
atau frisbee pamungkas, yang telah saya definisikan\n

22402
21:23:56,062 --> 21:23:57,652
dan hanya berteriak pada pengguna dengan cara tertentu.

22403
21:23:57,652 --> 21:24:02,961
Mari kembalikan render\ntemplate dari fail.html.

22404
21:24:02,961 --> 21:24:06,211
Dan itu hanya akan menjadi beberapa\n

22405
21:24:06,211 --> 21:24:08,751
Jika tidak, jika mereka sudah\nsejauh ini, ayo lanjutkan

22406
21:24:08,751 --> 21:24:12,111
dan konfirmasi pendaftaran\ndengan mengembalikannya-- ups

22407
21:24:12,111 --> 21:24:18,182
mengembalikan kutipan templat render\nhapus tanda kutip "sukses" dot HTML.

22408
21:24:18,182 --> 21:24:20,461
Baiklah, ada beberapa\nhal cepat yang harus dilakukan.

22409
21:24:20,461 --> 21:24:25,111
Izinkan saya masuk terlebih dahulu dan masuk\ndirektori template saya

22410
21:24:25,111 --> 21:24:28,291
mari kita buat file fail.html ini.

22411
21:24:28,292 --> 21:24:31,191
Dan ini hanya dimaksudkan untuk\nmenjadi pesan kepada pengguna

22412
21:24:31,191 --> 21:24:34,262
bahwa mereka gagal memberikan\ninformasi dengan benar.

22413
21:24:34,262 --> 21:24:37,042
Jadi izinkan saya melanjutkan dan di fail.html.

22414
21:24:40,012 --> 21:24:44,902
Jadi izinkan saya memperluas layout.html dan di\n

22415
21:24:44,902 --> 21:24:47,902
Aku hanya akan membentak mereka seperti itu, jadi\n

22416
21:24:47,902 --> 21:24:52,521
Lalu izinkan saya membuat satu\nfile lain bernama sukses.html, itu

22417
21:24:52,521 --> 21:24:54,904
demikian pula sebagian besar hanya sintaksis Jinja.

22418
21:24:54,904 --> 21:24:57,322
Dan saya hanya akan mengatakannya untuk\nsaat ini, meskipun sebenarnya tidak

22419
21:24:57,322 --> 21:24:59,902
secara teknis terdaftar di\ndatabase mana pun, Anda terdaftar.

22420
21:24:59,902 --> 21:25:02,032
Itulah yang kami maksud dengan kesuksesan.

22421
21:25:02,032 --> 21:25:05,211
Baiklah, jadi izinkan saya melanjutkan\dan kembali ke FroshIMS saya

22422
21:25:07,131 --> 21:25:09,322
Biarkan saya kembali ke formulir dan memuat ulang.

22423
21:25:10,911 --> 21:25:13,881
Baiklah, jadi sekarang izinkan saya\ntidak bekerja sama dan bersikap adil

22424
21:25:13,881 --> 21:25:17,061
segera klik Daftar dengan tidak sabar.

22425
21:25:20,721 --> 21:25:24,769
Daftar-- oh, saya\nbingung dengan kedua contoh kita.

22426
21:25:24,770 --> 21:25:26,062
Baiklah, saya melihat kesalahannya.

22427
21:25:32,241 --> 21:25:35,812
Di situlah saya berada, apa yang\nsebenarnya saya temukan di sini?

22428
21:25:44,562 --> 21:25:45,812
HADIRIN: Daftar, bukan sapa.

22429
21:25:47,611 --> 21:25:50,731
Saya punya contoh terakhir di pikiran saya,\njadi rutenya harus didaftarkan.

22430
21:25:50,732 --> 21:25:54,122
Ironisnya, fungsinya bisa jadi salam,\n

22431
21:25:54,122 --> 21:25:57,792
Namun agar kita tetap waras, ayo\n

22432
21:25:57,792 --> 21:26:00,218
Izinkan saya melanjutkan sekarang dan\nmemulai Flask sebagaimana dimaksud.

22433
21:26:00,218 --> 21:26:02,551
Izinkan saya memuat ulang formulir\nuntuk memastikan semuanya berfungsi.

22434
21:26:02,551 --> 21:26:06,902
Sekarang, izinkan saya tidak bekerja sama dan menjadi\na pengguna yang buruk, klik daftar--

22435
21:26:07,982 --> 21:26:10,652
Oke, kesalahan lain yang tidak disengaja.

22436
21:26:10,652 --> 21:26:12,881
Tapi yang ini pernah kita lihat sebelumnya.

22437
21:26:12,881 --> 21:26:15,721
Perhatikan bahwa secara default,\nrute hanya mendukung GET.

22438
21:26:15,721 --> 21:26:18,721
Jadi jika saya ingin\nkhusus mendukung POST

22439
21:26:18,721 --> 21:26:25,471
Saya harus lulus, dengan metode\n

22440
21:26:25,471 --> 21:26:28,351
metode yang bisa berupa\nGET koma POST, tetapi jika I

22441
21:26:28,351 --> 21:26:32,221
tidak perlu GET di\n

22442
21:26:32,221 --> 21:26:34,741
Baiklah, sekarang mari\lakukan ini untuk yang terakhir kalinya.

22443
21:26:34,741 --> 21:26:37,441
Muat ulang formulir untuk memastikan\semuanya baik-baik saja, klik Daftar

22444
21:26:37,441 --> 21:26:39,194
dan Anda tidak terdaftar.

22445
21:26:40,111 --> 21:26:42,528
Baiklah, izinkan saya melanjutkan dan\namun setidaknya memberi tahu mereka nama saya.

22446
21:26:44,312 --> 21:26:49,662
Baiklah, saya akan lanjutkan dan\n

22447
21:26:53,402 --> 21:26:58,542
Apa yang harus saya-- apa\nyang ingin saya lakukan di sini?

22448
21:26:58,542 --> 21:27:00,572
Baiklah, jadi mari kita cari tahu.

22449
21:27:00,572 --> 21:27:04,711
Cara men-debug sesuatu seperti ini,\n

22450
21:27:07,081 --> 21:27:10,351
Bagaimana cara kami\nmemecahkan masalah ini?

22451
21:27:10,351 --> 21:27:13,202
Ubah ini menjadi momen yang bisa diajarkan.

22452
21:27:13,202 --> 21:27:15,782
Baiklah, pertama-tama,\nbeberapa pemeriksaan keamanan.

22453
21:27:17,372 --> 21:27:20,521
Biarkan saya melanjutkan dan melihat halaman\nsumber, sebuah aturan praktis yang baik.

22454
21:27:20,521 --> 21:27:23,081
Lihat HTML yang\sebenarnya Anda kirimkan kepada pengguna.

22455
21:27:23,081 --> 21:27:27,251
Jadi di sini, saya punya\ninput dengan nama nama.

22456
21:27:27,251 --> 21:27:29,711
Jadi itulah yang saya\ninginkan, sepertinya oke.

22457
21:27:29,711 --> 21:27:32,551
Ah, aku sudah melihatnya, padahal\nkamu belum pernah melihatnya

22458
21:27:32,551 --> 21:27:35,792
menggunakan menu pilihan, Anda mungkin\ntidak tahu apa yang tampaknya

22459
21:27:35,792 --> 21:27:41,911
hilang dari sini yang saya\ndimiliki untuk masukan teks saya.

22460
21:27:41,911 --> 21:27:45,466
Secara intuitif, logis.

22461
21:27:45,467 --> 21:27:47,342
Apa yang ada di kepalaku\nmemalukan

22462
21:27:47,342 --> 21:27:51,692
adalah, baiklah, jika formulir saya berpikir\n

22463
21:27:51,691 --> 21:27:55,471
bagaimana saya menciptakan situasi di mana\n

22464
21:27:55,471 --> 21:27:57,481
Baiklah, sebutkan, menurut saya\ntidak akan kosong

22465
21:27:57,482 --> 21:28:01,262
karena saya secara eksplisit memberi\nnama bidang teks ini

22466
21:28:01,262 --> 21:28:02,972
dan itu berhasil terakhir kali.

22467
21:28:02,971 --> 21:28:06,421
Saya sekarang telah memberikan input kedua\nin berupa menu pilih.

22468
21:28:06,422 --> 21:28:13,112
Namun apa yang tampaknya hilang di sini\nyang saya asumsikan ada di sini?

22469
21:28:13,111 --> 21:28:16,381
Itu hanya kesalahan bodoh yang kubuat.

22470
21:28:16,381 --> 21:28:19,448
Apa yang mungkin hilang di sini?

22471
21:28:19,448 --> 21:28:23,552
Jika request.form memberi Anda semua\nmasukan yang mungkin dimiliki pengguna

22472
21:28:23,551 --> 21:28:26,551
sudah mengetik, izinkan saya\nmasuk ke kode saya yang sebenarnya

22473
21:28:26,551 --> 21:28:30,451
di sini dalam bentuk dan nama saya sama dengan olahraga.

22474
21:28:30,452 --> 21:28:32,472
Saya hanya tidak memberi nama pada masukan itu.

22475
21:28:32,471 --> 21:28:34,651
Jadi itu ada, dan\nbrowser tidak peduli.

22476
21:28:34,652 --> 21:28:36,485
Itu masih akan\nmenampilkan formulir kepada Anda

22477
21:28:36,485 --> 21:28:40,211
hanya saja belum diberi nama yang unik\n

22478
21:28:40,211 --> 21:28:42,551
Jadi sekarang, jika aku tidak mau\nmemasukkan kakiku ke dalam mulutku

22479
21:28:42,551 --> 21:28:44,741
Saya pikir itulah kesalahan yang saya lakukan.

22480
21:28:44,741 --> 21:28:46,711
Dan sekali lagi, proses saya\nuntuk mencari tahu hal itu

22481
21:28:46,711 --> 21:28:49,043
sedang melihat kode saya,\nmemikirkannya secara logis

22482
21:28:49,043 --> 21:28:50,251
apakah ini benar, apakah ini benar?

22483
21:28:50,251 --> 21:28:52,421
Tidak, saya kehilangan nama di sana.

22484
21:28:52,422 --> 21:28:55,382
Jadi ayo jalankan Flask,\nmuat ulang formulirnya

22485
21:28:55,381 --> 21:28:59,941
hanya untuk memastikan semuanya default\n

22486
21:28:59,941 --> 21:29:04,441
di frisbee pamungkas, kali ini menyilangkan\njariku dengan sangat keras.

22487
21:29:06,932 --> 21:29:08,664
Saya tidak bermaksud\nmengacaukan seperti itu

22488
21:29:08,664 --> 21:29:10,831
tapi itulah proses berpikir yang tepat\n

22489
21:29:10,831 --> 21:29:12,152
untuk mendiagnosis masalah seperti ini.

22490
21:29:12,152 --> 21:29:16,021
Kembali ke dasar, kembali ke apa\n

22491
21:29:16,021 --> 21:29:18,432
dan hanya mengatur segala sesuatunya masuk dan keluar.

22492
21:29:18,432 --> 21:29:21,182
Jumlahnya terbatas\n

22493
21:29:22,054 --> 21:29:23,410
HADIRIN: Apakah Anda [TIDAK TERDENGAR].

22494
21:29:25,581 --> 21:29:27,081
DAVID: Permisi-- katakan sedikit lebih keras?

22495
21:29:27,081 --> 21:29:30,981
HADIRIN: Saya tidak mengerti mengapa\nnama sama dengan olahraga [Tak terdengar]..

22496
21:29:30,982 --> 21:29:33,631
DAVID: Mengapa name equal\nsport mengatasi masalah ini?

22497
21:29:33,631 --> 21:29:35,872
Baiklah, pertama-tama mari kita kembali ke HTML.

22498
21:29:35,872 --> 21:29:43,172
Sebelumnya, itu hanyalah kenyataan\n

22499
21:29:44,601 --> 21:29:47,932
Namun nama, atau lebih\numumnya, pasangan nilai kunci

22500
21:29:47,932 --> 21:29:51,211
adalah bagaimana informasi dikirim\ndari formulir ke server.

22501
21:29:51,211 --> 21:29:56,422
Jadi jika tidak ada nama, tidak ada kunci untuk\n

22502
21:29:56,422 --> 21:30:00,082
Rasanya seperti tidak ada yang setara dengan yang tertinggi\n

22503
21:30:00,081 --> 21:30:02,432
Browser\ntidak akan mengirimkannya.

22504
21:30:02,432 --> 21:30:08,331
Namun, di app.py, saya naif\n

22505
21:30:08,331 --> 21:30:11,061
akan ada nama yang disebut\nquote unquote "sport.

22506
21:30:11,062 --> 21:30:13,702
Bisa saja apa saja,\ntapi saya berasumsi itu olahraga.

22507
21:30:13,702 --> 21:30:15,532
Tapi saya tidak pernah memberi tahu formulir itu.

22508
21:30:15,532 --> 21:30:19,022
Dan jika saya benar-benar ingin menggali lebih dalam,\n

22509
21:30:19,021 --> 21:30:22,012
Izinkan saya kembali ke\n keadaan beberapa saat yang lalu.

22510
21:30:22,012 --> 21:30:25,801
Biarkan saya menghilangkan nama\nmenu tarik-turun olahraga.

22511
21:30:25,801 --> 21:30:30,981
Biarkan saya menjalankan kembali Flask di sini\ndan memuat ulang formulir itu sendiri

22512
21:30:30,982 --> 21:30:33,411
setelah selesai disajikan.

22513
21:30:34,581 --> 21:30:39,277
Lihat Alat Pengembang, lalu izinkan saya\n

22514
21:30:39,277 --> 21:30:41,152
kita bermain-main\na sedikit minggu lalu.

22515
21:30:41,152 --> 21:30:44,334
Dan kami juga bermain-main dengan Curl,\n

22516
21:30:44,334 --> 21:30:46,042
Ini satu lagi-- ini\nyang ingin saya pesan

22517
21:30:46,042 --> 21:30:49,411
selesai jika saya masih tidak melihat kesalahan\n

22518
21:30:49,411 --> 21:30:53,512
Saya akan mengetikkan nama saya seperti sebelumnya,\n

22519
21:30:53,512 --> 21:30:55,252
Saya akan mengklik daftar.

22520
21:30:55,251 --> 21:30:59,241
Dan sekarang, saya akan\nmelihat permintaan HTTP.

22521
21:30:59,241 --> 21:31:01,342
Dan saya akan mengklik Daftar di sini.

22522
21:31:01,342 --> 21:31:04,942
Dan seperti yang kita lakukan minggu lalu, saya\n

22523
21:31:04,941 --> 21:31:07,671
Dan ada banyak hal\nyang biasanya dapat kita abaikan.

22524
21:31:07,672 --> 21:31:10,792
Tapi di sini, izinkan saya memperbesar\nin, ke bagian paling bawah

22525
21:31:10,792 --> 21:31:13,131
apa yang dilakukan alat\npengembang Chrome untuk saya

22526
21:31:13,131 --> 21:31:16,141
itu menunjukkan kepada saya semua\ndata data yang dikirimkan.

22527
21:31:16,142 --> 21:31:18,712
Jadi ini benar-benar\nmenjadi petunjuk bagi saya.

22528
21:31:18,711 --> 21:31:21,982
Saya hanya tidak mengirimkan olahraganya,\meskipun manusia mengetiknya.

22529
21:31:21,982 --> 21:31:23,991
Dan logikanya, karena\nSaya pernah melakukan ini sebelumnya

22530
21:31:23,991 --> 21:31:26,932
itu berarti aku tidak\ngmemberi nama pada benda itu.

22531
21:31:28,101 --> 21:31:31,372
Seperti pemrogram yang baik, pengembang web\n

22532
21:31:32,422 --> 21:31:34,160
Mereka tidak menulis kode bebas bug.

22533
21:31:34,160 --> 21:31:35,452
Bukan itu maksudnya.

22534
21:31:35,452 --> 21:31:38,542
Tujuan yang harus dicapai adalah\nmenjadi ahli diagnosa yang baik

22535
21:31:38,542 --> 21:31:40,551
Menurut saya, dalam kasus ini.

22536
21:31:46,812 --> 21:31:52,152
HADIRIN: Bagaimana jika Anda ingin\n

22537
21:31:52,152 --> 21:31:54,444
DAVID: Maaf, sedikit lebih keras?

22538
21:31:54,444 --> 21:31:57,012
AUDIENCE: Jika Anda ingin\nedit dalam CSS atau apa pun

22539
21:31:57,012 --> 21:32:01,422
dalam HTML, setelah Anda harus memperbaiki\ntemplatenya, bagaimana caranya?

22540
21:32:01,422 --> 21:32:05,532
DAVID: Jadi bagaimana Anda mengedit\nCSS jika Anda memiliki template ini?

22541
21:32:05,532 --> 21:32:07,842
Proses itu akan\nkita lihat tidak lama lagi.

22542
21:32:07,842 --> 21:32:09,467
Ini hampir akan sama persis.

22543
21:32:09,467 --> 21:32:12,550
Sekadar memberi teaser untuk ini,\n

22544
21:32:12,550 --> 21:32:15,402
tapi kami akan memberi Anda beberapa distribusi\n

22545
21:32:15,402 --> 21:32:17,862
Anda masih bisa\melakukan hal seperti ini.

22546
21:32:17,861 --> 21:32:22,660
Tautan href sama dengan tanda kutip\nhapus tanda kutip titik "gaya".

22547
21:32:22,660 --> 21:32:27,370
Rel CSS sama dengan style sheet, itu salah satunya\n

22548
21:32:27,370 --> 21:32:31,422
Satu-satunya perbedaan saat ini, menggunakan Flask,\n

22549
21:32:31,422 --> 21:32:34,041
menurut konvensi, harus masuk ke\nin folder statis Anda.

22550
21:32:34,040 --> 21:32:36,072
Jadi perubahan yang akan\nAnda lakukan pada tata letak Anda

22551
21:32:36,072 --> 21:32:40,001
bisa dikatakan bahwa style dot\nCSS ada di folder statis Anda.

22552
21:32:40,001 --> 21:32:43,990
Dan kemudian, jika saya masuk ke\ndirektori FroshIMS saya

22553
21:32:43,990 --> 21:32:46,330
Saya dapat membuat folder statis.

22554
21:32:46,331 --> 21:32:48,822
Saya dapat melakukan CD ke dalamnya,\ntidak ada apa pun di sana secara default.

22555
21:32:48,822 --> 21:32:51,762
Tetapi jika sekarang saya mengkodekan\nfile bernama style.css

22556
21:32:51,762 --> 21:32:54,822
Saya sekarang bisa melakukan sesuatu seperti tubuh ini.

22557
21:32:54,822 --> 21:33:05,982
Dan di sini, saya dapat mengatakan latar belakang\n

22558
21:33:05,982 --> 21:33:10,211
Biarkan saya melanjutkan sekarang dan memulai ulang\nFlask di direktori FroshIMS.

22559
21:33:10,211 --> 21:33:12,822
Semoga saja karena\nSaya melakukan ini dengan cepat.

22560
21:33:12,822 --> 21:33:16,161
Kembali ke formulir saya dan muat ulang.

22561
21:33:16,160 --> 21:33:19,751
Voila, sekarang kita sudah menyatukan\nhal-hal minggu lalu juga.

22562
21:33:19,751 --> 21:33:22,853
Jika saya menjawab pertanyaan yang benar?

22563
21:33:22,854 --> 21:33:27,202
AUDIENCE: [Tak terdengar] ubah\tidak satu halaman pun dan tidak yang lainnya.

22564
21:33:27,202 --> 21:33:30,202
DAVID: Jika Anda ingin mengubah satu halaman\n

22565
21:33:32,122 --> 21:33:36,952
Dalam hal ini, Anda mungkin ingin memiliki\n

22566
21:33:38,152 --> 21:33:42,381
Anda dapat menggunakan kelas yang berbeda dalam satu\n

22567
21:33:42,381 --> 21:33:43,801
Ada berbagai cara untuk melakukan itu.

22568
21:33:43,801 --> 21:33:47,751
Anda bahkan dapat memiliki\nplaceholder di tata letak Anda

22569
21:33:47,751 --> 21:33:52,221
yang memungkinkan Anda memasukkan\nURL gaya tertentu

22570
21:33:52,221 --> 21:33:53,661
lembar di file individual Anda.

22571
21:33:53,661 --> 21:33:56,432
Namun hal itu mulai menjadi\nlebih rumit dengan cepat.

22572
21:33:56,432 --> 21:33:58,172
Singkatnya, Anda pasti bisa melakukannya.

22573
21:33:58,172 --> 21:34:01,942
Namun biasanya, menurut saya sebagian besar situs web tidak mencoba

22574
21:34:01,941 --> 21:34:03,652
untuk menggunakan gaya Lembar yang berbeda per halaman.

22575
21:34:03,652 --> 21:34:06,322
Mereka menggunakan kembali gaya tersebut\sebanyak mungkin.

22576
21:34:06,322 --> 21:34:08,572
Baiklah, izinkan saya melanjutkan\ndan mengembalikannya secepatnya.

22577
21:34:08,572 --> 21:34:11,512
Dan mari kita mulai menambahkan sedikit\nfungsi lagi di sini.

22578
21:34:11,512 --> 21:34:14,392
Saya akan melanjutkan saja\n

22579
21:34:14,392 --> 21:34:16,162
untuk tidak mempersulit keadaan dulu.

22580
21:34:16,161 --> 21:34:19,251
Dan mari kita lanjutkan dan mainkan\n

22581
21:34:19,851 --> 21:34:23,264
Dalam formulir saya di sini, menu dropdown\nbaik-baik saja.

22582
21:34:24,182 --> 21:34:27,411
Namun misalkan saya ingin\nmengubahnya menjadi kotak centang.

22583
21:34:27,411 --> 21:34:31,432
Mungkin saya ingin siswa dapat\n

22584
21:34:31,432 --> 21:34:34,822
Yah, mungkin masuk akal untuk\nmembersihkannya dengan beberapa cara.

22585
21:34:35,572 --> 21:34:40,762
Bahkan sebelum kita masuk ke kotak centang,\n

22586
21:34:40,762 --> 21:34:45,211
Perhatikan bahwa saya telah melakukan hardcode pada bola basket,\n

22587
21:34:45,211 --> 21:34:49,592
Dan jika Anda ingat, di app.py, saya juga\n

22588
21:34:49,592 --> 21:34:52,932
Dan setiap kali Anda melihat salin tempel\atau yang setara dengannya

22589
21:34:52,932 --> 21:34:54,601
rasanya kita bisa berbuat lebih baik.

22590
21:34:54,601 --> 21:34:56,402
Jadi bagaimana jika saya melakukan ini.

22591
21:34:56,402 --> 21:35:00,711
Bagaimana jika saya memberikan diri saya\na variabel global Olahraga

22592
21:35:00,711 --> 21:35:03,111
Saya akan menggunakan huruf besar pada kata\nhanya untuk memberi arti bahwa memang demikian

22593
21:35:03,111 --> 21:35:07,161
dimaksudkan untuk menjadi konstan meskipun\n

22594
21:35:07,161 --> 21:35:09,741
Olahraga pertama adalah bola basket.

22595
21:35:11,721 --> 21:35:15,921
Yang ketiga adalah frisbee terhebat.

22596
21:35:15,922 --> 21:35:19,942
Sekarang saya punya satu\ntempat yang nyaman untuk menyimpan semua perlengkapan olahraga saya

22597
21:35:19,941 --> 21:35:22,461
apakah berubah semester depan\atau tahun depan atau yang lainnya.

22598
21:35:22,461 --> 21:35:24,471
Tapi perhatikan apa yang bisa saya lakukan.

22599
21:35:24,471 --> 21:35:26,101
Saya sekarang bisa melakukan sesuatu seperti ini.

22600
21:35:26,101 --> 21:35:30,111
Izinkan saya memasukkan sebuah variabel ke dalam templat\nindex saya

22601
21:35:30,111 --> 21:35:34,461
disebut olahraga yang setara dengan\nolahraga variabel global tersebut.

22602
21:35:34,461 --> 21:35:37,792
Biarkan saya masuk ke indeks saya sekarang,\ndini sebenarnya, sekarang

22603
21:35:37,792 --> 21:35:41,782
akan memberi petunjuk pada kekuatan\n

22604
21:35:41,782 --> 21:35:45,452
Biarkan saya lanjutkan dan singkirkan semuanya\n

22605
21:35:45,452 --> 21:35:50,332
dan izinkan saya menunjukkannya sedikit\n

22606
21:35:52,851 --> 21:35:54,872
Kami belum melihat akhir sintaksis ini.

22607
21:35:54,872 --> 21:35:57,692
Ada sintaks blok akhir,\ntapi sesederhana itu.

22608
21:35:57,691 --> 21:36:00,951
Jadi, Anda memiliki awal dan akhir\n

22609
21:36:02,392 --> 21:36:08,482
Opsi kurung kurawal\ngunakan kurung kurawal tutup.

22610
21:36:09,831 --> 21:36:12,981
Biarkan saya kembali ke\njendela terminal saya, jalankan Flask.

22611
21:36:12,982 --> 21:36:16,161
Dan jika saya tidak membuat kesalahan\ndi sini, izinkan saya kembali ke sini.

22612
21:36:16,161 --> 21:36:18,801
Warna merahnya akan hilang\nkarena saya menghapus CSS saya.

22613
21:36:18,801 --> 21:36:21,831
Dan sekarang saya masih memiliki olahraga\ndropdown dan semua olahraga itu

22614
21:36:22,771 --> 21:36:24,351
Saya dapat melakukan satu perbaikan lagi sekarang.

22615
21:36:24,351 --> 21:36:27,301
Saya tidak perlu menyebutkan\nolahraga yang sama secara manual di app.py.

22616
21:36:27,301 --> 21:36:31,671
Sekarang saya hanya dapat mengatakan jika\olahraga yang dimasukkan pengguna tidak

22617
21:36:31,672 --> 21:36:35,070
dalam variabel global saya, olahraga,\ndan ajukan pertanyaan yang sama.

22618
21:36:35,070 --> 21:36:36,862
Dan ini sangat\nberguna karena jika ada

22619
21:36:36,861 --> 21:36:41,001
olahraga lain, misalnya, yang\ngditambahkan, misalnya sepak bola

22620
21:36:41,001 --> 21:36:43,921
yang harus saya lakukan hanyalah\nmengubah variabel global saya.

22621
21:36:43,922 --> 21:36:47,542
Dan jika saya memuat ulang formulir sekarang\ndan melihat di dropdown, boom

22622
21:36:47,542 --> 21:36:49,732
sekarang saya mendapat dukungan untuk olahraga keempat.

22623
21:36:49,732 --> 21:36:51,422
Dan saya bisa terus menambahkan dan menambahkan di sana.

22624
21:36:51,422 --> 21:36:55,012
Jadi di sinilah templating dimulai\nmenjadi sangat hebat dalam hal itu

22625
21:36:55,012 --> 21:37:00,472
sekarang, dalam templat ini, saya menggunakan sintaks for loop\nJinja, yang mana

22626
21:37:00,471 --> 21:37:02,961
hampir identik dengan\nPython di sini, kecuali Anda

22627
21:37:02,961 --> 21:37:06,262
membutuhkan kurung kurawal dan persen\n

22628
21:37:07,131 --> 21:37:08,811
Tapi idenya sama dengan Python.

22629
21:37:08,812 --> 21:37:13,072
Mengulangi sesuatu dengan perulangan for\n

22630
21:37:13,072 --> 21:37:14,991
Dan ini seperti\nsitus web mana pun di luar sana.

22631
21:37:15,861 --> 21:37:19,851
Saat Anda mengunjungi kotak masuk dan Anda\n

22632
21:37:19,851 --> 21:37:22,491
Google belum melakukan hardcode\nemail Anda secara manual.

22633
21:37:22,491 --> 21:37:24,322
Mereka telah mengambilnya dari database.

22634
21:37:24,322 --> 21:37:26,072
Mereka memiliki semacam\nperulangan for seperti ini

22635
21:37:26,072 --> 21:37:32,057
dan baru saja mengeluarkan baris tabel setelah\n

22636
21:37:32,057 --> 21:37:34,432
Baiklah, jadi sekarang, mari kita\naju dan mengubahnya, mungkin

22637
21:37:34,432 --> 21:37:40,232
untuk, oh, bagaimana dengan\nkotak centang atau tombol radio kecil.

22638
21:37:40,232 --> 21:37:41,572
Jadi izinkan saya melanjutkan dan melakukan ini.

22639
21:37:41,572 --> 21:37:46,432
Daripada memilih menu, saya akan\n

22640
21:37:46,432 --> 21:37:52,351
Untuk masing-masing olahraga ini, izinkan saya melakukannya\n

22641
21:37:52,351 --> 21:37:55,281
tapi izinkan saya melanjutkan dan\nmengeluarkan tag masukan

22642
21:37:55,282 --> 21:37:59,302
yang namanya kutipan\ntanda kutip "olahraga", yang jenisnya

22643
21:37:59,301 --> 21:38:05,001
adalah kotak centang, yang nilainya adalah\n

22644
21:38:05,001 --> 21:38:09,403
kutip tanda kutip, lalu setelahnya\n

22645
21:38:10,111 --> 21:38:11,911
Jadi Anda melihat sebuah kata di sebelah kotak centang.

22646
21:38:11,911 --> 21:38:14,161
Dan kita akan melihat hasilnya\nsebentar lagi.

22647
21:38:14,161 --> 21:38:17,721
Jadi sebenarnya ini sedikit lebih sederhana\n

22648
21:38:17,721 --> 21:38:20,961
karena sekarang lihat apa\nyang terjadi jika saya memuat ulang formulir saya.

22649
21:38:20,961 --> 21:38:24,322
Antarmuka pengguna berbeda,\ndan tidak begitu bagus

22650
21:38:24,322 --> 21:38:27,601
tapi itu akan memungkinkan pengguna untuk masuk\n

22651
21:38:28,351 --> 21:38:31,682
Sekarang saya dapat mengeklik bola basket\ndan sepak bola dan sepak bola

22652
21:38:31,682 --> 21:38:34,021
atau kombinasi lain darinya.

22653
21:38:34,021 --> 21:38:37,801
Jika saya melihat sumber laman, ini\n

22654
21:38:37,801 --> 21:38:41,981
Saya tidak perlu mengetikkan empat\n

22655
21:38:41,982 --> 21:38:45,302
Dan semuanya memiliki\nnama yang sama, tapi tidak apa-apa.

22656
21:38:45,301 --> 21:38:48,932
Ternyata dengan Flask, jika dilihat\n

22657
21:38:48,932 --> 21:38:52,922
itu akan mengembalikannya kepada Anda sebagai\n

22658
21:38:52,922 --> 21:38:56,192
Baiklah, tapi misalkan kita tidak mau\n

22659
21:38:57,572 --> 21:39:01,202
Biarkan saya melanjutkan dan mengubah\nkotak centang ini menjadi tombol radio, yang mana

22660
21:39:01,202 --> 21:39:03,162
tombol radio saling eksklusif.

22661
21:39:03,161 --> 21:39:04,891
Jadi Anda hanya bisa mendaftar untuk satu saja.

22662
21:39:04,892 --> 21:39:09,542
Jadi sekarang, setelah saya memuat ulang\nhalamannya, ini dia.

22663
21:39:12,001 --> 21:39:16,771
Dan karena saya sudah memberikannya masing-masing\n

22664
21:39:16,771 --> 21:39:20,171
olahraga," itulah yang membuat\nmereka saling eksklusif.

22665
21:39:20,172 --> 21:39:23,492
Browser mengetahui keempat\nhal ini adalah jenis olahraga

22666
21:39:23,491 --> 21:39:26,732
oleh karena itu saya hanya akan membiarkan\nAnda memilih salah satu dari hal-hal ini.

22667
21:39:26,732 --> 21:39:29,072
Dan itu hanya karena\nsemuanya memiliki nama yang sama.

22668
21:39:29,072 --> 21:39:32,491
Sekali lagi, jika saya melihat sumber halaman, perhatikan\n

22669
21:39:32,491 --> 21:39:36,542
nama sama dengan olahraga, nama sama dengan\n

22670
21:39:36,542 --> 21:39:39,703
yang akan dimiliki masing-masing orang.

22671
21:39:39,703 --> 21:39:45,251
Baiklah, ada pertanyaan\ntentang pendekatan ini?

22672
21:39:45,751 --> 21:39:47,751
Baiklah, izinkan saya melanjutkan dan\nmembuka versinya

22673
21:39:47,751 --> 21:39:51,451
yang saya buat sebelumnya, itu berjalan\n

22674
21:39:51,452 --> 21:39:53,342
Sejauh ini, kami\nbelum tepat sasaran

22675
21:39:53,342 --> 21:39:56,672
di mana situs web ini berada, yang mana\n

22676
21:39:56,672 --> 21:39:59,192
seperti di database, semua orang\nyang telah mendaftar untuk olahraga.

22677
21:39:59,191 --> 21:40:01,891
Sekarang, kami benar-benar memberi tahu\nssiswa bahwa Anda telah terdaftar

22678
21:40:01,892 --> 21:40:03,812
atau Anda tidak terdaftar,\ntetapi kami benar-benar terdaftar

22679
21:40:03,812 --> 21:40:05,892
tidak melakukan apa pun dengan informasi ini.

22680
21:40:05,892 --> 21:40:08,532
Jadi, bagaimana cara kami\nmengimplementasi hal ini?

22681
21:40:08,532 --> 21:40:10,502
Baiklah, izinkan saya melanjutkan\nmenutup tab ini

22682
21:40:10,501 --> 21:40:15,901
dan izinkan saya membahas apa yang saya sebut versi\n

22683
21:40:15,902 --> 21:40:19,711
Dan izinkan saya masuk ke direktori sumber\nsembilan saya, FroshIMS3

22684
21:40:19,711 --> 21:40:22,652
dan izinkan saya membuka app.py.

22685
21:40:22,652 --> 21:40:24,211
Jadi ini adalah versi premade.

22686
21:40:24,211 --> 21:40:26,141
Saya sudah menyingkirkan\nsepakbola, dalam hal ini.

22687
21:40:26,142 --> 21:40:28,862
Namun saya telah menambahkan satu\nhal di bagian paling atas.

22688
21:40:28,861 --> 21:40:33,871
Apa, dalam bahasa Inggris, yang\nini wakili pada baris ketujuh?

22689
21:40:33,872 --> 21:40:35,911
Apa yang ingin Anda gambarkan\napa benda itu?

22690
21:40:41,452 --> 21:40:42,172
HADIRIN: Ini kamus kosong.

22691
21:40:42,172 --> 21:40:43,372
DAVID: Ya, kamusnya\kosong, kan?

22692
21:40:43,372 --> 21:40:45,622
Pendaftar tampaknya\na variabel di sebelah kiri.

22693
21:40:45,622 --> 21:40:47,930
Itu sedang diberi kamus\nkosong di sebelah kanan.

22694
21:40:47,929 --> 21:40:49,971
Dan kamus, sekali lagi,\nhanyalah pasangan nilai kunci.

22695
21:40:49,971 --> 21:40:53,451
Di sini, sekali lagi, adalah tempat kamus\n

22696
21:40:53,960 --> 21:40:56,752
Karena ini akan memungkinkan saya\n

22697
21:40:56,751 --> 21:40:59,271
untuk frisbee pamungkas, Carter\nmendaftar untuk sepak bola

22698
21:40:59,271 --> 21:41:00,831
Emma mendaftar untuk hal lain.

22699
21:41:00,831 --> 21:41:04,311
Anda dapat mengaitkan kunci dengan\nnilai, nama dengan olahraga

22700
21:41:04,312 --> 21:41:07,532
dengan asumsi model di mana Anda hanya bisa\n

22701
21:41:07,532 --> 21:41:12,802
Jadi mari kita lihat\nlogika apa yang menangani hal ini.

22702
21:41:12,801 --> 21:41:16,281
Di sini, di rute pendaftaran saya\nin kode yang telah saya buat sebelumnya

22703
21:41:16,282 --> 21:41:18,202
perhatikan bahwa saya sedang memvalidasi\nnama pengguna.

22704
21:41:18,202 --> 21:41:20,392
Sedikit berbeda dari\nsebelumnya tetapi idenya sama.

22705
21:41:20,392 --> 21:41:23,482
Saya menggunakan request.form.get\nuntuk mendapatkan nama manusia.

22706
21:41:23,482 --> 21:41:26,512
Jika bukan nama, maka jika\nmanusia tidak mengetikkan nama

22707
21:41:26,512 --> 21:41:29,241
Saya akan menampilkan error.html.

22708
21:41:29,241 --> 21:41:33,652
Tapi perhatikan saya sudah mulai membuat\n

22709
21:41:33,652 --> 21:41:37,551
Tampaknya saya memberi tahu pengguna,\n

22710
21:41:38,631 --> 21:41:41,182
Sepertinya saya meneruskan\nke templat kesalahan saya

22711
21:41:41,182 --> 21:41:44,535
bukan hanya fail.html,\na pesan tertentu.

22712
21:41:44,535 --> 21:41:45,952
Jadi mari kita pergi ke lubang kelinci ini.

22713
21:41:45,952 --> 21:41:52,052
Biarkan saya masuk ke\ntemplates/error.hml, dan tentu saja

22714
21:41:52,051 --> 21:41:55,762
inilah file baru yang saya buat di sini, itu\n

22715
21:41:55,762 --> 21:41:59,332
kucing pemarah sebagai bagian dari kesalahan\n

22716
21:41:59,331 --> 21:42:04,581
Di badan blok saya, saya punya tag H1\n

22717
21:42:04,581 --> 21:42:07,131
Saya kemudian memiliki paragraf\ntag yang menyambungkan apa pun

22718
21:42:07,131 --> 21:42:10,881
pesan kesalahannya adalah\ncontroller, app.py, sedang lewat.

22719
21:42:10,881 --> 21:42:14,211
Dan hanya untuk bersenang-senang, saya punya\n

22720
21:42:14,211 --> 21:42:15,751
bahwa sebenarnya ada kesalahan.

22721
21:42:18,422 --> 21:42:22,792
Saya melakukan hal yang sama\nrequest.form.get olahraga

22722
21:42:22,792 --> 21:42:24,562
dan saya menyimpannya dalam\nvariabel bernama olahraga.

22723
21:42:24,562 --> 21:42:28,351
Jika tidak ada olahraga seperti itu, itulah\n

22724
21:42:28,351 --> 21:42:30,771
lalu saya akan merender\nerror.html dua, tapi ternyata saya melakukannya

22725
21:42:30,771 --> 21:42:33,361
akan memberikan\npesan berbeda, melewatkan olahraga.

22726
21:42:33,361 --> 21:42:38,451
Lain lagi, jika olahraga yang mereka ketik\n

22727
21:42:38,452 --> 21:42:41,991
Saya akan merender error.html,\ntetapi keluhannya berbeda

22728
21:42:41,991 --> 21:42:44,781
entah bagaimana kamu memberiku olahraga yang tidak valid.

22729
21:42:44,782 --> 21:42:47,032
Seolah-olah ada peretas yang masuk ke\nHTML laman tersebut

22730
21:42:47,032 --> 21:42:49,379
mengubahnya untuk menambahkan\olahraga yang mereka kenal seperti bola voli.

22731
21:42:49,379 --> 21:42:51,711
Meski tidak ditawarkan,\nmereka mengirimkan bola voli.

22732
21:42:51,711 --> 21:42:55,161
Tapi tak apa, aku malah menolaknya\n

22733
21:42:55,161 --> 21:42:58,671
mencoba mengirimkannya kepada saya dengan\nmengubah dom secara lokal.

22734
21:42:58,672 --> 21:43:00,832
Dan sungguh, keajaibannya hanya ini.

22735
21:43:00,831 --> 21:43:03,441
Saya ingat\norang ini telah mendaftar

22736
21:43:03,441 --> 21:43:06,621
dengan mengindeks ke\nkamus pendaftar

22737
21:43:06,622 --> 21:43:11,631
menggunakan nama yang diketik manusia sebagai\n

22738
21:43:12,902 --> 21:43:15,232
Ya, saya menambahkan satu rute terakhir di sini.

22739
21:43:15,232 --> 21:43:19,672
Saya memiliki rute /pendaftar dengan\n

22740
21:43:19,672 --> 21:43:21,622
templat bernama registrants.html.

22741
21:43:21,622 --> 21:43:26,582
Namun dibutuhkan input\ngvariabel global seperti sebelumnya.

22742
21:43:26,581 --> 21:43:32,961
Jadi ayo turun ke lubang kelinci ini, biarkan aku\n

22743
21:43:34,402 --> 21:43:38,182
Kelihatannya agak terlalu besar,\ntetapi memperluas tata letaknya.

22744
21:43:39,381 --> 21:43:42,322
Saya mendapat tag H1 yang bertuliskan\npendaftar, besar dan tebal.

22745
21:43:42,322 --> 21:43:44,691
Lalu saya punya meja\nyang kita lihat minggu lalu.

22746
21:43:44,691 --> 21:43:48,561
Ini memiliki kepala tabel yang hanya\nmengatakan nama olahraga untuk dua kolom.

22747
21:43:48,562 --> 21:43:53,961
Kemudian ia memiliki badan tabel di mana,\n

22748
21:43:53,961 --> 21:43:57,172
Maksudku, untuk setiap nama\n variabel pendaftar

22749
21:43:57,172 --> 21:44:01,162
menampilkan baris tabel, tag awal,\ndan tag akhir, di dalamnya

22750
21:44:01,161 --> 21:44:04,341
dua data tabel, dua\nsel, data tabel untuk nama

22751
21:44:04,342 --> 21:44:08,552
data tabel nama braket pendaftar.

22752
21:44:08,551 --> 21:44:10,971
Jadi ini sangat mirip dengan sintaksis Python.

22753
21:44:10,971 --> 21:44:14,861
Ini pada dasarnya adalah sintaksis Python, meskipun\n

22754
21:44:15,361 --> 21:44:17,511
Jadi efek bersihnya di sini adalah apa?

22755
21:44:17,512 --> 21:44:20,812
Biarkan saya membuka terminal\njendela saya, jalankan Flask run.

22756
21:44:20,812 --> 21:44:24,872
Sekarang izinkan saya masuk ke\nformulir yang telah saya buat sebelumnya di sini.

22757
21:44:26,032 --> 21:44:27,952
Biarkan saya melanjutkan dan mengetikkan David.

22758
21:44:27,952 --> 21:44:30,322
Biarkan saya memilih, oh, tidak ada olahraga.

22759
21:44:33,232 --> 21:44:34,881
Dan ada kucing pemarah.

22760
21:44:34,881 --> 21:44:37,881
Jadi olahraga yang hilang,\nsecara khusus dikeluarkan.

22761
21:44:38,672 --> 21:44:41,422
Izinkan saya melanjutkan dan tidak menyebutkan nama.

22762
21:44:44,751 --> 21:44:47,241
Baiklah, dan izinkan saya\ndengan jahatnya, sekarang, melakukan ini.

22763
21:44:49,581 --> 21:44:53,691
Saya akan mengetikkan nama saya, tentu saja, tapi biarkan\n

22764
21:44:53,691 --> 21:44:57,891
Biarkan aku jatuh dengan jahat di pamungkas\n

22765
21:44:59,542 --> 21:45:04,342
Ubah itu dan ubah\nini menjadi bola voli.

22766
21:45:05,122 --> 21:45:08,991
Jadi sekarang, saya bisa mendaftar\nan olahraga apa pun yang ingin saya buat.

22767
21:45:08,991 --> 21:45:11,961
Biarkan saya klik daftar,\ntetapi olahraga tidak valid.

22768
21:45:11,961 --> 21:45:14,182
Jadi sekali lagi, hal ini menunjukkan\nkekuatan dan kebutuhan

22769
21:45:14,182 --> 21:45:17,361
untuk memeriksa berbagai hal di backend\ndan tidak mempercayai pengguna.

22770
21:45:17,361 --> 21:45:21,591
Meretas situs web semudah itu\n

22771
21:45:22,292 --> 21:45:24,292
Baiklah, akhirnya, mari\nlakukan ini secara nyata.

22772
21:45:24,292 --> 21:45:26,292
David akan mendaftar\nuntuk frisbee pamungkas.

22773
21:45:27,292 --> 21:45:30,562
Dan sekarang, hasilnya tidak\nsangat bagus, tapi perhatikan

22774
21:45:30,562 --> 21:45:32,552
Saya berada di rute pendaftar.

22775
21:45:32,551 --> 21:45:34,641
Dan jika saya memperkecil, saya memiliki tabel HTML.

22776
21:45:34,642 --> 21:45:38,132
Dua kolom, nama dan olahraga,\nDavid dan frisbee pamungkas.

22777
21:45:38,131 --> 21:45:41,881
Izinkan saya kembali ke formulir, izinkan saya\n

22778
21:45:41,881 --> 21:45:43,322
dan mendaftar untuk bola basket.

22779
21:45:44,221 --> 21:45:49,111
Sekarang kita melihat dua baris dalam tabel ini,\n

22780
21:45:49,622 --> 21:45:51,414
Dan jika kita melakukan ini sekali\nlagi, mungkin Emma

22781
21:45:51,414 --> 21:45:53,762
datang dan mendaftar\nuntuk mendaftar sepak bola.

22782
21:45:53,762 --> 21:45:58,667
Semua informasi ini sedang\ndisimpan dalam kamus ini sekarang.

22783
21:45:58,667 --> 21:45:59,792
Baiklah, jadi itu bagus.

22784
21:45:59,792 --> 21:46:03,991
Sekarang kami memiliki database, meskipun dalam\n

22785
21:46:03,991 --> 21:46:09,039
Namun mengapa ini mungkin bukan\nimplementasi terbaik?

22786
21:46:10,716 --> 21:46:13,619
AUDIENCE: Anda menyimpan [Tak terdengar].

22787
21:46:18,851 --> 21:46:21,476
Jadi kami hanya menyimpan\ndictionary ini di memori komputer

22788
21:46:21,476 --> 21:46:24,732
dan itu bagus sampai saya menekan\nKontrol C dan mematikan Flask

22789
21:46:26,172 --> 21:46:29,412
Atau server reboot, atau mungkin\nSaya menutup laptop saya atau apa pun.

22790
21:46:29,411 --> 21:46:32,711
Jika server berhenti berjalan,\nmemori akan hilang.

22791
21:46:34,182 --> 21:46:37,312
Itu akan dibuang ketika Anda kehilangan\ndaya atau menghentikan program.

22792
21:46:37,312 --> 21:46:39,101
Jadi mungkin ini bukan pendekatan terbaik.

22793
21:46:39,101 --> 21:46:41,361
Mungkin akan lebih baik\nmenggunakan file CSV.

22794
21:46:41,361 --> 21:46:43,991
Faktanya, sekitar 20 tahun yang lalu,\nitulah yang saya lakukan.

22795
21:46:43,991 --> 21:46:45,891
Saya menyimpan semuanya dalam file CSV.

22796
21:46:45,892 --> 21:46:48,402
Tapi mari kita lewati langkah itu,\nkarena kita sudah melihatnya minggu lalu

22797
21:46:48,402 --> 21:46:51,551
atau beberapa minggu yang lalu\nsekarang, bagaimana kita bisa menggunakan SQLite.

22798
21:46:51,551 --> 21:46:54,131
Mari kita lihat apakah kita tidak bisa\nmenikah dengan beberapa SQL di sini

22799
21:46:54,131 --> 21:46:58,131
untuk menyimpan\ndatabase aktual untuk program tersebut.

22800
21:46:58,131 --> 21:47:00,072
Izinkan saya kembali ke sini dan\nbiarkan saya membuka diri, misalnya

22801
21:47:00,072 --> 21:47:03,611
versi empat ini, yang\nhampir sama tetapi itu

22802
21:47:03,611 --> 21:47:05,291
menambahkan sedikit lebih banyak fungsionalitas.

22803
21:47:05,292 --> 21:47:10,542
Izinkan saya menutup tab ini dan izinkan saya\n

22804
21:47:10,542 --> 21:47:13,752
Jadi perhatikan itu hampir\nsama, tetapi di atas

22805
21:47:13,751 --> 21:47:18,251
Saya sedang membuat koneksi database\n

22806
21:47:18,251 --> 21:47:20,044
Jadi itu adalah database\nyang saya buat sebelumnya.

22807
21:47:20,044 --> 21:47:21,461
Jadi mari kita pergi ke lubang kelinci itu.

22808
21:47:22,482 --> 21:47:24,622
Biarkan saya memperbesar jendela terminal saya.

22809
21:47:24,622 --> 21:47:28,362
Biarkan saya menjalankan SQLite 3 dari FroshIMS.db.

22810
21:47:30,342 --> 21:47:33,432
dan mari kita simpulkan\ninilah yang saya rancang.

22811
21:47:33,432 --> 21:47:37,721
Saya memiliki tabel bernama pendaftar,\n

22812
21:47:37,721 --> 21:47:42,101
Kolom ID yang berupa bilangan bulat, nama\n

22813
21:47:42,101 --> 21:47:44,711
dan kolom olahraga yang\njuga berupa teks, tidak boleh nol

22814
21:47:44,711 --> 21:47:46,361
dan kunci utama hanyalah ID.

22815
21:47:46,361 --> 21:47:49,391
Sehingga saya memiliki\nID unik untuk setiap pendaftaran.

22816
21:47:49,392 --> 21:47:51,912
Mari kita lihat apakah ada\nanorang di sana.

22817
21:47:51,911 --> 21:47:55,604
Pilih bintang dari pendaftar.

22818
21:47:55,604 --> 21:47:56,771
Oke, tidak ada seorang pun di sana.

22819
21:47:56,771 --> 21:47:58,361
Belum ada yang terdaftar untuk olahraga.

22820
21:47:58,361 --> 21:48:00,941
Jadi mari kita kembali ke\nkode dan melanjutkan.

22821
21:48:00,941 --> 21:48:03,792
Dalam kode saya sekarang, saya punya\nvariabel global yang sama

22822
21:48:03,792 --> 21:48:07,032
untuk validasi dan\npembuatan HTML saya.

22823
21:48:07,032 --> 21:48:09,522
Sepertinya rute indeks saya sama.

22824
21:48:09,521 --> 21:48:13,241
Ini menghasilkan\nmenu olahraga secara dinamis.

22825
21:48:13,241 --> 21:48:14,899
Menariknya, kita akan kembali ke sini.

22826
21:48:14,899 --> 21:48:17,232
Ada rute pembatalan pendaftaran\nyang akan mengizinkan seseorang

22827
21:48:17,232 --> 21:48:22,092
untuk membatalkan pendaftaran diri mereka sendiri jika\nmereka ingin keluar dari olahraga tersebut

22828
21:48:24,702 --> 21:48:27,342
Inilah rute pendaftaran saya yang baru dan\nmeningkatkan.

22829
21:48:27,342 --> 21:48:30,702
Masih berfungsi di POST, jadi\nada sedikit privasi di sana.

22830
21:48:30,702 --> 21:48:33,532
Saya memvalidasi\npengiriman sebagai berikut.

22831
21:48:33,532 --> 21:48:36,942
Saya mendapatkan nama\nyang dimasukkan pengguna, olahraga yang dimasukkan pengguna

22832
21:48:36,941 --> 21:48:41,141
dan jika itu bukan nama atau\nolahraga tersebut tidak termasuk dalam olah raga

22833
21:48:41,142 --> 21:48:42,959
Saya akan merender fail.html.

22834
21:48:43,792 --> 21:48:45,142
Tidak ada kucing di versi ini.

22835
21:48:46,542 --> 21:48:50,262
Jika tidak, ingat kembali bagaimana kita\nmenggabungkan SQL dan Python sebelumnya.

22836
21:48:50,262 --> 21:48:53,562
Kami menggunakan perpustakaan\nSQL CS50, tapi itu saja

22837
21:48:53,562 --> 21:48:56,892
membuatnya sedikit lebih mudah untuk dieksekusi\n

22838
21:48:56,892 --> 21:49:00,522
Masukkan ke dalam pendaftar\nnama koma olahraga.

22839
21:49:00,521 --> 21:49:05,152
Dua nilai apa, nama dan\n

22840
21:49:05,152 --> 21:49:08,021
Dan yang terakhir, dan ini adalah\n baru

22841
21:49:08,021 --> 21:49:10,781
secara eksplisit sekarang, Flask\njuga memberi Anda akses

22842
21:49:10,782 --> 21:49:17,407
ke fungsi pengalihan, seperti itulah\n

22843
21:49:17,407 --> 21:49:19,782
dan semua situs lain yang kami\nmainkan minggu lalu

22844
21:49:19,782 --> 21:49:23,262
kita semua menerapkan pengalihan\n

22845
21:49:23,262 --> 21:49:26,741
Fungsi Flask\nredirect ini berasal dari file saya saja

22846
21:49:26,741 --> 21:49:30,221
setelah mengimpornya di\nbagian paling atas file ini.

22847
21:49:30,221 --> 21:49:35,141
Ini menangani HTTP 301 atau 302 atau 307\n

22848
21:49:37,211 --> 21:49:42,282
Baiklah, itu saja untuk\nmendaftar melalui rute ini.

22849
21:49:42,282 --> 21:49:45,912
Mari kita lihat\nrute pendaftarnya.

22850
21:49:45,911 --> 21:49:49,031
Di sini, kami memiliki\nrute baru untuk /pendaftar.

22851
21:49:49,032 --> 21:49:52,042
Dan alih-alih hanya mengulangi\nover kamus seperti sebelumnya

22852
21:49:52,042 --> 21:49:56,471
kita kembali, mari\nlihat, db.eksekusi dari bintang yang dipilih

22853
21:49:57,312 --> 21:50:00,402
Jadi itulah yang terprogram\n

22854
21:50:00,402 --> 21:50:02,411
Itu memberi saya kembali\ndaftar kamus

22855
21:50:02,411 --> 21:50:05,652
masing-masing mewakili\none baris dalam tabel.

22856
21:50:05,652 --> 21:50:08,831
Lalu, saya akan merender\nmendaftarkan dan memulai HTML

22857
21:50:08,831 --> 21:50:12,281
meneruskan secara harfiah\ndaftar kamus itu

22858
21:50:12,282 --> 21:50:15,562
sama seperti menggunakan\nlibrary CS50 di masa lalu.

22859
21:50:15,562 --> 21:50:18,522
Jadi mari kita lihat\na ini-- bentuk itu.

22860
21:50:18,521 --> 21:50:24,372
Jika saya membuka templat dan\nmembuka registrants.html

22861
21:50:24,372 --> 21:50:27,372
oh, oke, ini hanya meja seperti sebelumnya.

22862
21:50:27,372 --> 21:50:30,672
Dan sebenarnya, izinkan saya mengubahnya\nsecara sintaksis demi konsistensi.

22863
21:50:30,672 --> 21:50:36,312
Kami memiliki perulangan Jinja for yang\menyatu pada setiap pendaftar

22864
21:50:36,312 --> 21:50:39,672
dan untuk masing-masingnya,\nmenghasilkan baris tabel.

22865
21:50:39,672 --> 21:50:40,902
Oh, tapi ini menarik.

22866
21:50:40,902 --> 21:50:44,622
Daripada hanya memiliki dua kolom\n

22867
21:50:44,622 --> 21:50:47,654
perhatikan bahwa saya juga\nmengeluarkan formulir lengkap.

22868
21:50:47,653 --> 21:50:49,361
Baiklah, ini\nmulai menarik.

22869
21:50:49,361 --> 21:50:52,661
Jadi mari kita kembali\nke jendela terminal saya

22870
21:50:52,661 --> 21:50:56,531
jalankan Flask, dan lihat\ncontoh ini terlihat seperti apa sekarang.

22871
21:50:58,812 --> 21:51:00,592
Di laman beranda,\nterlihat sama persis.

22872
21:51:00,592 --> 21:51:02,175
Tapi izinkan saya sekarang mendaftar untuk sesuatu.

22873
21:51:02,175 --> 21:51:04,792
David untuk frisbee terbaik, daftar.

22874
21:51:08,831 --> 21:51:12,561
David mendaftar\nultimate frisbee, daftar.

22875
21:51:13,062 --> 21:51:15,132
Untung saja saya telah membatalkan pendaftaran.

22876
21:51:15,131 --> 21:51:16,932
Jadi seperti inilah tampilannya sekarang.

22877
21:51:16,932 --> 21:51:22,119
Saya memiliki halaman di rute bernama\n

22878
21:51:22,119 --> 21:51:24,161
kolom, nama dan olahraga,\nDavid, frisbee terhebat.

22879
21:51:24,161 --> 21:51:25,521
Tapi oh, tunggu, kolom ketiga.

22880
21:51:26,021 --> 21:51:30,461
Karena jika saya melihat sumber halamannya,\n

22881
21:51:30,461 --> 21:51:34,572
Untuk setiap baris dalam tabel ini, saya juga\n

22882
21:51:36,532 --> 21:51:40,092
Namun sebelum kita melihat cara kerjanya,\n

22883
21:51:40,682 --> 21:51:42,282
Jadi Carter akan memberimu bola basket.

22884
21:51:44,961 --> 21:51:48,072
Sekarang, izinkan saya kembali dan\nmendaftarkan Emma untuk sepak bola.

22885
21:51:50,051 --> 21:51:55,481
Sebelum kita melihat HTML itu, mari\n

22886
21:51:55,482 --> 21:51:59,741
Mari masuk ke SQLite FroshIMS.

22887
21:51:59,741 --> 21:52:10,152
Izinkan saya masuk ke FroshIMS, dan izinkan saya\n

22888
21:52:10,152 --> 21:52:12,461
Dan sekarang lakukan pemilihan bintang dari pendaftar.

22889
21:52:12,461 --> 21:52:16,391
Padahal, sebelumnya, ketika saya mengeksekusi\n

22890
21:52:17,471 --> 21:52:21,111
Jadi sekarang kita melihat apa yang sebenarnya\nterjadi di balik terpal.

22891
21:52:21,111 --> 21:52:24,461
Jadi mari kita lihat\nformulir ini sekarang-- halaman ini sekarang.

22892
21:52:24,461 --> 21:52:29,141
Jika saya ingin membatalkan pendaftaran, batalkan pendaftaran\n

22893
21:52:30,941 --> 21:52:33,042
Mengklik salah satu\ntombol tersebut memang akan berhasil

22894
21:52:33,042 --> 21:52:36,021
hapus baris dari database.

22895
21:52:36,021 --> 21:52:41,411
Namun bagaimana cara kita menautkan web\n

22896
21:52:41,411 --> 21:52:43,451
Ini adalah bagian terakhir dari teka-teki.

22897
21:52:43,452 --> 21:52:47,232
Sampai saat ini, semuanya sudah\ndengan formulir dan juga dengan URL.

22898
21:52:47,232 --> 21:52:49,362
Namun bagaimana jika pengguna\ntidak mengetik apa pun

22899
21:52:49,361 --> 21:52:51,551
mereka hanya mengklik tombol?

22900
21:52:53,422 --> 21:52:55,897
Biarkan saya melanjutkan dan\nsmengendus lalu lintas, yang mana

22901
21:52:55,896 --> 21:52:57,521
Anda mungkin sudah terbiasa melakukannya sekarang.

22902
21:52:57,521 --> 21:53:01,331
Kapan pun Anda penasaran bagaimana sebuah situs web\n

22903
21:53:01,331 --> 21:53:05,771
Dan Carter, bolehkah kami\mendaftarkan Anda dari bola basket?

22904
21:53:05,771 --> 21:53:09,311
Mari kita batalkan pendaftaran Carter dan\nkita lihat apa yang baru saja terjadi.

22905
21:53:09,312 --> 21:53:13,392
Jika saya melihat permintaan pembatalan pendaftaran\n, perhatikan bahwa itu adalah POST.

22906
21:53:13,392 --> 21:53:16,212
Kode status yang\nakhirnya muncul kembali sebagai 302

22907
21:53:16,211 --> 21:53:18,641
tapi mari kita lihat permintaan itu sendiri.

22908
21:53:18,642 --> 21:53:21,372
Semua header di sana akan kami abaikan.

22909
21:53:21,372 --> 21:53:25,872
Satu-satunya hal yang\ntombol kirimkan, dengan cerdik

22910
21:53:25,872 --> 21:53:29,892
adalah parameter ID, kunci yang setara dengan dua.

22911
21:53:29,892 --> 21:53:34,152
Apa yang mungkin\ndiwakili atau dipetakan oleh dua hal tersebut?

22912
21:53:34,152 --> 21:53:37,062
Dari mana asal keduanya?

22913
21:53:37,062 --> 21:53:40,782
Tidak tertulis Carter, tidak tertulis bola basket?

22914
21:53:41,330 --> 21:53:43,122
AUDIENCE: Orang kedua\nyang mendaftar.

22915
21:53:43,122 --> 21:53:44,532
DAVID:\nOrang kedua yang mendaftar.

22916
21:53:44,532 --> 21:53:47,682
Jadi kunci utama yang kita mulai\n

22917
21:53:47,682 --> 21:53:50,982
lalu, mengapa berguna untuk dapat\n

22918
21:53:50,982 --> 21:53:53,232
inilah salah satu alasannya.

22919
21:53:53,232 --> 21:53:58,271
Jika cukup saya hanya\nkirimkan nomor ID orang tersebut

22920
21:53:58,271 --> 21:54:03,141
Saya ingin menghapus dari database,\n

22921
21:54:03,142 --> 21:54:09,322
Jika saya masuk ke app.py dan melihat\n

22922
21:54:11,172 --> 21:54:15,642
Saya pertama kali masuk ke formulir, dan saya mendapatkan\n

22923
21:54:15,642 --> 21:54:19,872
Jika memang ada ID, dan\nformulirnya tidak kosong

22924
21:54:19,872 --> 21:54:21,642
Saya menjalankan baris kode ini.

22925
21:54:21,642 --> 21:54:24,642
Hapus dari pendaftar yang\nIDnya sama dengan tanda tanya

22926
21:54:24,642 --> 21:54:29,202
lalu saya masukkan nomor itu,\nmenghapus Carter dan hanya Carter.

22927
21:54:29,202 --> 21:54:32,472
Dan saya tidak menggunakan namanya, karena\n

22928
21:54:32,471 --> 21:54:34,001
dua orang bernama Emma atau David?

22929
21:54:34,001 --> 21:54:35,601
Anda tidak ingin menghapus keduanya.

22930
21:54:35,601 --> 21:54:39,732
Itulah sebabnya\nID unik ini sangat penting.

22931
21:54:39,732 --> 21:54:41,622
Dan inilah alasan lainnya.

22932
21:54:41,622 --> 21:54:45,012
Anda tidak ingin menyimpan\nbeberapa hal dalam URL.

22933
21:54:45,012 --> 21:54:49,752
Misalkan kita membuka\nURL ini, batalkan pendaftaran?ID=3.

22934
21:54:53,262 --> 21:54:58,131
Misalkan saya, dengan niat jahat,\mengirimkan URL ini melalui email ke Emma.

22935
21:54:58,131 --> 21:55:00,131
Tidak terlalu penting\napa permulaannya

22936
21:55:00,131 --> 21:55:06,251
tapi seharusnya saya mengiriminya email berisi URL ini,\n

22937
21:55:07,691 --> 21:55:10,331
Dan itu menggunakan GET, bukan POST.

22938
21:55:10,331 --> 21:55:12,326
Apa yang baru saja aku tipu agar dia lakukan?

22939
21:55:15,369 --> 21:55:17,161
Apa yang akan terjadi\njika Emma mengklik ini?

22940
21:55:19,021 --> 21:55:21,521
DAVID: Anda akan mengelabui dia\ninuntuk membatalkan pendaftarannya.

22941
21:55:22,021 --> 21:55:24,811
Karena jika dia login\ninke website FroshIMS ini

22942
21:55:24,812 --> 21:55:28,862
dan URL-nya berisi ID-nya hanya\nkarena saya bermaksud jahat

22943
21:55:28,861 --> 21:55:31,921
dan dia mengkliknya dan\nsitus webnya menggunakan GET

22944
21:55:31,922 --> 21:55:34,711
sayangnya, GET URLs\nare, sekali lagi, bersifat stateful.

22945
21:55:34,711 --> 21:55:36,782
Mereka memiliki informasi negara bagian di URL.

22946
21:55:36,782 --> 21:55:39,532
Dan dalam hal ini, cukup\nmenghapus pengguna dan boom

22947
21:55:39,532 --> 21:55:42,144
dia akan secara tidak sengaja\mendaftarkan dirinya sendiri.

22948
21:55:42,144 --> 21:55:43,351
Dan ini tidak berbahaya.

22949
21:55:43,351 --> 21:55:45,872
Misalkan ini adalah\nrekening banknya yang mencoba

22950
21:55:45,872 --> 21:55:47,672
untuk melakukan penarikan atau penyetoran.

22951
21:55:47,672 --> 21:55:50,822
Misalkan ini adalah suatu\situs web lain, URL Facebook

22952
21:55:50,822 --> 21:55:53,339
mencoba mengelabui dia agar\nmengeposkan sesuatu secara otomatis.

22953
21:55:53,339 --> 21:55:55,172
Di sini juga ada\npertimbangan lain saat Anda

22954
21:55:55,172 --> 21:55:59,402
harus menggunakan POST versus GET,\nkarena permintaan GET bisa

22955
21:55:59,402 --> 21:56:04,331
dicolokkan ke email yang dikirim melalui Slack\n

22956
21:56:04,331 --> 21:56:06,601
Dan kecuali ada\npernyataan cepat, apakah Anda yakin

22957
21:56:06,601 --> 21:56:09,751
Anda ingin membatalkan pendaftaran\ndiri Anda sendiri, Anda mungkin secara membabi buta

22958
21:56:09,751 --> 21:56:11,851
mengelabui pengguna agar\nrentan terhadap apa

22959
21:56:11,851 --> 21:56:14,221
disebut pemalsuan permintaan lintas situs.

22960
21:56:14,221 --> 21:56:17,401
Sebuah cara yang bagus untuk mengatakan bahwa Anda\nmenipu mereka agar mengeklik tautan

22961
21:56:17,402 --> 21:56:21,241
yang tidak seharusnya mereka lakukan, karena\n

22962
21:56:21,241 --> 21:56:25,111
Baiklah, ada pertanyaan\bukan elemen dasar ini?

22963
21:56:26,929 --> 21:56:32,275
AUDIENCE: Apa yang dilakukan\nhal pertama dalam contoh SQL

22964
21:56:32,275 --> 21:56:34,232
[Tak terdengar] di mana mereka\nmemiliki tiga garis miring?

22965
21:56:35,501 --> 21:56:37,456
DAVID: Kalau tiga kolom maksudnya?

22966
21:56:37,456 --> 21:56:42,311
HADIRIN: Tidak, tiga garis miring ke depan.

22967
21:56:42,312 --> 21:56:44,882
DAVID: Tiga garis miring ke depan.

22968
21:56:46,407 --> 21:56:49,377
AUDIENCE: Ya, jadi menurut saya itu ada di [Tak terdengar]..

22969
21:56:52,851 --> 21:56:56,031
DAVID: Maaf, di mana?

22970
21:56:57,235 --> 21:57:02,065
AUDIENCE: Ada di [Tak terdengar] gulir ke atas.

22971
21:57:06,304 --> 21:57:07,721
DAVID: Maaf, arah sebaliknya?

22972
21:57:12,846 --> 21:57:16,407
Jadi silakan gulir sedikit lagi.

22973
21:57:16,407 --> 21:57:17,532
DAVID: Terus gulir lagi?

22974
21:57:20,081 --> 21:57:27,761
Ini adalah URI, sintaksisnya yang umum\n

22975
21:57:27,762 --> 21:57:32,351
protokol, bisa dikatakan, yang artinya\n

22976
21:57:32,351 --> 21:57:35,322
:// sama seperti yang Anda dan saya lihat di URL.

22977
21:57:35,322 --> 21:57:37,961
Garis miring ketiga, pada dasarnya,\nberarti folder saat ini.

22978
21:57:38,622 --> 21:57:41,461
Jadi ini adalah rasa ingin tahu yang aneh,\ntapi ini tipikal

22979
21:57:41,461 --> 21:57:43,961
kapan pun Anda mengacu pada\nfile lokal dan bukan file itu

22980
21:57:45,251 --> 21:57:48,311
Itu sedikit menyederhanakan,\n

22981
21:57:48,312 --> 21:57:50,472
Maaf karena tidak mengklik sebelumnya.

22982
21:57:50,471 --> 21:57:53,292
Baiklah, mari kita lakukan satu\perulangan lagi pada FroshIMS

22983
21:57:53,292 --> 21:57:56,622
di sini hanya untuk menunjukkan siapa diriku\n

22984
21:57:56,622 --> 21:57:59,562
tidak hanya menyimpan\nhal-hal ini dalam file CSV, seingat saya.

22985
21:57:59,562 --> 21:58:02,047
Saya juga secara otomatis\ngebuat email

22986
21:58:02,047 --> 21:58:04,422
kepada pengawas yang bertanggung jawab\nprogram olahraga intramural

22987
21:58:04,422 --> 21:58:07,512
sehingga mereka memiliki semacam\n

22988
21:58:07,512 --> 21:58:09,652
dan mereka juga dapat dengan mudah\nmembalasnya.

22989
21:58:09,652 --> 21:58:13,282
Izinkan saya masuk ke FroshIMS versi\nlima, yang telah saya buat sebelumnya di sini

22990
21:58:13,282 --> 21:58:18,642
dan izinkan saya membuka\nup, katakanlah, app.py kali ini.

22991
21:58:18,642 --> 21:58:21,132
Dan ini adalah beberapa kode\nyang saya tulis sebelumnya.

22992
21:58:21,131 --> 21:58:24,921
Dan awalnya terlihat sedikit menakutkan\n

22993
21:58:24,922 --> 21:58:30,312
Saya sekarang telah menambahkan perpustakaan Flask\nmail ke gambar

22994
21:58:30,312 --> 21:58:33,461
dengan menambahkan email Flask ke\nrequirements.txt dan menjalankan perintah

22995
21:58:33,461 --> 21:58:37,101
untuk menginstal email\ndukungan untuk Flask secara otomatis juga.

22996
21:58:37,101 --> 21:58:39,851
Dan ini agak\nsamar, tapi jujur ​​saja sebagian besarnya

22997
21:58:39,851 --> 21:58:41,622
salin tempel dari dokumentasi.

22998
21:58:41,622 --> 21:58:44,351
Apa yang saya lakukan di sini adalah\nSaya mengonfigurasi Flask saya

22999
21:58:44,351 --> 21:58:47,721
aplikasi dengan beberapa konfigurasi\nvariabel, jika Anda mau.

23000
21:58:47,721 --> 21:58:51,221
Ini adalah sintaks untuk itu.\n

23001
21:58:51,221 --> 21:58:55,601
dilengkapi dengan Flask yang otomatis\n

23002
21:58:55,601 --> 21:58:58,961
di jalur sembilan, dan saya tinggal mengisi\n

23003
21:58:58,961 --> 21:59:01,482
nilai untuk alamat default\nsender yang saya

23004
21:59:01,482 --> 21:59:05,472
ingin mengirim email sebagai default\n

23005
21:59:05,471 --> 21:59:08,651
nomor port, port TCP,\nyang kita bicarakan minggu lalu.

23006
21:59:08,652 --> 21:59:12,491
Server email, saya akan menggunakan server smtp.gmail.com\nGmail.

23007
21:59:12,491 --> 21:59:14,531
Gunakan TLS, ini berarti menggunakan enkripsi.

23008
21:59:15,672 --> 21:59:18,562
Nama pengguna email, ini akan\ndiambil dari lingkungan saya.

23009
21:59:18,562 --> 21:59:21,972
Jadi demi keamanan, saya tidak\n

23010
21:59:21,971 --> 21:59:24,023
dan kata sandi ke dalam kode.

23011
21:59:24,024 --> 21:59:26,982
Jadi sebenarnya saya menyimpannya di tempat\n

23012
21:59:26,982 --> 21:59:29,112
Anda akan melihat lebih banyak lagi\nin kumpulan soal sembilan ini

23013
21:59:29,111 --> 21:59:31,121
dan ini adalah konvensi\nyang sangat umum di server

23014
21:59:31,122 --> 21:59:36,771
di dunia nyata untuk menyimpan sensitif\n

23015
21:59:36,771 --> 21:59:39,641
sehingga dapat diakses\nsaat situs web Anda sedang berjalan

23016
21:59:39,642 --> 21:59:41,202
tetapi tidak dalam kode sumber Anda.

23017
21:59:41,202 --> 21:59:44,232
Ini terlalu mudah jika\nAnda memasukkan kredensial

23018
21:59:44,232 --> 21:59:47,532
hal-hal sensitif di kode\nsumber Anda, untuk diposkan ke GitHub

23019
21:59:47,532 --> 21:59:50,832
atau mengambil tangkapan layar secara tidak sengaja,\n

23020
21:59:50,831 --> 21:59:55,961
Jadi untuk tujuan hari ini, ketahuilah bahwa\n

23021
21:59:55,961 --> 21:59:57,581
disebut variabel lingkungan.

23022
21:59:57,581 --> 22:00:01,091
Dan ini seperti out-of-band, a\n

23023
22:00:01,092 --> 22:00:04,122
berpasangan di memori komputer\ndengan menjalankan perintah tertentu

23024
22:00:04,122 --> 22:00:06,491
tapi itu tidak pernah muncul\nin kode Anda yang sebenarnya.

23025
22:00:06,491 --> 22:00:09,131
Jika tidak, akan ada\nbanyak nama pengguna dan sandi

23026
22:00:09,131 --> 22:00:11,921
tidak sengaja terlihat di internet.

23027
22:00:11,922 --> 22:00:14,322
Jadi saya sudah menginstalnya terlebih dahulu.

23028
22:00:14,322 --> 22:00:16,152
Biarkan saya melihat apakah saya dapat melakukan ini dengan benar.

23029
22:00:16,152 --> 22:00:19,581
Izinkan saya beralih ke\ntab lain sebentar lagi.

23030
22:00:19,581 --> 22:00:23,441
Dan di sini, di layar\nkedua saya di sini, kotak masuk John Harvard.

23031
22:00:23,441 --> 22:00:26,322
Saat ini kosong, dan saya\nakan melanjutkan dan mendaftar

23032
22:00:26,322 --> 22:00:28,542
untuk beberapa olahraga seperti John\nHarvard di sini, semoga.

23033
22:00:28,542 --> 22:00:32,831
Jadi izinkan saya menjalankan\nFlask pada versi lima ini.

23034
22:00:32,831 --> 22:00:36,311
Biarkan saya melanjutkan dan\nmemuat ulang layar utama.

23035
22:00:37,001 --> 22:00:38,681
Biarkan saya memuat ulang layar utama di sini.

23036
22:00:38,682 --> 22:00:41,411
Kali ini, yang jelas, saya\menanyakan nama dan email.

23037
22:00:41,411 --> 22:00:43,497
Jadi namanya adalah John Harvard.

23038
22:00:45,771 --> 22:00:51,342
Dia akan mendaftar, bagaimana dengan sepak bola.

23039
22:00:52,902 --> 22:00:57,612
Dan jika saya melakukan ini dengan benar, tidak\n

23040
22:00:57,611 --> 22:01:06,701
melihat Anda terdaftar, tetapi ketika dia\n

23041
22:01:06,702 --> 22:01:13,002
berharap bahwa ini\n

23042
22:01:13,001 --> 22:01:15,086
dan saya berjanji hal itu terjadi tepat sebelum kelas.

23043
22:01:22,851 --> 22:01:25,241
Menurutku tidak ada kesalahan kali ini.

23044
22:01:28,402 --> 22:01:31,822
Izinkan saya mencoba sesuatu\nover di sini dengan sangat cepat

23045
22:01:31,822 --> 22:01:35,661
tapi menurutku ini tidak rusak.

23046
22:01:35,661 --> 22:01:39,171
Jika memang demikian, ia tidak akan mengatakan\nsukses.

23047
22:01:39,172 --> 22:01:44,992
Saya baru saja mencoba mengirimkan lagi, jadi saya\n

23048
22:01:44,991 --> 22:01:47,156
Ah, aku sungguh sedih saat ini.

23049
22:01:53,682 --> 22:01:57,521
DAVID: Saya bisa memeriksa\nspam, tapi kemudian--

23050
22:01:57,521 --> 22:02:01,991
tidak yakin kami ingin menampilkan spam di sini\n

23051
22:02:13,751 --> 22:02:15,521
Wow, itu klik yang berisiko, saya khawatir.

23052
22:02:15,521 --> 22:02:19,250
Baiklah, jadi Anda sudah terdaftar\nisemail yang saya kirimkan

23053
22:02:19,250 --> 22:02:21,292
dan tidak ada\informasi aktual apa pun di dalamnya.

23054
22:02:21,292 --> 22:02:23,262
Namun di masa lalu, hal itu\nakan terjadi, karena saya

23055
22:02:23,262 --> 22:02:25,092
termasuk nama\nsiswa dan asramanya

23056
22:02:25,092 --> 22:02:27,634
dan semua bidang\ninformasi lain yang kami minta.

23057
22:02:27,634 --> 22:02:30,312
Jadi mari kita lihat sekilas\nat bagaimana kode tersebut dapat bekerja.

23058
22:02:30,312 --> 22:02:33,522
Saya memang harus mengonfigurasi Gmail\nin dengan cara tertentu untuk mengizinkannya

23059
22:02:33,521 --> 22:02:36,191
begitulah sebutannya, aplikasi yang kurang\naman menggunakan SMTP

23060
22:02:36,191 --> 22:02:38,591
yang merupakan protokol\digunakan untuk email keluar.

23061
22:02:38,592 --> 22:02:42,960
Namun selain mengatur hal-hal ini, mari\n

23062
22:02:42,960 --> 22:02:44,502
Ini sebenarnya cukup mudah.

23063
22:02:44,501 --> 22:02:47,631
Di rute pendaftaran saya, saya memvalidasi\n

23064
22:02:48,861 --> 22:02:52,761
Saya kemudian mengkonfirmasi pendaftaran\ndi sini, tidak ada yang baru di sana.

23065
22:02:52,762 --> 22:02:55,482
Yang saya lakukan hanyalah menggunakan dua baris kode baru.

23066
22:02:55,482 --> 22:02:57,983
Dan mengotomatiskan\npengiriman email semudah itu.

23067
22:02:57,983 --> 22:02:59,691
Sepertinya saya sudah melakukannya\nit terlalu sering

23068
22:02:59,691 --> 22:03:01,601
itulah mengapa itu berakhir di spam.

23069
22:03:01,601 --> 22:03:03,581
Saya membuat variabel bernama pesan.

23070
22:03:03,581 --> 22:03:06,981
Saya menggunakan fungsi pesan yang\nharus saya impor lebih tinggi

23071
22:03:08,092 --> 22:03:10,872
Rupanya, inilah baris subjek\nsebagai argumen pertama.

23072
22:03:10,872 --> 22:03:15,192
Dan argumen kedua adalah\nparameter bernama penerima

23073
22:03:15,191 --> 22:03:18,682
yang mengambil daftar email itu\n

23074
22:03:18,682 --> 22:03:21,042
Jadi di dalam tanda kurung, saya hanya\nmasukkan email salah satu pengguna

23075
22:03:21,042 --> 22:03:24,081
dan kemudian kirim pesan itu.

23076
22:03:24,081 --> 22:03:29,021
Jadi mari kita gulir kembali ke atas untuk melihat\n

23077
22:03:30,562 --> 22:03:33,792
Yap, mail adalah ini, yang\nsaya miliki sebagai variabel

23078
22:03:33,792 --> 22:03:36,221
karena saya mengikuti\ndodokumentasi untuk perpustakaan ini.

23079
22:03:36,221 --> 22:03:41,809
Anda cukup mengonfigurasi aplikasi Anda saat ini\n

23080
22:03:41,809 --> 22:03:43,601
Dan jika Anda mencari di sini\nsekarang, di jalur tujuh

23081
22:03:43,601 --> 22:03:46,751
inilah perpustakaan baru\ndari email Flask yang saya impor.

23082
22:03:46,751 --> 22:03:50,951
Surat Kapital, Pesan kapital, sehingga\n

23083
22:03:52,452 --> 22:03:55,302
Jadi hal yang sederhana apakah Anda\n

23084
22:03:55,301 --> 22:03:56,831
Anda ingin melakukan pengaturan ulang kata sandi.

23085
22:03:56,831 --> 22:04:00,701
Menghasilkan email bisa semudah ini

23086
22:04:00,702 --> 22:04:03,754
asalkan Anda memiliki\nakses dan perangkat lunak yang diperlukan.

23087
22:04:03,754 --> 22:04:05,961
Dan untuk memperjelas bahwa\nSaya memang menambahkan sesuatu di sini

23088
22:04:05,961 --> 22:04:09,101
izinkan saya membuka file persyaratan.txt\nsaya, dan tentu saja, saya

23089
22:04:09,101 --> 22:04:13,812
siapkan Flask dan\nFlask-mail.

23090
22:04:13,812 --> 22:04:16,812
Namun saya menjalankan perintah terlebih dahulu\nuntuk benar-benar melakukan itu.

23091
22:04:16,812 --> 22:04:22,082
Baiklah, ada pertanyaan,\nlalu tentang contoh di sini?

23092
22:04:23,441 --> 22:04:29,572
Jadi, bagian apa lagi yang sebenarnya\n

23093
22:04:29,572 --> 22:04:32,675
Ternyata itu merupakan\nkomponen kunci dari hampir semua web

23094
22:04:32,675 --> 22:04:34,842
aplikasi saat ini yang\nbelum kami sentuh

23095
22:04:34,842 --> 22:04:38,396
tapi ini akan menjadi salah satu perkembangan terakhir kami\n

23096
22:04:38,396 --> 22:04:41,201
Dan sesi sebenarnya\na fitur yang diturunkan

23097
22:04:41,202 --> 22:04:43,842
dari semua hal dasar yang kita bicarakan\nhari ini dan minggu lalu

23098
22:04:43,842 --> 22:04:47,351
dan sesi adalah istilah teknis untuk\n

23099
22:04:47,351 --> 22:04:50,922
Saat Anda membuka amazon.com dan memulai\n

23100
22:04:50,922 --> 22:04:53,605
mereka mengikuti Anda dari\nhalaman ke halaman demi halaman.

23101
22:04:53,604 --> 22:04:56,021
Heck jika Anda menutup browser Anda,\nkembali ke hari berikutnya

23102
22:04:56,021 --> 22:04:59,668
biasanya barang-barang tersebut masih menjadi belanjaan Anda\n

23103
22:04:59,668 --> 22:05:01,001
karena mereka menginginkan bisnis Anda.

23104
22:05:01,001 --> 22:05:03,711
Mereka tidak ingin Anda\nmemulai dari awal keesokan harinya.

23105
22:05:03,711 --> 22:05:07,482
Demikian pula, saat Anda masuk\ninke situs web mana pun saat ini

23106
22:05:07,482 --> 22:05:11,292
meskipun itu bukan urusan e-commerce\n

23107
22:05:11,292 --> 22:05:13,002
Anda dan saya tidak mempunyai\nkebiasaan melakukan logging

23108
22:05:13,001 --> 22:05:15,191
ke setiap halaman\nyang kami kunjungi di situs web.

23109
22:05:15,191 --> 22:05:19,182
Biasanya, Anda masuk sekali, lalu\n

23110
22:05:19,182 --> 22:05:21,161
Anda tetap login ke website tersebut.

23111
22:05:21,161 --> 22:05:25,301
Jadi entah bagaimana, situs web tersebut\nmengingat bahwa Anda telah masuk.

23112
22:05:25,301 --> 22:05:27,889
Dan hal itu sedang diterapkan\nmelalui hal yang disebut

23113
22:05:27,889 --> 22:05:29,682
sebuah sesi, dan mungkin\na istilah yang lebih familiar

23114
22:05:29,682 --> 22:05:32,789
yang mungkin Anda ketahui, dan\nkhawatirkan, disebut cookie.

23115
22:05:32,789 --> 22:05:35,122
Mari kita istirahat satu\nlima menit lagi di sini.

23116
22:05:35,122 --> 22:05:37,414
Dan ketika kami kembali, kami akan\nmelihat cookie, sesi

23117
22:05:40,952 --> 22:05:43,961
Jadi janjinya sekarang adalah\nkami akan menerapkannya

23118
22:05:43,961 --> 22:05:47,381
gagasan tentang sesi yang sedang berlangsung\n

23119
22:05:47,381 --> 22:05:50,262
mereka masuk dan bahkan menerapkan\nhal-hal seperti keranjang belanja.

23120
22:05:50,262 --> 22:05:54,642
Dan tujuan utamanya di sini\adalah membangun aplikasi yang

23121
22:05:54,642 --> 22:05:56,142
adalah, kutipan tanda kutip, "stateful.

23122
22:05:56,142 --> 22:05:59,322
Sekali lagi, negara mengacu pada informasi,\n

23123
22:06:01,001 --> 22:06:05,711
Dan dalam konteks ini, keingintahuan\nisbahwa HTTP itu secara teknis

23124
22:06:07,271 --> 22:06:11,381
Setelah Anda mengunjungi URL,\nhttp://something, tekan Enter

23125
22:06:11,381 --> 22:06:14,471
halaman web diunduh ke\nbrowser Anda, seperti itu saja.

23126
22:06:14,471 --> 22:06:17,471
Anda dapat mencabut sambungan dari internet,\nAnda dapat mematikan Wi-Fi

23127
22:06:17,471 --> 22:06:19,991
tetapi Anda masih memiliki halaman web secara lokal.

23128
22:06:19,991 --> 22:06:23,171
Namun kami ingin\nmemastikan hal itu lain kali Anda

23129
22:06:23,172 --> 22:06:25,822
mengeklik tautan di situs web itu,\nit tidak melupakan siapa Anda.

23130
22:06:25,822 --> 22:06:27,822
Atau hal berikutnya yang Anda tambahkan\nke keranjang belanja Anda

23131
22:06:27,822 --> 22:06:29,631
ia tidak melupakan apa\nyang sudah ada di sana.

23132
22:06:29,631 --> 22:06:32,861
Jadi kami ingin\nmembuat HTTP stateful

23133
22:06:32,861 --> 22:06:36,191
dan kita sebenarnya bisa melakukan ini menggunakan\n

23134
22:06:36,191 --> 22:06:40,902
Jadi secara konkret, inilah formulir yang mungkin Anda\n

23135
22:06:42,491 --> 22:06:46,421
Dan saya bilang jarang karena kebanyakan\n

23136
22:06:46,422 --> 22:06:49,452
Anda cukup tetap masuk,\ntanpa henti, di browser Anda.

23137
22:06:49,452 --> 22:06:52,152
Dan itu karena Google\ntelah membuat pilihan secara sadar

23138
22:06:52,152 --> 22:06:55,862
untuk memberi Anda sesi\nwaktu yang sangat lama, mungkin sehari, seminggu

23139
22:06:55,861 --> 22:06:57,611
sebulan, setahun, karena\nmereka sebenarnya tidak melakukannya

23140
22:06:57,611 --> 22:07:01,271
ingin menambah hambatan dalam menggunakan alatnya\n

23141
22:07:01,271 --> 22:07:04,191
Sebaliknya, ada\naplikasi lain di kampus

23142
22:07:04,191 --> 22:07:07,031
termasuk beberapa zona CS50,\n

23143
22:07:07,032 --> 22:07:09,102
Karena kami ingin memastikan\nbahwa itu memang Anda

23144
22:07:09,101 --> 22:07:13,042
mengakses situs, dan bukan teman sekamar\n

23145
22:07:13,042 --> 22:07:16,822
Jadi setelah Anda mengisi\nformulir ini, bagaimana selanjutnya dengan Google

23146
22:07:16,822 --> 22:07:20,152
ketahuilah bahwa Anda adalah Anda, dan\nsaat Anda memuat ulang halaman tersebut

23147
22:07:20,152 --> 22:07:22,911
atau buka tab kedua untuk\nakun Gmail Anda yang sama

23148
22:07:22,911 --> 22:07:26,668
bagaimana mereka tahu kalau kamu masih\n

23149
22:07:26,668 --> 22:07:29,001
Baiklah, mari kita lihat\napa yang terjadi.

23150
22:07:29,001 --> 22:07:32,451
Saat Anda masuk ke Gmail,\pada dasarnya, Anda yang pertama

23151
22:07:32,452 --> 22:07:35,182
lihat formulir seperti ini\menggunakan permintaan GET.

23152
22:07:35,182 --> 22:07:37,851
Dan situs web merespons\nseperti yang kita lihat minggu lalu

23153
22:07:37,851 --> 22:07:39,271
dengan semacam respons HTTP.

23154
22:07:39,271 --> 22:07:41,391
Semoga 200 OK dengan formulirnya.

23155
22:07:41,392 --> 22:07:46,222
Sementara itu, situs web mungkin\njuga merespons dengan header HTTP

23156
22:07:46,221 --> 22:07:49,432
yang minggu lalu tidak kita peduli\n, minggu ini, sekarang kita peduli.

23157
22:07:49,432 --> 22:07:53,002
Setiap kali Anda mengunjungi sebuah situs web,\nhal ini sangat umum terjadi

23158
22:07:53,001 --> 22:07:56,072
bahwa situs web memasang\na cookie di komputer Anda.

23159
22:07:56,072 --> 22:07:58,672
Dan secara umum Anda mungkin tahu\nbahwa cookie bisa berdampak buruk

23160
22:07:58,672 --> 22:08:03,412
dan mereka melacak Anda dengan cara tertentu, dan\n

23161
22:08:03,411 --> 22:08:08,811
Tanpa cookie, Anda tidak dapat menerapkan\n

23162
22:08:10,342 --> 22:08:12,741
Sayangnya, data tersebut juga dapat\ndigunakan untuk tujuan buruk

23163
22:08:12,741 --> 22:08:16,042
seperti melacak Anda di setiap situs web dan\n

23164
22:08:16,542 --> 22:08:18,471
Jadi, bersama dengan kebaikan, ada pula keburukan.

23165
22:08:18,471 --> 22:08:21,651
Namun dasar primitif bagi\nus, ilmuwan komputer

23166
22:08:21,652 --> 22:08:24,622
bermuara pada header HTTP saja.

23167
22:08:24,622 --> 22:08:29,512
Cookie biasanya merupakan angka yang besar,\n

23168
22:08:29,512 --> 22:08:33,741
yang server memerintahkan browser Anda\nuntuk menyimpannya di memori, atau bahkan

23169
22:08:35,402 --> 22:08:38,941
Jadi Anda bisa menganggapnya seperti file yang\n

23170
22:08:38,941 --> 22:08:43,012
Dan janji yang dibuat HTTP\nadalah jika server disetel

23171
22:08:43,012 --> 22:08:45,982
cookie di komputer Anda,\nAnda akan mewakilinya

23172
22:08:45,982 --> 22:08:49,982
cookie yang sama atau nilai\nyang sama pada setiap permintaan berikutnya.

23173
22:08:49,982 --> 22:08:51,862
Jadi ketika Anda mengunjungi\nsitus web seperti Gmail

23174
22:08:51,861 --> 22:08:55,611
mereka memasukkan cookie ke komputer Anda\nseperti ini pada beberapa sesi

23175
22:08:55,611 --> 22:08:57,741
sama dengan nilai, beberapa nilai acak panjang.

23176
22:08:57,741 --> 22:09:00,072
Satu, dua, tiga, A, B,\nC, kira-kira seperti itu.

23177
22:09:00,072 --> 22:09:04,491
Dan ketika Anda mengunjungi laman lain\n

23178
22:09:04,491 --> 22:09:09,351
Anda mengirimkan header sebaliknya, bukan\n

23179
22:09:09,351 --> 22:09:11,372
dan Anda mengirimkan nilai yang sama persis.

23180
22:09:11,372 --> 22:09:13,779
Ini mirip dengan pergi ke\nklub atau taman hiburan

23181
22:09:13,778 --> 22:09:15,861
jika Anda membayar sekali, Anda\nmelewati gerbangnya sekali

23182
22:09:15,861 --> 22:09:17,781
Anda diperiksa oleh\nkeamanan satu kali, lalu

23183
22:09:17,782 --> 22:09:22,672
sering kali dianggap seperti prangko kecil\n

23184
22:09:22,672 --> 22:09:25,505
Dan bagi Anda, dari segi efisiensi,\n

23185
22:09:25,505 --> 22:09:27,839
atau nanti malam, Anda\nbisa langsung menunjukkan tangan Anda.

23186
22:09:27,839 --> 22:09:29,452
Anda mungkin telah dicap.

23187
22:09:29,452 --> 22:09:32,122
Mereka sudah-- Anda\nsudah membayar, Anda sudah

23188
22:09:32,122 --> 22:09:33,661
sudah dicari atau yang lainnya.

23189
22:09:33,661 --> 22:09:35,631
Jadi ini semacam\notiket jalur cepat

23190
22:09:35,631 --> 22:09:37,461
kembali ke klub, kembali ke taman.

23191
22:09:37,461 --> 22:09:41,241
Pada dasarnya itulah yang dilakukan\ncookie untuk Anda

23192
22:09:41,241 --> 22:09:43,822
ini adalah cara untuk mengingatkan\nsitus web bahwa kita telah melakukan hal ini

23193
22:09:43,822 --> 22:09:46,051
kamu sudah menanyakan\nnama pengguna dan kata sandiku.

23194
22:09:46,051 --> 22:09:48,531
Inilah jalanku untuk datang dan pergi sekarang.

23195
22:09:48,532 --> 22:09:52,522
Berbeda dengan stempel tangan ini, yang\n

23196
22:09:52,521 --> 22:09:55,131
atau diduplikasi atau disimpan\non selama beberapa hari

23197
22:09:55,131 --> 22:09:59,941
kue ini sepertinya sangat besar\n

23198
22:09:59,941 --> 22:10:02,661
Jadi secara statistik,\ntidak mungkin ada orang lain

23199
22:10:02,661 --> 22:10:05,872
hanya akan menebak cookie Anda\n

23200
22:10:05,872 --> 22:10:08,872
probabilitas yang sangat rendah, secara statistik.

23201
22:10:08,872 --> 22:10:12,711
Tapi intinya hanya ini\n

23202
22:10:12,711 --> 22:10:16,771
untuk mengirim nilai-nilai ini bolak-balik dengan cara ini.

23203
22:10:16,771 --> 22:10:19,131
Jadi saat kita\nmenerjemahkan ini, sekarang, ke dalam kode

23204
22:10:19,131 --> 22:10:21,232
mari kita lakukan sesuatu seperti\na aplikasi login sederhana.

23205
22:10:21,232 --> 22:10:24,351
Biarkan saya masuk ke folder yang saya buat\nin sebelumnya hari ini bernama login.

23206
22:10:24,351 --> 22:10:28,922
Dan izinkan saya membuat kode app.py dan\nmari kita lihat di sini.

23207
22:10:30,471 --> 22:10:31,911
Beberapa hal baru di atas.

23208
22:10:31,911 --> 22:10:36,801
Jika saya ingin memiliki kemampuan\n

23209
22:10:36,801 --> 22:10:40,611
dan mengimplementasikan sesi, saya berangkat\n

23210
22:10:41,551 --> 22:10:44,572
Jadi ini adalah fitur lain yang Anda\ndapatkan secara gratis dengan menggunakan kerangka kerja

23211
22:10:44,572 --> 22:10:46,801
dan tidak perlu menerapkan\nsemuanya sendiri.

23212
22:10:46,801 --> 22:10:48,951
Dan dari perpustakaan sesi Flask, saya berangkat

23213
22:10:48,952 --> 22:10:51,502
untuk mengimpor Sesi, huruf kapital S. Mengapa?

23214
22:10:51,501 --> 22:10:53,751
Saya akan mengonfigurasi\nsesi sebagai berikut.

23215
22:10:53,751 --> 22:10:56,751
Singkat cerita, ada berbagai\ncara untuk mengimplementasikan sesi.

23216
22:10:56,751 --> 22:11:00,711
Server dapat menyimpan\ncookie ini dalam database, dalam sebuah file

23217
22:11:00,711 --> 22:11:03,152
di memori, di RAM, di tempat lain juga.

23218
22:11:03,152 --> 22:11:07,982
Kami memintanya untuk menyimpannya\n

23219
22:11:07,982 --> 22:11:11,452
Faktanya, setiap kali Anda menggunakan sesi\n

23220
22:11:11,452 --> 22:11:15,292
Anda akan benar-benar melihat folder\n

23221
22:11:15,292 --> 22:11:17,842
di dalamnya terdapat\ncookie, pada dasarnya

23222
22:11:17,842 --> 22:11:20,211
untuk semua pengguna atau teman\atau diri Anda sendiri yang pernah mengunjunginya

23223
22:11:20,211 --> 22:11:22,801
mengunjungi aplikasi khusus Anda.

23224
22:11:22,801 --> 22:11:24,561
Jadi saya mengaturnya untuk\nmenggunakan sistem file

23225
22:11:24,562 --> 22:11:26,770
dan saya tidak ingin itu menjadi\npermanen karena saya ingin

23226
22:11:26,770 --> 22:11:29,482
saat Anda menutup browser,\nsesi tersebut akan hilang.

23227
22:11:29,482 --> 22:11:32,032
Mereka dapat dibuat\npermanen dan bertahan lebih lama.

23228
22:11:32,032 --> 22:11:34,222
Lalu saya memberi tahu aplikasi saya untuk mendukung sesi.

23229
22:11:35,902 --> 22:11:39,572
Mari kita lihat apa sebenarnya aplikasi ini\n

23230
22:11:39,572 --> 22:11:44,902
Biarkan saya membuka jendela terminal saya,\n

23231
22:11:49,202 --> 22:11:51,502
Beri waktu sejenak untuk memulai kembali.

23232
22:11:51,501 --> 22:11:53,361
Biarkan saya melanjutkan dan membuka URL saya.

23233
22:11:59,792 --> 22:12:02,226
Jadi website ini hanya memiliki form login.

23234
22:12:02,226 --> 22:12:04,101
Tidak ada kata sandinya,\nmeskipun saya pasti bisa

23235
22:12:04,101 --> 22:12:05,902
tambahkan itu dan periksa juga.

23236
22:12:07,411 --> 22:12:10,072
Jadi saya akan login sebagai\nsaya sendiri, David, dan klik Login.

23237
22:12:10,072 --> 22:12:12,892
Dan sekarang perhatikan saya saat ini\nat di rute /login.

23238
22:12:13,881 --> 22:12:16,206
Jika saya mencoba pergi ke\ndrute default, saja

23239
22:12:16,206 --> 22:12:18,831
garis miring, yang merupakan tempat sebagian besar\nsitus web berada secara default

23240
22:12:18,831 --> 22:12:21,771
perhatikan bahwa saya secara ajaib\ndialihkan untuk masuk.

23241
22:12:21,771 --> 22:12:24,921
Jadi entah bagaimana, kode saya tahu, hei, jika\n

23242
22:12:26,691 --> 22:12:29,301
Biarkan saya mengetikkan nama saya,\nDavid, dan klik Login.

23243
22:12:29,301 --> 22:12:32,106
Dan sekarang perhatikan saya kembali ke garis miring.

23244
22:12:32,107 --> 22:12:35,332
Chrome agak bersembunyi\n

23245
22:12:36,482 --> 22:12:39,232
Dan sekarang perhatikan tertulis Anda\nalog masuk sebagai David.

23246
22:12:39,892 --> 22:12:43,162
Yang keren adalah pemberitahuan jika saya memuat ulang\nhalamannya, ia masih mengetahuinya.

23247
22:12:43,161 --> 22:12:46,581
Jika saya membuat tab kedua dan membuka\n

23248
22:12:48,293 --> 22:12:50,001
Saya dapat terus melakukan\nini di banyak tab

23249
22:12:50,001 --> 22:12:53,721
ia masih akan mengingatku di keduanya\n

23250
22:12:55,051 --> 22:13:00,141
Terutama ketika saya mengklik Logout,\n

23251
22:13:00,142 --> 22:13:01,792
Baiklah, jadi mari kita lihat cara kerjanya.

23252
22:13:01,792 --> 22:13:03,741
Dan itu adalah beberapa blok bangunan dasar.

23253
22:13:03,741 --> 22:13:07,551
Di bawah /route saya, perhatikan saya punya ini.

23254
22:13:07,551 --> 22:13:12,421
Jika tidak ada nama dalam sesi tersebut,\narahkan pengguna ke /login.

23255
22:13:12,422 --> 22:13:14,992
Jadi kedua baris ini\nbersama-sama adalah implementasinya

23256
22:13:14,991 --> 22:13:19,611
pengalihan otomatis itu menggunakan\nHTTP 301 atau 302 secara otomatis.

23257
22:13:19,611 --> 22:13:21,691
Ini ditangani untuk saya\ndengan dua baris ini.

23258
22:13:23,351 --> 22:13:25,101
Baiklah, mari kita\npergi ke lubang kelinci itu.

23259
22:13:29,991 --> 22:13:36,652
izinkan saya melihat di folder templat\nsaya untuk demo login saya dan lihat

23260
22:13:40,042 --> 22:13:41,631
Baiklah, jadi apa yang terjadi di sini?

23261
22:13:41,631 --> 22:13:46,221
Saya memperluas layout.html,\nSaya memiliki badan blok

23262
22:13:46,221 --> 22:13:47,961
dan kemudian saya punya beberapa sintaks lainnya.

23263
22:13:47,961 --> 22:13:50,504
Jadi kita belum melihatnya,\ntapi ini lebih tentang Jinja, dan itu

23264
22:13:50,504 --> 22:13:52,221
sekali lagi, hampir identik dengan Python.

23265
22:13:52,221 --> 22:13:55,311
Jika ada nama di\nvariabel sesi

23266
22:13:55,312 --> 22:14:00,082
lalu secara harfiah katakan Anda sudah masuk\n

23267
22:14:00,081 --> 22:14:04,641
Dan kemudian perhatikan ini, saya punya yang sederhana\n

23268
22:14:04,642 --> 22:14:07,312
Lain lagi, jika tidak ada\nnama dalam sesi tersebut

23269
22:14:07,312 --> 22:14:11,122
maka tampaknya dikatakan Anda bukan\n

23270
22:14:11,122 --> 22:14:13,612
tautan ke /login dan kemudian akhiri diff.

23271
22:14:13,611 --> 22:14:16,221
Jadi sekali lagi, Jinja tidak bergantung pada indentasi.

23272
22:14:16,221 --> 22:14:19,221
Ingat HTML dan CSS tidak\nterlalu peduli dengan indentasi

23273
22:14:20,452 --> 22:14:24,022
Namun dalam kode dengan Jinja,\nAnda memerlukan tag akhir ini

23274
22:14:24,021 --> 22:14:26,872
blok akhir, akhir untuk, akhir\nif, untuk membuatnya sangat jelas

23275
22:14:26,872 --> 22:14:29,092
bahwa Anda sudah selesai dengan pemikiran itu.

23276
22:14:29,092 --> 22:14:32,601
Jadi session hanyalah\nvariabel ajaib yang kita miliki sekarang

23277
22:14:32,601 --> 22:14:36,891
memiliki akses karena kami telah\nmenyertakan dua baris kode ini

23278
22:14:36,892 --> 22:14:41,902
dan ini yang menangani keseluruhan\n

23279
22:14:41,902 --> 22:14:43,851
dengan pengenal unik yang berbeda.

23280
22:14:43,851 --> 22:14:46,521
Jika saya menjadikan ruang kode saya\npublik dan saya mengizinkan Anda semua

23281
22:14:46,521 --> 22:14:50,031
kunjungi URL yang sama persis, semuanya\n

23282
22:14:50,032 --> 22:14:52,102
Anda semua dapat mengetikkan\nama Anda satu per satu

23283
22:14:52,101 --> 22:14:56,092
semua masuk di URL yang sama\menggunakan sesi yang berbeda.

23284
22:14:56,092 --> 22:14:59,332
Dan kenyataannya, saya kemudian akan melihat,\njika saya masuk ke jendela terminal saya

23285
22:14:59,331 --> 22:15:03,991
di sini dan direktori login saya, perhatikan\n

23286
22:15:03,991 --> 22:15:07,881
Dan jika saya CD ke dalamnya dan mengetik ls,\n

23287
22:15:07,881 --> 22:15:10,551
atau sebenarnya, saya rasa saya\nmemulai server dua kali.

23288
22:15:11,941 --> 22:15:14,691
Saya pada akhirnya akan memiliki satu\nfile untuk Anda semua.

23289
22:15:14,691 --> 22:15:16,701
Dan itulah\nkeindahan sesi

23290
22:15:16,702 --> 22:15:21,292
apakah itu menciptakan ilusi\npenyimpanan per pengguna.

23291
22:15:21,292 --> 22:15:25,622
Di dalam sesi saya ada nama saya,\n

23292
22:15:26,482 --> 22:15:30,512
Dan hal yang sama akan berlaku untuk\n

23293
22:15:30,512 --> 22:15:32,211
Mari kita lihat cara kerja login di sini.

23294
22:15:32,211 --> 22:15:36,622
Rute login saya mendukung GET dan\n

23295
22:15:36,622 --> 22:15:41,192
Dan perhatikan ini, rute login ini\n

23296
22:15:41,191 --> 22:15:45,394
Jika pengguna mendapatkan\nrute ini melalui POST, kesimpulan saya

23297
22:15:45,395 --> 22:15:47,062
adalah mereka harus sudah menyerahkan formulir.

23298
22:15:47,562 --> 22:15:50,991
Karena itulah yang akan saya lakukan\n

23299
22:15:50,991 --> 22:15:53,631
Dan jika mereka mengirimkan\nformulir melalui POST

23300
22:15:53,631 --> 22:15:56,691
Saya akan menyimpan, dalam\nsesi, pada namanya

23301
22:15:56,691 --> 22:15:59,091
kuncinya, apapun nama manusianya.

23302
22:15:59,092 --> 22:16:01,267
Lalu, saya akan\nmengarahkannya kembali ke garis miring.

23303
22:16:01,267 --> 22:16:04,352
Jika tidak, saya akan\nmenunjukkan formulir login kepada mereka.

23304
22:16:05,631 --> 22:16:08,961
Jika saya membuka\nformulir masuk ini, yang ada di

23305
22:16:08,961 --> 22:16:12,861
secara harafiah, garis miring login, secara default,\n

23306
22:16:14,721 --> 22:16:16,881
Dan itulah mengapa saya melihat bentuknya.

23307
22:16:18,411 --> 22:16:22,311
Bentuknya, dengan sangat cerdik,\ntunduk pada dirinya sendiri

23308
22:16:22,312 --> 22:16:26,991
seperti rute/login yang dikirimkan\nke dirinya yang sama, /login

23309
22:16:26,991 --> 22:16:29,581
tapi menggunakan POST ketika\nAnda mengirimkan formulir.

23310
22:16:29,581 --> 22:16:33,711
Dan ini cara yang bagus untuk memilikinya\n

23311
22:16:36,142 --> 22:16:40,652
Ketika saya baru saja di sana mengunjungi /login\n

23312
22:16:40,652 --> 22:16:45,741
Tapi kalau saya kirimkan formulirnya, maka ini\n

23313
22:16:45,741 --> 22:16:49,732
dan ini menghindari keharusan saya memiliki\n

23314
22:16:50,301 --> 22:16:55,402
Saya hanya dapat memiliki satu rute yang\nmenangani GET dan POST.

23315
22:16:57,182 --> 22:16:58,792
Ya, sesederhana ini.

23316
22:16:58,792 --> 22:17:01,221
Ubah nama apa pun\nis dalam sesi tersebut

23317
22:17:01,221 --> 22:17:05,451
none, yang merupakan null versi Python,\n

23318
22:17:06,081 --> 22:17:12,152
Karena sekarang, di index.html, saya akan\n

23319
22:17:13,471 --> 22:17:16,921
Jadi saya akan memberi tahu pengguna\nin, Anda belum masuk.

23320
22:17:18,375 --> 22:17:20,542
Aku ingin mengatakannya sesederhana\nini, meskipun aku menyadarinya

23321
22:17:20,542 --> 22:17:22,402
ini adalah serangkaian langkah yang terlibat.

23322
22:17:22,402 --> 22:17:25,581
Inilah inti dari setiap\nsitus web di internet itu

23323
22:17:25,581 --> 22:17:26,951
mempunyai nama pengguna dan kata sandi.

23324
22:17:26,952 --> 22:17:30,202
Dan kami melewatkan langkah nama kata sandi untuk\n

23325
22:17:30,202 --> 22:17:34,612
tapi beginilah tampilan setiap situs web\n

23326
22:17:34,611 --> 22:17:37,221
Dan cara kerjanya\pada akhirnya adalah secepatnya

23327
22:17:37,221 --> 22:17:41,001
seperti yang Anda gunakan dalam garis Python\nseperti ini dan garis seperti ini

23328
22:17:41,001 --> 22:17:45,141
Flask menangani stempel\n

23329
22:17:45,142 --> 22:17:50,392
dan setiap kali Flask melihat\ncookie yang sama muncul dari pengguna

23330
22:17:50,392 --> 22:17:53,632
itu mengambil\nfile yang sesuai dari folder itu

23331
22:17:53,631 --> 22:17:56,042
memuatnya ke dalam variabel global\nsesi

23332
22:17:56,042 --> 22:18:01,012
sehingga kode Anda sekarang unik\nuntuk pengguna tersebut dan namanya.

23333
22:18:01,012 --> 22:18:03,922
Mari kita lakukan satu contoh\nlainnya dengan sesi di sini

23334
22:18:03,922 --> 22:18:06,652
itu akan menunjukkan bagaimana kami dapat menggunakan\nini, sekarang, untuk keranjang belanja.

23335
22:18:06,652 --> 22:18:09,142
Biarkan saya masuk ke contoh toko di sini.

23336
22:18:09,142 --> 22:18:10,972
Biarkan saya melanjutkan\nmenjalankan hal ini terlebih dahulu.

23337
22:18:10,971 --> 22:18:16,851
Jika saya menjalankan toko di\ntab saya yang sama dan kembali ke sini

23338
22:18:16,851 --> 22:18:19,881
kita akan melihat\ne-situs perdagangan yang sangat jelek itu

23339
22:18:19,881 --> 22:18:21,771
hanya menjual tujuh buku berbeda di sini.

23340
22:18:21,771 --> 22:18:26,258
Namun masing-masing buku ini memiliki tombol\n

23341
22:18:26,259 --> 22:18:28,342
Baiklah, dari mana\nbuku-buku ini berasal?

23342
22:18:29,361 --> 22:18:32,751
Biarkan saya masuk ke jendela terminal saya lagi.

23343
22:18:32,751 --> 22:18:35,991
Izinkan saya membahas contoh ini,\nyang disebut toko

23344
22:18:35,991 --> 22:18:40,911
dan izinkan saya membuka tentang\nindex dot ht-- ups.

23345
22:18:40,911 --> 22:18:48,381
Mari kita buka indeks,\nbagaimana kalau, books.html

23346
22:18:48,381 --> 22:18:50,671
adalah yang default, kali ini bukan indeks.

23347
22:18:50,672 --> 22:18:55,461
Jadi jika saya lihat di sini, perhatikan\nrute yang baru saja kita lihat

23348
22:18:55,461 --> 22:19:00,172
menggunakan perulangan for di Jinja untuk mengulangi\n

23349
22:19:00,172 --> 22:19:03,532
dan menampilkan, dalam tag H2\n, judul buku

23350
22:19:03,532 --> 22:19:05,722
dan kemudian salah satu bentuk lainnya.

23351
22:19:08,072 --> 22:19:11,991
Ayo buka app.py,\n

23352
22:19:11,991 --> 22:19:13,432
apa yang menandai semua ini.

23353
22:19:13,432 --> 22:19:16,851
Perhatikan bahwa file ini\nmengimpor dukungan sesi.

23354
22:19:16,851 --> 22:19:19,851
Ini mengonfigurasi sesi\ndi sini, tetapi juga demikian

23355
22:19:19,851 --> 22:19:22,292
menghubungkan ke file store.db.

23356
22:19:23,842 --> 22:19:29,362
Dan perhatikan ini, di /route saya,\nsaya memilih bintang dari buku

23357
22:19:29,361 --> 22:19:31,641
yang akan memberi saya\na daftar kamus

23358
22:19:31,642 --> 22:19:33,652
yang masing-masing mewakili deretan buku.

23359
22:19:33,652 --> 22:19:37,881
Dan saya akan meneruskan daftar\n itu

23360
22:19:37,881 --> 22:19:41,601
itulah sebabnya perulangan for ini\nberfungsi sebagaimana mestinya.

23361
22:19:41,601 --> 22:19:43,281
Mari kita lihat database sebenarnya ini.

23362
22:19:43,282 --> 22:19:48,472
Izinkan saya memperbesar jendela terminal\n

23363
22:19:50,881 --> 22:19:55,531
Itu sebuah buku-- itu sebuah tabel bernama\n

23364
22:19:55,532 --> 22:19:58,552
Mari kita pilih bintang\ndari titik koma buku.

23365
22:19:58,551 --> 22:20:01,311
Ada tujuh buku,\masing-masing memiliki ID unik.

23366
22:20:01,312 --> 22:20:03,241
Dan Anda mungkin melihat ke mana arahnya.

23367
22:20:03,241 --> 22:20:06,801
Jika saya membuka UI dan melihat\nat masing-masing tombol ini

23368
22:20:06,801 --> 22:20:11,961
untuk ditambahkan ke keranjang, sama seperti Amazon\n

23369
22:20:13,312 --> 22:20:15,264
Dan yang menakjubkan di sini,\nseperti membatalkan pendaftaran

23370
22:20:15,264 --> 22:20:17,182
padahal saya tidak\nmenyorotnya saat itu

23371
22:20:17,182 --> 22:20:19,342
ada jenis\nmasukan lain yang memungkinkan

23372
22:20:19,342 --> 22:20:23,241
Anda menentukan nilai tanpa\n

23373
22:20:23,241 --> 22:20:26,031
Daripada mengetik sama dengan\nteks atau mengetik sama dengan kirimkan

23374
22:20:26,032 --> 22:20:30,992
ketik sama dengan tersembunyi akan memasukkan nilainya ke dalam\n

23375
22:20:30,991 --> 22:20:34,101
Jadi itulah yang saya maksudkan bahwa\nide buku ini adalah satu

23376
22:20:34,101 --> 22:20:38,312
Ide buku ini ada dua, ide\n

23377
22:20:38,312 --> 22:20:40,882
Dan masing-masing formulir ini,\nkemudian, akan dikirimkan, tampaknya

23378
22:20:40,881 --> 22:20:45,842
ke /cart menggunakan POST dan itu akan\n

23379
22:20:46,592 --> 22:20:48,622
Izinkan saya mengklik satu atau dua di antaranya.

23380
22:20:48,622 --> 22:20:51,592
Ayo tambahkan buku pertama, tambahkan ke troli.

23381
22:20:52,642 --> 22:20:54,922
Perhatikan perubahan rute saya ke /cart.

23382
22:20:54,922 --> 22:20:58,882
Baiklah, mari kita kembali dan\ntambahkan buku nomor dua.

23383
22:20:59,872 --> 22:21:02,872
Dan mari kita langsung ke\nbuku ketujuh, Relikui Kematian

23384
22:21:02,872 --> 22:21:05,612
dan sekarang kami memiliki ketiga buku tersebut di sini.

23385
22:21:05,611 --> 22:21:09,291
Jadi apa yang dilakukan rute kereta di /cart?

23386
22:21:10,042 --> 22:21:15,351
Jika saya kembali ke jendela terminal,\n

23387
22:21:15,351 --> 22:21:17,721
ada banyak hal yang terjadi\ndi sini, tapi mari kita lihat.

23388
22:21:17,721 --> 22:21:21,292
Jadi rute /cart\nmendukung GET atau POST

23389
22:21:21,292 --> 22:21:24,892
yang merupakan cara bagus untuk\nmenggabungkan berbagai hal ke dalam satu URL.

23390
22:21:24,892 --> 22:21:26,792
Baiklah, ini menarik.

23391
22:21:26,792 --> 22:21:30,945
Jika tidak ada, quote\nunquote, kunci "cart" di sesi

23392
22:21:30,945 --> 22:21:32,612
kami secara teknis belum melihat sintaksis ini.

23393
22:21:32,611 --> 22:21:36,771
Tapi singkat cerita, baris-baris ini\n

23394
22:21:37,982 --> 22:21:43,161
Ini memastikan ada kereta\n

23395
22:21:43,161 --> 22:21:45,741
dan secara default akan\nmenjadi daftar kosong.

23396
22:21:46,282 --> 22:21:48,282
Itu berarti Anda memiliki\nan keranjang belanja yang kosong.

23397
22:21:48,282 --> 22:21:55,612
Namun jika pengguna mengunjungi rute ini melalui\n

23398
22:21:55,611 --> 22:21:59,241
mereka tidak menyia-nyiakan formulir itu\n apa pun

23399
22:21:59,241 --> 22:22:02,691
mereka memberi saya ID yang valid, lalu\nSaya akan menggunakan sintaksis ini.

23400
22:22:02,691 --> 22:22:05,542
Jika keranjang braket sesi adalah daftar--

23401
22:22:05,542 --> 22:22:07,846
ingat dari beberapa minggu\na lalu titik itu baru saja ditambahkan

23402
22:22:07,846 --> 22:22:08,971
menambahkan sesuatu ke dalam daftar.

23403
22:22:08,971 --> 22:22:13,201
Jadi saya akan menambahkan ID ke\n

23404
22:22:13,202 --> 22:22:18,612
Sebaliknya, jika pengguna berada di /cart\n

23405
22:22:18,611 --> 22:22:22,091
Pilih bintang dari buku yang memiliki ID.

23406
22:22:22,092 --> 22:22:24,932
Dan ini mungkin sintaks\nyang Anda ingat dari Pset enam.

23407
22:22:24,932 --> 22:22:27,542
Ini memungkinkan Anda mencari\nbeberapa ID sekaligus

23408
22:22:27,542 --> 22:22:29,762
karena jika saya memiliki daftar sesi--

23409
22:22:29,762 --> 22:22:34,232
daftar ID di keranjang saya, saya bisa\nmendapatkan semua buku itu sekaligus.

23410
22:22:34,232 --> 22:22:36,932
Singkat cerita,\napa yang terjadi di sini?

23411
22:22:36,932 --> 22:22:42,932
Saya menyimpan, di keranjang, buku-buku\n

23412
22:22:42,932 --> 22:22:45,792
Browser saya mengirimkan\ncap tangan yang sama berulang kali

23413
22:22:45,792 --> 22:22:48,911
begitulah cara situs web ini mengetahuinya\n

23414
22:22:48,911 --> 22:22:50,701
dan bukan kamu atau bukan Carter atau bukan Emma.

23415
22:22:50,702 --> 22:22:54,002
Memang jika kita semua mengunjungi\n

23416
22:22:54,001 --> 22:22:56,791
dan membiarkannya, maka kita semua akan mempunyai ilusi kita sendiri

23417
22:22:58,411 --> 22:23:00,902
Dan masing-masing kereta itu,\dalam latihan, akan melakukan hal yang sama

23418
22:23:00,902 --> 22:23:04,682
disimpan dalam direktori\nsesi Flask ini di server

23419
22:23:04,682 --> 22:23:06,482
sehingga server\ndapat melacak masing-masing

23420
22:23:06,482 --> 22:23:09,452
dari kita yang menggunakan, sekali lagi, nilai-nilai\ncookie yang ada

23421
22:23:09,452 --> 22:23:13,182
dikirim bolak-balik melalui header ini.

23422
22:23:13,682 --> 22:23:15,991
Saya tahu itu banyak,\ntapi sekali lagi, hanya saja

23423
22:23:15,991 --> 22:23:19,471
cara Python baru\nhanya memanfaatkan HTTP tersebut

23424
22:23:19,471 --> 22:23:22,121
header dari minggu lalu dengan cara yang cerdas.

23425
22:23:22,122 --> 22:23:26,101
Ada pertanyaan sebelum kita melihat\na satu rangkaian contoh terakhir?

23426
22:23:27,410 --> 22:23:31,322
AUDIENCE: [Tak terdengar] pahami caranya\n

23427
22:23:31,322 --> 22:23:34,744
Bagaimana cara menggunakan [INAUDIBLE],,\nbagaimana cara mengubah [INAUDIBLE]??

23428
22:23:34,744 --> 22:23:39,145
Karena untuk menggunakan GET\nrequest dot [INAUDIBLE] sama dengan

23429
22:23:39,145 --> 22:23:43,081
harus ada\npertukaran di [Tak terdengar]..

23430
22:23:43,081 --> 22:23:46,292
DAVID: Jadi menurut saya Anda\bertanya-tanya tentang penggunaan GET

23431
22:23:46,292 --> 22:23:48,461
dan POST dalam fungsi yang sama.

23432
22:23:48,461 --> 22:23:52,982
Jadi ini hanyalah estetika\yang bagus, jika Anda mau.

23433
22:23:52,982 --> 22:23:56,432
Jika saya harus memiliki\nrute terpisah untuk GET dan POST, maksud saya

23434
22:23:56,432 --> 22:23:59,191
ini mungkin berarti saya memerlukan\ndua kali lebih banyak rute dalam file saya.

23435
22:23:59,191 --> 22:24:01,441
Dan itu mulai\nsedikit mengganggu.

23436
22:24:01,441 --> 22:24:04,182
Dan saat ini juga, dalam hal\npengalaman pengguna

23437
22:24:04,182 --> 22:24:08,161
ini mungkin hanya menarik bagi\n

23438
22:24:09,452 --> 22:24:11,461
Anda tentu tidak ingin memiliki\nbanyak kata di URL

23439
22:24:11,461 --> 22:24:14,922
alangkah baiknya jika URL-nya bagus dan\n

23440
22:24:14,922 --> 22:24:21,032
Jadi alangkah baiknya jika saya bisa memusatkan semuanya\n

23441
22:24:21,032 --> 22:24:25,652
saja, dan tidak di beberapa rute,\tidak ada untuk GET, satu untuk POST.

23442
22:24:25,652 --> 22:24:30,012
Ini agak rewel bagi saya,\ntetapi hal ini biasa dilakukan di sini.

23443
22:24:30,012 --> 22:24:34,622
Jadi maksud dari kode ini adalah\nbahwa rute ini, fungsi ini

23444
22:24:34,622 --> 22:24:38,222
selanjutnya akan mendukung permintaan\nGET dan permintaan POST.

23445
22:24:38,221 --> 22:24:42,211
Tapi kemudian saya perlu membedakannya\n

23446
22:24:42,211 --> 22:24:44,881
Karena kalau permintaan GET,\nSaya ingin menunjukkan keranjangnya.

23447
22:24:44,881 --> 22:24:47,342
Jika ini permintaan POST, saya\ningin memperbarui keranjang.

23448
22:24:47,342 --> 22:24:51,542
Dan cara paling sederhana untuk melakukannya\n

23449
22:24:51,542 --> 22:24:54,991
Dalam variabel permintaan yang kami\nimpor dari Flask di atas

23450
22:24:54,991 --> 22:24:57,842
Anda dapat memeriksa\njenis permintaan saat ini.

23451
22:24:57,842 --> 22:25:00,932
Apakah itu GET, apakah itu POST, atau\napakah itu sesuatu yang lain?

23452
22:25:02,581 --> 22:25:07,652
Jika berupa POST, itu pasti berarti, karena\n

23453
22:25:07,652 --> 22:25:10,922
bahwa pengguna mengklik\ntombol Tambahkan ke Keranjang.

23454
22:25:10,922 --> 22:25:16,112
Sebaliknya, jika bukan POST, maka\n

23455
22:25:16,111 --> 22:25:20,371
Lalu, saya hanya ingin menunjukkan kepada\pengguna isi keranjangnya

23456
22:25:20,372 --> 22:25:21,881
dan saya menggunakan baris ini sebagai gantinya.

23457
22:25:21,881 --> 22:25:25,682
Jadi itu hanyalah salah satu cara untuk menghindari\n

23458
22:25:26,191 --> 22:25:29,101
Anda dapat menggabungkannya selama\namun Anda mendapatkan tanda centang seperti ini.

23459
22:25:29,101 --> 22:25:35,432
Jika saya benar-benar ingin menjadi orang yang bertele-tele, saya\n

23460
22:25:38,012 --> 22:25:40,592
Ini akan lebih simetris,\ntetapi hal ini tidak terlalu diperlukan

23461
22:25:40,592 --> 22:25:43,512
karena saya tahu\hanya ada dua kemungkinan.

23462
22:25:46,092 --> 22:25:48,902
Baiklah, mari kita lakukan\nrangkaian contoh terakhir di sini

23463
22:25:48,902 --> 22:25:51,092
itu akan menyatukan\nfitur terakhir ini

23464
22:25:51,092 --> 22:25:53,521
bersama-sama dengan sesuatu\nyang mungkin Anda lihat

23465
22:25:53,521 --> 22:25:56,373
cukup sering dalam aplikasi dunia nyata.

23466
22:25:56,373 --> 22:25:58,081
Dan itu, baik\atau lebih buruk, terjadi sekarang

23467
22:25:58,081 --> 22:26:01,421
akan melibatkan pengikatan kembali\nbeberapa JavaScript dari minggu lalu.

23468
22:26:01,422 --> 22:26:03,422
Tujuan dari\ncontoh-contoh ini bukanlah

23469
22:26:03,422 --> 22:26:06,805
untuk menguasai bagaimana diri Anda sendiri\n

23470
22:26:06,804 --> 22:26:09,721
kode, kode JavaScript, tetapi hanya\n

23471
22:26:09,721 --> 22:26:11,051
bahasa yang berbeda ini berfungsi.

23472
22:26:11,051 --> 22:26:13,441
Sehingga untuk\nproyek akhir, terutama jika Anda

23473
22:26:13,441 --> 22:26:16,921
ingin menambahkan fungsi JavaScript,\n

23474
22:26:16,922 --> 22:26:20,101
Anda setidaknya memiliki\nmodel mental sederhana tentang caranya

23475
22:26:20,101 --> 22:26:22,542
Anda dapat menyatukan bahasa-bahasa ini.

23476
22:26:22,542 --> 22:26:26,131
Meskipun fokus kami, secara umum,\n

23477
22:26:26,131 --> 22:26:28,322
daripada di JavaScript dari minggu lalu.

23478
22:26:28,322 --> 22:26:33,422
Izinkan saya membuka contoh\n

23479
22:26:35,021 --> 22:26:39,092
Dan izinkan saya memasukkan URL saya di sini dan\n

23480
22:26:39,092 --> 22:26:44,432
seperti secara default. Ini hanya sederhana\n

23481
22:26:44,432 --> 22:26:47,461
Mari kita lihat HTML\nyang baru saja dikirim ke browser saya.

23482
22:26:47,461 --> 22:26:49,572
Baiklah, tidak\nbanyak hal yang terjadi di sini.

23483
22:26:49,572 --> 22:26:52,682
Jadi ada formulir yang\nasionalnya adalah /pencarian.

23484
22:26:52,682 --> 22:26:54,482
Ini akan dikirimkan melalui GET.

23485
22:26:54,482 --> 22:26:58,902
Ini akan menggunakan parameter q, cukup\n

23486
22:26:58,902 --> 22:27:01,872
Jadi ini sebenarnya tampak seperti\nformulir Google yang kita buat minggu lalu.

23487
22:27:01,872 --> 22:27:03,752
Jadi mari kita lihat apa yang terjadi di sini.

23488
22:27:03,751 --> 22:27:06,151
Biarkan saya mencari sesuatu seperti kucing.

23489
22:27:09,581 --> 22:27:12,042
baiklah, jadi ini sebenarnya\na file yang familiar.

23490
22:27:12,042 --> 22:27:16,232
Apa yang sudah saya lakukan dan lakukan adalah\n

23491
22:27:16,232 --> 22:27:19,052
dari beberapa minggu yang lalu\nketika kami pertama kali memperkenalkan SQL

23492
22:27:19,051 --> 22:27:21,601
dan saya memuatnya ke dalam\ndemo ini sehingga Anda dapat mencarinya

23493
22:27:21,601 --> 22:27:23,411
berdasarkan kata kunci untuk kata apa pun yang Anda inginkan.

23494
22:27:24,512 --> 22:27:27,661
Jika kami melakukan ini lagi, kami\n

23495
22:27:27,661 --> 22:27:32,861
yang berisi D-O-G, dog, sebagai\nsubstring di suatu tempat dan seterusnya.

23496
22:27:32,861 --> 22:27:34,891
Jadi ini adalah cara\ntradisional untuk melakukan hal ini.

23497
22:27:34,892 --> 22:27:40,502
Sama seperti di Google, menggunakan\n/search?q=cat, q=dog, dan lain sebagainya.

23498
22:27:41,381 --> 22:27:45,432
Baiklah, langsung saja kita\nlihat app.py di sini.

23499
22:27:45,432 --> 22:27:50,702
Izinkan saya membahas contoh nol\ndi sini, tampilkan nol, dan buka

23500
22:27:50,702 --> 22:27:53,222
app.py dan lihat apa yang terjadi.

23501
22:27:54,881 --> 22:27:57,542
Ini formulirnya, begitulah\ncara kami memulai hari ini.

23502
22:27:57,542 --> 22:28:00,017
Dan inilah rute /search.

23503
22:28:00,017 --> 22:28:01,142
Nah, apa yang terjadi di sini?

23504
22:28:01,142 --> 22:28:02,832
Ini menjadi sedikit menarik.

23505
22:28:02,831 --> 22:28:06,031
Jadi pertama-tama saya memilih\nbanyak acara dengan melakukan ini.

23506
22:28:06,032 --> 22:28:10,652
Pilih bintang dari acara, dengan\njudul seperti tanda tanya.

23507
22:28:10,652 --> 22:28:15,331
Dan kemudian saya menggunakan beberapa\npersen tanda dari SQL

23508
22:28:15,331 --> 22:28:17,792
di kiri dan\nkanan, dan saya mencolokkannya

23509
22:28:17,792 --> 22:28:20,211
apa pun masukan pengguna untuk q.

23510
22:28:20,211 --> 22:28:22,801
Jika saya tidak menggunakan suka dan\nsaya menggunakan sama saja

23511
22:28:22,801 --> 22:28:25,891
Saya bisa menghilangkan kurung kurawal\nini, tanda persen ini

23512
22:28:25,892 --> 22:28:29,522
tapi itu pasti sebuah pertunjukan\n

23513
22:28:29,521 --> 22:28:32,221
untuk itu menjadi seperti kucing atau seperti anjing.

23514
22:28:32,221 --> 22:28:35,792
Seluruh baris ini kembali ke saya a\n

23515
22:28:35,792 --> 22:28:38,682
mewakili pertunjukan di database.

23516
22:28:38,682 --> 22:28:41,971
Lalu, saya melewati semua itu\n

23517
22:28:41,971 --> 22:28:45,771
Jadi ikuti saja\nbreadcrumb itu, mari kita buka titik pertunjukan--

23518
22:28:48,152 --> 22:28:50,331
Baiklah, jadi di sinilah\npembuatan template menjadi keren.

23519
22:28:50,331 --> 22:28:53,031
Jadi saya mungkin baru saja mengembalikan ratusan\nhasil

23520
22:28:53,032 --> 22:28:56,512
tapi satu-satunya hal yang saya\nkeluarkan adalah daftar yang tidak berurutan

23521
22:28:56,512 --> 22:29:00,592
dan menggunakan tag Jinja for\nloop dan li yang berisi

23522
22:29:00,592 --> 22:29:02,506
judul masing-masing acara tersebut.

23523
22:29:02,506 --> 22:29:04,881
Dan hanya untuk membuktikan bahwa ini\adalah kumpulan data yang sudah tidak asing lagi

23524
22:29:04,881 --> 22:29:09,801
dan sebenarnya saya menyederhanakannya sedikit,\n

23525
22:29:09,801 --> 22:29:14,091
Saya membuang semua barang lainnya seperti\n

23526
22:29:14,092 --> 22:29:18,832
dan saya hanya perlu, misalnya,\nmemilih bintang dari pertunjukan

23527
22:29:18,831 --> 22:29:21,201
batasi 10, supaya kita bisa melihat 10 di antaranya.

23528
22:29:21,202 --> 22:29:23,572
Ada 10 pertunjukan\ndari database itu.

23529
22:29:23,572 --> 22:29:25,982
Jadi itu saja\ndatabase itu sendiri.

23530
22:29:25,982 --> 22:29:29,572
Jadi sepertinya ini adalah\naplikasi web vanilla yang cantik.

23531
22:29:29,572 --> 22:29:31,607
Ia menggunakan GET, ia mengirimkan\nit ke server

23532
22:29:31,607 --> 22:29:33,982
server mengeluarkan respons,\ndan respons itu

23533
22:29:33,982 --> 22:29:38,752
terlihat seperti ini, yang merupakan besar\n

23534
22:29:40,461 --> 22:29:44,131
Namun yang lainnya\nberasal dari layout.html.

23535
22:29:44,131 --> 22:29:46,771
Semua hal di\natas dan bawah.

23536
22:29:46,771 --> 22:29:50,781
Baiklah, jadi saat ini, kami\n

23537
22:29:50,782 --> 22:29:53,482
Dan Anda mulai mengetik sesuatu\ndan Anda tidak perlu menekan Kirim

23538
22:29:53,482 --> 22:29:56,357
Anda tidak perlu mengklik tombol apa pun,\n

23539
22:29:56,357 --> 22:29:58,711
Aplikasi web, saat ini,\njauh lebih dinamis.

23540
22:29:58,711 --> 22:30:01,891
Jadi mari kita lihat\nversi yang satu ini.

23541
22:30:01,892 --> 22:30:07,792
Izinkan saya membuka acara\dan menutup tab saya sebelumnya

23542
22:30:09,902 --> 22:30:14,601
Dan itu hampir sama, tapi\n

23543
22:30:14,601 --> 22:30:16,625
Saya sedang memuat ulang formulir,\ntidak ada tombol sekarang.

23544
22:30:16,625 --> 22:30:18,292
Jadi hilanglah kebutuhan akan tombol kirim.

23545
22:30:18,292 --> 22:30:20,312
Saya ingin menerapkan pelengkapan otomatis sekarang.

23546
22:30:20,312 --> 22:30:22,912
Jadi ayo lanjutkan dan\nketik C. Oke, sudah

23547
22:30:22,911 --> 22:30:25,881
setiap pertunjukan yang dimulai\ndengan C.A, ada

23548
22:30:25,881 --> 22:30:27,861
setiap pertunjukan yang memiliki C-A di dalamnya.

23549
22:30:27,861 --> 22:30:31,101
T, ada setiap pertunjukan dengan C-A-T di dalamnya.

23550
22:30:31,101 --> 22:30:34,911
Saya bisa memulainya lagi dan melakukan anjing,\n

23551
22:30:34,911 --> 22:30:38,811
Dan perhatikan URL saya tidak pernah berubah,\ntidak ada rute /pencarian

23552
22:30:40,012 --> 22:30:43,652
Dengan setiap penekanan tombol, ia\nmenelusuri lagi, lagi, dan lagi.

23553
22:30:43,652 --> 22:30:46,282
Itu adalah pengalaman pengguna dan UX yang bagus,\nkarena langsung terasa.

23554
22:30:46,282 --> 22:30:48,532
Inilah yang\digunakan pengguna hingga saat ini.

23555
22:30:48,532 --> 22:30:53,392
Namun jika saya melihat kode sumbernya\n

23556
22:30:53,392 --> 22:30:58,615
hanya ada UL yang kosong secara default tetapi\n

23557
22:30:58,615 --> 22:31:00,032
Jadi mari kita lihat apa yang terjadi di sini.

23558
22:31:00,032 --> 22:31:03,512
Kode JavaScript ini\tidak melakukan hal berikut.

23559
22:31:03,512 --> 22:31:06,472
Izinkan saya memperbesarnya sedikit lagi.

23560
22:31:06,471 --> 22:31:10,853
Kode JavaScript ini pertama\ndipilih, dengan pemilih kueri

23561
22:31:10,854 --> 22:31:13,562
yang Anda gunakan seminggu terakhir ini,\n

23562
22:31:13,562 --> 22:31:15,502
jadi itu hanya mendapatkan kotak teks.

23563
22:31:15,501 --> 22:31:19,136
Lalu ia menambahkan pendengar acara\n

23564
22:31:19,137 --> 22:31:21,262
Kami tidak membicarakan hal ini\nminggu lalu, tetapi secara harfiah

23565
22:31:21,262 --> 22:31:23,362
saat Anda memberikan\nmasukan apa pun dengan mengetik

23566
22:31:23,361 --> 22:31:27,861
dengan menempelkan, dengan mekanisme\antarmuka pengguna lainnya

23567
22:31:27,861 --> 22:31:29,671
itu memicu peristiwa yang disebut input.

23568
22:31:29,672 --> 22:31:31,732
Mirip sekali dengan penekanan tombol atau tombol atas.

23569
22:31:31,732 --> 22:31:35,542
Saya kemudian memiliki fungsi, jangan khawatir\n

23570
22:31:35,542 --> 22:31:37,244
Lalu apa yang harus aku lakukan di dalamnya?

23571
22:31:37,244 --> 22:31:39,202
Baiklah, jadi ini\nbaru, dan ini bagiannya

23572
22:31:39,202 --> 22:31:41,872
mari kita fokus saja pada\nideanya dan bukan pada sintaksisnya.

23573
22:31:41,872 --> 22:31:43,762
JavaScript, saat ini,\ndilengkapi dengan sebuah fungsi

23574
22:31:43,762 --> 22:31:48,051
disebut mengambil yang memungkinkan Anda\n

23575
22:31:48,051 --> 22:31:49,861
tanpa memuat ulang seluruh halaman.

23576
22:31:49,861 --> 22:31:52,371
Anda dapat mengurutkannya secara diam-diam\ndo di dalam halaman.

23577
22:31:53,691 --> 22:31:59,031
garis miring tanda tanya pencarian q sama dengan\n

23578
22:31:59,032 --> 22:32:03,082
Ketika saya mendapat balasan, saya ingin\n

23579
22:32:03,081 --> 22:32:05,331
dan menyimpannya dalam variabel bernama show.

23580
22:32:05,331 --> 22:32:08,001
Dan saya sengaja terpental\n, mengabaikan kata-kata khusus

23581
22:32:08,001 --> 22:32:11,361
seperti menunggu dan menunggu di sini, tetapi untuk\n

23582
22:32:11,361 --> 22:32:14,601
Tanggapan kembali dari\n

23583
22:32:14,601 --> 22:32:16,432
menyimpannya dalam variabel yang disebut show.

23584
22:32:17,691 --> 22:32:22,461
Saya menggunakan pemilih kueri untuk memilih\n

23585
22:32:22,461 --> 22:32:26,721
dan saya mengubah HTML dalamnya\nmenjadi sama dengan acara itu

23586
22:32:29,572 --> 22:32:32,402
Di sinilah, sekali lagi, alat\npengembang cukup ampuh.

23587
22:32:32,402 --> 22:32:36,652
Izinkan saya melanjutkan dan memuat ulang\nhalaman ini untuk menghapus semuanya.

23588
22:32:36,652 --> 22:32:39,952
Dan izinkan saya sekarang membuka pemeriksaan.

23589
22:32:39,952 --> 22:32:43,292
Izinkan saya membuka tab Jaringan dan\n

23590
22:32:43,292 --> 22:32:44,542
antara browser dan server saya.

23591
22:32:44,542 --> 22:32:49,221
Saya akan mencari C. Perhatikan itu\n

23592
22:32:54,202 --> 22:32:57,812
Jadi aku bahkan belum menghabiskan kucingku\n

23593
22:32:57,812 --> 22:33:02,662
Banyak header respons, tapi mari\n

23594
22:33:02,661 --> 22:33:07,311
Ini sebenarnya tanggapan dari\n

23595
22:33:07,312 --> 22:33:10,372
Tanpa UL, tanpa HTML, tanpa\njudul, tanpa isi, tanpa apa pun.

23596
22:33:11,452 --> 22:33:12,961
Dan kita sebenarnya bisa mensimulasikannya.

23597
22:33:12,961 --> 22:33:17,122
Izinkan saya membuka\nURL yang sama secara manual, q=c, Enter.

23598
22:33:17,122 --> 22:33:19,131
Kami hanya akan kembali--

23599
22:33:20,572 --> 22:33:25,432
garis miring pencarian q sama dengan c, kita\n

23600
22:33:25,432 --> 22:33:27,892
yang jika saya melihat sumbernya, itu\nbahkan bukan halaman web yang lengkap.

23601
22:33:27,892 --> 22:33:31,312
Browser mencoba menampilkannya kepada saya\n

23602
22:33:31,312 --> 22:33:33,862
tapi itu sebenarnya hanya sebagian HTML.

23603
22:33:33,861 --> 22:33:36,471
Tapi itu sempurna,\nkarena ini benar-benar

23604
22:33:36,471 --> 22:33:39,381
apa yang pada dasarnya ingin saya salin\nkode Python saya

23605
22:33:39,381 --> 22:33:42,471
ke dalam tag UL yang sebaliknya kosong.

23606
22:33:42,471 --> 22:33:46,822
Dan itulah yang dilakukan kode\nJavaScript ini.

23607
22:33:46,822 --> 22:33:51,111
Setelah mendapat kembali respons dari\n

23608
22:33:51,111 --> 22:33:56,131
untuk menyambungkan semua li\nin itu ke UL setelahnya.

23609
22:33:56,131 --> 22:33:58,491
Sekali lagi, mengubah apa yang disebut dom.

23610
22:33:58,491 --> 22:34:01,461
Namun ada cara yang sedikit lebih baik\n

23611
22:34:02,932 --> 22:34:07,252
Karena jika Anda punya seratus pertunjukan atau\n

23612
22:34:08,211 --> 22:34:10,851
Mengapa saya harus mengirim semua\notag HTML bodoh ini?

23613
22:34:10,851 --> 22:34:13,952
Mengapa saya tidak membuatnya saja\nbila saya sudah siap membuatnya?

23614
22:34:13,952 --> 22:34:15,682
Nah, inilah perkembangan terakhirnya.

23615
22:34:15,682 --> 22:34:18,232
Setiap kali membuat aplikasi\web saat ini

23616
22:34:18,232 --> 22:34:22,402
tempat klien dan server terus berbicara\n

23617
22:34:22,402 --> 22:34:25,191
Gmail melakukan ini, secara harfiah\bukan aplikasi keren

23618
22:34:25,191 --> 22:34:27,531
saat ini Anda memuat\nhalaman sekali dan kemudian

23619
22:34:27,532 --> 22:34:29,302
terus berinteraksi\ndengan Anda tanpa Anda

23620
22:34:29,301 --> 22:34:31,971
memuat ulang atau harus mengubah URL.

23621
22:34:31,971 --> 22:34:36,471
Mari kita gunakan format yang disebut\n

23622
22:34:36,471 --> 22:34:39,561
artinya hanya ada\nyang lebih baik, lebih efisien, dan lebih baik

23623
22:34:39,562 --> 22:34:42,152
cara yang dirancang untuk mengirim data yang sama.

23624
22:34:42,152 --> 22:34:46,432
Saya akan pergi ke acara\ndua sekarang dan menjalankan Flask.

23625
22:34:46,432 --> 22:34:48,172
Dan saya akan\nkembali ke halaman saya di sini.

23626
22:34:48,172 --> 22:34:52,522
Antarmuka penggunanya sama persis,\n

23627
22:34:52,521 --> 22:34:56,551
Berikut C, C-A, C-A-T, dan seterusnya.

23628
22:34:56,551 --> 22:34:59,031
Tapi mari kita lihat apa yang terjadi kembali sekarang.

23629
22:34:59,032 --> 22:35:09,152
Jika saya pergi ke /search?q=cat, Enter, perhatikan\n

23630
22:35:09,152 --> 22:35:12,622
Namun fakta bahwa ini\nkompak sebenarnya merupakan hal yang baik.

23631
22:35:12,622 --> 22:35:16,372
Ini sebenarnya akan-- ayo\n

23632
22:35:17,452 --> 22:35:20,752
Inilah yang disebut\nNotasi Objek JavaScript.

23633
22:35:20,751 --> 22:35:26,541
Dalam JavaScript, sudut-- persegi\n

23634
22:35:26,542 --> 22:35:32,542
Dalam JavaScript, tanda kurung kurawal menyatakan\n

23635
22:35:36,782 --> 22:35:42,772
Ya, sepertinya Anda bisa mengingatnya sekarang\n

23636
22:35:42,771 --> 22:35:45,122
notasi menggunakan titik dua seperti ini.

23637
22:35:45,122 --> 22:35:48,711
Singkat cerita, samar\nas ini untuk Anda dan saya

23638
22:35:48,711 --> 22:35:52,072
dan tidak terlalu ramah terhadap manusia,\nit sangat ramah terhadap mesin.

23639
22:35:52,072 --> 22:35:55,792
Karena untuk setiap\njudul di database itu

23640
22:35:55,792 --> 22:36:01,562
Saya mendapatkan kembali ID dan judulnya,\n

23641
22:36:01,562 --> 22:36:05,632
Dan ini adalah format yang sangat umum yang\n

23642
22:36:05,631 --> 22:36:07,101
antarmuka, mungkin kembali kepada Anda.

23643
22:36:07,101 --> 22:36:09,141
Dan beginilah cara kerja API saat ini.

23644
22:36:09,142 --> 22:36:13,882
Anda mendapatkan kembali data\ntekstual yang sangat mentah dalam format ini, format JSON

23645
22:36:13,881 --> 22:36:17,601
dan kemudian Anda dapat menulis kode yang\namun berubah secara terprogram

23646
22:36:17,601 --> 22:36:22,292
data JSON tersebut ke dalam bahasa apa pun\nyang Anda inginkan, misalnya, HTML.

23647
22:36:22,292 --> 22:36:25,252
Jadi inilah versi\nketiga dan terakhir dari program ini.

23648
22:36:29,631 --> 22:36:32,452
Saya kemudian, ketika saya mendapat masukan,\nmemanggil fungsi ini.

23649
22:36:32,452 --> 22:36:38,991
Saya mengambil pencarian garis miring q sama dengan apa pun\n

23650
22:36:38,991 --> 22:36:41,955
Saya lalu menunggu balasannya,\ntapi bukannya menerima SMS

23651
22:36:41,955 --> 22:36:44,872
Saya menyebut fungsi lain ini sebagai\n

23652
22:36:44,872 --> 22:36:47,092
disebut JSON, itu hanya menguraikannya.

23653
22:36:47,092 --> 22:36:51,232
Ini mengubahnya menjadi kamus bagi saya,\n

23654
22:36:51,232 --> 22:36:53,572
dan menyimpannya dalam\nvariabel bernama show.

23655
22:36:53,572 --> 22:36:57,831
Dan di sinilah Anda mulai melihat\n

23656
22:36:57,831 --> 22:37:01,161
Izinkan saya menginisialisasi variabel bernama\n

23657
22:37:01,161 --> 22:37:03,961
menggunakan tanda kutip tunggal, namun saya\nbisa juga menggunakan tanda kutip ganda.

23658
22:37:03,961 --> 22:37:06,232
Ini adalah sintaks JavaScript untuk satu lingkaran.

23659
22:37:06,232 --> 22:37:10,101
Izinkan saya mengulangi setiap\nID dalam daftar acara

23660
22:37:10,101 --> 22:37:13,881
bahwa saya baru saja kembali ke server,\nsebagian besar data JSON.

23661
22:37:13,881 --> 22:37:19,191
Izinkan saya membuat variabel bernama\n

23662
22:37:19,191 --> 22:37:21,652
judul acara di ID itu.

23663
22:37:21,652 --> 22:37:23,661
Namun untuk alasan yang akan kita\n bahas kembali, izinkan saya

23664
22:37:23,661 --> 22:37:25,581
ganti beberapa karakter menakutkan.

23665
22:37:25,581 --> 22:37:31,671
Lalu izinkan saya menambahkan ini secara dinamis\n

23666
22:37:33,232 --> 22:37:35,991
Dan yang terakhir,\nsetelah perulangan for ini

23667
22:37:35,991 --> 22:37:42,081
izinkan saya memperbarui UL di HTML kita menjadi\n

23668
22:37:42,081 --> 22:37:44,661
Jadi singkatnya, jangan terlalu khawatir\nterlalu banyak tentang sintaksisnya

23669
22:37:44,661 --> 22:37:47,119
karena Anda tidak perlu menggunakan\nini kecuali Anda mulai bermain

23670
22:37:47,119 --> 22:37:49,231
dengan fitur yang lebih canggih segera.

23671
22:37:49,232 --> 22:37:51,202
Namun yang kami lakukan adalah,\ndengan JavaScript, kami melakukannya

23672
22:37:51,202 --> 22:37:54,122
membuat string HTML yang semakin besar\ndan semakin besar

23673
22:37:54,122 --> 22:37:57,562
berisi semua tanda kurung buka,\n

23674
22:37:57,562 --> 22:38:00,922
tapi kami hanya mengambil\ndata mentah dari server.

23675
22:38:00,922 --> 22:38:02,932
Dan faktanya di\nsoal set sembilan, Andalah yang lolos

23676
22:38:02,932 --> 22:38:06,652
akan menggunakan dunia nyata ketiga\n

23677
22:38:06,652 --> 22:38:08,092
antarmuka, tempat Anda mendaftar.

23678
22:38:08,092 --> 22:38:10,851
Data yang akan Anda dapatkan\nkembali dari API itu tidak

23679
22:38:10,851 --> 22:38:14,301
akan menjadi judul acara, tapi\sebenarnya harga saham dan saham

23680
22:38:14,301 --> 22:38:17,042
simbol ticker dan harga terakhir--

23681
22:38:17,042 --> 22:38:19,072
di mana saham\nterakhir kali dibeli atau dijual

23682
22:38:19,072 --> 22:38:21,880
dan Anda akan mendapatkan\ndata itu kembali dalam format JSON.

23683
22:38:21,880 --> 22:38:24,922
Dan Anda akan menulis sedikit\n

23684
22:38:24,922 --> 22:38:27,992
ke HTML yang diperlukan pada halaman.

23685
22:38:27,991 --> 22:38:31,281
Jadi hasil akhirnya di sini\nsecara harfiah adalah jenis pelengkapan otomatis

23686
22:38:31,282 --> 22:38:33,652
yang Anda dan saya lihat dan\nanggap remeh setiap hari

23687
22:38:33,652 --> 22:38:35,812
dan pada akhirnya itulah cara kerjanya.

23688
22:38:35,812 --> 22:38:39,442
HTML dan CSS digunakan untuk menyajikan\ndata, yang disebut tampilan Anda.

23689
22:38:39,441 --> 22:38:43,861
Python mungkin digunakan untuk mengirim atau\n

23690
22:38:43,861 --> 22:38:46,131
Dan yang terakhir, JavaScript\nis akan digunakan

23691
22:38:46,131 --> 22:38:48,519
untuk membuat segalanya dinamis dan interaktif.

23692
22:38:48,519 --> 22:38:50,601
Jadi saya tahu itu adalah sejumlah besar elemen dasar

23693
22:38:50,601 --> 22:38:53,394
tapi inti permasalahannya\n

23694
22:38:53,394 --> 22:38:55,911
menyiapkan panggung untuk proyek akhir yang mudah-mudahan sukses.

23695
22:38:55,911 --> 22:38:58,161
Mengapa kita tidak lanjutkan saja\nselesai di sana, dan kita lihat saja nanti

23696
22:38:58,161 --> 22:39:01,372
kamu untuk terakhir kalinya minggu depan untuk emoji.


