有些人在目标C中使用GOTO语句的原因是什么?

时间:2014-03-06 14:45:58

标签: ios objective-c

我没有ObjectiveC(IOS)开发的经验,但我看到太多好奇的代码,发现有些人使用GOTO语句(JsonKit Library,一些代码游戏等),甚至Apple的源代码是已知使用它(You can see here)。

正如我在学术生涯中所学到的,使用GOTO是一个非常糟糕的发展实践,必须要避免,为什么它是IOS开发中的“普通”实践,是否有一些特殊的原因?

2 个答案:

答案 0 :(得分:8)

  

使用breakcontinue和。{是一种很好的编程风格   尽可能使用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 );