抄作业

用户头像
escray
关注
发布于: 2020 年 05 月 13 日
抄作业

2020-05-10



今天在补前两天训练营的课,结果看到 @熊节 大大的一篇文章,就忍不住去去把知乎上的专栏都看了一遍。



回过头来,看了一下 熊大 分享的软件是写给谁用的截图,即使是 Args 这样一个功能相对简单的程序也需要考虑谁用,怎么用之类的问题。



没有真实的用户,可以假设,是另一个或多个程序员调用,而是用的方法就是导入 jar 包。



今日任务:



  1. 任务3:Part I:Schema

  2. 开发 Schema 输入和解析的逻辑



看到提示,我才意识到原来在初始需求的部分,题目就说明了要开发的是一个解析器 parser,并且需要一个参数结构 schema,所以我一直好奇,其他同学是怎么知道一上来就需要一个 shcema 呢。



schema 描述程序接受那些参数,包括有标记的类型、数量和缺省值。



我还真是连需求都没整清楚,就开始写程序了。



// SchemaTest01.java
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class Schema01Test {
@Test
void should_return_boolean_if_schema_flag_is_l() {
assertEquals(Boolean.TRUE, new Schema01("l:bool").getValue("l", "true"));
assertEquals(Boolean.FALSE, new Schema01("l:bool").getValue("l", "false"));
assertEquals(Boolean.FALSE, new Schema01("l:bool").getValue("l", ""));
}
@Test
void should_return_integer_if_schema_flag_is_p() {
assertEquals(1, new Schema01("p:int").getValue("p", "1"));
assertEquals(0, new Schema01("p:int").getValue("p", ""));
assertEquals(-1, new Schema01("p:int").getValue("p", "-1"));
}
@Test
void should_return_string_if_schema_flag_is_d() {
assertEquals("/usr/local", new Schema01("d:sting").getValue("d", "/usr/local"));
assertEquals("", new Schema01("d:sting").getValue("d", ""));
}
}
// Schema01.java
public class Schema01 {
public Schema01(String config) {
}
public Object getValue(String flag, String value) {
if (flag == "l") {
if (value == "true") {
return Boolean.TRUE;
}
return Boolean.FALSE;
}
if (flag == "p") {
if (value.isEmpty()) {
return 0;
}
return Integer.parseInt(value);
}
return value;
}
}



之前看过一次视频演示,在某种程度上“抄作业”,所以 Schema 的测试能写出一个大概的模样,但是对于 Schema 实现部分的重构,我就有点功力不足了。



代码的问题大致有两个,一个是构造函数里面的参数 config 没有用到,第二个是 getValue 里面的 if 嵌套太多,加上硬编码。



发布于: 2020 年 05 月 13 日 阅读数: 31
用户头像

escray

关注

Let's Go 2017.11.19 加入

大龄程序员

评论 (1 条评论)

发布
用户头像
建议重新修改下标题,更吸引大家点击~
2020 年 05 月 13 日 11:06
回复
没有更多了
抄作业