Section 1: More Comfortable

Section 1: More Comfortable

>> ROB: Muy bien. Bienvenidos a la primera sección. Soy Rob. >> JOSÉ: Soy José. >> ROB: Entonces vamos a bucear a la derecha adentro A primera hora de hablar dees el aparato. Así que espero que la mayoría de ustedes tienendescargado ya. Pero puedes ver las instruccionesen cs50.net/appliance. Oh dios, ahora soy consciente de sí mismo. Todavía oigo. >> JOSÉ: Wow, suena comoes desorientado. >> ROB: Así que algunas personas han estado teniendoproblemas con él, así que no espere hasta que el último minuto del problema establece entratar de resolver el Appliance y descubrir que no está funcionando. >> JOSÉ: ¿Y si algo no está funcionandoy usted necesita ayuda, usted puede ir a cs50.net/discussion dondetener un foro en el que puede enviar sus preguntas. Y vamos a llegar a ellos con el tiempo. >> ROB: Muy bien. Así que esto es lo que el aparatose parece. Una vez más, es sólo una forma completamente separadasistema operativo que se ejecuta dentro de cualquier sistema operativo quese están ejecutando en su computadora portátil. Y las cosas principales que usted lo va a hacerestar usando son gedit. Así que espero que esto ya tieneconvertido en un sitio familiar. El terminal. >> Y también puede ejecutar Chromedentro del aparato. Ha habido un par de personasque han informado de Internet No trabajar en el aparato. Y algunos de ellos sólo han asumidoque no se supone que es Internet en el Appliance. Pero eso sí, se suponeser Internet. >> Voy a decir ahora mismo, pero no es asírealmente significa nada. Si el internet no funciona,esto es lo que tienden a necesitar correr a arreglarlo. Si usted está teniendo problemas de Internet, no serecordarlo, sólo publicarlo en Discutimos, y lo diremos, ejecute eso. Pero Internet debería estar trabajando. >> Así que la única otra cosa - sí, nadalo demás es realmente relevante. Pero yo sólo quería señalar que - ver en esta esquina inferior derecha. Así que cada uno de sus aparatos debentener una dirección IP. Y más tarde en el semestre, esta IPdirección será más relevante cuando que está trabajando en la web p-set, porqueusted será capaz de acceder a la sitio web que está trabajando desde suChrome local utilizando esta dirección IP. >> Pero lo que me gusta utilizar la dirección IP- y usted no tiene que hacer esto, sólo quiero señalarlo - está aquí. Así que esta es una ventana de terminal enmi Mac, esto no es en el Appliance en absoluto. Y usted puede buscar lo queeste comando hace. Pero voy directamente a SSHa mi Appliance. No sé lo que la IP es. >> JOSÉ: 168 - >> 168.224.1.0. >> ROB: Así que una vez que he terminadocon esto, ingrese Ahora, básicamente, esto es idéntico a unventana de terminal dentro de mi Appliance. Así que casi nunca funcionó realmentedesde dentro del propio aparato. Acabo siempre he funcionandoen el fondo minimizado y SSHed en ella. >> El problema con esto es que no se vapara ser capaz de utilizar fácilmente gedit directamente desde esta. Pero si quieres ser un verdadero frescohacker, entonces usted debe acostumbrarse a una comando de la línea de edición de texto de todos modos. Así Vim y Emacs y Nano, todos estosdiferentes alternativas. Nano tiende a ser el más fácil. Y creo que no tieneresaltado de sintaxis. Oh, no, es totalmente hace. Así que usted puede utilizar Nano, porqueque uno es bastante fácil. >> ¿Ves todos estos comandosen la parte inferior. Este pequeño símbolo zanahoria. Si usted no ha visto antes, se leProbablemente verlo mucho ahora. Por lo general, significa la zanahoria control,como la parte inferior izquierda de tu teclado carácter de control. Así que aquí me está diciendo aquí - oh, no está cortado si agrandar Así de control, X es cómoVoy a salir. Y dice que puede golpear Y paraSí, para el ahorro, N para No. Así que eso es Nano. >> Vim y Emacs tienden a ser ligeramente máscomplicado y abrumador. Pero usted puede acostumbrarse a él,y luego te va a encantar. Así que eso es todo. >> JOSÉ: No hay necesidad de hacer eso. >> ROB: Si. Usted es libre de usar gedit para laresto del semestre. Así que cualquier pregunta relacionada a aparatos domésticos? O usted tiene alguna idea sobre qué másnecesita ser hablado acerca el aparato? Sí. >> ALTAVOZ 1: Cuando SSHed en sucosa, fue el carmesí contraseña? >> ROB: Si. La contraseña para casi todoen el aparato que está pasando ser carmesí. >> ALTAVOZ 2: Instalar como un verdadero IDEen el aparato, ¿funcionará? >> ROB: Me imagino Eclipse tiene unVersión de Fedora, en cuyo caso, sí, usted puede hacer eso. Probablemente no es realmente vale la pena. >> ALTAVOZ 2: OK. Así que es probablemente más fácil si queríautilizar Eclipse, sólo tiene que utilizar el nativo y a continuación, subir a - >> ROB: Oh, eso también es probablemente más fácil. Pero usted puede conseguir que funcionedentro del aparato. >> JOSÉ: ¿Y para la cámara, la preguntaera, puede instalar otro IDE en el interior del aparato? >> ROB: Eclipse ser unejemplo de una IDE. ¿Alguna otra pregunta Appliance? Está bien. >> Así que ahora vamos a pasar a la línea de comandoscosas relacionadas con la interfaz, de modo CLI. Y de nuevo, yo sólo voy a trabajar enaquí, porque este es idéntica a trabajando dentro de una ventana de terminaldentro del aparato. ¿Cómo está buscando esa fuente? ¿Eso es lo suficientemente grande? Está bien. >> Así que hay una gran cantidad de comandos queusted debe conseguir bastante utilizado para lo largo del semestre. Los dos grandes para navegar son ls, listalos archivos de este directorio, y cd, para cambiar de directorio. Así que puedo cambiar de escritorio y luegoun patrón muy común es cd a un directorio e inmediatamente lslo que está en el directorio. >> La gente también a veces no se dan cuentaque la finalización Tab es una cosa. Cd Así como, vh, y luego me golpeó Tab. Casi nunca escribo a cabotoda la cosa. Y luego si sigo golpeando Tabde nuevo, que va automáticamente Inicio Listado por mí. Así que puedo cd vhosts, host local. Y eso es sólo ir a - en caso de que usted no ha oído hablar del términoantes, el directorio es sólo otra palabra para la carpeta. Así que ahora si que se ve - vamos a traer eso a la parte superior. >> Así que ahora si ves entre paréntesis, quever la tilde poco, slash, vhost, recortar, host local. Así que la tilde, que se refierea mi directorio personal. Es un directorio que estáen cuando SSH pulg Es el directorio que está en cuandousted abre un terminal. Es el lugar donde empezar. Y así estoy dentro de mi directorio home,y yo estoy dentro del host virtual directorio dentro de mi directorio home. Y entonces yo estoy dentro de lo localsede de directorio dentro de eso. >> Por lo que algunas otras cosas útiles con cd - o bien, en general, por lo que siempre dotse refiere al directorio actual. Cd, de punto es un comando bastante inútil. Pero eso está cambiando a ladirectorio actual. Una más útil en términos decd es punto, punto, que es sólo tiene que ir de un solo directorio. >> Y tenga en cuenta que estos - Quiero decir alias, pero estossímbolos, punto y punto, punto, los trabajos para casi cualquier comando que eresva a estar pensando en correr. Así como el cd es probablemente donde podrásel uso de la mayoría, pero estos no son cosas que simplemente cd entiende. Es más o menos algo que su totalidadlínea de comandos entiende. Una gran cantidad de programas de comprenderpunto y punto, punto. >> Así que los otros los útiles - cd, Dash. Así que eso me va a llevar a laúltimo directorio que yo era pulg Así que a veces voy a hacer algo así,oh, estoy trabajando aquí. Y veo un error con algo, yIré a investigar yendo a algún directorio aleatoria en alguna parte. Y yo no sé si va adéjame entrar allí. Lo hará. Así que hago lo que quieroen este directorio. Bla, bla, bla, bla, bla. Y yo estaba como, ¿sí, quieropara volver a donde estaba. cd, guiones y me trae de vuelta. >> Así que me voy a tirar un montónde estos en el día de hoy. No espero a memorizartodos ellos. Es una especie de sólo séde que existen. Y luego, más adelante, cuando usted es como,hmm, quiero volver a la directorio que estaba justo en, oh, espera,existe algo así. Usted no tiene que sólo tiene que escribiren todo el directorio de nuevo. >> JOSÉ: ¿Y el tiempo se acabautilizarlos una y otra vez, y se convertirá en la memoria muscular. >> ROB: Si. Entonces, ¿cómo he dicho antes, que tildees su directorio personal. Así que puedo cd, tilde. Pero yo ni siquiera tengo queeso si sólo - Voy a volver al directorio de modoque no es un ejemplo de sentido. Pero si acabo de hacer cd, eso es también lamismo que, vaya a mi directorio home. Hago Comando, K. >> JOSÉ: También puede escribir clara, lapalabra, y se debe desactivarla. >> ROB: Y creo que también de control,L también lo hace. Así que un montón de diferentes maneras. Creo que hay algunas diferencias en elclara y Control, L se acaba realmente empujar a la parte superior eTodavía puedo retroceder. Comando, K destruye literalmentetodo, y tú no puede moverse hacia arriba. Por lo menos, eso escómo funciona en iTerm2. No sé cómo otras cosas - oh. >> Con sshing, así que si estás en Windows,vas a tener que descargar PuTTY con el fin de SSH, ya que Windows no lo hacetener como una herramienta integrada SSH. De Macs, puedes simplemente SSH directamentedesde una ventana de terminal. Aceptar. ¿Preguntas? >> Con ls, así que algo se acostumbre acon la mayoría de estos comandos es - bien, sólo voy a hacer una. Ls, tablero, l. Así tablero, l es lo que vamospara llamar a una bandera para ls. Y muchos de estos comandos tienen banderasque se puede pasar a ellos. Así que en este caso, guión, l es una banderaque dice que me dará una completa lista de toda la informaciónde estos archivos. >> Así que vemos aquí que el escritorio eramodificada el 30 de julio a las 12:54. Descargas se modificó al 6 de septiembre. Estos son el tamaño actual ybytes de estos directorios. Usted no tiene que entendertodo esto. >> Esta cosa de la izquierda, estos de drwx,que se convertirá en mucho más relevante más tarde, cuando usted tiene que hacer frente - que tiene que ver con quién tiene permisosa ver estos archivos. Y por lo que si usted no era el único usuario eneste equipo, usted sería capaz de por ejemplo, OK, yo debería ser el únicopermitió mirar a este archivo o estoy va a permitir a todosmirar este archivo. Así que otra persona en mi equipopuede leer este fichero. Yo ni siquiera sé lo que esto -¿Qué hace esto? >> JOSÉ: No estoy muy seguro, en realidad. >> ROB: No tengo idea. >> JOSÉ: Pero si usted no sabe, no hayun comando útil que puede utilizar para decirle lo que significa que la salida. Y si escribe en el hombreantes de la orden - por lo que M-A-N. ROB: Hombre. Así que el hombre es otroesto es muy útil. Y el hombre, ls. Así que las páginas de manual, que tienen tantocomandos que se va a utilizar en la línea de comandos, y también tienenfunciones que serán relevantes con C. Así que usted puede el hombre - y no hice caso 3. Pero man 3 printf va a traerhasta la versión C de printf. Pero si acabo de hacer el hombre printf, esto esir para que aparezca el comando printf eso ocurre en la línea de comandos. >> Así que el hombre, ls. Las páginas del manual pueden ser bastanteabrumadora. Aquí, sin embargo, verá este listadode todas estas banderas que LS entiende. Así que si vamos a lanzarse, l, y - Yo sólo voy a tirar esto a usted. Pero con el fin de buscar, usted quierepara golpear primero la cuestión marca o botón de barra. Así que recortar. >> Y entonces puedo buscarpara lo que quiera. Así que voy a recortar para el tablero, l. Y allí estaba. Así que utilice un formato de listado largo. Eso no ayuda a averiguar quéesa columna particular, quería decir, pero me asumir en algún lugar de aquíello explicaría eso. Así que utilice las páginas del manual de cualquier comandoque no entiende de inmediato. >> Estoy bastante seguro de que usted puede incluso hombre, hombre. Una interfaz para la líneamanuales de referencia. Ah, una última que es quizás un pocoes LS pertinentes, tablero, a. Así cuenta si acabo de hacer ls,Consigo estos cinco archivos. Si hago ls, guión, a, Iconseguir muchos más archivos. Así que la cosa en común entre todos estosnuevos archivos es el punto de antemano. >> Así que la convención es que un archivo quecomienza con un punto está oculto. ¿Así que no quieres ver ese archivo,no quiero tener que meterse con tu lista de directorios. Es sólo cuando se pide de manera explícita,bien, ls, guión, una, mostrarme. La una es sinónimo de todos los archivos,incluyendo las ocultas. Por lo que algunos otros comandos. Oh, las preguntas en ese momento? Sí. >> ALTAVOZ 3: Cuando usted hace un ls,a, ¿cuál es el punto, punto? >> ROB: Oh. Así que esto es lo que yo estaba hablando. Es lo mismo cuandoPuedo gustaría cd, punto, punto. Así que, técnicamente, punto y punto, punto sonarchivos que existen en cada uno de guía donde el archivo de punto se refiereen el directorio actual. Así que si yo cd, punto, yo sólo voypermanecer en el directorio. Y punto, punto siempre se refiere a laanterior directorio de uno a nivel. Así que si entro en troncos y ls, guión, al,Veré punto, punto. cd a punto, punto me lleva al directorio anterior. Sí. Aceptar. >> Así que otra muy importantecomando es rm. Así que eso es lo que vamosa utilizar para eliminar. Y déjame en realidad hago otracomando primero. Así mkdir. Mkdir es cómo se puedecrear directorios. Y voy a crear un directorio temporaly entrar en ese directorio temporal. Y como era de esperar, está vacío. Pero si ls I, guión, una, todavía tienen puntosy punto, punto, porque se refiere a punto el directorio actual. Y punto, punto se refiere a ladirectorio anterior. Y los siempre existirá sin importarel directorio que se in >> Y este es un completamente innecesariocomando, pero el tacto. Yo sólo lo uso, porque esuna manera fácil de crear archivos. Así que toque una, toque b, toque c es sólova a crear tres archivos llamados a, b y c que son completamente vacía. Así que el punto de crearme los de laprimer lugar es sólo para que rm es cómo podemos eliminarlos. Así rm, a. Se va a preguntarme, retirefichero regular un vacío? Y luego voy a decir que sí. >> Por lo que si estoy seguro que quieroborrar ese archivo sin tener que estar solicite, retire archivo vacío regular?,a continuación, rm, guión, f va a ser el bandera que dice, forzar la quita sinincluso me llevó, oh, ¿estás Seguro que quiere eliminar el archivo? Sí, estoy seguro. Así rm, guión, fb se acabahacerlo sin preguntar. >> Así que vamos a hacer algunas más directorios. mkdir, tmp2, cd, tmp2,tocar un toque b. Aceptar. Así que ahora me quiero quitartmp2 como un directorio. Tmp2 Así rm. No se puede quitar tmp2,es un directorio. Así que la cuestión aquí es que no rmtrabajar de inmediato en los directorios. Sólo ha significado para archivos comoarchivos que no son directorios. >> Y así, lo que podemos haceraquí es rm, guión, r. Eso significa de forma recursiva, lo que podríano significa nada para ti todavía. Pero cuando se llega a la recursividad,que va a decir más. Así rm, guión, r, tmp2 va arecursivamente entrar en ese directorio. Así descenderá al directorio tmp2? Sí, vamos a entrar en eso. ¿Queremos eliminar tmp2 / a? Sí. ¿Queremos eliminar tmp2 / b? Sí. Ahora queremos eliminarla tmp2 directorio? Sí. Y por lo que ahora el directorioy todo dentro de que se ha eliminado. >> No es técnicamente un comando rmdirque se puede utilizar para eliminar directorios, pero sólo funcionaen los directorios vacíos de todos modos. Y al ver que, vamos ahacer mkdir, tmp2 nuevo. Tmp2, toque a. Aceptar. Así que si trato de quitar dirtmp2, que va adecir, el directorio no está vacío. Así que casi nunca uso el removecomando dir de todos modos, porque rm, guión, r funciona en los directorios vacíosy los directorios no vacíos. >> Y también, si yo no quiero tener quepasar por todo ese proceso de descender en el directorio yextraer cada archivo individual, rm, tablero, rf, tmp2. Y ahora se ha ido. >> Algo que tener cuidadoaproximadamente es rm, guión, rf. Y hasta me da miedo que escribirla,porque si accidentalmente pulse Enter o algo así. Así rm, guión, rf, tilde haría, sinme llevó, el f no solicita me, eliminará automáticamentemi directorio entero y todo en él. Así que usted puede pensar que esuna estupidez. Y bueno, lo es. >> Pero puede suceder muy fácilmente poraccidente si, por ejemplo, quería eliminar mi barra, directorio vhost. Y justo en la tipificación rápida,Accidentalmente hacer esto. Eso eliminará de forma recursiva tanto midirectorio principal y el directorio vhost en este directorio particular que sólopasa a no existir en estos momentos. Pero esto todavía eliminarmi directorio entero. Por lo menos al no tener un f,me incitaría a primera. Y me gustaría ser como, oh, no,no quiero hacer eso. Pero la gente, slash, incluyendome inclino a entrar en el hábito de siempre-ing rf. Incluso los archivos regulares que sólo puede i rm,c, tiendo a sólo rm, guión, rf, c. Sólo ten cuidado cuando estés-ing rf. >> ALTAVOZ 4: ¿Qué hacer C? >> ROB: C es que estoy hablando de ese archivo CEn este directorio, que rm, c. >> JOSÉ: ¿Y que es más peligroso, si utilizauna estrella, se refiere a todo en el directorio. Así que lo que comúnmente tienden a hacer es que lo haréEntro en un directorio y quiero eliminar todos los archivos allí. Así rm, guión, rf, estrella. >> ROB: Si. Rm, guión, rf, estrella. >> JOSÉ: ¿Y si usted no tiene cuidadolo que está en el directorio - Yo no estaba en la temperatura, pero yo estaba accidentalmenteen mi directorio home, entonces voy a quitar todoen mi directorio home. Y realmente he hecho eso antes, yCreo que usted ha hecho esto antes o Jay ha hecho eso antes. >> ROB: He eliminado accidentalmente - así que ignore ese comando para un poco. >> JOSÉ: No es divertido. >> ROB: Así que en el directorio bin slash es unmontón de archivos binarios, donde habrá ser los familiares como sonido metálico. Bueno, clang y, básicamente, todos elloscosas que estoy corriendo en el comando línea están en este directorio bin slash. >> JOSÉ: Al igual que ls está aquí. >> ROB: Así punto, raya vertical, ls selistar este directorio. >> JOSÉ: Rm es también en este directorio. >> ROB: He rm accidentalmente, bin rf-ed,que eliminó cualquier comando que pude posiblemente desear. Que luego me reinstalación de unnuevo Appliance en ese punto. >> JOSÉ: Así que tener mucho cuidado alutiliza este comando. >> AUDIENCIA: [inaudible]? >> ROB: Si. Eso también es un mal hábito para entrar. Si te fijas, ahora soy - así, no se puede notar, peromi zoom-in quizá pueda. Así que ahora soy root @ electrodoméstico. Así jharvard es el usuario que queremosusted siempre esté utilizando. Root es el usuario que tiene permisopara no hacer absolutamente nada. >> Así notar cuando estoy jharvard,si trato de cd - lo que es un directorio que? Oh, la raíz es un buen ejemplo. Así cd, raíz. Permiso denegado. Porque si nos fijamos en este listado - y otra vez, usted no tiene quetotalmente de entender esto. Sin embargo, estos tres guiones que opinanque no dejes que ningún otro usuario en este directorio. Y el directorio pasa aser propiedad del usuario root. >> Así que el hecho de que soy jharvard y nouno que no es root es permitido en este directorio, eso significa que soyvas a obtener permiso denegado cuando tratar de cd en él. Así que cuando estoy raíz, tengo permiso parahacer absolutamente cualquier cosa, incluyendo borrar archivos esencialespara el aparato y destruir la cosa entera. >> Así que es un mal hábito para entrarsimplemente pasear por su sistema operativo como root. Yo lo hago de todos modos. ¿Preguntas? Y me salgo de la raíz, quedo como jharvard. Aceptar. >> Comandos más relevantes. Así que volviendo a nuestra temperatura, lacomando mv es sinónimo de movimiento. Usted puede mover un archivo. Ahora queremos llamarlo b,por lo que ahora se llama b. O tal vez queremos avanzarb de un solo directorio. Así que ahora vacíos de este directorio. Voy a volver a mi directorio personal, yvemos que b es aquí, porque el directorio personal era un directorio desdeel directorio que b había estado adentro >> También hay cp. Así cp es copiar súper sección,punto, el texto. Puedo llamarlo s, punto, texto. Ahora tenemos dos súper sección,punto, texto, y s, punto, texto. Esto también funciona en los directorios. Me RF-ed un solo archivo. Así CP - Bueno, primero vamos a tratar de cp, tmp, tmp2. Así omitiendo directorio tmp. Así similares a RM, el comportamiento por defectoes que no funciona en los directorios. >> Y de nuevo, similar a RM, el valor por defectocomportamiento - así, conseguir que funcione con los directorios es un guión-r de distancia. Así que copiar de forma recursiva la temperaturadirectorio en tmp2. Y lo que ahora tenemos tanto tmp y tmp2,y que no es útil ya que tmp estaba vacía en el primer lugar. Tmp2. >> Ahora vamos a copiar tmp en tmp2. Y vemos que tmp2 también tiene el archivouna, porque el directorio y todo dentro de esedirectorio fue copiado. Y eso puede ser un poco útilsi, digamos que usted está trabajando el problema de establecer uno - o en realidad, los boletines de problemas posteriores sonaún más importante, ya que será un manojo enterode archivos y las cosas. >> Pero lo que desea, por una fracción deen segundo lugar, usted es como, bien, estoy va a intentar algo diferente. Permítanme copio toda mi pset1directorio en la copia de seguridad de modo que si pset1 Me acaban arruinar las cosas, no puedovolver a mi directorio de copia de seguridad. Hay formas más apropiadas deversiones de copia de seguridad de su código, pero esto siempre es una forma rápida de hacer sóloAsegúrese de tener una copia de algo que está a punto de modificar. >> Así que echo es también un comando de una sola vez quetipo de sillily se acaba de imprimir en la línea de comandos exactamente loque quería hacer eco. Así que echo hola. Sólo vamos a imprimir hi. Echo hello world. Publicaremos hello world. Ahí entra en uso cuandoiniciar la combinación de los comandos. >> Y de nuevo, no esperes a que en su totalidadentender esto todavía, pero es algo que ver. Y entonces, si usted está buscando en Google para ver ejemploso te das cuenta de que quieres hacer algo, puede ser útil. Así que vamos, como un ejemplo,así que ls, tablero, l. Así que aquí veo la salidade ls, guión, l. Y yo digo, OK, quieroalmacenar en un archivo que. Toda esta producción aquí, quieroponer en un archivo separado. >> Así que este pequeño símbolo mayor quees lo que vamos a llamar. Estamos reorientando lade salida en un archivo. Vamos a llamar a la bla archivo, porque eso eslo que yo suelo llamar siempre él. Así que ahora vemos que tenemos unpresentar bla aquí. Y si lo abro, me encargaré de que esexactamente de la salida del comando que me acabo de encontrar. Y del mismo modo, se puede - si se trataba de la salida a un archivo, estees tomar la entrada de un archivo. ¿Qué es una orden que yo - >> JOSÉ: Creo que se puede utilizarmenos o más, probablemente. >> ROB: Pero ¿qué tal un poco menos bla? No se. Si usted entra en este escenario, al igual quehay conjuntos de procesadores que es útil para. >> JOSÉ: Se puede canalizar en eco. Pipe el archivo en eco para verlo. >> ROB: Es la tubería. >> JOSÉ: Lo siento. >> ROB: Muy bien. Así que esta es la salida a un archivo. Se trata de obtener el texto del archivoy se la entrega al programa. Y también se verá este tipo. Así que esto es una especie de hacer ambas cosas a la vez. Y, de hecho, voy a introducir dos nuevoscomandos sólo para hacer uso de ella. >> La historia es un comando muy útil que es sólova a imprimir una lista de nada nunca me he encontrado una línea de comandos. Así que aquí vemos todo lo que tengoestado funcionando todo este tiempo. Mucha de ls. >> Y otro comando útil es grep quesu propósito es buscar a través de texto en busca de patrones, así,en busca de cualquier cosa que quiero buscar. Y así un uso útil aquí es, digamosqueremos aprovechar la historia. Y quiero que buscar los comandosdonde I - ¿Qué es un una utilidad para buscar? >> JOSÉ: [inaudible]? >> ROB: ¿O vamos a ver para todostoca, por cualquier razón. Así que esto es lo que se verá así. Y usted no tiene que completamenteentender eso. Pero la idea es que aquí, la historia está dandola misma salida que hizo aquí donde se imprima la totalidadhistoria de todo lo que siempre he corrido. Entonces estamos pasando eso - así que en lugar de imprimir a la pantalla,queremos transmitir que a la grep comando que está buscandotodas las instancias de la palabra toque. >> Y así, el uso de esta combinación de laherramientas de la historia y grep, puedo ver, OK, he aquí todos los comandos que hecorrer, y aquí está un tanto común. Estamos en la parte inferior. Y también me ha de dar la ordenAcabo de funcionar que tenía el palabra toque en ella. Sin embargo, la tubería es una cosa muy útilpara combinar múltiples programas. Y, de hecho, es un acceso directo para alquilerme la historia salida de presentar bla, y déjame grep usando el bla archivocomo lo que quiero para mirar por encima. Así que la tubería es sólo un atajopara esos dos comandos. Sí. >> ALTAVOZ 4: [inaudible]? >> ROB: Si. ¿Qué es - Oh. Vamos a probar. Así gato, perro, pez. Así que quiero a grep. Dash, r, de nuevo, va a serrecursiva, por lo que quiero descender todos los directorios. Quiero grep recursivamente para todos -y vamos a ver si temporalmente esta fuera del camino. Me haga caso. Aceptar. >> Así que quiero a grep temporalmente paratodas las instancias de la palabra pescado. Así que aquí lo que estoy haciendo es greppingrecursiva para la palabra pescado. Y la estrella significa sobre todo estoarchivos de este directorio. Y por lo que me dio un permiso denegado,porque no se le permite leer que archivo en particular. Pero encontraron peces en el archivo, de prueba. >> Yo también podría decir que, en concreto, sóloque desee ver en el bla archivo, en cuyo caso no encontrará nada. Yo sólo quiero mirar en el archivo, de prueba. Encontrará los peces. Es un comando muy útila saber en general. Hay algunas alternativas a grepque se supone que son más Programador amable, pero tiendotodavía recurrir a grep. ¿Preguntas? Aceptar. >> ¿Existen otros comandos? Oh. Sólo una sola vez una que siempre meencontrar a ser divertido es CAL. Así notar cuando estoy en esta hermosamodo de pantalla completa, no tengo ni superior como barra de herramientas o cualquier cosa. Así cal apenas me da un pequeñocalendario que sea adecuado ahora cortada, supongo. Pero poco agradable de comandos. >> JOSÉ: Es [inaudible]. Otros comandos que pueda tenervisto incluyen sonido metálico y crea. Vamos a ir sobre ellos enmás detalle más adelante. Pero si usted ha estado trabajando enla PSET, usted debe ser familiarizados con los. >> ROB: Muy bien. Preguntas sobre la línea de comando cosas? Está bien. Así que vamos a pasar a algunosCosas relacionadas-C. Variables matemáticas. Aceptar. Así que al igual que tuvimos matemáticas en Scratch,también puede utilizar las matemáticas en C. >> Antes de llegar a eso por completo,por lo variables. Recuerde que cada vez que se declara unavariable, como int o float y x, que hay que darle el tipo antesel nombre de la variable. Así que los tipos que hemos visto hasta ahora son int,float, double, mucho, mucho, que me en realidad no sabemos si hemosvisto que hasta ahora. >> Hay algunos otros. Hemos vemos caracteres. Hay pocas palabras, que es como si fuera elopuesto de largo a largo en donde está más pequeño que un número entero. También hemos visto cadena. Entonces, ¿qué hay de especial en la cadena? ¿Por qué iba yo a decir que esno es como int? >> ALTAVOZ 4: En realidad, no existe. >> ROB: Si. Así que la única razón por la que tenemos cadenaes porque cuando lo haces hash, incluir cs50.h. Y vamos a ver ejemplos de esto más tarde -oh, que no maneja tan bien - donde cs50.h está haciendo algoa lo largo de las líneas de texto def, estrella char, string. >> Así que eso es decir que ni siquierasabe lo que es una estrella de carbón todavía. Pero esto está diciendo que queremos cadena. Cualquier lugar que ha estado usando cadena,podría haber estado utilizando estrella char, que en realidad es un tipo queexiste en el lenguaje C. Pero ya llegaremos a eso. Ah, y que va a la derecha de nuevo. Neat. >> Así mismo con booldonde la verdadera y la falsa. Eso no es realmente un tipo incorporado en C.En su lugar, es solo, tiene esto que el valor cero? Luego sólo tendremos que consideramosque es falsa. ¿Esto tiene el valor - así, tiene esto que cualquiervalor que no es cero? A continuación vamos a considerar que es verdad. Así que una es verdadera, dos es verdadera,nada distinto de cero es verdadero. Así que estos son los que. Las preguntas sobre la declaración de variables ytipos de variables y todo eso? Sí. >> ALTAVOZ 4: Por largo tiempo, en el libro,que dijo que no tenía por qué ser largo long int. Pero funcionará igual de largo tiempo? >> ROB: Así que estos modificadores de tipo. Así int x. Así también podemos decir unsigned int x. Podemos decir short int x. Podemos decir long long int x. Pero casi ninguna de esas cosas que meacaba de decir, unsigned int, short int, int largo plazo, usted puede deshacerse deel int y que sólo asumirá que te referías a int. X lo tanto sin firmar, que sólo significa - usted sabe cómo normalmente con un int,se puede decir x es igual a 3 negativo? Con un int sin firmar, no se puede. >> JOSÉ: Y de nuevo, para la cámara, elpregunta era, ¿cuál es la diferencia entre long long inty sólo el tiempo largo? >> ROB: Si. Así lo haré casi nuncaescribir long long int. Voy a escribir mucho, mucho. >> JOSÉ: ¿Alguna pregunta? >> ROB: OK. Pequeño recordatorio Que tonto de que es comodeclaramos una variable y inicializamos la variable y declarar otrovariables e inicializar todo en un solo paso. Así que la declaración de la variable yla variable de inicialización no tienen a, pero puede ser en la misma línea. >> Así que tenemos los operadores matemáticos estándarque usted está acostumbrado a - más, menos, dividir el tiempo. También hay módulo, que ya veremos. No hay, por lo menos enC, un poder incorporado operador de exponenciación caret. Bueno, hay un operador de intercalación,pero no es el poder. >> JOSÉ: Pero no es la exponenciación,Sí. >> ROB: No utilice el símbolo de intercalaciónasumir que esto significa como cuadrado o lo que sea. Así que algunas cosas a tener enmente acerca de la división. Voy a estar. Así declaró respuesta initialize. Así que estamos diciendo respuesta flotadores igual a 1 dividido por 10. Imprimir respuesta a dos decimales. >> Y este es el tipo de cosas que yosería el hombre printf para darse cuenta que ¿Qué diablos significa%, punto, 2f significa? Y eso sólo significa que, bueno,ignorando el 0,2. Y%, f es el que usamospara imprimir a flotar. El 0.2 está diciendo, de impresión queflotar con dos decimales. Así que este programa tiene un error, y es posible quehan visto esto antes en alguna Por supuesto CS previa. Pero, ¿qué es ese bicho? >> ALTAVOZ 5: Zero. >> ROB: Si. Así que cuando decimos, la respuesta es igual1 dividido por 10, queremos que el responder que es 0,1. Pero 1 dividido por 10, 1 es unnúmero entero, 10 es un número entero. Y así, cuando hacemos un entero dividido porun entero, que vamos a volver un número entero. Así que 1 dividido por 10 es 0,1. >> Ya que tiene que darnos un número entero,que sólo va a tirar que decimal y decir quela respuesta es 0. Y así, cuando imprimimos contestar aquí,que va a imprimir 0.00. >> JOSÉ: Y así como una nota, que en realidadtira a la basura lo que hay después de la punto decimal. Así que si en vez tenías 6 dividido por 10,se podría pensar que le daría 0.6 y luego le redondear a 1. Pero en realidad, lo que sucede cuando se escribatareas es que se cae por lo que es después del punto decimal. Así que 0.6 se convierte en 0. >> ROB: Si. Y vamos a decir truncado por eso. Así que cada vez que juegues a un int,el decimal se trunca. Así que la solución para que - no hayen realidad dos. Y yo voy a hacer ese segundo, porqueésta es una solución mucho más fácil. >> Así que una solución es utilizar flotadoresen la división. Y realmente, es suficiente conhacer que uno de ellos un flotador. Pero es algo más clara justopara hacer los dos flotadores. Así 1,0 dividido por 10.0 esdividiendo dos flotadores. Así que la respuesta va a terminar siendoun flotador, y por lo que se correctamente imprimir 0.10 aquí. >> Algo que no funciona tan bienaproximadamente, es decir, bueno, claro, era fácil suficiente para convertir a un 1flotar por lo que es 1,0. Pero ¿y si en lugar de eso tenía dos enteroscomo int x es igual a 1 y la int y es igual a 10, y luego queríamoshacer X dividido por Y? Así que no es fácil simplementehacer x.0 o algo así. >> Así que la solución a la que está proyectando. Así que la fundición es una forma en C para convertirde un tipo variable a otra. Así que aquí, 1 es un número entero. Y al poner este flotador frente aella, estamos lanzando 1 a un flotador. Y por lo que este se convertirála 1 a un 1,0. Y esto va a convertirel 10 a un 10,0. >> Y luego las cosas se comportan de manera similar a laversión anterior sólo hemos visto donde, como era de esperar, se obtiene 0,10y que va a imprimir eso. Y podemos hacer esto convariables, también. Así que podemos decir, float xdividido por flotador y. >> JOSÉ: ¿Alguna pregunta? >> ROB: Así como en matemáticas regular,tenemos prioridad de los operadores. Así que en la clase de matemáticas, es más probablellamarlo orden de las operaciones. Aquí, el término oficial esprioridad de los operadores. Pero la prioridad de los operadores, o la mayoríaoperadores, es como se puede esperar. >> Así que al igual que en matemáticas, 2 veces 10 esva a ser agrupados más de cerca que este 10 dividido por 2 y luego 2. El orden de las operaciones, que va a hacer 2tiempos de 10, 10 dividido por 2, y luego que va a hacer 20 más 5 más 2. Así que es como se esperaba, y se puede utilizarparéntesis para agrupar expresiones. No se puede utilizar corchetespara agrupar expresiones. ¿Sí? >> ALTAVOZ 5: ¿Podría realmentesimplemente retroceder un segundo? ¿Puedes echar un int a una cadena? >> ROB: Así que en C, puede convertir cualquier cosaquiere lo que quieras. Eso no quiere decir que seauna buena cosa que hacer. Así que cuando lanzas un int auna cadena, que significa - y vamos a entrar en estemucho más a fondo - >> JOSÉ: Mucho más tarde. >> ROB: yo no quería decir mucho más tarde,así que traté de cambiar mi sentencia. Vamos a entrar en mucho más a fondomás tarde cuando realmente cuando se tiene un variable de cadena - por lo que una cadena puede ser arbitrariamentemucho, ¿verdad? Y hemos estado diciendo que es un intcuatro bytes y de largo tiempo es de ocho bytes y un flotador es de cuatro bytes. Así que una cadena, como un int, sólo tieneun cierto número de bytes a la misma. Y eso va a ser de cuatro bytes. >> Pero una cadena puede ser bastantearbitrariamente larga, ¿no? Así que hola mundo ya, si eso es 10personajes o lo que sea, eso es ya va a ser durante los 4 bytesPuedo caber en una cadena. Y entonces, ¿cómo funcionan realmente las cuerdas es queque son lugar de la memoria esa cadena está siendo cuidada. >> Y así por aquí, cuando digo cadena xiguales hola mundo, en el interior de x es Sólo digo, oh, hola mundo se almacenaen este lugar especial en la memoria. Así que si tratamos de echar un entero en uncadena, entonces estamos tratando de interpretar una parte aleatoria de la memoriacomo una cadena. Y que casi siempre rompe cosas. >> JOSÉ: Pero si eso confundeusted, vamos a estar cubriendo lo más en profundidad más adelante. >> ROB: Si. Aquí es donde usted vapara entrar en punteros. Y eso es una parte significativados semanas de este curso. >> ALTAVOZ 6: ¿Funciona igual que los objetosen otros idiomas o no realmente? >> ROB: En otras lenguas, objetosse representaría el uso de punteros. No es lo mismo, sin embargo. ¿Alguna idea? >> JOSÉ: No. No hay pensamientos. >> ROB: OK. >> JOSÉ: Siguiente. >> ROB: Sólo tienes que ir con eso. Está bien. Así módulo. Al igual que tenemos más, menos,dividir y multiplicar. Así módulo es uno que usted puedeno han visto antes. Y simplemente dice, danme el resto. Así 55% 10. El resto de hacer 55 divididopor 10 sería 5. Así 55% 10 es 5. Y 3% 5 sería 3. 8% 8 será 0. 16% 15 será 1. >> JOSÉ: Una cosa a destacar con esto,también, es que puede que no funcione como se esperaba si se utiliza un número negativo. Así negativo 5% 4, algunas personasPodríamos pensar que es - ¿qué le parece negativo5% 4 sería? >> ALTAVOZ 5: Primero. >> JOSÉ: ¿Así que hay gente que dice uno,algunas personas dicen que uno negativo. Pero lo que - >> ROB: yo ni siquiera tienen, dijo uno de ellos. >> JOSÉ: Dos, lo siento. Hay gente que dice - >> ROB: Tres. >> JOSÉ: ¿Tres? >> ROB: Negativo - lo que fue el - negativo de cinco - >> JOSÉ: Tres, tres, tres. Lo siento. Debido modulo, por lo general, cuando hasvisto en otros lugares, por lo general significa devolver un número positivo, ¿no? >> ROB: Así que cuando decimos en matemáticas, del 10%,que tienden a querer darle - si mod 10, entonces esperamosobtener un número entre 0 y 9. Aquí, ese no es el caso queobtendrá los números negativos se devuelven. >> JOSÉ: ¿Así negativo 5%4 sería negativo 1. >> ROB: Pero es raro que usted es-ing modlos números negativos, para empezar. Omita este. >> JOSÉ: Sí. >> ROB: Meh. Aceptar. Así que una última cosa a destacar sobrecarrozas es que es un comportamiento peligroso, pero los flotadores no son una exactarepresentación. Así que volviendo a bytes más, recuerdeque un int es siempre cuatro bytes y un flotador es siempre cuatro bytes. Así que el ejemplo de Lucas es bastante bueno. >> Así que piensa en 1 dividido por 3. Así 0,3333333. Si sólo tengo 32 bits, ¿cómo puedeAlmaceno 0.33333 exactamente? Y tal vez, por alguna razón, usted dice,bien, bien, vamos a decir de que este particular 1011001, vamos aBasta con decir que debe haber 0.333333. Bueno, es suficiente con un número finito deesos bits, por lo que es imposible representar cada punto flotantevalor dado sólo 32 bits. >> Bueno, es imposible representar cualquiervalor de coma flotante da infinita - así, dado cualquier número finito de bits. Así que la cuestión aquí es, bueno, cuando se utilizópara imprimir a dos decimales, nos hicieron llegar la respuesta correcta 0.10. Pero debajo de la capucha, es realmentesiendo almacenado lo más cerca posible a 0.10 como esos bits puede representar. ¿Es esto en la siguiente diapositiva? ¿O no es así? >> JOSÉ: Sí, es eso. >> ROB: Blegh, blegh. >> JOSÉ: Sí, usted puede apenastirar de las notas un poco. >> ROB: Yo sólo voy para ampliaren el último en eso. Oh, Dios mío, eso es [inaudible]. Así que ese número. Eso es lo que se va a imprimirsi nos encontramos con ese programa. Y observe que no es realmente un gran problemasi sólo estamos cuidando sobre como dos y cincuenta y ocho decimales. Como sólo nos originalmente imprimimos 0.10,y es por eso que vimos nada malo. Pero una vez que empezamos a entrar en elexacta, el número exacto que es que representa, vemos que no puedeexactamente representar 0.1. >> Y parte del problema aquí es como,bien, eso está bien, pero, bueno, en primer lugar, ¿qué pasa si tratamos de hacer,respuesta igual a igual a 0,1? ¿Es que va a devolver verdadero o falso? Y lo que es difícil de decir. Creo que en realidad podría devolver true. Lo hará primero - No se. La respuesta es una vez que empezar a tratarcon valores de coma flotante, que prácticamente tanto no deberían usar la igualdada causa de esta imprecisión. >> Y por todo lo que sabe, es la centésimadecimal que el punto flotante no pudopara manejar correctamente. Y así la igualdad se acaba de fallar inclusoaunque el número - si hubieras estado utilizando números exactos, los números debenhan sido exactamente el mismo. Es en el transcurso de 50 comocálculos utilizando estos flotante valores de punto, el error puede construiry más y más, y cosas apenas consiguen mal. >> JOSÉ: Y ha sido realmentefamosos ejemplos de que esto ocurra. Al igual que los ingenieros de la NASA han llegado a esteequivocadas, cohetes causan a explotar en el aire después de que han sido lanzados. Y un montón de temas por el estilo. Así que sí. >> ALTAVOZ 6: Cuando usted dice 0.3 f,Qué se trunca el resto? ¿O se redondea hacia arriba o hacia abajo? >> ROB: ¿Será printf alrededor de ella? >> JOSÉ: Creo que trunca printf. >> ROB: OK. Así que de manera similar podemos ir en la dirección opuestadirección de este, donde, en este caso, lo más cerca que podría representar0.1 fue con este número. El más cercano que podría ser capaz derepresentar 0.2 es en la dirección opuesta dirección, 0,199999996356o algo así. Así que si nos fuimos en esa dirección decosas, entonces printf 0.3 f regresarían 1.99 en lugar de 2.00. >> JOSÉ: ¿Y no estoy del todoseguro de eso. Es posible que desee escribir un pequeño, pequeñoprograma para sólo comprobar eso. >> ROB: Sin embargo, lo que sí estamos seguros es quesi se trató de echar eso a un int, y echando a un int va ahacer que se trunque el decimal, si intenta convertir 1.9999999a un int, obtendrá 1. Y así, en general usted debe utilizar elfunción ronda en la biblioteca de matemáticas. ¿Preguntas? Aceptar. >> JOSÉ: Pasemos ahora a las condicionesy las expresiones booleanas. Por lo que han visto estos antes. Y en realidad, déjame asegurarme de que miequipo está en el formato correcto aquí. Espacio. Lo sentimos, pero vamos a tener que hacer frente apoco con punto de corte en los bordes. >> Pero sí, ustedes han vistoesto antes de Scratch. Así que esto de aquí es una expresiónque se utiliza en una sentencia condicional. Así que la respuesta mayor que cero voluntaddecirle verdadero o falso. Y estos son muy importantes, porqueque nos permiten introducir lógica en nuestro código. >> Así, por ejemplo, este es un programaescrito en scratch que pide al usuario para un entero y les dice siel entero que te daban era un número positivo o negativo. Y la conversión por aquí a ver esimprima primero la declaración, dame un entero. Y luego se les pregunta por un número entero. >> Y a continuación, utiliza la lógica condicional sobreaquí para comprobar si ese número era en realidad mayor que cero o no. Así que aquí tenemos una expresión booleanadentro de un condicional If. ¿Hay alguna pregunta? ¿Hay alguna pregunta acerca de eso? Aceptar. >> Así que hay algo más quemayor que, por supuesto. Puede construir expresiones booleanasutilizando la mayoría de los tipos de cosas que usted pensaría en matemáticas. Así mayor que. Eso debería ser un menor que. Lo siento. Y la separación. >> ROB: Dios no lo quiera usted lo deja. >> JOSÉ: Bueno. Por lo tanto mayor que, menor que, mayorque, o igual a, menor que, o igual a. Utilizamos igual doble para comprobar si hayla igualdad, porque solo es igual a medios asignación, ¿verdad? Sí. Y entonces podemos también no es igual porutilizando el signo de exclamación, es igual. >> Y este símbolo de exclamación puedeTambién se ampliará de modo que si usted quiere invertir cualquier tipo de Booleexpresión, se puede hacer eso. Así que esto se evaluará como trueSólo si la respuesta es menos que o igual a cero. ¿Tiene preguntas sobre eso? Aceptar. >> Así también puede combinar estosexpresiones usando lógica Y y lógico Or. Así que esto es sólo el símbolo de Y,que debe ser Shift, 7. Y este es el símbolo de canalización, que esNo es un caso menor L. Es el que eso es justo encima de la tecla de Intro. Así que utiliza dos de estos para simbolizarlógica y la lógica Or. >> Así que esto sólo devolverá true si la respuestaes uno, dos, tres, o cuatro. Y esto sólo se devolverá true si la respuestaestá más allá de que a cada lado. Así que no es de uno, dos, tres, o cuatro. Y la forma en que utilizaríaque en una expresión - >> ROB: O un cero o un cinco. >> JOSÉ: Cero o un cinco. Lo siento. Sí, sí, sí. Aceptar. Y por aquí ahora, de la misma manera queutilizaría esa expresión, una más pequeña lado la expresión de un Si condicionaldeclaración, también lo utilizaría la misma manera, con solo colocar en el interior delos paréntesis de la instrucción If. Así que este printf sólo se disparará si la respuestaes uno, dos, tres, o cuatro. ¿Tiene preguntas sobre la combinaciónexpresiones? >> Así que hay otra condicionalConstruimos que llamamos un If / Else. Así que, básicamente, esto significa ahora, OK, Sialgo que yo quería ver no era verdadera, entonces ve al Else yrealizar esa otra acción. Así que en este caso particular, me preguntéel usuario de un entero. Es el número entero mayor que cero? ¿Sí? Bueno, entonces escogieronun número positivo. Si no, entonces debe tenersido negativo o un cero. Así que eligió un número negativoo un cero en este caso. Sí. O un cero. >> Y luego también tenemos If / Else,Si y Else. Así que esto nos permite ejecutar una secuencia decosas sólo si los primeros fallan. Así que en este caso, ahora estamos haciendoel último que usted escoge cero. Así que si ellos no escogieron un positivo niun número negativo, entonces deben han recogido cero. Por lo que sólo se va por elcadena como esta. >> Así un ejemplo de cómo unaSi es distinto de - un if / else es diferente desólo una secuencia de IFS. Y esta es una pregunta común quela gente se pregunta es, bueno, si te pones así un 95 en CS50, ¿qué será esteprograma te lo dijo? >> ALTAVOZ 5: ¿Tienes una A. >> JOSÉ: Sí. Tienes todos losuno de esos derecha. ¿Tienes una A, que tienes una B,tengo una C y una D, ¿verdad? Así que todos estos se evaluaronen orden. Así, mientras que un 95 es mayor que 90, estambién es mayor que 80, es también mayor que 70, y estambién mayor que 60. Así que tienes todos esos grados. Y supongo que lo haríasólo quieren que el A. >> La manera de arreglar eso es reemplazaraquellos con Else / Si 's. Así que en este escenario, se ve que 95 esmayor que 90, y luego lo hace no evaluar el restode los estados. ¿Una pregunta sobre eso? >> Así que hay otra clase condicional deestructura que tenemos aquí, que nos llame a una sentencia switch. Así que esto le permite comprobar básicamentelo que el valor de un número se pone en la sentencia switch es. Así que en este escenario, estamos cambiandoen n, y nosotros estamos diciendo, oh, si n es uno, a continuación, imprimir esa declaración. Y a continuación, romper, lo que significa que la salidasalir de la sentencia switch. >> Si no era uno, entonces, bueno,finalmente, comprobar todos los casos. Y así se comprueba si es uno o dos otres, y se imprime en consecuencia. Y lo que aquí esta palabra clave por defectomedios es si ellos no entraron en ningún de los que, a continuación, decir no válido. Así que digamos que pido nyel usuario me da cuatro. Bueno, no coincide con ninguno de esos casos,por lo que se imprimirá lo que está en el sección default. Sí, la pregunta? >> ALTAVOZ 5: ¿Se puede utilizar Booleanexpresiones en lugar de uno, dos, o tres? >> JOSÉ: Entonces la pregunta es ¿Se puede utilizarExpresiones booleanas en lugar de uno, dos y tres? Y en C, creo queNo puede hacer eso. Pero en otros idiomas, lo que le podríaencontrarse al final de la semestre como JavaScript, se puede. Bueno, usted tendría que calcular primeroese valor y, a continuación, use en el cambiar comunicado. ¿Sí? >> ROB: Así que parte de los beneficios del interruptordeclaraciones se piensa de si lo hizo como If / Else, así como si n es igual aes igual a uno o lo que sea. Else / Si n es igual a es igual a dos, lo que sea. Else / Si n es igual a es igual a tres. Así que la forma en que el programa se ejecute es losería secuencialmente bajar esa lista y comprobar, es n uno? Nope. Es n dos? Nope. Es n tres? Sí. Haga esto. >> Mientras que con sentencias switch, esrealmente capaz de compilar que sea muy rápido. Y tan pronto como lo dice interruptor,dice, está bien, n es dos, yo soy inmediatamente va a saltar a dondeSe supone que debo comenzar a ejecutar. Yo no voy a comprobar en primer lugar,se n uno, es n dos? Se puede comenzar de inmediato haciendolo que se supone que debe hacer. >> Y debido a eso, no se puedetener condiciones booleanas. O de lo que tendría que hacer elsecuencial, como, bien, es n mayor que cero? Else es n mayor de 10 o lo que sea. >> JOSÉ: En este caso, si se ha utilizadoSi / Si no, Si es así, entonces el interruptor haría ejecutar aproximadamente tres vecesmás rápido que el If / Else If. Podemos organizar el interruptor de talde manera que no rompemos después de cada uno de los casos. Así que en este caso, estoy dividir elnúmeros que elegimos en uno y dos no es un número elevado ytres que son un número alto. >> Así pues, en este caso, si n es uno o dos,llegará el caso y luego lo hará caen a través, porqueno hay descanso. Y que va a terminar aquí. Así que si elegimos una, que va a hacer el printfy luego romper para que ninguno de este se ejecuta. Y por supuesto, si entran en treso alguna otra cosa, entonces se saltará esas y no ir allí, yse ejecutará en su lugar el línea correspondiente. ¿Hay alguna pregunta acerca de eso? ¿Sí? >> ALTAVOZ 4: ¿Quieres conseguir un error si setenido un descanso después de un caso, pero no tener algo para que lo haga? >> JOSÉ: Entonces la pregunta es ¿le consigueun error si tiene un descanso después de caso de que uno, pero no hay nada que hacer? Y la respuesta es no. Usted no va a conseguir realmente un error. Sí, mm hmm. >> Así como una especie de un pequeño cambio aquí,Voy a poner un printf aquí. ¡Vaya. Así que lo imprimiría esto siPuse uno en como entrada? Sí. Se diría que no pasóun alto número dos veces, ¿no? Porque sería llegar a ese primer caso,no se rompería y caería hasta el segundo caso. ¿Una pregunta sobre eso? >> ROB: ¿Alguna otra pregunta? >> JOSÉ: OK, enfriar. Está bien. Así que no es otra cosa que llamamos unoperador ternario, que es básicamente una sintaxis alternativa para hacerSi y luego lo demás. Y te permite hacerlo todo en una sola línea. Así que en este programa en particular,Estoy preguntando al usuario para n. Y si n es mayor de 100, le digoellos escogieron un número alto. Else les digo queelegido un número bajo. >> Así que podemos usar esta sintaxis muy largo,cadena, S, y luego verifique si n es superior a 100 y asignaren consecuencia. Pero podemos hacer esto mucho más concisamediante el uso de esta sintaxis operador ternario que consiste en una preguntamarca y dos puntos. Así que la interrogante es esencialmentehacer una pregunta, ¿no? >> ROB: zoom Tal vez en eso. >> JOSÉ: Sí. Buen punto. Así que este es el operador ternario. La primera vez que hago la pregunta,n es mayor que 100? Si lo es, entonces ejecuto el primerparte antes de los dos puntos. Si no es así, entonces ejecuto elsegunda parte después de los dos puntos. Así que si n es mayor que 100,a continuación, se recoge alta y pone que en la cadena s. Si n es menor que 100, que recoge bajay luego pone eso en la cadena s. Así que se condensará este pedazo grandehacia abajo en esa sola línea. >> ALTAVOZ 5: ¿Eso es popular? >> JOSÉ: Sí, es muy popular para loscosas en esencia lo que desea do una asignación basada enalgún tipo de condición. Y en este caso, estábamos tratando depara asignar un valor a la cadena s. No es tan - Supongo que en realidad no prefieroen los demás casos. Pero es especialmente útilpara esta tarea. >> ROB: Eso es un patrón bastante comúndonde se tiene una variable que que vas a decir, si algo, ajusteesta variable a un valor; otra, establece esta variable a otro valor. Y ese es el escenariodonde utilizar un ternario. >> JOSÉ: ¿Y usted está ahorrandoun montón de líneas, ¿no? Y sólo hace que el código podría decirse queun poco más legible. Sí, la pregunta? >> ALTAVOZ 6: Para un ternario, ¿podrías ir,string s iguales seg, signo de interrogación? Y entonces usted podría tener, por ejemplo,cinco opciones diferentes. Y dependiendo de lo que el número de nfue, elegiría uno de esos? >> JOSÉ: ¿Así que la pregunta es, ¿hay unaespecie de sintaxis donde se puede hacer la cadena s es igual a N, y luego tener más de dosopciones después de que el signo de interrogación? Y una respuesta simple es no, no hayrealmente una buena manera de hacer eso a menos que que desee anidar ternaria múltipleoperadores dentro de la otra. >> Usted podría hacer como n mayor que 100,signo de interrogación, y luego otro operador ternario, n mayor que 50,signo de interrogación, y el nido de esa manera. Pero en ese escenario, el código eshaciendo un poco ilegible y desordenado, y tal vez sería mejor ir sólo auna instrucción If / Else en ese punto. >> ROB: Y también, como nota al margen, PHPimplementa incorrectamente el ternario operador de tal manera que ternarios anidadosincluso no trabajan como deberían. >> JOSÉ: Sí. Así se pone un poco confuso,especialmente cuando vas a diferentes idiomas. >> ROB: Está bastante confuso quelenguas están equivocados al respecto. >> JOSÉ: ¿Así que en realidad, sólo para aclarar,¿todo el mundo sabe lo que % S hace por aquí? ¿Una pregunta sobre eso? Supongo que sólo para la cámara, el% sbásicamente nos permite poner un marcador de posición para una cadena. Y luego, al final, se especifica que ella variable que queremos poner en esta marcador de posición es s. Así que, básicamente, tiene sy se pone aquí. Y luego se imprimirá, que eligióun alto o recogido un número bajo. Aceptar. >> Así bucles le permiten realizar cosascon movimientos circulares, ¿verdad? Es posible que haya encontrado con esto enArañazos en forma de bucles para siempre o Repetir Hasta o Repetir una determinadanúmero de veces. ¿Por qué es tan bueno para nosotros? Pues bien, en C, digamos que tenemos estecanción implementado en scratch que canta, esta es la canciónque nunca termina. Simplemente sigue y sigue ypor siempre y para siempre. Bueno, realmente no se puede hacer un programaque tiene un número infinito de printf declaraciones en ella, ¿no? >> Así que en este escenario en particular, de una maneraque usted podría hacer este trabajo y para hacer que imprima siempre esen lugar de utilizar un bucle While. Así que un bucle while se ejecutará lo que hayen el cuerpo de los dos apoyos que pertenece a la misma sobre la base de lo quees la condición. Así, en este ejemplo particular antes, siqueremos imprimir esto para siempre, lo que Qué podemos hacer? Bueno, claro, ¿no? >> Así que este tipo de combina la ideade alguna expresión booleana junto con un bucle. Y nos enteramos de Booleexpresiones anteriores. Así que cada vez que la condición interior deMientras que sigue siendo cierto, este bucle ejecutará y sigue y sigue. Y en este caso, si sólo suministramoscon datos verdaderos, esto provoca un infinito bucle que imprime la canción una y otra vezy en lo que deseábamos antes sin tener un programa que tiene una infinitanúmero de instrucciones printf, que es no es posible. >> Así que más convincente, sin embargo,usted puede utilizar esto con un variable y una condición. Así que digamos que queremos repetir lafrase, totalmente descabellado, 10 veces. Entonces, ¿qué se puede hacer con un bucle While esprimero puede inicializar un contador fuera variable de laMientras bucle a 10. Y entonces, básicamente, cada vez que se vayaa través del bucle While, imprima la declaración y luego disminuye elvariable contador hasta que al final, en algún momento, una vez que se resta lo suficienteveces, 1 de I bastantes veces - y sólo para aclarar, menos que menossignifica que es igual a lo menos 1. >> Eso básicamente me traen a lapunto en el que una vez llegué a cero, condición ya no es verdadera ypor lo que sale fuera del bucle. Así que totalmente descabellado sólo imprime 10 veces. ¿Una pregunta sobre un bucle While? Aceptar. >> Así que hay una manera de hacer lo que acabamos dehizo de una manera más concisa con lo que llamamos un bucle. Por lo tanto un bucle Para consiste en uninicialización, una condición, y un actualización, al igual que teníamos antesen este bucle While. Así que vamos a echar un vistazo. En este ciclo While, tuvimos unainicialización, entonces tenía un condición de que nos registramos. Y luego tuvimos una actualizaciónpaso en la parte superior. >> Con un bucle For, esto básicamente tomaestas tres cosas y lo condensa hacia abajo en una línea. Así que lo primero que se hace en elPara bucle es la inicialización. Y entonces usted hace un punto y coma, y ​​luegolo hace el estado, que es lo mayor que cero va por allá,y luego la etapa de actualización. Así que esto se lleva a cabo en elfinal del cuerpo del bucle. Así que estos dos programas sonesencialmente equivalente. >> ¿Alguna pregunta? Entonces, ¿qué es una diferenciaentre estos dos? ¿Alguien puede señalarlo? Podría ser un poco más sutil. Es sólo una diferencia muy pequeña. ¿Sí? >> ALTAVOZ 5: Usted no sería capaz de utilizarla variable i fuera del bucle Para [Inaudible]? >> JOSÉ: Exactamente. Así que esto es algo que vamos a llegar amás tarde llamado alcance variable. Pero, en esencia, este int vidas Ifuera de este bucle While. Así que una vez este bucle Mientras se haceejecución, voy a ser capaz de utilizar lo más tarde en en el programa. >> Mientras que con este bucle, esta int Iestá en el ámbito interior de este bucle. Y debido a que está en el interior de esta porcióndel bucle Para, que comienza en los paréntesis, y termina conla llave de allí. Cualquier cosa que se declara dentro deaquí no se puede utilizar al aire libre. Así que si trato de usar que fuera, que va adime, símbolo declarado. Y, esencialmente, no lo haríaser capaz de utilizarlo. >> ROB: Y así, hace 10 años, enliteralmente todos los casos, las llaves son lo que se utiliza para determinarel alcance de una variable. Así que ahí, int I es igual a 10está declarada dentro de este juego de llaves. Y así, siempre y cuando se intenta utilizar Iantes de que esta llave de cierre, está bien. Es posible que aparezca al escribir hacer, ustedver guión, guión, std, iguales, c99. >> Así que es una versión posterior de C queGCC ha implementado, que también da este acceso directo. Así que este utiliza para no ser permitido en C. Yse puede ver por qué, ya que este int I es fuera de este corchete perotodavía está considerado como en el alcance de estas llaves. Pero esto es una cosa muy conveniente,y lo que es una buena extensión. >> JOSÉ: ¿Alguna pregunta? Aceptar. Entonces, ¿qué es más útil es que a vecesusted quiere una especie de dinamismo en su bucle, ¿verdad? Usted no quiere imprimir sólo necesariamentetotalmente descabellado todo el tiempo, que desee contar desde10 o algo así. Y lo que puede utilizar la variable de contadordentro de ese bucle también. Y en este caso, este programa sólouna cuenta atrás de 10 todo el camino hacia abajo. ¿Y qué se imprime? No imprimir cero,bien, porque cuando - Sí, también no se imprime 11. >> Por lo tanto, no se imprime cero, porque cuandoI es cero, recuerdo, evalúa la condición antes de que entre enpara ejecutar el cuerpo del bucle. Y cuando I es cero, esto es falso, por lo queno imprimir la cuenta atrás cero, sólo se imprime el recuentoabajo 10 hasta el fondo a 1. Si realmente queremos que se imprima a cero,entonces podríamos poner un signo igual después de este signo mayor que. Aceptar. >> Así que una manera de hacer la validación de entrada, quees cuando usted le pide al usuario que hacer algo, usted quiere asegurarse de queseguir sus instrucciones, es utilizar el bucle While, ¿verdad? Así que en este caso particular, estoy pidiendopara un número positivo y entonces estoy la espera para la entrada. >> Y luego he comprobado Aunque la entrada esmenor que cero, siga preguntando. Así que, mientras me dan un númeroeso no es positivo, sigue preguntando, seguir pidiendo, seguir preguntando. Pero lo que es una especie de extraño en esto? O lo que no parece óptima sobreesta estructura aquí? ¿Alguien? ¿Sí? >> ALTAVOZ 6: Te estás repitiendola instrucción dos veces. >> JOSÉ: Así es. Así que tenemos dos instrucciones printfaquí, ¿verdad? Así que hay una manera de que pudiéramos conseguir esto sóloa uno que haría nuestra código más fácil de leer y unpoco más limpio. Y entonces no tendríamos quehan Entra en el doble de bien. Y una manera de que usted puede hacer esto esmediante el uso de un bucle Do-While. >> Y un bucle do-while es básicamente undiferente forma de un bucle While, donde lo que está dentro de las llavesserá ejecutado al menos una vez. Así que aquí, declaro, intde entrada, fuera primero. Y entonces me acaba de decir, hacer estomientras que la entrada de instrucciones es menor que cero. Así que golpea el Do primero. Siempre va a ejecutar este por lo menosuna vez, por lo que siempre le pedirá al usuario para la entrada de al menos una vez. Y a continuación, se evalúa que la entrada,y continúa en un círculo. Sí, la pregunta? >> ALTAVOZ 6: ¿Hay una manera de hacerlo[Inaudible] tipos, al igual que si usted dice, GetString y alguien [inaudible] ¿hay alguna manera de [inaudible] >> JOSÉ: ¿Así que la pregunta es, ¿hay unamanera de hacer la validación de entrada si el usuario no pone en el derechotipo de variable? Así que si pedimos un int ydarnos una cadena en lugar. Y en las funciones que implementamospara usted, GetInt, GetString en todas esas funciones, que en realidad yahacer ese tipo de entrada de tipo básico validación bajo el capó. Así que si usted está utilizando las funciones quete dio, que en realidad no tiene que hacerlo. >> Pero si usted quiere mirar más en cómoen realidad se puede hacer eso, usted puede mirar bajo el capó en el archivo I/O-- No presente, las funciones de E / S estándarcomo una lectura de la entrada estándar y salida estándar. Y usted puede tener una mejor ideade cómo puede hacer eso. >> ROB: Un problema, sin embargo, es específicamentecon el ejemplo que dijo que espera una cadenay entro en un int. ¿Cómo saber la diferenciaentre querer intencionalmente la cadena 123 frente querer el int 123? Así cadena, es casi no hayvalidación, es sólo lo que introducido usted interpretarcomo una cadena. >> Int es más fácil, porque no importa lade entrada se toma por parte del usuario, que son teniendo siempre una cadena. Y para que la cadena se puede entoncescomprobar, son todos ellos los dígitos numéricos en realidad? >> JOSÉ: OK. ¿Una pregunta sobre un bucle Do-While? >> ROB: Oh, y esto es también - que se remonta a su alcance, un algo comúnerror está tratando de utilizar algunos locales variable a partir de dentro de este do-whilebucle dentro de esta condición. Y en realidad, si nos libramos deesto y dijo, equivale int entrada GetInt, el compilador va a gritarnosotros, porque de entrada no existe fuera del ámbito de aplicación deestas llaves. >> JOSÉ: ¿Y es por eso queNecesitará esta línea aquí. Aceptar. Así también se puede salir de unlazo anticipadamente si usted quiere. Así que esta es una forma diferente dela implementación de lo que acabamos de implementamos. Y en lugar de utilizar la condicióndentro de los paréntesis, estamos usando una Si la declaración en el interior del cuerpodel bucle Do-While. >> Y en el fondo, cuando la entrada es finalmentemayor que cero, lo haremos romper el bucle. Y así vamos a ir a por todasel camino hasta aquí. Y se puede ver que esto haríaprobablemente será preferido en este escenario, porque es un pocopoco más limpio y un poco poco más fácil de leer. Considerando que la presente, que tipo detener líneas adicionales en el mismo. Es sólo un poco más feo,Supongo que, en cierto sentido. Sí, la pregunta? >> ALTAVOZ 4: Romperá sólo recibea salir de un juego de llaves? >> JOSÉ: Así es. Así que la pregunta se romperá sóloa salir de un bucle? Y la respuesta es sí. Así que si usted ha anidado bucles For, paraejemplo, si tengo Para int i es igual a 0 hasta 10 y luego por int J es igual a 0hasta 10, si rompo del interior lazo, yo todavía iral bucle exterior. Así que va a mantener la realización de laoperaciones en el exterior. ¿Una pregunta sobre eso? ¿Sí? >> ALTAVOZ 5: Pero romper únicas funcionespara llaves, no para otra declaraciones? [Inaudible] >> JOSÉ: ¿Así que la pregunta es se romperáúnica función de los bucles en contraposición a otras declaraciones como si? Y sí, ese es el caso, porqueque está rompiendo hacia fuera de un bucle, a la derecha, en un sentido. >> ROB: En la gran mayoría de los casos, eseste es el tipo de Si algo, a continuación, romper. Así que usted no tiene que romper para aplicar aSi el que está envolviendo a su alrededor. Y también, esto no es mucho de un bucle,pero recuerde que los interruptores son también escapado de por descansos. Vimos las pausas se utilizancon interruptores antes. >> JOSÉ: ¿Y usted también puede usarlasen los bucles while y for bucles. ¿Alguna pregunta? Aceptar. Así que la próxima es hasta funciones. Así que se podría haber usado uno de estos BYOBbloques en su proyecto de Scratch. Y esto permite, básicamente,definir un conjunto de instrucciones que se deben seguir. >> Y lo que quiero decir con esto es que vamos a pensarde vuelta a las matemáticas, a la derecha, el álgebra. Usted tiene lo que se llama una función de x,alguna variable, y digamos que esta función es f de x es igual a x más 5. Así que usted puede pensar en f de x como este negrocaja que lleva en 15 y luego produce 20. >> Así de forma más general, una función esalgo que toma algunos insumos y después produce algunas salidas. ¿Y por qué son buenas funciones? Son buenos para una serie de razones. Así que, ¿alguien quiere tomar una puñaladaa lo que la organización quiere decir? En términos de qué funciones son útiles? ¿Sí? >> ALTAVOZ 4: Hace que sulectura del código. >> JOSÉ: Así es. Así que una de las cosas es que haceel código sea más fácil de leer, ¿verdad? En lugar de tener como int x es igual a xveces x veces x, puedo tener el cubo de x, que es más legible y máscomprensible para un lector. >> La organización es también en términos dedividir el código en manejable porciones, de manera que en lugar de intentarponer en práctica todo esto en una larga sección en principal, se puede ordenar de dividirloen como, OK, vamos a escribir una función al cubo algo, vamos a escribir unafuncionar para cuadrar algo. De esa manera usted puede dividirlo en minúscula,pequeñas piezas que se pueden abordar en lugar de tratar de abordarun gran problema a la vez. >> ROB: O incluso pequeñas, pequeñas piezas queusted y su pareja puede hacer frente. >> JOSÉ: Sí. >> ROB: Así que en lugar de dosusted tratando de implantar un funcionar al mismo tiempo. >> JOSÉ: Simplificación. ¿Alguien quiere tomar una conjetura? ¿Sí? >> ALTAVOZ 5: Más repetición. >> JOSÉ: Así es. Así que una cosa que usted puede hacer consimplificación es que es una especie de sobre la misma línea que la reutilización es queuna vez que escribo una función de cubo, que pueda sólo tiene que utilizar una y otra y otra vezde nuevo en mi programa en lugar de escribir x veces x veces x más yuna y otra vez. Y aquí también la simplificación sólosignifica que hace que su código de tipo de más fácil de depurar una vez se divideesto en funciones. Porque entonces usted puede localizar dondesus problemas de tipo de son. ¿Alguna pregunta? >> Así que otra idea es la abstracción, ¿verdad? Este cuadro negro. Como sabe usted lo que hace GetIntpara recibir la entrada del usuario? Realmente no hemos dicho a usted, ¿verdad? Todo lo que hemos dicho es GetInt haceexactamente lo que dice que hace. Así que incluso si no le decimos cómofunciona, todavía sabe. >> Así que en este caso particular, se trata deuna función cuádruple, que hace diferentes cosas para una entradapara producir una salida. Y usted puede cuadruplicar el númeromultiplicándolo por cuatro. O puede que llamamospoco cambiar por dos. Y vamos a cubrir esteun poco más tarde. Y no hay necesidad de saber cómo estafunción realmente funciona, siempre y cuando funciona como se indica. >> Así que bajo el capó, que podría sercomo, devuelva los tiempos de entrada ocho dividido por dos. Y no vas a saber, ¿verdad? Todo lo que necesitas saber eshace lo que dice. Así que eso es lo útilacerca de la abstracción. >> Y otra cosa es una especie de esta ideade la localización de su código a uno particular la sección. Así que si usted tiene un problema, no lo hacetienes que ir por todo el código que intenta para fijar dónde estaba el problema. Así que en este caso, he implementadocubicar mal. Pensé cubo estaba multiplicandopor tres. >> Así que en este caso, se trata de un programaque acaba de multiplicar por tres en todas partes. Y hay otro programa que tienecubo factorizada fuera en una función. Y ahora si quiero arreglar mi erroraquí, tengo que arreglar cada línea de código de este programa. Mientras que, por otro lado, si uso elfunción, sólo tiene que cambiar lo que estaba mal en un solo lugar. >> Así, en ciencias de la computación, quellamar a las entradas y salidas. Las entradas se denominan parámetros oargumentos y salidas se llaman devolver valores. Y vamos a ver cómo esto nos ayuda a clasificarde definir una función en un segundo. Así que esta es una definición de funciónpara la cubicación. Así que toma una entrada, y luegodevuelve ese número multiplicado sí mismo tres veces. Así que vamos a desglosar esta información. >> Así que tenemos una cabecera de la función, queconsiste básicamente en tres cosas. Así que tenemos los parámetros, queson, como he dicho antes, la insumos para esta función. Y entonces le damos la función de un nombre. En este caso, se llama cubo. Y a continuación, especificamos lo que el tipo dedel valor de retorno es. >> Así que en este caso, mi función cubotoma en un entero y también devuelve un entero. Así que si paso en dos, dos es un número entero,devuelve ocho a mí, lo que es un número entero. Así devolver parámetros de nombre de tipo. Preguntas acerca de eso? >> Y a continuación, el valor de retorno es en realidadespecificado al final diciendo retorno y luego regresar locontiene el valor devuelto. Así que en este caso, si lo ponemos todoen conjunto, una función toma en parámetros, se llama algo, ydevuelve algo que es el tipo que se dice que iba a ser. ¿Alguna pregunta? >> Entonces, ¿cómo se utiliza una función? Bueno, escribimos una función y luegolo usamos en nuestro programa, ¿no? Así que lo llamé cubo, yentonces puedo usar cubo. >> Pero lo que es importante tener en cuentaes que el orden importa. Si tengo cubo debajo principal, esva a ejecutar en el cubo. Y en este punto, no hay nadallama cubo en el programa, y ​​es sólo va a ser así, no tengoni idea de lo que es el cubo. >> Por lo tanto, le dirá, implícitadeclaración de la función. Ese es el error que aparece. Y así, en este caso, el cubo está por debajoprincipal, por lo que no va a saber de él. >> ALTAVOZ 5: Así principal es por lo generaldefine la última función? >> JOSÉ: ¿Así que la pregunta es,es el principal suele ser el último Lo que a usted le define? Y no. Es porque normalmente como principalpara estar en la cima, ¿verdad? Porque eso es lo primero quequiere abrir el programador de la programa para ver. Y entonces, ¿cómo podemos resolver este problema de quequiero principal para estar en la cima, pero el funciones que queremos, nos los quierena estar por debajo principal sin embargo, ser capaz de utilizar ellos dentro de la principal? >> Bueno, utilizamos lo que llamamosun prototipo de función. Así que lo que es un prototipo de la función esencialmentese está en primer lugar se lo la firma o de la cabecera de la funciónde lo que queremos implementar abajo aquí, y lo ponemos enla parte superior de un programa. >> Así que en este caso, se dice que, bueno,más adelante en nuestro programa, vamos hacer una promesa para implementar estafunción llamada int cubo, que toma entero de entrada. Así que ahora, ya que está por encima de principal,principal, que va a decir, oh, bueno, más adelante en el programa, que va a serallí, así que puede hacer referencia a ella, así que voy a sólo se esperará a que, por ahora. >> Y a continuación, en la parte inferior,implementamos cubo. Y entonces principal se acaba de decir,así, se ordenará de enlace estos dos símbolos juntos. Y vamos a cubrir lo quesignifica más tarde. Y así sabrá que este es elfunción de cubo que se debe utilizar. >> ROB: El [inaudible] de quererprincipal en la parte inferior o superior, he visto tanto. Hay cosas que simplemente les gustaponer principal en la parte inferior. Pero una vez que un proyecto se pone particularmentegrande, por lo general principal se encuentra en una presentar todos los suyos. Y en ese punto, al igual que elline cubo int haría - dentro de stdio.h son un grupode líneas al igual que int línea de entrada de cubo int. >> Y así los prototipos son cosas quetienden a poner en los archivos de cabecera, al ese momento, no importa. Bueno, no importa. Aquellos siempre van en la parte superior. Y si principal no es un archivo propio,usted no tiene que preocuparse de poner prototipos de funciones individualesen el archivo. >> JOSÉ: ¿Y vamos a llegar a eso un pocopoco más tarde, cuando Rob comienza a hablar sobre la compilación. Y por eso también hay una diferenciaentre parámetro y argumento. Y parámetro es justo lollamamos a estas entradas cuando definimos la función. Y lo llamamos un argumento cuandorealmente pasarlo a la función. >> Así pues, en este caso, este es un parámetro,como hemos dicho antes. Y cuando realmente lo usamos por allá,cúbica de x, entonces x sí es lo que llamamos un argumentoal cubo función. >> ROB: ¿Entonces los argumentos de los parámetros son - hay esta distinción, muyconfundido indistintamente. En este punto, para mí, es como una deesas palabras que cuando lo vea en la naturaleza, no puede dejar de forma inmediatacuestión de si lo están usando en el contexto correcto, porque eldiferencia es lo suficientemente sutil que sólo todo el mundo tiende - Yo casi siempre digo argumentoindependientemente de lo que quiero decir. >> JOSEPH: funciones y también son útilespara lo que llamamos efectos secundarios. Así que una función puede recibir ningún insumo, ytambién puede producir ninguna salida. Así que en este caso particular, estoyla definición de una subrutina que no tiene valor de retorno. Y con el fin de especificar que, utilizamoslo que llamamos un vacío aquí. Y por lo que el efecto secundario de esta funciónes que sólo imprime cosas a la página. En realidad, no toma ningunainsumos, y no lo hace en realidad producir cualquier salida. >> Pero esto podría ser útil en el sentidosi usted quiere, por ejemplo, depuración algo en su programa, si deseaescribir una pequeña subrutina que imprime, digamos, el contenidode memoria o algo así. Y así, estos efectos secundarios son a vecesútil fuera del contexto de igual que las entradas y salidas. ¿Alguna pregunta? >> Y para finalizar este segmento en particular,¿Qué hace este programa? Te voy a dar un par de chicossegundos para leer a través de él. En un nivel muy básico, lo que queremosdecir es que intercambia x e y, ¿no? >> Entonces, ¿cuántos de ustedes piensan en realidadesto va a cambiar xey? Levanten la mano. Nadie. Aceptar. ¿Quién cree que lo haráNo intercambiar xyy? Y la suma de que eraNo toda la habitación. Así que algunas personas no están seguros. Aceptar. Eso es razonable. >> Así que vamos a ir a través de lo que sucede cuandoen realidad se llama a las funciones por primera vez en Para responder a esta pregunta. Así que esto es lo que la memoriaClase de parecer. Esto es algo así como un modelo simplificadode lo que la memoria se ve como cuando ejecuta un programa. Así que hay algo que se llamala pila hasta aquí y algo que se llama el montón. Y éstas crecen haciael medio de memoria. >> Así que en este caso particular, cuandose llama a una función, consigue poner en la pila. Y entonces todo lo que está contenido en esela función se queda en lo que llamamos marco de pila de la función. Y así, para conseguir una buena visualización deesto, let's - por ejemplo, tuvimos la principal del programa anterior. Y en el interior de la principal, que se llama cubo. Así principal sería primero van a la pilaenmarcar, porque es la primera función eso se llama. >> Y luego, cuando el cubo se llama dentro deprincipal, que se puso en la parte superior de la principal dentro de la memoria. Así que lo que usted notará es que el cubotiene sus propios parámetros y su propios lugareños. Así que cuando realmente pasa algouna función, los parámetros que se consigue son copias de lo que fuepasado desde principal. >> Y para explicar especie de esto, vamos acaminar a través de un programa. Así que tenemos la pila, lo que essólo la parte de la pila. Y lo que hacemos es lo primero que inicializamosx e y a uno y dos. Así que tenemos estas pequeñas cajas. Están sentados en la pila del principalenmarcar en la pila. Contienen uno y dos. >> Ahora que llamamos intercambio. Lo que pasa es que pasamos x e y encambio y cambio, crea sus propias copias de esas variables a utilizar en el interiorde su marco de pila. Así que ahora por allá, tenemos una, quecontiene el valor que tenía x, y b, que contiene el valor que y tenían. Así que uno, dos. >> Y te darás cuenta de que esto es independientede x e y en el interior de la principal. Así que ahora creamos un temporalvariable para contener una. Hemos establecido una igual a b, por lo quecambios de uno a dos. Y entonces nos pusimos b iguala la temperatura, que es uno. >> Y entonces ahora salimos fuerade esta función. Al salir de la función, elmarco de pila se hizo estallar de la pila. Lo llamamos empuje. Usted aprieta un marco de pila en la pilay si usted hace estallar de la pila. Y así, lo que ocurre es todo lo quehabía en esa pila marco especie de justo sube en llamas. Y para que ya no existe. >> Pero, ¿qué nos damos cuenta? Nunca hemos cambiado realmente ellos valores de x e y, ¿no? Así que aquellos se quedaron local principal. Y pasando cosas en swap, queen realidad nunca ha cambiado los valores. Y ¿cómo llamamos a esto? Nosotros llamamos a esto pasa por valor. >> Así que en C, cuando se pasa las cosas enfunciones, se las pasa por su valor y hace una copia de ellos parala función de utilizar. Y vamos a aprender acerca de algo que se llamapasando por su posterior consulta, pero eso es una forma que puede resolver este problema. Pero no te preocupes porque hasta más tarde. >> ROB: Y en realidad, ese término, que pasapor referencia, por lo que C no tiene ni siquiera pasando por referencia. C exclusivamente ha de pasar por valor. No importa lo que hagas, siempre estáspasando una copia de algo. Es sólo que, al igual que en cierto modo me mencionéque antes con punteros y que una cadena es realmente sólo cuatrobytes que apunta a algún lugar de la memoria. >> Bueno, si tengo esta cadena y esme dice que es donde la cadena - bueno, si tengo este puntero a estacolocar en la memoria, entonces puedo pasar una copia de ese puntero a una función, yesa función todavía sabe dónde en memoria que es. Así que estos dos indicadores están señalandoal mismo lugar en la memoria, y eso es lo que vamos a ser capaces depara modificar las cosas más allá de la marco de pila actual. >> JOSÉ: ¿Quieres hacer la compilación? >> ROB: No, son las 5:30. >> JOSÉ: OK. Es 05:30. Aceptar. Así que vamos a cubrir la compilación Supongo que enla próxima sección, o la sección de LEADER en ese punto. Y - >> ROB: ¿Alguna pregunta? >> JOSÉ: ¿Alguna pregunta? ¿Sí? >> ALTAVOZ 5: Uso de cadenas de CS50, cualquierfunciones que queremos utilizar para aquellos, que será como funciones C. CS50 no ha entrado yhecho ningún adicional. >> ROB: Correcto. Cualquiera de los de C como [inaudible], queutilizaría los de nuestras cadenas. >> JOSÉ: Y una última cosa que quieromención es que tenemos una guía de estilo para esta clase. >> ROB: Oh, sí. >> JOSÉ: Así que si vienes de unprogramación de fondo antes, podría tener ciertas convenciones cuandoestás escribiendo código como poner llaves en la misma línea o particularesformas de sangría o nombrar las variables. En esta clase, queremos seguir unguía de estilo específica sólo porque, así, si usted sale y trabaja enla industria, que va a esperar seguir la guía de estilo de laempresa a la que vas a. >> Como por ejemplo, Facebook creotiene un tipo particular de nombrar convención. Y hay diferencias entre el camellovariables de la carcasa y al igual que separándolos con guiones bajos. Y también, creo que es más importante, al igual quepor ejemplo, la sangría, ¿verdad? >> Nosotros empezamos llaves dondela condición es, y están en la línea siguiente. Y también ponemos llaves enincluso si es sólo una línea. Y muchas veces, hay maneras de hacerdonde usted puede dejar estos aparatos de si se trata de una sola líneabajo la instrucción If. Pero en esta clase, queremos seguir unguía de estilo específico para que lo recibe utilizado para ese tipo de cosas. >> ROB: Sí, y Style 50 se va ahacer cumplir esta guía de estilo, y estamos va a utilizar Style 50al grado de su código. Por lo que hace las cosas más fáciles para nosotros yesperemos que no debe hacer cosas que mucho peor para usted dado laestilo estandarizado no debería ser tan poco realista. >> JOSÉ: Y por último, para encontrar el estiloGuía, vaya a manual.cs50.net/style. Y sí. >> ALTAVOZ 4: ¿Vas a hacer cumplircaracteres por línea? >> ROB: Si. >> JOSÉ: Lo siento, chicos. >> ROB: Eso es como uno de los únicos. En este punto, estoy bien con 120. Estoy bien con decir 120caracteres por línea. Entiendo que exista un límite. Creo que 80 es tan pequeño, peroestamos aplicarla. >> JOSÉ: En lo personal, creo que conC, 80 caracteres es más bien. Una vez que usted comienza a recibir a otrolenguajes como JavaScript y PHP, y no tan razonable que simplemente limitara 80 caracteres. Aceptar. Bueno, eso fue la sección super. ¿Alguien quiere dulces? >> ALTAVOZ 4: Si.

Noticias relacionadas