在一个变量可能有两个不同的值的情况下,如果它是一个变量,你会做一些不同的事情,如果是另一个变量,你会这样做:
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.每个人都有自己的位置,但很难决定......
我已经有了这样的问题,但无论如何我已经删除了它.
我有一个非常简单的应用程序,它具有根视图控制器,并在两个其他视图控制器视图之间切换.所以在我的根视图控制器中,它延迟加载其他两个视图控制器的实例.每次按下工具栏中的切换按钮时,将显示当前正在显示的视图控制器(其视图)(设置为nil),并加载新视图控制器并将其添加到子视图中.
因为我加载了我的视图控制器并在特定时间卸载,所以在getter中的延迟加载代码非常混乱,因为我实际上并不想在我使用它们时正确加载它们,我需要加载它们才能使翻转动画看起来不错.所以我想我想让loadFirstVC和loadSecondVC方法加载视图控制器.这是一个好主意吗?
在目标c中,如果使用getter并直接访问ivar做完全相同的事情,getter中没有延迟加载代码,它所做的只是返回ivar,你是否仍然会使用访问器或直接访问ivar,因为有没有不同?为什么?
编辑:我在课堂上谈论.
这是我现在如何实现我的简单pygames:
import pygame, sys
from pygame.locals import *
def run_game():
pygame.init()
SIZE = (640, 400)
BG_COLOUR = (0, 0, 0)
LINE_COLOUR = (255, 255, 255)
screen = pygame.display.set_mode(SIZE)
clock = pygame.time.Clock()
while True:
time_passed = clock.tick(30)
for event in pygame.event.get():
if event.type == QUIT:
exit_game()
screen.fill(BG_COLOUR)
pygame.draw.aaline(screen, LINE_COLOUR, (1, 1), (639, 399))
pygame.display.flip()
def exit_game():
sys.exit()
if __name__ == "__main__"
run_game()
Run Code Online (Sandbox Code Playgroud)
我还看到一个keeprunning标志用于退出主事件循环,而不是使用pygame.event.poll()循环pygame.event.get().任何建议,如变量的大小写/命名,任何使其更有效或可读的东西?
我有一个Vector代表2D矢量的类.模板允许任何数字类型用于x和y分量.例如,我重载的算术运算符之一是*将向量与标量相乘:
template <typename T, typename U>
inline const Vector<T> operator*(const Vector<T>& vector, U scalar) {
return Vector<T>(vector.x * scalar, vector.y * scalar);
}
Run Code Online (Sandbox Code Playgroud)
(我还有一个函数,参数顺序相反scalar * Vector,除此之外Vector * scalar).
正如您所看到的,我使用<T, U>而不是简单地<T>使标量不必与Vector相同.当我没有这样做时,令人惊讶的Vector<double> * int是不会编译(我认为int会自动加宽).
无论如何,我不只是想回归一个Vector<T>.我想模仿内置类型并返回具有更高精度的那个,T或者U.例如,Vector<int> * double => Vector<double>同时Vector<double> * short => Vector<double>.
这可能吗?
您认为哪种语法更好/更易读?
if(!myViewController.view.superview)
Run Code Online (Sandbox Code Playgroud)
要么:
if(myViewController.view.superview == nil)
Run Code Online (Sandbox Code Playgroud)
谢谢!!
我明白"2.5"自动是双倍的,为了使它成为一个浮点数,我需要做"2.5F"(或者F应该是小写?),并且我应该使用浮点数,比方说,如果我有一个常数只需要2个小数位(如安大略省PST税的"0.08F"),但我不确定"12"是int还是long,但我知道"12L"是长的,但是"长" l = 12"和"long l = 12L"似乎编译成相同的东西,如果我想要最大的非浮点精度,我使用long,如果我知道我不需要超出int的限制,则使用int.
如果那里有不对的东西,请纠正我,并回答我的问题.
我可能完全错了,我对此一无所知,但我对编程语言中的十进制数字数据有疑问.我知道浮点数并不完全精确,因为它们以二进制形式存储有权或其他东西,但我总是想知道为什么十进制数数据类型不只是存储一个数字就像没有小数一样,所以做计算就像如果没有小数,则在之后添加.就像在这种情况下:
2.159 * 3.507 --> 2159 * 3507 = 7571613
^^^ ^^^
123 456
6 decimals in total... 7571613 -> 7.571613
^^^^^^
654321
Run Code Online (Sandbox Code Playgroud)
所以2.159*3.507 = 7.571613
为什么它不能像那样工作?
咖喱
add::Int->Int->Int
add x y = x+y
Run Code Online (Sandbox Code Playgroud)
Uncurried
add1::(Int,Int)->Int
add1 (x,y)=x+y
Run Code Online (Sandbox Code Playgroud)
我有几个问题重新调整Curried和Uncurried函数,考虑上面的函数,
在Uncurried函数输入参数是as (Int,Int),它是否与输入元组一致?我们怎么能区分那个?
关于无故障和咖喱功能有哪些优缺点?什么时候和为什么要使用?
clarity ×2
java ×2
objective-c ×2
accessor ×1
boolean ×1
c++ ×1
double ×1
generics ×1
haskell ×1
if-statement ×1
iphone ×1
jvm ×1
lazy-loading ×1
long-integer ×1
math ×1
null ×1
properties ×1
pygame ×1
python ×1
structure ×1
syntax ×1
templates ×1