Las estructuras matemáticasdiscretasson la base dela informática.
Estas estructurasson tan universales quela mayoría de lostrabajos de investigación enlateoría de la computación,lenguajes
de programacióny los métodosformales
depresentar los conceptosen
términosde la matemática discretaen
lugar de código.
El supuesto subyacente esque el lectorsabe cómo traducirestas estructurasen unfiel cumplimientode un programade trabajo.
La falta de materialque explicaesta traducciónfrustralos forasteros.
Lo que profundizala frustraciónes que cadamodelo de lenguajecodificaestructuras discretasde una maneradistinta.
Muchas de lascodificacionesson tan inmutables,
estructuras de datospuramente funcional(incluso enlos
lenguajes imperativos), un
tema quepor desgraciaomitemuchos
currículosde informática.Muchas bibliotecasestándar proporcionansólomutableversiones
deestas estructuras de datos, lo quelleva
inmediatamente alas trampas.
Okasakiclásicodeestructuras de datospuramente funcionales una referencia esencial:
ATENCIÓN: MATEMÁTICAS NO TIENE EFECTOS
SECUNDARIOS
Los
recién llegados error fatal que al traducir las matemáticas en código es
mutable utilizando estructuras de datos en la que sólo una estructura
inmutable, estaba en lo cierto.
Las matemáticas no tiene efectos secundarios.
Las matemáticas no puede modificar
el valor de una variable - ya sea global o local.No se puede mutar un elemento de una matriz.Y, una función matemática
devuelve siempre el mismo valor para la misma entrada.
La traducción literal de las
matemáticas en el código no puede contener los efectos secundarios.
Las matemáticas son un
lenguaje puramente funcional.
Por supuesto, una vez que las
limitaciones de una aplicación se entienden, por lo general es posible cambiar
las estructuras de datos inmutables mutable de los lugares clave para lograr
ahorros de rendimiento.
Sin embargo, a los efectos de
creación de prototipos, que siempre es mejor comenzar con una aplicación
directa, puramente funcional.
CONJUNTOS Y CONJUNTOS DE PODER
La prestación de un conjunto
como el código suele ser un tipo, una colección de respaldo de un árbol de
equilibrado o un mapa hash, o un predicado.
En matemáticas, un conjunto es
una colección desordenada de elementos.
El conjunto vacío - ∅ - es un conjunto especial que no contiene
elementos.
La sintaxis de los juegos de
llaves es literal: {}.Por ejemplo, el conjunto
{1,2,3} es el conjunto que contiene 1, 2 y 3.
La relación x ∈ S declara que el valor de x es un miembro
del conjunto S.
Establece como tipos
Conjuntos infinitos suelen ser
codificados como tipos.
(Por supuesto, algunos
conjuntos finitos se codifican como tipo también.)
En algunos casos, un conjunto
X se define como un subconjunto de otro conjunto Y:
X ⊂
Y. Esta relación subconjunto
puede ser representada como sucesiones en un lenguaje como Java o Python, si
estos juegos están destinados a ser los tipos:
la clase X se extiende Y {...} Cuando un conjunto X se define
como el conjunto potencia de otro conjunto Y:
X = P (Y) = 2Y, entonces X e Y serán los
tipos, y los miembros de X será colecciones.
CONJUNTOS COMO COLECCIONES
Cuando el contenido de un
conjunto se calcula en tiempo de ejecución, a continuación, a menudo será una
colección ordenada respaldado por una estructura como un árbol rojo-negro.
No es difícil de implementar
un árbol de búsqueda puramente funcional, ordenado (pero no balanceada) en Java:
interface Ordered <T> {
public boolean isLessThan(T that) ;
}
abstract class SortedSet<T extends Ordered<T>> {
public abstract boolean isEmpty() ;
public abstract boolean contains(T element) ;
public abstract SortedSet<T> add(T element) ;
public static final <E extends Ordered<E>> SortedSet<E> empty() {
return new EmptySet<E>();
}
}
final class EmptySet<T extends Ordered<T>> extends SortedSet<T> {
public boolean isEmpty() {
return true ;
}
public boolean contains(T element) {
return false ;
}
public SortedSet<T> add(T element) {
return new Node<T>(this,element,this) ;
}
public EmptySet() {
}
}
final class Node<T extends Ordered<T>> extends SortedSet<T> {
private final SortedSet<T> left ;
private final T element ;
private final SortedSet<T> right ;
public boolean isEmpty() {
return false ;
}
public Node(SortedSet<T> left, T element, SortedSet<T> right) {
this.left = left ;
this.right = right ;
this.element = element ;
}
public boolean contains(T needle) {
if (needle.isLessThan(this.element)) {
return this.left.contains(needle) ;
} else if (this.element.isLessThan(needle)) {
return this.right.contains(needle) ;
} else {
return true ;
}
}
public SortedSet<T> add(T newGuy) {
if (newGuy.isLessThan(this.element)) {
return new Node<T>(left.add(newGuy),this.element,right) ;
} else if (this.element.isLessThan(newGuy)) {
return new Node<T>(left,this.element,right.add(newGuy)) ;
} else {
return this ; // Already in set.
}
}
}
En losúltimos añosse ha producidouna herramienta queha ayudadoatodos los desarrolladoreswebmás que cualquier otro-las herramientas de desarrollodel navegador.Trabajando en armonía conel navegadorweb,las herramientas de desarrolloque nos permitemanipular elementosDOM, los estilosCSS, JavaScripty otra información útildela misma ventanaa menudoen tiempo real.
Históricamente,los desarrolladoreshan utilizadoFirebugde Firefoxadd-onpara desarrollar y depurarsus sitios web, peromás recientemente,cada navegadorha desarrollado supropio conjunto deherramientas ycada uno viene consus propias ventajasy desventajas.Hoy en díaparece difícilimaginar que algún díala construcción de unsitio web sinuna deestas útiles herramientas, que normalmente sonaccesibles, ya sea presionando"F12"en Windowso "Comando"⌘",opción"⌥e "I"en el Mac,o porla derechaclicen la página yselecciona "Inspeccionarelemento".
¿Pero está ustedusandolas herramientas de desarrollodesu potencial?Elmás positivoacerca delas herramientas de desarrolloes que sonincreíblemente fácil de usar,sino como unresultado delos desarrolladoresa menudose pierdauna gran parte dela funcionalidad proporcionada.Inspirados poruna charlade vídeode Paulirlandés yPavelFeldman, he compiladouna lista de los"secretos"de la consola delos desarrolladores.No estoyesperando a cadauno de estos paraserdesconocido para usted, pero espero quealgunos de estosle ayudarán aconvertirse en un desarrolladorweb, inclusomejor.
Si usted tienemás secretos, no dude endejar un comentarioal finaldel artículo yvoy a actualizarelmensajeuna vez que hayacomprobado.También me encantaríasaber quéconsola dedesarrolladorutiliza como suprincipalherramienta de desarrollo,que me haga saberde abajo!
La"consola"Tab
El corazón de cualquierherramienta de desarrolloesla "consola"ficha en la quepuede dar salida adepurary ejecutar comandosenlapágina web actual.
Referenciael elemento actual
Chrome, Firefox, Opera, Safari-Si tieneun elementoseleccionado enlaficha "Elementos", puede utilizarla referencia de$ 0 allamarlodentro de su código.Por ejemplo, paraver el contenido delos elementos"tendría que escribir$0.innerHTML.EnChrome y Safari, puede llamar ala consolade cualquiera delas otras fichascon la tecla "Escape"para que ustedno tiene quecambiar constantemente.EnFirebug,la consolaestá disponiblea través de unicono situado a laizquierda de las pestañasopulsandoCtrl, Shift yLen Windows o⌘Comando,MayúsculasyLen Mac OS.
EnOpera, se puede seleccionar el elemento anteriorquehabía puesto de relieveel uso de $1.EnChrome y Safari, puede seleccionar los elementos anterioressehan puesto de relieveel uso de $1 -$ 4.
Utilizandoconsole.loga la salida delos valores demúltiples objetos yal mismo tiempo
Todos-Sabemosconsole.log()es increíblemente útilpara la salida dedepuracióna la consola dedesarrolladores, ypreferible alas alertas,pero puede serirritante para lasalida deunacadena seguida deun objetosi no eresconsciente deesta característicade la tala. Utilizandoconsole.log('mensaje:' + $ ('# mensaje'))sólo le diráque su mensajees un objeto,y el registro delosobjetospor supropiapuede ser confusosi el registroestá sucediendoen medio deun bucle.
console.log() en realidadaceptavarios parámetros, por lo que puede dar salida atanto la cadenay el objetodelmismo comando que usaconsole.log('mensaje:', $ ('#mensaje')), o cualquier otra combinación detipoJavaScriptque se pueda imaginar.
Ustedpuede utilizarconsole.warn()para los mensajes deadvertencia;console.error()para el errorde mensajería yconsole.info()para los mensajes deinformación.También puede utilizarconsole.assert() para probarlas expresionesdeverdadero o falso.
(Gracias aMasklinnpor la información adicional)
Re-utilizando uncomando deJavaScript
Todos-Si usted haescrito un comandoen la consola deJavaScripty deseavolver acorrer,simplemente pulsela tecla de arribapara desplazarse poruna lista de loscomandos anterioresquehan llamadodesde la consola.
Persistir
Chrome, Firefox-No hayunbotónclaroparala persistencia decontenidosenla consoladerechade Firefoxpor encima de laconsola,pero esun poco másoculto enChrome.Haga clic derechoen la consola paraque aparezca un menúcon"Mantenerregistroen la navegación" como una opción.
Viendo el código fuentede un objeto
Firefox-Firefoxsoporta el métodotoSource()lo que significa queestá disponible enFirebugpara imprimirel contenido de unobjeto como una cadenaen la consola.
Cambio demarco
Firefox-Ejecución de comandosJavaScriptdesde la línea decomandos de la consolaes muyútil,pero si usted tieneun iframeque lidiarcon ellarápidamente se convierte enun problema. Afortunadamente, ustedpuede utilizarel siguiente comando paracentrarse enel marcode que se tratey ejecutarsus órdenesen contra.
1
cd(window.frames['frameName']);
Chrome -Chrome permitecambiarel marcode una manera diferente.En una páginaquecontiene marcos,tendrá queir a la "consola" y eligetu marcoen el menú desplegableen la parte inferiorde la consola.
Opera -Operatambién tieneuna lista desplegablepara cambiar elmarcoque está disponible enla"consola" yla pestaña"Documentos".El menú desplegablesólo aparecerán enla"consola" fichasi haymarcospara elegir.
(Gracias a Paul Irish y a Daniel Herzog por la información adicional)
Copiar el códigodirectamente alportapapeles
Chrome, Firefox, Safari- Uso dela copia()de comandosen la consola deherramientas de desarrollo, puede copiar el contenido de uncomandodirectamente alportapapeles.
Realización de cálculosen el navegador
Todos-Este consejotiene muchosentido,pero es sorprendentecuánta genteno lo use! Silo que necesita saberla respuesta aun cálculo matemáticorápidamente(por ejemplo,la anchura detres columnasen un contenedor de456px) no es necesariopara abrirla calculadora. Sólo tienes que escribirla pregunta de matemáticasen la consola delas herramientas de desarrolloysele devolverá larespuesta.Es152,porel camino.
Los"Scripts"Tab
El hogar detodos losJavaScript que se ejecutaen la página, el script (s)ficha contieneuna lista desplegableque le permiteseleccionar lasecuencia de comandos quedesea depurar.
Tratar conminifiedJavaScript
Chrome,Internet Explorer, Safari-puntos de interrupciónPuesta enJavaScripthace que la depuraciónmucho más fácil, pero si el códigoya lo hahechoa la producción, entonces es probablemente ha sidominiaturizada.¿Cómo se puededepurar el códigominified? Por suerte,algunos de los navegadorestienen una opción parano-minify tuJavaScript.
EnChrome y Safari, sólo tiene que seleccionarla pestaña 'Scripts', encontrarel archivo correspondiente enel menú desplegabley luegopresione el botón "{}" (Pretty Print) en el icono situado en elpanel inferior.
EnInternet Explorer 9,haga clic en elicono de la herramientapor laselección desecuencia de comandos demenú desplegablepara encontrar la opciónpara dar formato alJavaScript.
Observando las variables
Todos-.Una herramienta comúncon el desarrollo deNET,'ver'le permite controlaruna lista de variablesde un lugara mano,en la parte superiorde la barrade la derechaen la"scripts" ficha.Viendouna variablees muy fácil,sólo tienes que escribirel nombrede la variable y'ver'mantendrá su valorhastala fecha.
Edición y ejecución deJavaScriptenla marcha
Chrome -En lugar de editarenun editor independientey recargala página,con Chromese puede editardirectamente enla página.Simplemente haga doble clicen la que deseacambiar el códigoy el tipo!Presiona Ctrl/ CmdyS para guardar.
Creación deun punto de interrupcióncuandose produceun error de JavaScript
Todos- simplementehaga clic en elicono de pausaenla ficha Scriptde la consolade desarrolladorespara hacer una pausael guióncuando elerror de JavaScripten primer lugar.La línea queha causadoel errorsepuso de relievepara que los revise.
Creación deun punto de interrupciónguión basado enelcambio deDOM
Chrome, Firefox-Si sabe que supáginase rompe cuandouna partede los cambios deDOM,o simplemente quieresaber quéscript esresponsable de cambiar elatributode ese elemento, ChromeyFirebugtantole permitenestablecer unpunto de rupturaJavaScriptefectivalo que le permiteencontrar al culpableen el código.Simplemente seleccionael elementoque desea supervisary haga clic derechopara seleccionarlas condicionespara romperel.
(Gracias aJasonWilsonpor la información adicional)
Laficha "Elementos"
Conocido como el "HTML" en la pestaña de Firefox ylos "Documentos" en la pestaña de la Ópera,los "elementos"ficha muestra elDOMen su estado actual. EnInternet Explorer, se le tenga que pulsar"Actualizar"botón para ver elDOM actual.
Obtención delas dimensionesde un contenedor dela manera más fácil
Chrome, Safari-Soy un gran fande la utilización deoverflow: autopara contenerlos elementos flotantes, pero causaproblemasen versiones anteriores deInternet Explorera menos que especifiqueunancho real(autoy el 100%noserá suficiente).Las dimensionesse pueden encontrar enel "estilocomputarizada", que es práctico, perosigue siendo unnúmero de clics.UsandoChrome oSafari, es fácilver las dimensionesde un elementose cierne sobre élen el código fuenteen laficha "Elementos", o bienusandola lupaen labarra de herramientas inferior.
Firebug,Internet Explorer, Opera-Usted tendrá queseleccionar lapestaña "Diseño"en elpanel de la derechao para desplazarse porla lista de estiloscomputado enla barra lateralderecha.
(Gracias aMasklinnpor la información adicional)
Ampliarla vista detodos los elementos
Firefox, Opera-EnFirebug, enel asterisco"HTML"pestañapresionando(*)en el tecladonumamplíatodos los elementos exceptolos scripts yhojas de estilo. Presionas la tecla shifty pulsandoasterisco tambiénse ampliaránlos scripts yhojas de estilo(link)los elementos.
EnDragonflyenOpera, hay un botónenlos "Documentos"ficha parahacer la misma tarea, como se muestra a continuación.
Margen deincremento, el relleno, anchura, altura,borde-hasta el color
Todos-Si tieneun elemento quees necesario modificarel margen, relleno,anchura o la altura, usted puedeutilizar las teclas decursorpara aumentar / disminuirel tamaño.
Sólo tiene que utilizarlas teclas decursor arriba y abajopara aumentar / disminuirpor una unidadde 1.
EnChrome,SafariyFirebugse puedeincrementar / disminuirenuna unidad de 10porla celebración de latecla "Shift"mientras pulsalas teclas decursor arriba y abajo.
EnChrome y Safari, puedeincrementar / disminuiren una unidadde 0,1sostener latecla "Alt"mientras pulsalas teclas decursor arriba y abajo.
EnChrome y Safari, también puedeincrementar / disminuirenuna unidadde 100, mantenga pulsada latecla "Shift"mientras pulsaPage-Up y Page Down.
Estos accesos directosson especialmente útiles cuandono está segurode lo que exactamenteel tamaño correctodebe ser.EnChrome, SafariyOperatambién se puedeutilizar las teclas dearriba y abajopara aumentar o disminuirlos valores de color.
Chrome,Firefox, Opera-CSSEl estilode la consola dedesarrolladores impresionante, perose vuelve un pocomásdifícil cuandolas pruebasde otros estados, comoelementode activación.Afortunadamente,hay una solución.
Chrome tieneun botónintegradopara este propósito.Enbuscarla mano derechade laficha "Elementos"la columnade puntospara elelemento/cursoricono quele permite probarotros estados.
ParaFirebug,en lacolumna de la derechahaga clic en elmenú dela flechaal lado de laficha Estiloyseleccionarel estado deseado.
EnOpera, esel icono quese parece a unalista de "Estilos".
Rotea través de tiposde definición de color
Chrome, Safari-Los colores se puedendefinirde muchas manerasen una páginaweb-por su nombre,a través de unvalor hexadecimal(3 ó 6dígitos),comoRGB o HSL(o sus versionesalfa transparente).Se puede girara través de estasdefiniciones diferentes enChrome oSafari, haga clic enel cuadrado de coloral lado de sucolor.
(Gracias aMasklinnpor la información adicional.)
Selector de color
Opera -EnOpera,haga clic en elcuadrado de coloral lado de uncolorle permite seleccionarun color diferentea través de unselector dela mano.
La ficha"Recursos"
Lasección de recursosse enumeran todos loshojas de estilo,JavaScript,las imágenes utilizadasen su página.Esta ficha, lamentablementeno existe enFirebugo Internet Explorer, aunquealgunas de sus característicasse integranaotras fichas.
Guardar los cambios
Chrome,Internet Explorer, Safari-Hacer cambios enelCSSoJavaScriptes grande, perose convierte en unamolestiade volver a implementarenel código fuenteuna vezque esté satisfecho.
EnInternet Explorer,en cada fichaunicono "Guardar"proporcionala funcionalidad deguardar en un archivoen una basepor archivo.
Mientras tanto, la ficha"Recursos"en Chrome ySafaritieneuna característica muy útilque almacenatodos los cambiosenlas revisionesespecíficasque le permite irrápidamente adelante y atrása través de todoslos cambios.Busque el archivoen el quehemosaplicado los cambios(quese puede acceder fácilmentehaciendo clic en elnombre de archivojunto al elementoque ha cambiado),y una lista delas revisionesserán proporcionados.EnChrome,haga clic derecho sobreelnombre de archivo paraguardar una nueva versiónde su archivo.EnSafari, lamentablementetendremos quecopiar y pegar.
Cookies yalmacenamiento
Chrome, Opera, Safari- También enla lista de recursoses unalista de fácil accesodediferentes opciones de almacenamientojunto conlos datos almacenadospara cada opción.Operatiene un "almacenamiento"pestañaquehace lo mismo.
Lapestaña "Red"
La fichade red muestratodos los recursosy los archivos descargadospara cargarla página. En la mayoría delos casoslas herramientas de desarrollotienen que estar abiertosala ficha Red paramostrarla información, así que puede que tenga que actualizar. La fichase conoce como "red" enFirefox. ParaInternet Explorer, que sólo está disponibleen la versión 9y posteriores.
Deshabilitarcaché del navegador
Todos-Cadanavegador compatiblele permitedesactivar la caché, pero no hay coherenciacon la forma.
EnChrome,usted encontrarála opciónen laconfiguración dela rueda. EnFirebug, usted encontrará la opciónenla flechajunto ala cabecera de"Net"ficha.EnInternet Explorer, laopción se encuentra en"Caché"en la barra demenú.
EnOpera, para borrar la caché, haga clic en la ficha Red, seleccione la pestaña de opciones de redsecundaria yelegir la primera opción. EnSafari, puede desactivar la memoria caché del navegadorenel menú Desarrolloen la barra demenú.
Para que aparezca lalimpieza de caché(y otros datos) de diálogoen cualquier navegadoren WindowsCtrl, Shift y Suprimir.
(Gracias aSteven y Karlpor la información adicional)
Estado latente
Todos-EnChrome y Safari, en la pestañade red le permiteverel tiempo que tardaun servidor pararesponder a una solicitud. La línea de colorse desvaneciópara cada recursoindica cuándofue enviada la petición, ycuando la respuestafue enviado de vuelta. El colornegro indicaqueel recursose ha descargado.EnChrome, puedesflotar sobreestas líneas paraobtener un desglose delas que el tiempotranscurrió.
EnOpera, losmismos principios se aplican, excepto la latenciase mide poruna línea grisen lugar deuna línease desvaneció.
EnInternet Explorer, la latenciase marca comoamarillo yse cierne sobrela líneale darámás información.
EnFirebug, la latencia esmarcado enel color púrpuray etiquetados como'Espera'.Se cierne sobreuna de estas líneasenFirebugtambiénofreceun desglose detallado delas que el tiempotranscurrió.
DOMContentLoaded, la carga deeventodisparado
Chrome, Safari-La fichade red paraChrome y Safaritambién reveladosdatos adicionales,DOMContentLoadedcomo una línea azuly elevento de carga defuegocomo una línea roja.
La líneaDOMContentLoadedindicacuando el navegador seha terminado deanalizar el documento(perode otros recursoscomo imágenesy hojas de estilono se puede descargar), mientras quela línea de eventode cargaindica cuandoestos recursosse han completado.
Si los doseventos se disparanal mismo tiempo,la línea seráde color púrpura.
(Gracias aStevenyJoeypor la información adicional)
otro
Rupturas
Todas-A veces me parecea milas herramientas de desarrollose han estrelladoy no respondea los clics demi mouse.En lugar decerrar laventana del navegadoryvolver aabrir, a menudo encuentroque el uso delos atajos de tecladopara cerrary abrir de nuevolas herramientas de desarrollopara solucionar el problema.
Espero que estascaracterísticas ysecretoshan sidode utilidad para usted, aunquesu nivel de habilidady experienciava a determinar cuántosde estosson nuevos para usted.Deliberadamente nohemos incluidoperfiles ydepuración remota enesta lista, ya que estosson temas quequiero tratarcon más detalle enun artículo posterior.Por favor,siéntase libre dedejar comentarios, correcciones ysus propios consejosde abajo!