我没有ObjectiveC(IOS)开发的经验,但我看到太多好奇的代码,发现有些人使用GOTO语句(JsonKit Library,一些代码游戏等),甚至Apple的源代码是已知使用它(You can see here)。
正如我在学术生涯中所学到的,使用GOTO是一个非常糟糕的发展实践,必须要避免,为什么它是IOS开发中的“普通”实践,是否有一些特殊的原因?
答案 0 :(得分:8)
使用
break
,continue
和。{是一种很好的编程风格 尽可能使用return
语句而不是goto
语句。 但是,因为break
语句仅从a的一个级别退出 循环,您可能必须使用goto
语句退出深层嵌套 循环。
*来源 - Microsoft
来自BLOG
的另一个例子答案 1 :(得分:0)
MyExperience
学术是好的和好的,但是,在真实的,实际的坏世界中,可能会发生在某些情况下你必须退出2或3个嵌套循环。
是的,您可以使用三个或两个布尔变量,但为什么不使用快速,旧的普通goto?
如果你愿意,我可以在我使用goto的地方张贴一段代码。
for( int nITap = 0; nITap < m_nNumPercorsi; nITap++ )
{
// .. blastuff
for( int nJTap = 0; nJTap < m_aPercorsi[nITap].m_nNumTappe - 1; nJTap++ )
{
// ..yet bla stuff
for( nIndAd = 0; nIndAd < m_aNodi[nIndNodCor]->m_nNumNodiAd; nIndAd++ )
if( m_aNodi[nIndNodSuc] == m_aNodi[nIndNodCor]->m_aNodiAdiacenti[nIndAd]->m_pNodoP2D )
break;
for( nICor = 0; nICor < m_aNodi[nIndNodCor]->m_aIndSeg.GetCount(); nICor++ )
{
for( nJCor = 0; nJCor < m_aNodi[nIndNodSuc]->m_aIndSeg.GetCount(); nJCor++ )
{
if( m_aNodi[nIndNodCor]->m_aIndSeg[nICor] == m_aNodi[nIndNodSuc]->m_aIndSeg[nJCor] )
{
nIndSpez = m_aNodi[nIndNodCor]->m_aIndSeg[nICor];
goto L_SegmentoTrovato;
}
}
}
L_SegmentoTrovato:
aTmp.Add( nIndSpez );