对比十二年前的代码,发现了点有意思的东西

无·法 2019-05-30 10:09:59
今天用vb写一个了一个小函数,功能很简单,就是检测某个项是否在下拉列表里,本来不想加到自己的函数库的,想想还是加一下,结果发现以前已经添加过了,修改时间是2007年,也就是12年前了,那时才学vb一两年。于是我很好奇地用beyondcompare比较下看看。发现了点有意思的地方。于是我决定对12年前的我进行点评。



函数名:isInLst对比现在的isItemInCbo,很显然现在的更加明确和易懂。List没必要略写成Lst,省略一个字母可读性大大增加,另外,list容易让人理解成listbox,这是两个不同的控件。

参数:
变量名cbo和str1命名方式都不如现在的好,现在的cbo1,让人一看就明白是combobox的一个实例,后一个参数str1对比现在的strContent,很显然现在的更好点,变量名更有意义。

实现逻辑:
12年前用你的do while循环,现在用的for 。。。to遍历



对过去的自己吐槽:

1.变量名sameItem竟然不声明,啥玩意!真是太小白了吧 !

2.还有sameItem明显是当做索引用的,可这变量名却让人感觉像是一个字符串。

3.不用for循环竟然用do。。。while循环,自己弄个计数器在那儿辛苦累加,到底是咋想的?这是无语!弄for循环多好,会自动将步长增1,少写多少代码!

4.函数名后面还有个“'True表示列表中有str1”,多余的注释,很显然true就是存在啊。

5.这么多年了,竟然还在搞vb!转眼一个生肖轮回过去了,时间真快啊。

6.破微软能不能给vb开源啊,让热心的网友更新下combobox搞个直接判断的方法.isExist(xxxx)啊,(附一条对微软的吐槽!)
...全文
273 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxxsq 2019-10-20
  • 打赏
  • 举报
回复
谢谢╰(*´︶`*)╯晓得啦
eisldkw 2019-06-25
  • 打赏
  • 举报
回复
帮你顶一下啦!
脆皮大雪糕 2019-05-30
  • 打赏
  • 举报
回复
Visual Studio Code开源,再结合跨平台的开源Freebasic,看能不能有点安慰。
threenewbee 2019-05-30
  • 打赏
  • 举报
回复
Any这个函数虽然是类库提供的,但是我们可以写一个类似的
bool Any<T>(this IEnumerable<T> data, Func<T, bool> cond)
{
foreach (T item in data)
if (cond(item))
return true;
return false;
}

这个函数的特点就是可以将回调函数cond作为参数传进去调用。
也就是说,对于循环遍历一个集合,对每个元素做一个判断,如果符合某个条件,返回true,全部不符合,返回false,这个流程做到了复用,同时具体比较什么条件,这个则留给调用者“填空”,在这里是比较它和指定的字符串是否相等。

在VB.NET里,对应的写法是
Function IsInlist(cbo As ComboBox, s As String) Boolean
Return cbo.Items.Cast(Of object)().Any(Function(x)
Return x.ToString() = s
End Function)
End Function


类似地,我们还可以写一个All

bool All<T>(this IEnumerable<T> data, Func<T, bool> cond)
{
foreach (T item in data)
if (!cond(item))
return false;
return true;
}


有了Any All,只要满足循环,判断每个元素是否任意一个或者全部满足某个条件,这个逻辑,都不必每次把循环再写一次了。

VB6里面理论上也可以实现,用AddressOf回调函数,但是VB6回调函数一旦出错就会崩溃。

所以,一种语言能否支持高阶函数(把函数作为参数传给另一个函数)是它编写的代码是否可以对流程复用的关键。
threenewbee 2019-05-30
  • 打赏
  • 举报
回复
C#的写法是 bool IsInlist(ComboBox cbo, string s) { return cbo.Items.Cast<object>().Any(x => x.ToString() == s); }

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧