2017-08-02 3 views
0

Je vous écris un code à Swift où j'ai une classe comme suit:La comparaison booléenne ou nulle est-elle plus rapide?

class Note 
{ 
    var isDeleted:Bool = false 
    var deletedDateTime:Date! 
} 

Supposons qu'il y ait une source de données qui est rempli de notes et je veux faire un filtre basé sur la comparaison, alors je peux soit comparer par isDeleted ou je peux comparer par deletedDateTime. Lequel serait plus rapide à partir des deux déclarations suivantes:

var dataSource:[Note] = [Note]() 
// fill the datasource with objects 

dataSource.filter({$0.isDeleted == false})  // 1 
dataSource.filter({$0.deletedDateTime == nil}) //2 

Quelqu'un peut-il me guider s'il vous plaît?

+0

Je crois que la vérification de l'un ou l'autre ne ferait pas un énorme décalage horaire –

+0

Je doute qu'il y ait une différence significative, mais qu'est-ce que * vous * mesurez? –

+0

Au niveau le plus bas, charger une valeur et vérifier si elle est nulle. S'il y a une différence dans le temps d'exécution, cela va être de l'ordre des nanosecondes. Plutôt que de vous préoccuper des micro-optimisations ici, concentrez-vous plutôt à rendre le code aussi clair que possible. La valeur 'boolean' est plus explicite: tester' isDeleted' indique clairement ce que vous faites. La recherche d'un 'deletedDateTime' inexistant est indirecte; ce n'est pas aussi clair. Un bon compromis serait d'éliminer la valeur 'boolean' et d'avoir une propriété' isDeleted'. –

Répondre

0

Il n'y aura pas beaucoup de décalage horaire, si vous parlez du temps d'exécution. Mais votre classe semble être un peu évidente puisque vous pouvez supprimer la variable booléenne inutile parce que, comme vous l'avez demandé, les deux signifient la même chose.

+0

"Il n'y aura pas beaucoup de décalage horaire." En fait, il n'y aura pas de décalage horaire. Le temps requis pour une comparaison de bits par rapport au temps requis pour une comparaison de mots de 64 bits est sans importance. Les deux nécessitent le même nombre de cycles. – TheBasicMind