ROB Bowden: Esta é a sección máis cómodo, pero iso non quere dicir que se sentir que non está cómodo non vai aprender as cousas aquí. Entón, imos comezar. Ten láminas indo ben nas cousas. Estou a punto de ter agora? Cambiar portátiles. ALLISON: Non quere presentarse, Rob? ROB Bowden: Ah, eu son Rob. Este é o meu quinto ano CS50 TF-ing. GABRIEL: Eu son Gabriel. Eu son cabeza TF de CS50. Estaba TF o ano pasado e este ano. ALLISON: E eu son Alison, e iso é o meu segundo ano CS50 TF-ing. ROB Bowden: Todo ben, entón esa cousa da esquerda, espero que teña visto antes. Se non, porque transferir-lo a si mesmo, ten que ter visto en clase. Polo tanto, este é o aparello CS50, e el fixo un pouco de unha descrición do mesmo na charla. Pero, basicamente, é só ti está executando unha operación sistema dentro do seu funcionamento sistema, para que poidamos darlle programas sen necesidade de preocuparse, oh iso é funcionará en Windows e Mac, ou se algúns de vós xa están a usar Linux, Linux. É só debería ser un xogo común campo para que todos teñan a mesmo ambiente exacto. Entón, se non ten descargar iso xa, ten que baixa-lo, porque é Vai ter del para o conxunto de problemas. E é un dous gigabytes baixar, polo que pode levar moito tempo. Na Harvard vai rápido. Aparello para CS50. Agora, en principio, imos falar só unha morea de liña de comandos material, e así por iso, quero dicir traballar neste pequeno ambiente por aquí. E teña en conta todas as cousas Digo aquí e agora están indo para o traballo, se está dentro un terminal dentro do aparello, ou se está dentro fiestra da terminal gedit no interior do aparello. Entón, eses ambientes son idénticos. Pero eu estou indo a ir unha terceira vía. E nótese aquí esta pouco enderezo IP aquí. Entón non ten que facelo, pero este IP address-- agora I-- excepto é bloqueado por esa cousa. Aceptar, para que a dirección IP máis nun terminal aqui-- así este terminal máis aquí é un terminal no meu Mac. Polo tanto, este non é de forma actualmente asociado co dispositivo en todo. E se está en Windows, entón está indo a necesidade de baixar algo especialmente para iso, en especial as persoas tenden usar Putty, P-Ou-T-T-Y. Entón o que eu vou facer é tipo SSH e logo, que a dirección IP. Ben, jharvard nese enderezo IP. Entón 192.168.24.220. Esta mensaxe asustado, ignore-lo. Escriba si. Este é un cadro en CS50. El pide o seu contrasinal. E así, en moitos destes contextos onde pide o contrasinal, [inaudível]. Temos unha morea de preguntas onde el di que non é realmente a dixitación. Non amosa os personaxes de o contrasinal mentres escribe, se algo, para un recurso de seguridade, porque se alguén está mirando por riba do ombreiro e eles ven star star star star, entón eles saber que o seu contrasinal é de catro caracteres. Así, a idea é que vai pedir a chave, tipo. El non vai amosar os personaxes, pero é, en realidade, aceptar a eles. Neste caso, en calquera momento nunca ver un prompt de contrasinal manexar o aparello, o contrasinal será vermella. Tan carmesim. E agora aquí dentro deste fiestra que está no meu Mac, Estou basicamente ter a mesma visión exacta como no interior dun terminal no aparello. Entón non ten que facelo. Pode facer todo o que quere no interior do aparello. Eu case nunca realmente facer nada no aparello. Eu case sempre minimizar iso e agora Estou SSH traballando no aparello. Se calquera cousa, se ten un ordenador máis lento, pode notar a diferenza. Fago isto porque prefiro esta fiestra de terminal. Ten algunhas características como Podo dividir a ventá, e agora podo SSH en a través do aparello. Teño dous SSH está pasando á vez. Se o seu ordenador é especialmente lento e se está a traballar no dispositivo, e entender que é realmente vagaroso, que sexa. Tende a ser moito máis rápido se é SSH-ed en. Pero se non, podes traballar de calquera maneira. Audiencia: Qué SSH significa? ROB Bowden: cunchas seguros, algo parecido? Que SSH significa? GABRIEL: shell seguro. ALLISON: É só shell seguro. ROB Bowden: shell seguro. É un protocolo que se você-- un protocolo seguro, de forma cifrada. As persoas non poden bisbilhotar a rede e ver o que está dicindo a nada está SSH-ed para. E, de feito, no antigo días de CS50, polo que en 2009 cando eu era un calouro, o xeito que que traballou na serie de exercicios CS50, Foi vostede SSH-ed para un servidor que deulle acceso a, e en que traballou alí. Entón non ten ese aparello de vídeo. Non ten gedit. Non ten todas esas cousas que pode visualmente apuntar e premer. Vostede tivo que traballar nesta interfaz. Prefiro traballar nesta interfaz. Entón, parte do que imos estar indo máis agora son unha banda de comandos que ten que comezar a familiarizarse con como vai ao longo do curso. E honestamente, xa que acostumar eles, é moito máis rápido para traballar neste ámbito do que é traballar con find, arrastrando e premendo as cousas. Entón, aquí estamos nós. Agora eu só SSH-ed, e así o estándar localização-- ti vin algúns destes comandos na clase, pero imos pasar por riba de todos eles de novo. O lugar estándar que estamos en é o directorio home. E directorio, só outra palabra para cartafol. Entón, nós estamos no directorio home. Escriba ls, consultar os arquivos neste directorio. Evidentemente, eu creei un blah.c anteriormente. Polo tanto, temos un directorio de escritorio. Entender o destaque de sintaxe? A luz azul indica destaque un directorio eo branco en liña recta indica só un arquivo simple. Polo tanto, non van ser algunhas outras cores que ve. Un arquivo executable é probablemente vai ser verde ou algo parecido. OK, entón estamos no directorio home. Agora, se eu quero ir a un diferente directorio, cd é o comando que quero. Entón, cambie o directorio, e entón pasar o nome do directorio que quere entrar. Polo tanto, temos aquí catro opcións. Podo entrar transferencias, e agora podemos ver aquí el actualizou este parénteses que dicir que estou en ~ / descargas. Entón, cal é til? É unha abreviación para seu directorio persoal. Así, case todo o que fai vai sexa con relación ao seu directorio home, e pwd é só un comando Eu uso unha vez nun ano que só imprime o directorio actual. E así que ve aquí que ~ / Descargas realmente resolve para / home / jharvard / descargas. Entón / home / jharvard é o meu directorio home. Así, podemos cd dot dot. Agora dot dot é un directorio especial que sempre se refire a un directorio superior. Entón, se eu estou en ~ / descargas, entón cd dot dot me vai levar a til. Que pensamos cd dot dot me vai traer para agora? El me vai traer para / home. Entón til por directorio de traballo de impresión, Estou na empresa / home / jharvard. un directorio a partir diso, Agora di aquí / home. Agora cd dot dot. Agora estou no directorio raíz, e non pode facelo de novo. Só se ve no directorio raíz para sempre. O directorio raíz ten unha morea de cousas que, se quere ollar para, pode. Por exemplo, se eu for en bin, que conteña todos estes binarios, como ls, e cd, e todas esas cousas. Entón, eses comandos precisan existe algún punto do sistema, e é o directorio / bin. Pero case todo o que fai é será a partir do seu directorio persoal. E cd sen ningún argumento que sexa, podería dicir cd ~, non precisa. cd vai causar-lle de volta para o seu directorio persoal. Un último. cd - vai traer vostede de volta a o último directorio que estaba. Entón, eu só cd'd dúas veces seguidas, polo que a miña último directorio foi o directorio home. Se eu for para cortar bin, e agora imos para arriba e usuario. Participación do usuario. Imos para a participación do usuario. Agora eu estou agora en partes usuario. cd -, de volta bin. Entón iso é especialmente útil cando have-- e vai cambiar. Entón reparto de usuario, de volta bin, bin partes. Entón iso queda útil. Podes atopar-se ter moitos, moitos, moitos directorios aniñados. E quere facer algo real rápido nun directorio superior. Vai para aquel directorio, facer cambios e cousas así, e agora quere ir de volta a onde estaba. cd -. Estou sempre frustrado cando ocorrer de ir para ese directorio I quería facer un traballo en. Sempre estar errado cando eu fixen -la en dous pasos no canto dun paso, porque iso significa que cd - vai para poñer en que a situación intermedia no canto de onde quero ir. Así, podemos ver todos os ficheiros da lista. Sabemos como desplazarse ata o momento. Entón, agora imos falar sobre a edición de ficheiros. Polo tanto, neste curso, está case sempre deben usar gedit. Se quere, pode dar o seguinte paso e comezar a aprender un texto de liña de comandos editor. Entón, hai varias opcións. E os que son, probablemente, será relevante para ti, temos Nano, Vin e Emacs. Entón Nano é os novatos liña de comandos editor de texto. Entón Nano imos adiante blah.c creei anteriormente. É só este ficheiro C estándar. E ve unha morea de cousas pasando na parte inferior da pantalla, e ao parecer blah.c contén este código C. Polo tanto, neste editor particular, o que está dicindo na bottom-- agora este símbolo de acento circunflexo, vemos iso ^ G, ^ X, ^ O. Así que, en case todos contexto que ve, verás que símbolo acento circunflexo en outros lugares en liña, no Stack overflow, algo parecido. Isto case sempre se refire ao control. Entón, para saír quero facer Control X. Control X, sae. E podo usar miña frecha teclas para moverse. Repare que eu non podo apuntar e premer pronto. Debe usar a súa frecha teclas para moverse. Pode haber unha definición para apuntar e premer. Pero imos facer algúns cambios. Agora control X para ir saír. El vai dicir salvar tapón modificado. Agora o poder, y para si, N para non. Control C para cancelar. Eu só vou dicir que si. Nome para gravar o arquivo. O estándar é o arquivo que xa é. Prema Intro. Está ben. Agora eu só editado o arquivo, salva-lo, e el é modificado. Entón Nano é o máis fácil editor de texto se acostumar. As alternativas son Vin e Emacs. Estes son os editores de texto de nivel superior que ten unha curva de aprendizaxe moi íngreme. Así, a miña preferencia persoal é Vin. E ten unha gran variedade de opcións. E unha vez que se acostumar para iso, nunca quere ir a calquera outro editor de texto, porque só ten tantas cousas dispoñible para ti nestes, pero hai que realmente moito tempo para aprender. Entón, quizais só quere forzar si mesmo agora para acostumar con iso, pero eu diría que paga a pena. Pero é difícil. E entón Emacs. Sempre loita en Emacs porque Sei como facer absolutamente nada. Ao parecer Emacs non é, por defecto instalado no aparello. Nós probablemente ha engadir que como unha instalación por defecto. Despois que aprender unha das Vin ou Emacs, hai ningunha razón convincente para sempre aprender o outro, pero é un estilo completamente diferente. Aceptar para que a edición de arquivos de texto. Audiencia: Se está preso no Vin agora, como facer nós-- ROB Bowden: Hai varios modos no Vin, e hai toda tutoriais sobre Vin aprender. Entón, se ocorrer de estar no modo de inserción na orde para escribir o texto, que se pode que escriba de varias maneiras, pero eu é como entrar no modo de inserción. En ou saír de calquera especial polo que está dentro, só escapar. E só bater Escape para obter fóra de todos os modos aniñados no seu. Só OK, agora que estou de volta en modo normal. E así, en modo normal, unha colonos. Ve que aparecen na parte inferior. E despois q. Así q vai parar se ten feito cambios, I-- que teño feito cambios? Fixen cambios aparentemente. Entón, se ten feito cambios, que vai dicir que pode pór un punto de exclamación. Vou chamalo de un estrondo. Entón pode poñer unha prohibición só saír sen facer nada, ou wq colonos pode gardar e saír. Entón, w, en xeral, é escribir. Entón escriba o arquivo. Podo escribir e saír. Ou pode que só Slam QX, q estrondo só para saír de alí, con independencia de todos os cambios que fixo. Todo ben, entón agora imos vai-- podemos crear arquivos. Imos comezar a eliminar os arquivos. E eu só vou xogar nun novo comando rápido, toque. Entón tocar foo. Bar Touch. Preme Baz. Se eu ls, agora vemos que existen eses arquivos. Son completamente baleiro. Entón toque é só un fácil forma dun, [inaudível]. Dous, tecnicamente só para o estado iso, el actualiza a data e hora. Así, calquera arquivo que crea ten un timestamp asociado a el. Entón Baz foi creado en 14 de setembro en 16:21. É agora 16:22, entón se Eu toco Baz novo, ver que Baz foi máis recentemente modificada en 16:22. Pero doutra banda eu case nunca ollar para a data e hora en arquivos. Entón chamada, aquí eu só está a usar para crear algúns arquivos rápidos. Todo ben, entón agora é o rm mando que nos preocupa aquí. E podemos rm Boo. Diga eliminar regularmente Boo ficheiro baleiro. E podemos escribir y, e agora é elimina. Baz rm. Eliminar ficheiro baleiro normal Baz e tipo n para non. Agora que non é eliminado. Entón, bar e Baz aínda existen. Foo está desaparecido. GABRIEL: Continúe falando. ROB Bowden: Gran. Polo tanto, a mensaxe irritante aquí, elimine empty-- regulares o que está facendo alí embaixo? Eliminar ficheiro baleiro regular. Entón, se nós non queremos ser incómodo por esa mensaxe, podemos xogar neste -f bandeira, e por iso é forza. E agora, se eu rm -f, non vai dicir que quere eliminar este arquivo. El só vai facelo. E ls, eu non vexa a barra máis alá. Agora que é un potencialmente mando perigoso. Ela tende a non moi malo. Imos volver nun segundo como pode ser moi perigoso. E imos crear un directorio temporal. mkdir, outro comando. Entón, é unha orde mkdir que fai que un directorio. E agora por ls vemos esta luz agradable azul destacou directorio temporal. Podo cd en Temp. E podo mkdir foo. cd en foo. bar mkdir. cd en bar. Así, vemos que podemos facilmente chegar nalgún asentamento moi profunda. Agora como fago para eliminar un directorio? rmdir. Entón, se eu só en liña recta tentar rm, como fixemos cun ficheiro regular, bar rm vai dicir non pode eliminar a barra. É un directorio. Hai un comando especial para eliminar directorios, tipo de. Bar Entón rmdir. Agora bar está desaparecido. OK, entón rmdir eu practicamente nunca uso. A razón being-- agora imos facer unha barra de ficheiro estándar aquí. Boo Entón rmdir. rmdir. Erro ao eliminar foo. Directorio non baleiro. Entón, non pode usar eliminar dir nun directorio que ten cousas nel. Entón, ten algunhas opcións. Pode ir ao directorio, elimine todo manualmente, e despois saír e rmdir directorio. Isto, obviamente, soa aburrido. E se hai miles de arquivos de alí? Ben, podería rm *. Imos falar de * nun segundo. Basicamente, significa todas as cousas. Pero mellor aínda, -r tan rm. Entón rm -r-- en unha morea de contextos, significa -r recursiva, que nós imos falar do que medios recursivos nalgunhas semanas. Pero, basicamente, significa travesía a totalidade deste directorio e eliminar todo. Foo -r Entón rm vai dicir baixar ao directorio foo? Si. Eliminar regulares baleiro ficheiro foo / bar? Si. Eliminar directorio foo? Si. Entón agora foo e todo dentro del fose eliminado. Agora que pode estar particularmente irritante when-- imos tocar unha, chamada 2, toque 3. Podería ter un monte de arquivos. Se eu quixese, podería crear miles de arquivos en aquí. E foo rm -r vai ser moi irritante. Si, si, si, si, si, si. Con moito máis arquivos que ver rapidamente as veces Eu tería que escribir si. Ben, acabamos de ver antes como podemos librar-se da necesidade de escribir si, -f. Entón mkdir foo cd foo chamada 1 2 3. OK, foo-rf tan rm vai cegamente eliminar foo enteiramente. Ningún aviso. Sen nada. Foo está desaparecido. Entón, eu tenden a usar este mando o tempo. Dito isto, é unha comando moi perigoso, porque se eu fai algo así como tanto, non pode pedir-lle. El vai. E isto ocorre con bastante frecuencia, e mesmo en nivel superior cursos de CS. Ás veces, imos ver algo no que alguén di que eu accidentalmente noso rm rf-ed miña casa directorio e todo o meu conxunto P está desaparecido. E é devastador, pero non hai ningunha lata de lixo. Non hai ningún que non hai nada para que poida recuperar. É só desaparecido. Peor aínda sería algo así como rm -rf /. Entón, nós só discutir que directorio raíz. Mantén todas as arquivos no seu sistema. As cousas tenden a ser moi confuso cando elimina cousas como ls, e cd, e todos aqueles. Audiencia: Cal é a diferencia entre rm, rf, e rm * ROB Bowden: Entón rm * - ALLISON: Pregunta era o que é o diferenza entre rm, rf, e rm *. ROB Bowden: Entón rm *. Estrela en medios xeral todos o contido deste directorio. Tentando pensar noutra formas de mostrar estrela. Ben, en realidade protagonizar xeral significa corresponder a calquera defecto. Entón, se eu teño un arquivo chamado dog1, dog2 tocar, tocar cat1, toque cat2. Entón ls * 1 vai imprimir cat1 e dog1 porque esa estrela pode ser cuberto en com-- a persoa que estar alí, pero a estrela pode ser gato ou can. É un wild card. Esa é a palabra que eu estou a procurar. Wild card. Ou eu podería ls can *, e Estou ten que ver dog1, dog2. Polo tanto, aqueles son list os ficheiros que corresponden ao estándar particular. Podes usar ls deste xeito. Ls * estrelas combina con calquera cousa. Entón, que vai imprimir o contido deste directorio xa que todos eles coinciden. Non vai imprimir nada en directorios de nivel superior. Se eu teño un sub directorio, foo, e Preme 1 2 3-- agora rm * estrela, eliminar cat1, cat2, dog1, dog2. Non se pode eliminar foo. É un directorio. Así estrela se expande para todo o ficheiros no directorio. Entón, tecnicamente rm * é como dicir cat1 rm, cat2, dog1, dog2, foo. Considerando rm -rf, tecnicamente estrela faría realizar o que queremos, pero rm -rf-- se eu saír desa directorio, temp rm -rf, que vai entrar en temperatura e recursivamente eliminar todo. Así estrela é separado en que ese Enténdese por-- así esa cousa que estou correndo, esa cousa que está me levando para comandos e, a continuación, executar e facer eles, Eu chamo iso de miña cuncha. E así esta cuncha é en si un programa. E se eu quixese, eu podería ser executado en / bin / bash. O shell chámase bash. E agora notamos algo alterou lixeiramente, e iso é porque as miñas opcións para o shell son un pouco diferentes. Pero agora eu estou tecnicamente en execución unha cuncha dentro do meu escudo orixinal, e podo saír desa casca, e agora Estou de volta ao meu shell nivel superior. A finalidade de dicir que é-- a estrela. Entón, a estrela é algo entendida por bash. Entón rm -rf, bandeira rf é comprendido por só rm. El sabe que, cando pasar un -rf que quere para eliminar de forma recursiva todos os ficheiros sen avisar. A estrela é algo entendido por bash que cando di rm *, bash non vai dicir hey rm *, elimine estrela. Bash vai dicir rm * eliminar cat1, cat2, dog1, dog2. Vai automaticamente para ampliar todos os ficheiros no directorio. E do mesmo xeito til é outra símbolo que o bash entende. Cando di cd ~, o bash expande que, para o seu directorio persoal. Outras preguntas ata agora? OK, entón imos comezar a ir rápido. Conclusión Tab. Só para xoga-lo alí fora. Unha morea de persoas non entender iso existe. Entón, se eu tecleo cd dow, I quere ir descargas. Non teño escribir nloads. Só podo bater Tab. Así, recoñécese que A Dow é un prefixo que non corresponde a calquera cousa máis neste directorio, polo que vai concluír que para ti. Agora podo entrar. Eu tamén fago iso de forma recursiva. Foo Entón mkdir. Imos entrar foo. bar mkdir. Entón, volvendo á miña casa directorio, podo ver descargas. Agora bater guía de novo, vai automaticamente para cubrir foo. É o único directorio. Bater guía de novo, automaticamente vai cubrir bar. Entón agora eu estou en (~ descargas / foo / bar). Polo tanto, esta guía de conclusión, sempre que eu teño que o horario de expediente, e eu estou de pé sobre ombreiro de alguén, e van rm D-O W-N-L-O-A-D-S, estou morrendo. Só guía, guía, guía, guía. Entón, en definitiva guía utilizada. E do mesmo xeito se e abaixo, unha chea de xente só que pasou con nunca bateu arriba e abaixo. Vai pasar polo anterior comandos, por iso, se só foi algo, e quere executa-lo de novo, só Manteña-se ata chegar a el. Está ben. Tan rápido, algunhas outras cousas. Imos volver en Temp. Imos crear algúns arquivos. Entón, aquí, eu son só vai listar algunhas palabras. can, gato, Meow. Imos facer can, peixe. Entón, agora é un representante moi comandos útiles que usar para buscar toda arquivos para un determinado texto, e tecnicamente pode facer realmente expresións complexas para que haxa coincidencia. Entón, aquí, se eu grep, eo que quero buscar? Imos dicir que eu estou buscando por gatos, e Quero buscar todos eses arquivos. Entón, como é que fago todas estas arquivos? Star. Así, nun ficheiro, teño gato. Eu probablemente podería chamou-lle algo mellor, porque parecer números de liña ou algo así. Pero no arquivo que eu teño unha liña con gato. En arquivo dous Teño unha liña co gato. Entón agora podo mirar para dentro dun arquivo e ver si, o ficheiro tiña gato. Arquivo aviso previo de tres non foi acompañado xa que o gato non está alí. Podo buscar miado. Só arquivar dous ten miado. Polo tanto, este pode combinar, de novo, con -r, que como dixen antes frecuentemente significa recursiva. E para que eu poida chegar ata aquí, grep -r para calquera instancia de-- imos editar este só para xogar un gato dentro. Entón grep -r para calquera instancia de gato ao longo deste directorio. E que vai de forma recursiva buscar todos os subdirectorios. Así, en Baz, hai gato. En temp / 2, hai gato. E en temp / 1 hai gato. Entón, iso é buscar dentro de ficheiros. Agora tamén se pode usar un achado. E así que atopar é especialmente sobre buscando arquivos con un determinado nome. Entón, imos facer un pouco máis. Imos para descargas. Preme dog1. Preme cat2. Preme cat_dog. Preme catcat. Entón, quero atopar todos ficheiros con can no nome. Así que atopar, e para o máis longo xa que nunca se lembraba como atopar traballou, ata que finalmente ler algo que fixo de forma clara. Entón, atopar, automaticamente recursiva. Non precisa pasar por un -r. Entón, atopar puntos. Non falamos de punto aínda. Considerando dot dot sempre significa un directorio superior. Dot sempre significa o directorio actual. Así puiden rm -r punto no mesmo xeito que podo rm -rf *. En definitiva, eles realizar o mesmo. rm -rf punto vai eliminar en todo o directorio actual. OK, o que eu non quero facer alí. Pero atopar punto. Así, de forma recursiva, busque a cadea directorio, e agora todo tras este son unha banda de sinalizados que usar para eliminar cousas do retorno. Entón, atopar dot volve todo o que pode atopar a partir do directorio actual. Estes son todos os arquivos recursivamente buscar. Imos ver algúns deses nun segundo. Pero, no caso de que estea se pregunta como fago que, de xeito comando K, polo menos no meu terminal en Mac limpa-lo. Control L xeralmente limpa para calquera tipo de terminal. Tamén pode teclear clara. E se nunca chegar nun scenario-- estraño isto aconteceu comigo un par tempo-- onde as cores dos seus prompts son toda desarrumada, ou non son capaces de ver nada sendo ingresaran cando está escribindo, porque ás veces, como a cor de fondo é definida o mesmo que a cor do primeiro plano e agora non pode ver as fontes. Restaurar é algo que só repón vostede ao fondo estándar negro, fronte branco, ou o que quere configure-los para. Entón, onde estabamos? Atopa punto. Polo tanto, agora todo pasado presente punto restrinxe os resultados a algo que corresponde o modelo dado. Entón, aquí quero buscar todo co nome do gato. Non teño nada. Por que é este o caso? Ben, eu estou só a buscar algo con exactamente o nome do gato. Se eu queira buscar algo que ten algún defecto, e cat-- as citas tecnicamente non son necesarios, pero eu estou xogando-os alí. Entón, agora atópase catcat porque esa é a única cousa que ten algún arbitrario estándar seguido polo gato. Podo poñer gato *, e agora atopar catcat, cat_dog, cat2, porque estas son todas as cousas con gato no inicio seguido por nada. Podes combinar iso. Se quere buscar todos os ficheiros C que ten, pode facer * .c. Temos blah.c aquí. Entón, iso é un achado obras. Podes buscar. Ten unha morea de bandeiras a outras restricións. E un deles, digamos -d. Entón obsoleta. Oh, non é iso que quero. Non -d. Tipo d. Entón, atopar dot - tipo d. Entón, o que fixo é que eu estou buscando para todos os ficheiros no directorio actual con a-- d significa tipo de directorio directory--. Isto volve todo directorios no directorio actual. E tipo F é todo normal arquivos, todo non directorios. Entón, iso é só unha exemplo doutras formas que pode restrinxir a busca a outra que o nome do ficheiro. Foi 30 minutos. Aínda vai. ALLISON: Vou brisa través. El vai estar ben. ROB Bowden: Entón algunhas outras cousas. Agora bater, punto de exclamación. Así que xeralmente means-- ben, imos ver un exemplo. Entón! F, que é o que vai facer? Ben, parece que repetido achado do tipo dot f. Que tal! G? Isto só grep cat -r *. Entón tire pode usar para repetir unha orde recentemente feito. Entón, se eu escribir! Gre, que vai re-run as ordes que comezaron con gre máis recentemente. E podes ver todo isto comandos coa historia. Así, a historia. Estes son todos comandos eu correr hoxe. E ben, non é literalmente restrinxido aos días de hoxe, pero eu só teño usado este aparello a partir de hoxe. É a súa totalidade do historia do seu shell bash, agás que corta nalgún punto. Audiencia: Qué acontece se fai historial de comandos [inaudível] e un erro no resultado aínda será impreso as-- ROB Bowden: Si, se hai un erro nun deses commands-- entón imos dicir que é un comando de erro descoñecido. Aínda aparece na historia. Todo correcto. Outras preguntas sobre calquera cousa? Entón, iso é estrondo. Agora, a orde realmente útil, o home. Entón, que lle dá a manual para un determinado orde. Entón, digamos que man ls, entón iso está me amosando sl. El lista o contido do directorio. E é aí onde eu vexo que hai son esas varias bandeiras que existen. Así, podemos ver que hai ls -l se tivésemos que ler isto. ls -l me dá esta listaxe completa do directorio con propietario do arquivo, o tamaño do arquivo, o o timestamp modificado. Entón ls -a é outro que pode realmente usar un pouco frecuentes. -al é a miña bandeira máis común este ls pasadas. Así, -a, entender que hai moito máis arquivos que ls. ls -a. O que hai en común con todos estes arquivos? Comezan cun punto. Polo tanto, esta é unha convención en Linux que os arquivos que comezan cun punto están ocultas. Entón, isto significa só que cando nós só ls rectas, ou estamos a buscar este directorio a través o equivalente find, é de Windows Explorador equivalente, que nós Non quero ver estes arquivos de puntos. Eles só contaminar a visión das cousas. Entón, eles están escondidos a menos que especificamente solicitalo-los con algo como -a. Entón eu podo cd en .local, e eu vexo que que é en si mesmo un directorio con un directorio compartido, e aplicacións, e bla bla bla. Entón, dot, arquivos están só escondidos. OK, para que outros máis importantes. Eu teño un par que podo saltar. Nós só verdadeira conversación rápida sobre as cousas arquivo de redirección. Polo tanto, hai unha complexa serie enteira de cousas que podes facer con estes, pero só para velos, digamos, eco. Outro comando. Comando realmente idiota. Todo o que fai é imprimir o que eu diga a el. Entón eco Ola. El só repetiu Ola a pantalla. Ola, mundo. Ecos Ola mundo. Así, unha orde ou un símbolo que o bash entende é maior que este símbolo, e que é a saída para un símbolo de ficheiro. Entón, se eu de saída a esta foo, hai agora un ficheiro chamado foo, dentro que é Ola mundo. Entón, teña en conta que cando ecoar Ola tubo mundo en foo, non ecoam Ola mundo. Pola contra, foi posto en arquivo foo. E outro comando só xoga-lo para ti, gata. Esta é un xeito doado de só completamente listar o contido do arquivo de xeito que eu non teño para abrir un editor de texto para velo. Así, o contido do ficheiro foo están Ola mundo. E eu podería blah.c gato, os contidos son iso. De novo, estes son comandos que, non facer espero que te-los todos memorizado. A idea é que xa viu a eles. Pode que traballando algo, e está como eu estou canso de abrir este ficheiro. Gustaríame poder só ollar no contido real rápido. Podes facelo, entón mirar para atrás e dicir oh I Teña en conta que algo así como o que hai, e é gato. Entón o que está a suceder nun arquivo. Agora ben, non hai realmente ningunha boa exemplo de lectura dun ficheiro aínda. Que é algo que leva algo do estándar en? Calquera simple comando Linux? Cando chegamos a el, nun matrimonio semana todo piece-- ben, esta semana ten unha peza onde comezar a tomar a entrada do usuario. E así normalmente escribe que a entrada ao teclado. No canto de escribir que entrada no teclado, pode, en vez de tubos de un ficheiro de xeito que cando fai Mario, ./mario, tubo desde calquera ficheiro dado, e que vai executar o programa de Mario. Non espera a entrada en teclado, en vez diso, é só vai ler o liñas do ficheiro foo. Así, maior que foo pon en o ficheiro foo, e menos de foo leva o material a partir do ficheiro foo e usa como entrada para este programa. E só para velo, tamén podería ecoar foo bar Baz, e logo, no canto dun maior que, imos facer dous en foo. O que isto fai? El só engade ao arquivo. Entón, en vez conta se eu echo bla en foo e foo gato, é só bla. Entón, cando saída a un ficheiro que, substitúe completamente o arquivo. Se quere só para engadir, double [? motoniveladora. ?] E para rematar, é de tubo. Tubo se fai moito máis complicado, onde que leva a saída dun comando e alimenta-lo ao seguinte comando. Entón, unha cousa común, historia. Entón, Ugh, eu non quero ollar para iso. Móstrase me todos os comandos na miña historia onde eu grep-ed para algo. Non, iso é confuso. Móstrase me todos os comandos que eu atopar. Todo atopar comandos que eu xa corrín. Así, a historia. Agora saídas de historia para o pantalla esta lista de comandos, pero eu non quero saída para a pantalla. Pola contra, eu estou indo a canaliza-lo en grep. Entón, imos buscar todas as instancias do achado. Entón, agora en vez de tomar grep a entrada, no canto de-- grep é capaz de tratar como input-- estamos usando grep algo diferente aquí. Entón, en vez de escribir a lista de cousas que quería buscar e dixo grep está tomando como entrada. Entón, se eu só grep atopar, el espera que eu escriba cousas. Entón gato Ola atopar. Ola. Buscar. Teña en conta cada vez que eu escriba atopar recoñece que eu escriba achado. Entón, en vez diso, vai busca de arquivos para atopar. Así, a historia vai agora saída dunha lista de todos os ordes. Estamos poñendo que a produción, e estamos alimentándose ao grep, e por iso está cuspindo todas as instancias de atopar. A razón pola que eu dixen que estaría confundindo é se I-- aínda é confuso. Se eu grep para grep. Teña en conta que é moi fermoso sempre mostrando o mando eu só correu por ese mando si ten grep dentro del. OK, entón calquera dúbida sobre calquera cousa? E eu vou transferir-lo máis neste momento. Esperemos que este é un bo visión xeral de todos os comandos que non precisa ter memorizado, pero estes fan-se un sólido 95% do que eu facer na liña de comandos. Tamén ten en conta que a liña de comandos en si, bash é unha linguaxe de programación, e así, cando comezar a el, Pode querer facer as cousas realmente complexas. E por iso ten cousas como loops e ses, e de todos aqueles que vai acostumar coas súas linguaxes de programación. Pero iso está alén do ámbito desta sección. OK, entón non hai dúbidas? ALLISON Ningún? GABRIEL: Vai a-- ALLISON: Podo facelo no meu, se queres. Podemos ver que pasa. ROB Bowden: Off para Allison. ALLISON: Woo. Vostede é un acto difícil de seguir, Rob. Quere me cambiar contigo? Ou ten, Aceptar. Vou tentar e non bastante ser tan moroso alí. A ver se esa vontade traballar do xeito que quero. Quizais? Haha! Si. Entón, eu estou indo só para ir moi rápido a través de variables, loops, condicionais, e un pouco sobre o compilador. Se ten preguntas en calquera momento, por favor, me deixar. Eses faces van lembrar-me de repetir súa pregunta no caso esquezo, pero non debe ser moi malo. Entón variables, si. Nós non temos un dos seus Pezas risco aquí. Estou seguro que a maioría de vós, se tivo algún tipo de xogo que creou co Scratch, que tiña manter o control de algo así como puntuación, ou tempo, ou algo parecido. Polo tanto, aqueles laranxa brillante pezas que vemos alí son só a forma do risco de variables, e vai definitivamente estar usando variábeis ao longo dos seus programas. Se non for, eu non son realmente Asegúrese de que está facendo. Pero de calquera xeito, gran cousa, definición de variables. Con C cada variable ten ter un tipo declarado, entón eu dei-lle unha moi unha xeral na parte superior. Entón vai ter a súa escribir e logo, o que quere decide chamar á súa variable. Polo tanto, neste caso, o tipo na súa lista de variables. Temos tres exemplos. Char dalgún grao, dun A, que é o que Estou seguro de que todos queren para chegar nesta clase. Podes establecer múltiples variables nunha liña con tal de que eles son todos do mesmo tipo, que é o noso segundo exemplo, hai onde ten tres variables, x, y, e z. Son todos os coches alegóricos. E entón tamén pode, neste último exemplo, con puntuación int e número de equipos, pode arrinque la alí mesmo. Así, no exemplo do medio en que só ten float de x, y, e z aqueles que non son inicializados aínda. Eles non teñen ningún valor. Ou eles teñen valores de lixo. E se tentar usalos, o compilador pode berrar contigo. Ten que declarar e tanto arrincar súas variables. Así, nesta última, estamos facendo as dúas cousas. Estamos declarando variables de puntuación e número de equipos, e estamos inicializar a eles, dando lles os seus valores iniciais de 7 e 4 respectivamente. Legal. Todo o mundo bo? Impresionante. OK, entón algunhas convencións. Se vostedes leron a través do estilo de 50, estes son só cousas que queremos vostede aplicar no seu estilo. Nomes tan significativo. Se comezar a chamar as cousas só x, y, e z, especialmente como entrar en longas programas, está Probablemente vai confunden-se e ser como o que é esta variable referíndose. Eu non teño idea o que iso significa. Entón, se é para soster unha puntuación, chamalo de marcar. Se significar para manter algunha resposta ou producir, darlle un nome como ese. Loops, que imos entrar no seguinte foto, variables dunha única letra son moi ben. ROB Bowden: I, j, k e son só convencións para loops que todo o mundo espera que para ser chamado i, j, k e. Pode chamar eles-- vexo liña columna ou liña de chamada, ás veces, por dous loops aniñados, e que é tamén unha especie de patrón. Pero eu e j é totalmente comprendido. ALLISON: Si, eu e j está totalmente ben. Por razóns de claridade, coma nalgúns dos seus conxuntos de P, pode ter sentido ter máis descritivos cousas alí só manter o control do mesmo. Pero eu creo que i, j, k e eu creo que a gran maioría de nós todo o uso. ROB Bowden: Con estes convencións, polo que o estilo é importante. É un dos catro eixes en que está clasificado, e é tan fácil de ir un pouco máis seu P definido ao final e asegurarse de que non hai erros estilísticos. Entón asegúrese de que está tabulación correctamente. Asegúrese de súas variables son nomeados. Deixe algúns comentarios. É moi fácil obter estes puntos. Non ten que pensar sobre calquera cousa, a fin de obter os puntos. Non ten que entender nada. É só converténdose no fermosa. ALLISON: En realidade, nós ten estilo 50, que vai dicir onde está sujando se se está entorpecendo en estilo e dicirlle o que Debe corrixir e como precisa para resolve-lo. Tamén é só bo mencionar que é política curso que se está na oficina horas eo seu código é unha desorde, podemos rexeitar a axudar vostede ata que parece máis agradable. Entón comeza a dereita, manter un estilo consistente, tamén está indo só para facer súa vida moito máis fácil cando estás a pasar por depuración. Se está tentando descubrir onde está perdendo unha chaveta e están por todo o lugar, es só facer a súa propia vida máis difícil. Entón, ser consistente con estilo. Eu prometer que vai facilitar a súa vida. Isto vai facilitar as nosas vidas. Todo o mundo vai ser moito máis feliz. E iso é o que quere. GABRIEL: A súa nota será maior. ALLISON: Si, ea súa nota. Se o TF É como se, tende a ser favorable. Todo ben, e despois é só o segundo punto aquí. Initializations consistente. Entón, como xa vimos, pode declarar e arrincar as cousas. Múltiples variables na mesma liña. Unha cousa que me gustaría que non facer é declarar algunhas variables e non arrincar-los na mesma liña que está inicializar outros. Polo tanto, no caso de que feita calquera sentido, temos o exemplo aquí onde estamos declarando ints nas variables de barrios moedas de dez centavos e moedas de un centavo, pero os cuartos e as moedas de un centavo non teñen valor inicial. Non inicializou a eles, pero no medio hai xa inicializar moedas de dez centavos a 0. Así, é facer trimestres, moedas, moedas de un centavo. Ou trimestres igual a 0. Dimes igual a 0. Tostões igual a 0, ou o que quere estes valores iniciais son. Gran cousa con estilo, ser consistente. En caso de dúbida, ser consistente. Pero seguir a nosa guía de estilo tamén. Legal. Todos bo alí? Audiencia: Onde está o guía de estilo? ALLISON: A guía de estilo é on-- cal é o sitio web? GABRIEL: Creo que é manual.cs50.net/-- ALLISON: Estilo? GABRIEL: Estilo. Yep. ALLISON: Si. Entón, cuestionar, onde é o estilo 50. manual.cs50.net/style. Si? Audiencia: Se estamos definindo variables, é OK se colocarmos como [inaudível] como puntuación int e int obxectivo. Entón diría que agora temos chegou a define-los xuntos? ALLISON: Entón cuestión, deberán ten o código redundante cando está definindo variables como int e puntuación na seguinte liña int xogo? ROB Bowden: Hai definitivamente casos en que o código redundante é malo. Non consideraría que o código redundante. Eu case nunca declarar múltiple variables na mesma liña de cada vez. E se algo, é porque xeralmente eu deixar algún tipo de comentario explicando o que a variable é para. Entón, eu vou dicir puntuación int barra barra. Mantén o control de todo. Na barra total de barra. Por iso, é moito máis groseiro desa forma para poñer-los todos na mesma liña. Nunca poñer-los na mesma liña. ALLISON: Eu me sinto como se fose preferencia persoal neste momento. Audiencia: Será que van para loops e outras cousas tamén? ROB Bowden: Como dentro? Como int i é igual a 0 comas lonxitude é igual a algo? Que non ten opción. Con loops o arranque part-- para que poida ver só int i é igual a 0 punto e coma i menos do que o que quere que punto e coma i plus plus. Isto int i é igual a 0, tecnicamente tamén pode facer o que se viu antes coa sintaxe de comas. int i é igual a 0 comas j é igual a 3 comas k é igual a 5. Non ten a opción de dividir que en varias liñas, e iso é normal. Velo hai multa. ALLISON: Awesome. Pois Segue cómodo en loops. Entón, si, aquí temos algúns exemplos de lazos que vostedes viron o scratch. E, por suposto, todos estes pode só ser recreada en C. E basicamente permiten que repetir algúns sección de código ata que unha determinada condición se cumpre, o que nós imos entrar á dereita despois de falar sobre lazos con condicionais. Polo tanto, temos tres tipos principais. De momento, e facer á vez, que imos todos pasar por agora. Entón, primeiro é para loops. Así, por algunha condición, executar este bloque de código. Temos este pouco fría Diagrama aquí na parte inferior. Pero, basicamente, ten en seu favor, que a primeira liña, vai arrincar súas variables. Así como falamos, eu é igual a 0 ou i é igual a 10. Todo o que precisa que variable a ser é será inicializar alí, declarada e inicializar con algún valor. Entón temos algúns condición que está pasando para ser alomenos a nosa variable contra algo. Así, no caso a caso típico no que quizais queira que esta sección do código para realizar cinco veces. Entón nós teriamos int i é igual a 0, e nós quere que sexa cando sexa inferior a 5. Entón, esta condición é só vai comprobar que cada vez. Se esta condición avalía a realidade, é vai realizar o código, que é exactamente o que este pequeno diagrama está amosando. E así el executa-lo. El actualiza unha variable, que é o que nos vemos na última parte do noso para arranque de loop alí. Por iso, só vou seguir facendo iso ata que esta condición non se responde, e logo, ha saír o loop e seguir seguir adiante co resto do seu programa. Todos bo alí? Legal. Entón, aquí está un exemplo moi similar a algo que eu acabo de falar. Entón, nós só quere imprimir este é o CS50 10 veces. Entón ve, temos aquí noso para, a continuación, nos arrincar a variable i para ser igual a 0. A nosa condición é a comprobación que é menor que 10. Así, avaliar a realidade cando primeiro iniciar, e logo actualiza a nosa variable cada vez que realmente executa e imprime este é CS50. E rematará tras 10 veces. Legal. Así, mentres loops son o próximo. E como ve aquí, só temos algún tempo a esta pregunta condition--? Audiencia: Como podo ir en realidade, só non un número, pero dous números [inaudível] i plus plus plus? ALLISON: Entón a cuestión é como pode actualizar a súa variable por máis dun de cada vez. Entón eu plus plus vontade actualización por un de cada vez. Se quere actualiza-lo por dous, podería facer máis i é igual a 2. ROB Bowden: Xa viu máis iguais en charla aínda? Audiencia: [inaudível]. ALLISON: É efectivamente o mesmo que i é igual a i + 2. Entón, que vai leva-la e actualiza-lo por dous de cada vez. Ademais, é igual é só algo chamamos azucre sintático. ROB Bowden: Si, aqueles existen para practicamente todos os operadores aritméticos. Veces para que eu igual a dobraría o número. j fractura é igual a 3 é o mesmo como j é igual a j dividido por 3. ALLISON: ou menos igual a 2 sería diminuír i por dous de cada vez. ROB Bowden: Aínda iguais mod. Aínda non viu operadores bit a bit, pero acento circunflexo é igual e comercial é igual, todos os que existen. ALLISON: Entón, unha morea de veces, sobre todo co seu primeiro par de conxuntos P, vai ser, probablemente, incrementando por un, entón eu plus plus, j plus plus son todas as cousas que vai para ser tipicamente utilizando. Pero esa condición de actualización é totalmente baixo o seu control. Pode actualiza-lo por calquera incrementos ou de forma que decidir. Quizais aínda quere que sexa un número ao chou, por veces. Pero si, hai moitas cousas que podes facer con iso. Non está restrinxido a i plus plus. ROB Bowden: Só ti sabe que existe, ela tamén existe outra forma, máis máis eu. Entón, se está sempre en busca en liña e pasar a ver plus plus i, practicamente significa o mesmo. ALLISON: Cool. Boa? Impresionante. Así, mentres loops. Moi semellante. Ten algunha condición. A principal cousa a notar aquí é no canto de ter tres partes diferentes de configurar, temos un. Nós só temos algunha condición que está a ser comprobado. E, do mesmo xeito, mentres esta condición é avaliada como verdadeira, seu código será executado. E se é falso, terminará, movemento á seguinte parte do seu programa. Polo tanto, este é o tipo de como-- o que é un bo exemplo de busca por algunha condición normal? GABRIEL: Mentres verdade. ALLISON: Podería facer mentres certo. Ben, 1 é igual a 1. ROB Bowden: Pode facer while-- só en vez de usar un loop for, sempre pode codificar un loop en un loop while, entón eu maior que 0 ou mentres i menor que 10. ALLISON: Awesome. E entón nós facer mentres loops, que é óptimo para validación do usuario, onde quere obter algo de seu usuario, ver se é válido, e, a continuación, continuar a partir de aí. Entón, unha das cousas que debes saber é cun facer mentres é que está indo a executar, e logo que vai volver a executar se esta condición sexa satisfeita. Entón, probablemente a mellor forma de facelo é só para ver un exemplo aquí. Entón, como mencionei, o usuario validación é realmente useful-- ou facer while son realmente útil coa validación do usuario. Entón, iso é só ir para re-solicitar algún usuario ata que introduza un número positivo, que pode ser útil para o seu conxunto P esta semana. E así, neste caso, cando inicialmente realizar este programa, vai imprimir escriba un número positivo. El se ve algúns entrada desde o usuario, e logo, que vai comprobar que a entrada contra a condición que marcou para el. Polo tanto, neste caso vai comprobar. El vai dicir, OK, é a nosa entrada negativa, ou é 0 ou negativo, o que sería incorrecto. Así, pois, re-aviso. Pregunta? Audiencia: Este é o mesmo, a continuación, como un while se acaba de copiar este código e poñelas [inaudível] mentres loop? ALLISON: Entón pregunta era faría este ser o mesmo que dun tempo loop se fósemos só copiar o loop while anterior. Polo tanto, neste caso, o loop while é indo para comprobar a condición de primeira. Polo tanto, neste caso, se tentásemos escribir só como un loop while, diría mentres entrada de ser menor que un. Pero non temos unha entrada para el. Audiencia: Se [inaudível] while incluíndo este código, pero entón lidou o código enriba do loop while tamén. Só tiña este código [Inaudível] mentres loop. ALLISON: Sería o mesmo, si. Entón, vostede podería só write-- en vez de ter un si fazer--. GABRIEL: Pero iso é máis elegante. ALLISON: Si, iso é máis elegante. Pode poñerse en proxecto e outros enfeites, mais si, pode facelo totalmente. Algunha pregunta? OK, legal. Entón, nós falamos moito sobre as condicións con todos eses lazos que temos, polo que estamos realmente ficando en condicións en expresións booleanas. De novo, vostede usalos en C, así só unha especie de transición a partir de máis de interface gráfica de feito, a codificación. Cool, tan grande, se. Basicamente só nos permite introducir algunha lóxica no noso programa e comprobación condicións SYS. Polo tanto, neste caso, OK, n é maior que 0? Si, é, para que poida realizar esta. É só comprobar algúns condición que ten definido, o que eu creo que todos estamos cómodo coas condicións de verificación. Legal. Entón, se o resto é o outro, pode dicir OK, se isto é certo, facelo primeiro. Se non, quero que estándar e facer outra cousa. Como neste caso, quere escoller un número positivo ou un número negativo. Só ten dúas opcións. Debe del para realizar con independencia de que as súas entradas do usuario. Entón pode dicir así, é maior que 0? Legal. Imprimir un número positivo. Se non é, imprimir unha negativa. Todo o mundo bo? E entón unha cousa a recoñecer é que se o que a condición se cumpre, o outro non vai tamén realizar. Só unha delas pode executar á vez. Polo tanto, é un trade off. Non consegue ter tanto. Quere ter a primeira condición. Quere ter a ou a outra persoa, non ambos. Que, entón, pode facer as cousas aínda máis complicada, porque pode facer se, senón el, e despois o resto. Polo tanto, neste caso, nos temos tres condicións. E, de novo, só un deles é vai acabar sendo executado. Entón pode estar se pregunta ben, o que se ten algo que satisfai dous destes. Quizais o que está introducindo atende tanto a condición para eo else if. O único que vai funcionar ALLISON: Así que atopa algo que cumpre a condición para que avalía a realidade, é o que vai correr e nada máis. Entón, se tivo é ese número entre 0 e 5 para o primeiro, ou é ese número entre 3 e 5 para o outro parte, e introducir o number-- Eu dixen 0 e 5 e- 4. Vai bater o primeiro. El vai dicir OK, este é número entre 0 e 5. Executar e saír. Iso nunca vai bater esa segunda opción. Legal? Impresionante. OK, tamén temos de rede declaracións se quere ir aínda more-- ou moito, interruptor é o seguinte. Estou me adiantando aquí. Unha vez máis, se múltiples bloques onde, como eu acaba de dicir é así que atopar unha condición que coñeceu e se unha persoa se máis, el deixa. Se precisa comprobar varias cousas, é Vai querer usar isto porque ha comprobar todo tempo aquí. Polo tanto, este será executado a través de e se que é maior que ou igual a 90, que vai imprimir iso. E el será executado a través de e comprobar cada unha delas. Audiencia: Entón iso sería máis erros que [inaudível]. Será que isto é como o [inaudível]? ALLISON: A cuestión é que isto sería buggy ou que iso fai o que quere. Ela realmente depende do que quere do seu programa. Audiencia: Quero dicir, como se pór 90 en. ALLISON: Se pór 90-- Audiencia: [inaudível]. GABRIEL: Vai conseguir dúas cousas. ALLISON: Vai conseguir dúas cousas. Si, dous. ROB Bowden: Dous? ALLISON: Non. ROB Bowden: Four. Se pór 90, que vai dicir que teño un A, ten un B, ten un C, ten un D. Audiencia: [inaudível]. ALLISON: Certo. Entón eu depende do que quero de ti programa. Ás veces ten que comprobar varias cousas. Terá moito máis profunda do que bo deseño é como ir á fronte. A cousa importante a entender é que esta pode comprobar todos os catro condicións aquí. Considerando que, se este fose un caso máis se outra persoa se máis, el atinxiría ese primeiro caso, que iría imprimir tes un A e ser feito. ROB Bowden: Mesmo se nós decidiu cambiar isto para e maior que ou igual a 90, se e maior ou igual a 80, e menos que ou igual a 89, se n maior que ou igual a 70, e n menos que ou igual a 79, de xeito que será correcta. Isto vai facer o que queremos, pero inda verifica cada el. Así, mentres que no primeiro escenario, se nós introducir 90 con só se else if else if, e entramos 90, entón vai corrixir. El pode comprobar a primeira un, de impresión que ten un A, ignorar todo, porque xa atopei un que funciona. Todos os casos son mutuamente exclusivos en base a se else if else if. Entón, que vai executar o primeiro caso, el está feito. Vai ata o final. Considerando que, se mudarmos este é o que eu era dicindo con menos que ou igual a 89. Vai comprobar a primeira. Vai imprimir. Vai comprobar a segunda. Non vai imprimir. Consulte o terceiro. Non vai imprimir. Consulte o cuarto. Agora vai imprimir. Entón, nese caso, o outro se versión, xa que estes casos son mutuamente exclusivos, é mellor uso se else if else if, porque iso vai ter menos comprobacións das condicións que esta versión. ALLISON: Awesome. Así, outra cousa que pudermos facer é instrucións switch. Basicamente un switch leva nalgúns variable, neste caso é n, e determina que se a executar. Polo tanto, este é tamén un onde os seus casos debe ser unha especie de mutuamente excluíntes. Polo tanto, neste caso, se temos un, que é vai coincidir co que iso variable-- sexa cal sexa o valor de n é un deses casos, de xeito 1, 2, ou 3, e imprimir a liña correspondente. E entón, se observar aquí, nós tamén temos un defecto, que pode pensar de como a súa máis. Entón, se incorporarse calquera outro número ademais de 1, 2, e 3, neste caso el só vai imprimir válido. Decidir cando usar IFS contra se elses contra interruptores vai ser algo que vostedes van Vexa o deseño intelixente como comezar a escribir programas máis complicados, e Non hai regras ríxidas e rápidas de cando usalos. Realmente depende do seu contexto. ROB Bowden: E só xoga-lo alí fóra xa que é a sección máis cómodo. Switches, eles tenden a ser-- entón está limitado no número de formas que pode usalos, porque IFS, a condición pode ser moi calquera cousa que quere. Con cambia os casos han de ser números, ou tecnicamente poden ser caracteres, pero caracteres, como veremos, son números só. Entón, eles teñen que ser números, pero interruptores son realmente máis eficiente do que se else if else if, porque aínda tomando o exemplo antes-- ben, o exemplo de grao parece bo. Ben, digamos que aquí, nós en vez facer isto como unha se else if else if escenario. Así, se n é igual é igual a 1, imprimir escolleu un número baixo. Se outra persoa se n é igual a igual a 2, escolleu un número medio. Else if iguais é igual a 3, de alta. Else válido. Entón, imos dicir que foi o noso escenario. Entón, digamos que entramos 4, polo que esperamos válido. O xeito que máis se outra persoa Se visión funcionará se verifica a primeira condición. Non está satisfeito. Por iso, comprobe a segunda condición. Non está satisfeito. Consulte a terceira condición. Non satisfeito. Entón imos para a outra persoa e imprimir válido. A forma como as obras de rede é el compila abaixo en que imos para chamar a unha mesa de salto. A idea principal é que cando entra 4, pode ir inmediatamente para o estándar. Non ten que comprobar am I caso 1? Nope non é iso. Caso 2? Non. Se 3? Non. Defecto. OK, este debe ser o lugar onde eu quere, e logo realizar iso. Non, salta inmediatamente para o estándar. Ou eu entro 2, é inmediatamente indo a ir ao 2 sen necesidade de pasar por un caso. Así, deste xeito, realista hoxe en día iso é Non moito dun ganancia de eficiencia. Normalmente, os ordenadores son moi rápido, e iso non é tan grande. Pero é o caso que interruptores son máis rápidos. Se está realmente intentando para optimizar, usar un switch. ALLISON: Cool. E despois temos operador ternário. Entón eu sei que eu mencionen anteriormente a palabra azucre sintático. Entón é só cousas que fan seu código moito máis conciso. Polo tanto, este é un deses casos. Entón operador ternário é punto de interrogación colonos, como vemos na secuencia de liña s é igual a n maior que 100 punto de interrogação abaixo alto colonos. Entón, basicamente, como funciona isto é que é an maior que 100 é unha condición. Entón eu creo que pode ter sentido. É como facer unha pregunta. É dicir oh, é n superior a 100. Quen sabe? E se é o avaliado como verdade, que vai darlle o primeiro que se listados alí, que é alta. Se non, que vai lle dar baixa. Polo tanto, este é só un realmente simple e xeito eficiente de facer como unha persoa se. Isto é todo o que é iso. E se fósemos escribir este como se outra persoa condicional, sería se n é maior de 100, o regreso alto. Se non, voltar abaixo. Este é só un moito máis forma concisa de escribilo. ROB Bowden: Entón ese exemplo específico sempre que está facendo algo así, este é o estándar onde eu uso ternário con moita frecuencia. Entón, nós non falamos de ámbito aínda pero eu odio ver punto e coma cadea s. Se n superior a 100, s é igual a alta. Else, s é igual a abaixo. Así que o estándar, estas cinco liñas de código, literalmente, 100% do tempo pode ser trasladado para o estaba alí enriba cun ternário. Así, o ternário, unha liña de código. O caso máis, cinco. Isto é un exemplo que eu apuntar cada vez. Iso sería excelente lugar para un operador ternário. É tan limpo. Pero as persoas tenden a non usalo. ALLISON: Leve aínda Gabe. GABRIEL: Entón agora vostedes todos aprendido en clase esta semana que todo nunha ordenador é binario, non? Así como as lámpadas aquí. Pode ser conectado e apagado. E por todo, quero dicir literalmente todo. Algúns números e caracteres e cadeas, e mesmo o código que escribe cando el está feita a máquina código e cousas así, por iso, todo se reduce a 0 e 1 ". E así, cando estamos lidando con números enteiros, os cales é algo que é tecnicamente moi simple, que debe ser capaz de facer cousas como engadila los, o que é probablemente unha das cousas máis simples podes facer para dous enteiros, non? Así, a suma ea resta funciona como funciona en notación decimal, excepto aquí é binario, non? Por iso, é na base dúas. Entón engade 1 máis 1. Isto dá a 0, e 1 transporta máis. E só continuar facendo iso, entón agora vén a pregunta máis interesante. Sabemos como representar todos números enteiros positivos, no que o ordenador pero imos facer este exercicio. Finxa que vostedes están todos en 1960 ou algo intentando crear un ordenador, e ten que vir enriba de unha forma de almacenar menos 1, por exemplo, ou calquera menos enteiro para este asunto. Como faría iso? Calquera ideas? Só ten que xogar algo en min. Si? Audiencia: [inaudível] designar unha especial se a súa [inaudível]. GABRIEL: Pode designar unha pouco especial, que pode ser 0 ou 1. Imos dicir que un se é positivo e 0 se é o negativo. E, a continuación, o resto do bit é só para almacenar o número. Legal. Entón, iso é unha idea moi boa. Temos, eu non sei, 200. E se o primeiro bit é ligado, entón é máis 200. Se está desactivado, é de menos de 200. Legal. Só hai un pequeno con este problema, que é, se intentamos resumir as cousas. Entón, imaxine que temos 11111 aquí, e estamos sumando isto con 00100 o que quere. Se os dous sexan positivos, iso é bo. Pero, entón, un dos eles é negativo, como imos dicir que este pouco aquí é aquel que é responsable for-- eu vou facer unha separate-- así que este significa que este número aquí é positivo. Isto significa que unha esta número aquí é negativo, non? Pero, entón, cando está indo suma-los, precisa dunha instrución if dicindo Oh se isto é 0, entón meu suma será algo diferente, non? Polo tanto, hai algo máis intelixente forma de facer que, o que se chama complemento de dous. Entón, basicamente o que nós facer é definirmos menos 1 ser a cousa que se sumarmos a 1 dános 0. Deixe-me repetir iso. Entón, imos dicir que iso aquí é un. Cal é a cousa que naturalmente en enteiros positivos engadido ao que nos dá 0? E se a xente tentar engadir lo a este número? Estamos indo have-- OK, entón imos engadir. Nós imos ter 1 máis 1 é 0, e logo el leva. E entón nós estamos indo a obter 0 novo. Estou quedando confuso. E está indo a obter 0 e 0 e 0, 0, 0, 0. Lotes de 0 do. No último, non estamos vai ser capaz de leva-lo máis, porque imos dicir que estamos lidando só cun byte, entón só 8 bits. Entón, o que o ordenador fai por defecto é só se esquece de que [inaudível] Ok? Entón é iso que se chama complemento de dous. Nós simplemente definir menos 1 para ser o cousa aquí que se engadir que para un lle daría 0. E iso é moi legal porque realmente non precisan tarde para aplicar un tipo de suma dependendo se é un negativo ou un número positivo. Será que isto ten sentido? Entón, unha cousa que nós facemos aquí, a fin de converterse entre un positivo e un negativo enteiro é entón jogarmos todo, e, entón, engade 1 a ese número. Se tentar facelo só sobre un anaco de papel, vai ver que ten sentido. Pero se eu tomar ese número aquí, este é cinco. Entón, se eu Xire todo aquí, polo tanto, 1, 1, 1, 1, 1. Virar, flip, flip. E entón eu podo engadir un a el. Vou ter exactamente menos 5. Ok? Este tipo de ten sentido, porque se tentar resumir iso co número de que tiñamos antes, o que foi-- imos virar iso de novo. Era 101 e moita 0 do. Se tentar engadila los dous números xuntos, vai ter exactamente 0. Está ben. Algunha pregunta? Audiencia: [inaudível] GABRIEL: O que quere dicir? Audiencia: Negativo para positivo [inaudível]. GABRIEL: Non, virar e engadir un sempre. Si. OK, entón personaxes tamén codificado binarios. Temos a táboa ASCII, como tamén viu na clase, non? Entón, é basicamente un mapeamento das cousas. E aquí eu non podo salientar o suficiente que, para un ordenador, e un 65 son literalmente o mesmo. Entón, se eu escribir algo como carbón c é igual a un, eu podería á vez simplemente escriba 65 aquí, e sería exactamente o mesmo, OK? Non hai diferenza algunha. Nós xeralmente tenden a poñer personaxes en variables do tipo. Char, non porque son esencialmente feito para iso, senón porque da convención humana. Pero pode só tratar con números enteiros no canto de variables de tipo char, e vai estar ben. A única diferenza real entre un char c e un i int é un enteiro que ten catro bytes de máis sistemas, mentres un char ten un byte. Son, esencialmente, o mesmo en termos de datos. Entón, o que vai imprimir aquí? Aquí estamos imprimindo un díxito usando printf con máis 1, e só como números enteiros, caracteres pode ser resumida, de forma caracteres poden ser sumados. Polo tanto, este é exactamente 65. Polo tanto, non será 66, e aquí temos 65 máis algo menos grande A, que será, realmente non sei. Pero será exactamente a diferenza entre as maiúsculas e as letras máis pequenas e, polo que nós estamos indo a obter un pequeno, non? Si. Entón, iso vai imprimir unha personaxe que é exactamente este. Boa? Algunha pregunta? Aquí temos unha chea de diferente tipos de variables numéricas. Nós xa falamos sobre int. Float é só un xeito a-- dicir realmente divertido, porque cando eu aprendín programar atrás o día con Python, o primeiro programa que eu xa tente escribir, vin que había unha Tipo de chamada e un tipo chamado float. E a boia foi para todos os números reais. Entón eu preguntei por que Nunca usar un int, entón? Porque se podo usar todo números reais cunha boia, Quere só de deixar de usar ints, non? Porque os números reais son así como máis xenérico. Acontece que este é non é o caso en computadores porque son esencialmente cousas distintas. Entón, enteiros e Floats, o operacións que fai para eles son esencialmente diferentes, porque do xeito que son almacenados, OK? Nós imos falar un pouco pouco máis sobre iso nun segundo. Así dobre é só unha maior flutuación. Normalmente, na maioría dos sistemas, unha boia é de catro bytes, como un int. E unha parella é de oito bytes. Un longo tempo é, en realidade, só un símbolo que engade a un tipo como int. Vostede di long long int coma este. Longo tempo int x para facelo máis tempo. Así, na maioría dos sistemas, que dará oito bytes no canto dos habituais catro. E realmente pode deixar caer a no, polo que pode só dicir longo, longo, e que funciona tamén, OK? Tamén pode facer outras cousas como int sen sinal, ou aínda só non asinado tamén funcionaría. E que faría x ser unha variable como todo é positivo, entón non pode realmente ter efectos negativos números en forma que vimos ata aquí. Entón, seguindo marabilloso punto e precisión flotante. Esa é unha das razóns polas que ten quere usar ints no canto de Carrozas, porque ints son 100% precisos, non? É exactamente ese número. Para puntos flotantes, se din resposta é igual a 1 sobre 10-- Acontece que eu teño neste exacto aquí programa, float.c. Que imprime ata 20 cifras decimais. 1 dividido por 10, e que xeralmente é de 0,1, non? Pero aquí se facemos flotar e despois executalo, vemos que non é exactamente 0,1. É algo 0,149. E por que isto? Porque non pode realmente representar cada único número real posible na memoria porque hai uncountably moitos deles. Entón, nós estamos tecnicamente só é capaz de representan unha cantidade finita deles cunha cantidade finita de datos. Pero é realmente interesante. Agora iso levanta a cuestión de como faría ir sobre a representación esta con anacos, non? Entón, como Carrozas almacénanse? Con enteiros foi fácil. Pero, con coches alegóricos que quere para dar a gama, e quere ser capaz de representar números enormes e moi pequenos números como 0.000001, á vez. Entón, de novo, mesmo xogo. Alguén ten algunha idea de como poderíamos ir sobre a representación flotador na memoria? Só ten que xogar algo. Si, por favor. Audiencia: [inaudível] como se fose dous enteiros e un sendo o [inaudível] e un ser todo despois do punto decimal. GABRIEL: OK, legal. Entón dous enteiros diferentes. Pode ter 12,45, de xeito que é de 12 e 45. Niza. Que ere vai dicir? O mesmo? Si? Audiencia: [inaudível] notación onde separar a base. GABRIEL: A notación científica, si que é xeralmente o que pasa. Entón é iso que se chama mantissa. Iso é o que é realmente o número, e, a continuación, o expoñente é só onde a coma é, non? Entón isto será algo da forma 1, 2, 3, 4, 5 veces 10 ao 4 menos. Eu só entender isso-- si, exactamente. E entón este 10 ao menos 4 é vai definir onde a coma é, OK? No Brasil, usan comas. Aquí vós usar un punto. Así, un punto. E iso é legal, porque entón pode concentrarse lotes dos seus bits sobre este cara aquí, na mantissa, e entón iso é será a súa precisión real. E pode facelo en decimal ou a base do sistema binario. Existen diferentes formas de aplicar iso. Preguntas? Si? Audiencia: Cantos lugares tras o decimal [inaudível]? GABRIEL: Esta é unha cuestión complicada, porque nunca é realmente 100% preciso, porque como ve aquí, para algúns números é 100% preciso. Eu creo que se poñemos 0,5 aquí, que será o 100% preciso. Será 0,500000. Entón, nese caso, é perfecto. Pero noutros casos, é moito menos perfecto. Na miña experiencia, como ata catro, cinco cifras decimais é moi preciso. Se usar unha parella, que vai ser moito máis preciso do que iso, OK? ROB Bowden: Entón, só para xogar máis algún contexto en coches alegóricos, Nunca me lembro 100% como o especificación de Carrozas realmente funciona, pero eu fago ten lembre sempre que flota comeza a estar confuso. Así, a idea é que cando comeza realmente, números realmente grandes ou realmente, realmente pequenos números, comezamos quedando cada vez peor na diferenciación entre dous coches alegóricos próximos. Entón, como eu gosto de pensar é con punto flotante imprecisión, existen dous flotadores que se eu tentar especificalo los en C, a pesar do feito son números diferentes, van ser interpretado como o mesmo número, porque non podemos almacena-los de forma diferente. Necesitamos usar os mesmos bits. E así, cando nós comezamos a realmente, realmente grande número, falando como 10 ao 300 ou algo, é nese punto que de 10 a 300 ou a 5 veces 10 elevado a 300 non poden ser diferenciados desde 7 veces 10 elevado a 300. Entón esta é unha diferenza moi grande entre os dous números. Pero entón, cando comeza abaixo para as cousas normais de alcance, tende a ser moi bo en diferenciación. E entón cando comezar realmente pequeno, tamén está quedando moi mal de novo. Así como unha morea de 0.0000, el está moi mal. GABRIEL: Si, así que unha nota rápida. Nunca faga iso. Nunca probe comparar flota usando iguais iguais, porque, mesmo se son case a mesmo, case o mesmo non é o mesmo. Entón, o que adoita facer é vostede subtrai eles, tomar o valor absoluto do que, e ver se iso é menor que 0,0001, ou algo así, OK? E legal. Eu coñezo unha morea de persoas teñen algunha experiencia en Java, especialmente aqueles que fixeron AP ciencia da computación, non? E Java é unha linguaxe de que na súa maior parte en base a C, el ten unha parella moi grandes diferenzas. Pero para loops e IFS, e cousas do tipo que, son todos a mesma sintaxe. Eu teño algúns programas aquí para amosar isto. Así, por exemplo, un Ola Mundo simple. Este é Ola mundo en C, o que caras son definitivamente familiarizado con, e isto e este é en Java. Así, en Java, temos esta clase pública, Ola mundo, e public static void args principal, e cordas. Os argumentos de cordas van aparecendo en C moi pronto. Pero non imos ir alí aínda. Agora temos baleiro aquí, o que significa que o principal non é tomar calquera argumentos. E entón temos System.out.println, e iso é o especie de equivalente para printf. Aquí nós realmente non precisa a barra invertida n porque impresión ln fai isto para vostede. El engade á barra invertida n ao final da liña. Pero se vostede poñerse en algo así como un para ti verás que están practicamente o mesmo. Así arranque, eo condición ea actualización é-- perdín un espazo aqui-- son practicamente o mesmo, agás Java ten como máis algunhas cousas de alto nivel. Aquí podemos facer máis eu e Java automaticamente facelo eu aquí, que é un enteiro, nunha secuencia, e, a continuación, engadir o dúas cordas xuntas. Aquí en C que necesitamos facer o &% d. A liña aquí, o de parece exactamente o mesmo. E se miramos se, os IFS Tamén parecen exactamente o mesmo, non? Así, os verdadeiros grandes diferenzas son nas cousas que ve aquí. Public static, nula e entón clase pública se. Así Java ten o que fai chamado dunha máquina virtual. E iso é moi fortemente sobre a base do que chámase programación orientada a obxecto, que é moi, moi común paradigma para a programación de hoxe en día. E esa cousa de clase é o que ve, algo de orientación a obxectos, se crear unha clase e entón pode derivar de obxectos desa clase. Non imos falar moito moito sobre iso na CS50, pero iso é sempre algo realmente legal, especialmente se quere ir desenvolvemento web máis sofisticados ao final do curso, como presentar o seu proxecto final e algunhas estruturas agradables e outras cousas. Entón, basicamente, a idea é que non quero re-aplicar algo, así se crea algo que é moi xenérico, como a forma, e, a continuación, vostede crea distintas formas a partir del, e, a continuación, a partir de cada un dos estas formas, crea algunhas formas máis específicas de cada tres dimensións ou algo parecido. E eles teñen esa xerarquía que herdar os outros, de xeito todas as funcións e todas as variables que o gran formato ten aquí, todos estes van ter, e todos estes son terá, e así por diante e así por diante. Entón esta é a idea básica. C non ten iso, pero C ++ non ten este tipo de recurso. E Java está fortemente influenciada por orientación a obxectos, é por iso que ve clase aquí o tempo. E a outra cousa é esta máquina virtual Java. Entón iso, eu creo, é unha idea moi intelixente. Entón, o que a xente que java inventou fixo é eles non queren compilar seu código dúas veces se tivesen de executa-lo nun ambiente Windows, ou un Mac, ou Linux, entón o que eles fan é que literalmente correr algo así como o dispositivo, pero realmente non vexo iso a suceder. Entón eles executar unha máquina virtual dentro do seu ordenador, o que é basicamente como un mini-ordenador. E esa operación O propósito de sistema na vida é só para executar o que se chama código de bytes. Entón, en vez de en C, o xeito no que o faría compilar este é facer se, a continuación, executa ./if. Esquecín a barra invertida no. En Java, faría primeiro Java C para compilalo lo, if.c. Non é de C. dot java. E entón tes que correr non ./. Comeza este novo ficheiro if.class, pero non pode realmente realizar if.class agora só como fixemos antes. Este non é un executable. Ten que correr. Ten que alimento-lo en un programa chamado Java, e que o programa é a máquina virtual, e despois fai if.class, ou se. Si. E entón funciona. OK, entón que é o tipo de máquina virtual pasando. C non ten iso, entón se eu fose poñer este programa nunha máquina Windows, que non estaba a funcionar en C. En Java que fai. Preguntas? Legal. É dicir, se a sección super para hoxe.