我想知道其他人是否认为做这样的事情是多余的......
const double RESET_TIME = 0.0;
timeSinceWhatever = RESET_TIME;
Run Code Online (Sandbox Code Playgroud)
而不仅仅是做
timeSinceWhatever = 0.0;
Run Code Online (Sandbox Code Playgroud)
您是否找到了第一个帮助提高可读性的示例?该论点归结为使用幻数,而0和1被认为是规则的"例外",我总是认为这些异常仅适用于初始化变量或索引访问.当数字有意义时,它应该有一个附加于其含义的变量.
我想知道这个假设是否有效,或者只是为了赋予0一个命名常量是多余的.
我刚刚完成了为编程课程编写程序,我想避免使用魔术数字,所以这是我的问题:
在下面的函数中,我的数组索引器是否会被视为幻数?
码:
string CalcGrade(int s1, int s2, int s3, double median)
{
const int SIZE = 23;
const int LETTER_GRADE_BARRIERS[SIZE] = { 400, 381, 380, 361, 360, 341, 340, 321, 320, 301, 300, 281, 280, 261, 260, 241, 240, 221, 220, 201, 200, 181, 180 };
double finalGrade;
string letterGrade;
finalGrade = s1 + s2 + s3 + median;
if (finalGrade >= LETTER_GRADE_BARRIERS[1] && finalGrade <= LETTER_GRADE_BARRIERS[0])
{
letterGrade = "A";
}
else if (finalGrade >= LETTER_GRADE_BARRIERS[3] && finalGrade …Run Code Online (Sandbox Code Playgroud) 在寻找Excel NORMDIST(累积)函数的C++实现时,我在网站上找到了这个:
static double normdist(double x, double mean, double standard_dev)
{
double res;
double x=(x - mean) / standard_dev;
if (x == 0)
{
res=0.5;
}
else
{
double oor2pi = 1/(sqrt(double(2) * 3.14159265358979323846));
double t = 1 / (double(1) + 0.2316419 * fabs(x));
t *= oor2pi * exp(-0.5 * x * x)
* (0.31938153 + t
* (-0.356563782 + t
* (1.781477937 + t
* (-1.821255978 + t * 1.330274429))));
if (x >= 0) …Run Code Online (Sandbox Code Playgroud) 我正在研究过去几年由各种程序员编辑过的应用程序,我偶然发现了使用String Literals访问MenuItems的问题.
例如:在很多地方都有类似的代码
mainMenu.MenuItems[1].MenuItems[0].Visible=true;
Run Code Online (Sandbox Code Playgroud)
要么
mainMenu.MenuItems["View"].MenuItems["FullScreen"].Visible=true;
Run Code Online (Sandbox Code Playgroud)
如何更改用于标识MenuItem的字符串并捕获它用于访问的所有位置?菜单和菜单项被声明为公共,并在整个大型应用程序中使用
什么是防止使用这些魔术索引的正确方法.每次添加新项目或更改名称时,我都认为有些事情被破坏了.
PS我已经开始使用枚举字典方法,其中每个menuItem都与一个键配对.但这仍然不会迫使其他开发人员使用我的实现,也不是问题2的最优雅的解决方案
我经常对此感到困惑.我一直被教导用经常使用变量或常量命名的数字,但如果它降低了程序的效率,我还应该这样做吗?下面是一个例子:
private int CenterText(Font font, PrintPageEventArgs e, string text)
{
int recieptCenter = 125;
int stringLength = Convert.ToInt32(e.Graphics.MeasureString(text, font));
return recieptCenter - stringLength / 2;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码使用的是命名变量,但运行速度比这段代码慢:
private int CenterText(Font font, PrintPageEventArgs e, string text)
{
return 125 - Convert.ToInt32(e.Graphics.MeasureString(text, font) / 2);
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,执行时间的差异是最小的,但是在更大的代码块中呢?
我有一个可用于上传文件的网页.现在我需要检查图像文件类型是否正确类型,如png,jpg,jpeg,gif
我正在使用请求附带的mimeType,但如果我正在加载重命名为.jpg文件的.txt文件,那么也是mime-type它显示图像/ jpg,基本上我不想上传这些文件.现在我我想确保没有人能够上传在.jpg/.png中重命名的.txt文件....
作为参考,我在这里放一段代码:
//storing images into bytearray.
byte[] bFile = baos.toByteArray();
if((bFile [i] & 0xFF) == 0xFF && (bFile[i+1] & 0xFF) == 0xD8 && (bFile[bFile.length - 2] & 0xFF) == 0xFF && (bFile[bFile.length - 1] & 0xFF) == 0xD9)
{
System.out.println("is Image");
}
Run Code Online (Sandbox Code Playgroud)
以上行只会检查jpeg类型,但我想检查文件扩展名的其他图像标题有人可以指出究竟需要做什么来检查其他图像类型?
谢谢
使用Webkit时遇到错误,指针设置为0xbbadbeef.什么是BadBeef在Webkit中使用?
我正在从 glibc 读取“strlen”源代码,开发人员发现加快它的技巧是读取 n 个字节,其中 n 是一个长字的大小,而不是在每次迭代时读取 1 个字节。
我假设一个长字有 4 个字节。
棘手的部分是函数读取的每个 4 字节的“块”都可以包含一个空字节,因此在每次迭代时,函数必须检查块中是否有空字节。他们这样做
if (((longword - lomagic) & ~longword & himagic) != 0) { /* null byte found */ }
Run Code Online (Sandbox Code Playgroud)
哪里longword是数据块,himagic和lowmagic是神奇的值,定义为:
himagic = 0x80808080L;
lomagic = 0x01010101L;
Run Code Online (Sandbox Code Playgroud)
这是对这些值的评论
/* Bits 31, 24, 16, and 8 of this number are zero. Call these bits
the "holes." Note that there is a hole just to the left of
each byte, with an extra at …Run Code Online (Sandbox Code Playgroud) 我有一个项目,我将消息从一种格式转换为另一种格式.消息由id标识.我有一个带有一种格式的id的MappingTable和另一种格式的相应id.
例如:2000 = 153
id是整数
我通过以下方式添加所有这些内容:
this.AddMappingEntry(2400, 2005, true, false);
Run Code Online (Sandbox Code Playgroud)
此方法将映射条目添加到映射列表中.我可以通过linq过滤列表,这样我就可以在收到值为2400的消息时找到正确的映射.
自项目启动以来,它已经发展了很多,这导致了许多重构和许多具有特殊行为的id.我必须控制消息是否是特殊类型.
if(message.id == 153)
{
//special behavior
}
Run Code Online (Sandbox Code Playgroud)
我该怎样处理这个最优雅的?我应该使用许多描述消息类型的常量还是有另一种更优雅的方式?
编辑:
我改回了这个问题.我有头记录和子记录.但是整个守则都使用了这些记录的Id.由于有大约200个不同的Id,我想知道我应该用这些神奇的数字做什么.我写的工具是转换器.
结构如下
+------+ +-------------+ +---------+
| DAL +-------> | CONVERTER +----> | WRITER |
+------+ +-------------+ +---------+
Run Code Online (Sandbox Code Playgroud)
Converter类看起来大致如此
+------------+
|BaseClass |
+-----+------+
^
|
+-----+------+
|BaseRecord +^-------------+----------------------+
+------+-----+ | |
^ | |
| | |
+------+-----+ +-------+--------+ +-------+--------+
| HeadRecord | | RecordType1 | | RecordType2 |
+------------+ +----------------+ +----------------+
Run Code Online (Sandbox Code Playgroud)
BaseRecord扩展了Baseclass,所有其他类扩展了BaseRecord.总共我有5个Record类型,其中recordId为1-5.在这条记录中有几个subrecordId(~50),它们仅用于在写入过程之后分别识别写入者后面的记录.
问题是有些记录从不同的字段中读取了一些值,而另一些记录则导致我需要识别记录的一些特殊情况.
这导致了问题: 如果我在我的班级和转换器中使用它们,我有许多神奇的数字,没人知道它们是什么.我如何避免这些神奇的数字?我很开心,如果我使用那些,我的课程中会有50多个const值.有没有办法避免魔术数字和一大堆const值?对此有什么正确的重构?
我有来自 UploadedFile 按钮的文件,我想使用幻数打印扩展文件,
我的代码:
UploadedFile file = (UploadedFile)valueChangeEvent.getNewValue();
byte[] fileByteArray = IOUtils.toByteArray(file.getInputStream());
Run Code Online (Sandbox Code Playgroud)
注意:Mime 类型和内容文件(来自文件和来自文件名)与幻数不同(幻数来自输入流的第一个字节)
我该怎么做?