通过观察各种Android应用程序的源代码(不是我编写的),我注意到了将某些代码片段放入自己的方法中的模式,尽管实际上没有任何代码重用,因为这些方法只在整个过程中被调用一次应用.
到目前为止,我有一个经验法则,规定如果在应用程序代码中使用两次或更多代码,那么它就有其自身的方法,仅仅是为了消除代码冗余.
但是看到那些整齐地将代码块分解成自己的方法(以及自己的方法调用开销),我开始说,也许我错过了一些东西.
除了用于文档目的之外,还有什么其他原因可以证明只将4行代码(只调用一次!)放入自己的方法中?
我已经结束了许多小内联函数在头文件中,我包含在许多编译单元中,代码由编译器正确内联,程序就像一个魅力.
但现在头文件是非常不寻常的(作为头文件),为了使它更具可读性我想做这样的事情:
#ifndef MY_HEADER_H
#define MU_HEADER_H
static inline
void my_fnct (my_param a);
#include "my_header.inline.c"
#endif
Run Code Online (Sandbox Code Playgroud)
和文件my_header.inline.c将是:
static inline
void my_fnct (my_param a)
{
// .. my code ..
}
Run Code Online (Sandbox Code Playgroud)
然后,当我想要这些功能时,我只需要包含头文件.
我的问题是:有一个更好的方法来实现这一点,而无需填充太多代码的头文件?或者我可以做到这一点,并期望其他开发人员没有问题地理解这些代码?
我(我应该)可以使用R属性来保存物理单位和类似信息作为用户的提示吗?
epsilon0 <- 8.854188e-12
# name <- "electric constant"
# source <- "CODATA"
# unit <- "F m-1"
Run Code Online (Sandbox Code Playgroud) 在一个变量可能有两个不同的值的情况下,如果它是一个变量,你会做一些不同的事情,如果是另一个变量,你会这样做:
if(myVariable == FIRST_POSSIBLE_VALUE) { ... }
else { ... }
Run Code Online (Sandbox Code Playgroud)
或者你会这样做:
if(myVariable == FIRST_POSSIBLE_VALUE) { ... }
else if (myVariable == SECOND_POSSIBLE_VALUE) { ... }
Run Code Online (Sandbox Code Playgroud)
为清楚起见,在一种情况下,读者不一定能够告诉他们做同样的事情(但是否则是"不必要的"表达)?那你会怎么做?谢谢!
编辑:实际上有更多不同的选项,如:三元运算符,if-else,if-elseif,if-elseif-else,-if-else(带断言),switch.每个人都有自己的位置,但很难决定......
这是一个有点普遍的计算机问题.我总是能够遵循编程的LOGIC,但是当我去编写代码时,我总是发现我不知道某种方法或其他方法来获得我需要完成的工作.当我看到它时,我总是想,"当然!".
您如何为"内置"编程需求找到相关方法?我不喜欢重新发明轮子,但我发现很难找到我需要做的事情.
下面的代码提供了两种方法,它们生成总和小于100的整数对,并且它们根据它们与(0,0)的距离按降序排列.
//approach 1
private static IEnumerable<Tuple<int,int>> ProduceIndices3()
{
var storage = new List<Tuple<int, int>>();
for (int x = 0; x < 100; x++)
{
for (int y = 0; y < 100; y++)
{
if (x + y < 100)
storage.Add(Tuple.Create(x, y));
}
}
storage.Sort((p1,p2) =>
(p2.Item1 * p2.Item1 +
p2.Item2 * p2.Item2).CompareTo(
p1.Item1 * p1.Item1 +
p1.Item2 * p1.Item2));
return storage;
}
//approach 2
private static IEnumerable<Tuple<int, int>> QueryIndices3()
{
return from x in Enumerable.Range(0, 100)
from y in …Run Code Online (Sandbox Code Playgroud) OCaml的选项类型在您的函数可能不返回任何内容的情况下非常有用.但是当我在很多地方使用它时,我发现在一直处理Some案件和None案件时很麻烦match ... with.
例如,
let env2 = List.map (fun ((it,ie),v,t) ->
match t with
| Some t -> (v,t)
| None ->
begin
match it with
| Some it -> (v,it)
| None -> failwith "Cannot infer local vars"
end) ls_res in
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以简洁地解构选项类型?
这似乎是一个常见的问题,但我搜索了SO和谷歌,找不到我正在寻找的东西:
this在Java 中调用关键字的开销是多少?我知道在C++中由于解除引用当前对象指针而产生一些最小的开销.Java会产生同样的开销吗?进行多次调用是否不太理想this.这主要是可读性与优化的问题.
我经常在代码中看到以下注释:
@Getter
@Setter
public int test = 1;
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用这个注释创建getter和setter使用方法.但是我需要使用哪些类/库来使用这些注释?
鉴于这样的情况:
using (var foo = CreateFoo()) {
if (foo != null) {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我想避免嵌套if.遗憾的是,显而易见的解决方案是不可能的,因为break不能用于:
using (var foo = CreateFoo()) {
if (foo == null) {
break;
}
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
是否有一种模式仍然可以避免由此引起的额外缩进if != null?
code-readability ×10
java ×3
c# ×2
.net ×1
annotations ×1
c ×1
clarity ×1
code-reuse ×1
const ×1
header ×1
if-statement ×1
inline ×1
lombok ×1
loops ×1
ml ×1
ocaml ×1
optimization ×1
performance ×1
r ×1
refactoring ×1
using ×1