{"id":615,"date":"2010-09-01T19:24:34","date_gmt":"2010-09-01T19:24:34","guid":{"rendered":"http:\/\/cncodingdojo.wordpress.com\/?p=74"},"modified":"2010-11-17T16:53:16","modified_gmt":"2010-11-17T18:53:16","slug":"kata-4-kataargs","status":"publish","type":"post","link":"https:\/\/blog.cancaonova.com\/desenvolvimentoti\/kata-4-kataargs\/","title":{"rendered":"Coding Dojo\u00a0#4:\u00a0KataArgs"},"content":{"rendered":"<p>Este Dojo foi de encerramento de fase, por enquanto utilizamos Php e phpUnit e este ser\u00e1 o \u00faltimo dojo com essa linguagem,\u00a0inicialmente definimos que trocaremos de linguagem a cada 4 encontros, e no pr\u00f3ximo iniciamos a temporada <em>Ruby<\/em> .. uhuu .. =D<\/p>\n<p><strong>O kata<\/strong><\/p>\n<p><strong>Descri\u00e7\u00e3o do problema<\/strong><\/p>\n<p>A maioria de n\u00f3s tivemos de analisar os argumentos de linha de comando ao longo do tempo.\u00a0Se n\u00e3o temos um utilit\u00e1rio conveniente, ent\u00e3o n\u00f3s simplesmente andamos pela matriz de seq\u00fc\u00eancias que s\u00e3o passadas para a fun\u00e7\u00e3o\u00a0<em>principal.<\/em> H\u00e1 diversos utilit\u00e1rios bons dispon\u00edvel a partir de v\u00e1rias fontes, mas eles provavelmente n\u00e3o fazem exatamente o que queremos.\u00a0Ent\u00e3o vamos escrever um outro!<\/p>\n<p>Os argumentos passados para o programa \u00e9 composto de flags e valores.\u00a0Flags devem ser um caractere, precedido por um sinal de menos.\u00a0Cada bandeira deve ter zero ou um valor associado a ele.<\/p>\n<p>Voc\u00ea deve escrever um parser para este tipo de argumento.\u00a0Esse analisador tem um esquema que detalha os argumentos que o programa espera.\u00a0O esquema especifica o n\u00famero e tipos de sinalizadores e os valores que o programa espera.<\/p>\n<p>Depois que o esquema tenha sido especificado, o programa deve passar a lista de argumentos reais para o analisador de args.\u00a0Ele ir\u00e1 verificar se os argumentos coincidem com o esquema.\u00a0O programa pode ent\u00e3o perguntar o analisador args para cada um dos valores, usando os nomes das bandeiras.\u00a0Os valores s\u00e3o retornados com o tipo correto, conforme especificado no esquema.<\/p>\n<p>Por exemplo, se o programa est\u00e1 sendo chamado com estes argumentos:<\/p>\n<p>-L -p 8080 -d \/ usr \/ logs<\/p>\n<p>Isso indica um esquema com tr\u00eas flags: l, p, d.\u00a0O &#8220;L&#8221; (logging) \u00e9 uma flag que n\u00e3o tem valores associados, \u00e9 uma flag booleana, TRUE se houver, False se n\u00e3o.\u00a0o &#8220;p&#8221; (porta) tem um valor inteiro, e o \u00abd\u00bb (diret\u00f3rio) tem um valor string.<\/p>\n<p>Se uma flag mencionada no esquema est\u00e1 ausente nos argumentos, o valor adequado padr\u00e3o deve ser devolvido.\u00a0Por exemplo, &#8220;False&#8221; para um boolean, 0 para um n\u00famero, e &#8221; &#8221; para uma string.Se os argumentos apresentados n\u00e3o correspondem ao esquema, \u00e9 importante que uma boa mensagem de erro seja dada, explicando exatamente o que est\u00e1 errado.<\/p>\n<p>Se voc\u00ea quiser extender um pouco mais a funcionalidade, adicione ao software o suporte a listas de argumentos, por exemplo<\/p>\n<p>-g this,is,a,list -d 1,2, -3,5<\/p>\n<p>Assim, a &#8220;flag&#8221; g indica uma lista de strings [&#8220;this&#8221;, &#8220;is&#8221;, &#8220;a&#8221;, &#8220;list&#8221;] e a flag &#8220;d&#8221; \u00a0indica uma lista de n\u00fameros inteiros, [1, 2, -3, 5 ].<\/p>\n<p><strong><span style=\"font-weight:normal\"><br \/>\n<\/span><\/strong><\/p>\n<p>Refer\u00eancia: <a href=\"http:\/\/codingdojo.org\/cgi-bin\/wiki.pl?KataArgs\" target=\"_blank\">http:\/\/codingdojo.org\/cgi-bin\/wiki.pl?KataArgs<\/a><\/p>\n<p><strong>Retrospectiva<\/strong><\/p>\n<p>Bom:<\/p>\n<ul>\n<li>todos entenderam o problema<\/li>\n<li>nivel de dificuldade<\/li>\n<li>\u00faltimo dojo em PHP<\/li>\n<li>mais intera\u00e7\u00e3o<\/li>\n<\/ul>\n<p>Ruim:<\/p>\n<ul>\n<li>atraso projetor<\/li>\n<li>celular (marcos , salom\u00e3o)<\/li>\n<li>conversa paralela na plat\u00e9ia<\/li>\n<li>plat\u00e9ia virou piloto<\/li>\n<li>hor\u00e1rio de almo\u00e7o<\/li>\n<li>fome<\/li>\n<li>kata em ingl\u00eas<\/li>\n<li>paty tumulto<\/li>\n<\/ul>\n<p><strong>Dados do encontro<\/strong><\/p>\n<ul>\n<li>Organizadores: <a href=\"http:\/\/twitter.com\/marcomoura\">Marco Moura<\/a> e\u00a0<a href=\"http:\/\/twitter.com\/lucihana\">Luciana Mendes<\/a><\/li>\n<li>Participantes: <a href=\"http:\/\/twitter.com\/carlos_tumulto\">Carlos Eduardo<\/a>, <a href=\"http:\/\/twitter.com\/marcomoura\">Marco Moura<\/a>, <a href=\"http:\/\/twitter.com\/nati57\">Nat\u00e1lia Marcondes<\/a>, <a href=\"http:\/\/twitter.com\/patfcarv\">Patricia Carvalho<\/a>, <a href=\"http:\/\/twitter.com\/razzi\">Rafael Salom\u00e3o<\/a> e <a href=\"http:\/\/twitter.com\/lucihana\">Luciana Mendes<\/a>.<\/li>\n<li>Kata: KataArgs  ( <a href=\"http:\/\/codingdojo.org\/cgi-bin\/wiki.pl?KataArgs\" target=\"_blank\">http:\/\/codingdojo.org\/cgi-bin\/wiki.pl?KataArgs<\/a> )<\/li>\n<\/ul>\n<p><strong>Fotos<\/strong><\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Este Dojo foi de encerramento de fase, por enquanto utilizamos Php e phpUnit e este ser\u00e1 o \u00faltimo dojo com essa linguagem,\u00a0inicialmente definimos que trocaremos de linguagem a cada 4 encontros, e no pr\u00f3ximo iniciamos a temporada Ruby .. uhuu&#8230;<\/p>\n","protected":false},"author":4413,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[36209,10],"tags":[103619,103595],"_links":{"self":[{"href":"https:\/\/blog.cancaonova.com\/desenvolvimentoti\/wp-json\/wp\/v2\/posts\/615"}],"collection":[{"href":"https:\/\/blog.cancaonova.com\/desenvolvimentoti\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.cancaonova.com\/desenvolvimentoti\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.cancaonova.com\/desenvolvimentoti\/wp-json\/wp\/v2\/users\/4413"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.cancaonova.com\/desenvolvimentoti\/wp-json\/wp\/v2\/comments?post=615"}],"version-history":[{"count":3,"href":"https:\/\/blog.cancaonova.com\/desenvolvimentoti\/wp-json\/wp\/v2\/posts\/615\/revisions"}],"predecessor-version":[{"id":952,"href":"https:\/\/blog.cancaonova.com\/desenvolvimentoti\/wp-json\/wp\/v2\/posts\/615\/revisions\/952"}],"wp:attachment":[{"href":"https:\/\/blog.cancaonova.com\/desenvolvimentoti\/wp-json\/wp\/v2\/media?parent=615"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.cancaonova.com\/desenvolvimentoti\/wp-json\/wp\/v2\/categories?post=615"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.cancaonova.com\/desenvolvimentoti\/wp-json\/wp\/v2\/tags?post=615"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}