C#课程设计

本文记录了一次C#课程设计但实际使用JavaScript实现的过程。作者详细分析了开发过程,包括如何解决图片抽取的重复问题,如何用对象关联图片和姓名,以及遇到的浏览器兼容性和代码管理挑战。通过这次实践,作者体会到JS的灵活性,但也感受到了其在管理和运行时序上的困扰。
摘要由CSDN通过智能技术生成

开发过程

  首先说明,整个程序没有用C#进行开发,我采用了JavaScript(JS)来做。因为最近在学习JS,却没有什么真正做一个小程序的欲望,没时间也是一个方面,一直忙着考试和课程设计。这两天考完试,就试着把这个程序做出来,顺便练一练手。
  好了,废话就不扯了,直接入正题,根据程序要求分析一下程序的实现。程序要求我们分辨三张图片,在三张图片中,根据姓名选出正确的图片。要求很简单,接着我们来分析一下应该怎么去实现它。首先,很显然,我们需要从一堆图片,即图片库中选出三张图片来开始游戏,这个过程可以这样理解,利用随机数,随机从图片库中抽取一张图片,然后将这张图片维护在一个数据结构中,将这个过程重复三次,我们就得到了想要的图片的集合。但这个过程有个问题,那就是这三次抽取有可能抽到一样的图片,就会出现两张重复图片或者三张重复图片的bug。要解决这个问题要求我们选取恰当的数据结构来储存抽取出来的图片,从上面的描述中,我们可以知道这个数据结构应该能够禁止添加重复的元素。根据这个条件,我们知道Set就满足了我们需求,但接着我就发现了一个问题,虽然在一些主流的高级语言之中,比如Java和c#都提供了自己原生的Set的API,但是,JS是一种极端依赖浏览器的编程语言,不同的浏览器有可能实现了不同的JS标准,Set的API现在还没有在所有的浏览器中实现,所以不能用原生的API来解决问题。没办法,只能自己取巧去实现它。每次抽取图片后,在储存这张图片时,都先做个判断,如果在储存的集合中发现有相同的图片,就重新抽取一张,直到选到不同的图片为止。这个过程其实有一定的性能问题,因为做了额外的判断操作,不过考虑到每次比较最多只是和两个元素比较,可以忽略它。解决了重复问题之后,我们就要想一想图片对应的姓名问题了。因为图片和姓名明显是两个独立的元素,怎么让一张图片和一个姓名对应起来呢?最快捷的方法,使用对象,现在大部分语言都支持面向对象的编程,构建一个对象包含图片路径和名字两个字段,这样就可以解决问题。接着就是从三个对象中选出一个作为答案。最后就是判断了,判断正确与否。这样整个流程分析下来,条理就很清晰了。照着这个思路来,几个小时肯定可以完成了。因为第一次写JS,很多东西不是很了解,最后弄了一个上午才把代码折腾出来。

学习与收获

  第一次真正动手写JS,感觉很生疏,虽然思路一开始就很清晰,可是很多时间都是在查资料,查一点写一点,龟速前行。写完之后,有了以下的总结:

  1. 差异性大。一开始是打算直接用JS的Set的,不过查文档之后,发现只有部分浏览器实现了,测试中用IE11可以直接调用Set,不过用一些国内的浏览器,比如搜狗就报错了。所以有志做前端的,应该了解浏览器之间的差异,做好兼容性的工作。
  2. 程序运行时序。和一般应用不一样,JS程序的触发是打开一个网页,而网页本身就有一个加载的过程。那么JS是在什么时候执行的?一打开页面就执行?还是当内容加载完再执行?老实说,我到现在还是有点迷糊。调试过程中,发现程序是在页面没加载内容就开始执行了,不过调用JQuery的ready函数后,程序开始执行的时间变成页面加载完之后再执行。
  3. 代码模块化管理。之前一直写Java,Java中有包的概念,可以方便的对代码分类管理。比如常量可以单独建一个文件,然后把文件放在一个包中。在JS中就不知道怎么实现了,JS本质上是一种脚步语言,它方便简单,不过管理貌似有点难。我在程序中的常量都写在同一个文件中,代码看起来很臃肿。不知道怎么改进。

感受与体会

  JS还是很好玩的,特别是弱类型的设定,一个var解决所有问题。但是总的来说,因为生疏的原因吧,还是很不习惯,特别不能对代码分包管理这点上。另外函数式编程的感觉也不是太好,还是不习惯啊,以后再多多练习。

代码分析

//省略了常量的定义,可在源码中看。
//定义类,用来做权重
function Person(){
   }
Person.prototype.times = <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值