Refactoring sait extraire.

laudemalaudema Membre
Bonjour,

      Jusqu'à  maintenant je n'en avais pas vu l'intérêt et puis aujourd'hui, voulant reprendre une classe dans un autre projet, j'ai vu que j'avais besoin de reprendre un morceau de code à  l'intérieur d'une méthode.
La méthode prend un chemin d'accès à  un fichier et retourne un tableau, pour ça je commence par mettre dans une chaà®ne le contenu du fichier ; puis je travaille sur la chaine pour en extraire un tableau.
<br /><br />- (NSArray*)pyxDictionaries{<br />	if ( ! [DEFAULTFILEMANAGER fileExistsAtPath:self] )<br />		return nil;<br />	NSError *e;<br />	NSString *depart = [NSString stringWithContentsOfFile:self<br />												 encoding:NSISOLatin1StringEncoding<br />													error:&amp;e];<br />	if (! depart){<br />		NSLog(@&quot;erreur n° %i : %@&quot;,[e code], [e localizedDescription]);<br />		return nil;<br />	}<br />	//&lt;=============Debut Selection==================&gt;<br />	NSMutableArray *resultAr = [[[NSMutableArray alloc]init]autorelease];<br />	NSArray *blocs = [depart componentsSeparatedByString:@&quot;&#092;r&#092;n&#092;r&#092;n&quot;];<br />	//	printf(&quot;%i blocs&#092;r&quot;,(int)[blocs count]);<br />&nbsp; &nbsp; &nbsp; &nbsp; NSString *blocName, *key, *value;<br />	NSArray *components;<br />&nbsp; &nbsp; &nbsp; &nbsp; NSMutableDictionary *subDic = [[[NSMutableDictionary alloc]init]autorelease];<br />	for ( NSString *subString in blocs){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  //....<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  //.........<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  [resultAr addObject:subDic];&nbsp; &nbsp;  		<br />	&nbsp; &nbsp;  [subDic release];<br />	}<br />&nbsp; &nbsp; &nbsp; &nbsp; //&lt;=============Fin Selection====================&gt;<br />	return [NSArray arrayWithArray:resultAr];	<br />}<br />

J'ai donc sélectionné le bout de code qui va de la création du tableau retourné jusqu'à  avant que ce tableau soit utilisé et j'ai appelé "Refactor" depuis le menu Edit. Et là , après un tout petit temps d'attente, Xcode me propose une déclaration de méthode avec les variables qui vont bien et le type de retour qu'il faut:

- (NSMutableArray *)extracted_method:(NSString *)depart


Déjà  je trouvais ça pas mal, plus qu'à  changer 'extracted_method:' en 'arrayFromString:', appuyer sur la touche Enter et le tour est joué: il ne reste qu'à  retourner dans la parente pour appeler la fille.
<br />NSMutableArray *resultAr;<br />resultAr = [self pyxDictionariesFromString: depart];<br />


Sauf que Xcode l'avait fait tout seul. Bien sûr le code testé fonctionnait la première fois :)
[size=8pt]C'est alors qu'une chanson bébête vint me hanter "Il est vraiment..., il est vraiment..., il est vraiment phénoménal,lalalala la lal"[/size]
Connectez-vous ou Inscrivez-vous pour répondre.