[ANN] Some Cool Tips for .NET для начинающих
От: stele Россия www.stele.su
Дата: 25.12.06 17:41
Оценка:
Some Cool Tips for .NET Вопросы-Ответы для начинающих о .Net.
... <<My edition based on RSDN@Home 1.2.0 alpha rev. 669>>
В задаче спрашивается:
Сколько вытечет портвейна из открытого бассейна?
Re: [ANN] Some Cool Tips for .NET для начинающих
От: Красин Россия  
Дата: 25.12.06 21:18
Оценка: 31 (5) +3
Здравствуйте, stele, Вы писали:

S>Some Cool Tips for .NET Вопросы-Ответы для начинающих о .Net.


Попадаются и вредные советы:

Q: How to extract unique values from an array?

В качестве решения приводится код:
static string [] strObj = {"A","A","B","C","C","D","E","F","B","C","G","F"};
static Hashtable UniqueHT = new Hashtable();
static int i =0;
[STAThread]
static void Main(string[] args)
{        
  FindUniqueElements(0);            
}

private static void FindUniqueElements(int index)
{            
    try
    {                
    for(i=index; i< strObj.Length; i++)
    {
    // Start adding the elements from array as value for KEY in HashTable
       UniqueHT.Add(strObj[i], "Any Value");
       Console.WriteLine(strObj[i]);
    }

    Console.ReadLine();                    
    }
    catch(Exception)
    {
    // When there is duplication of KEY value in HashTable, the exception will be raised 
    // which can be handled in Catch block by just executing the same function with next index as parameter.
      FindUniqueElements(i+1);                
    }
}

Претензии:
1. Зачем-то частично рекурсивная функция. Т.е. мы уже не сможем обработать массив из 10 миллионов A A A A A ...
2. Зачем-то на каждый дубликат выкидывается исключение
3. Стоит глухое исключение, которое предполагает, что единственное, что может случиться исключительного во внутреннем коде — это встретиться дубликат. Уже даже возможность OutOfMemoryException призывает нас отказаться от такого смелого использования конструкции try..catch
4. Неясно почему берется статическая хеш-таблица, а не передается в качестве параметра. Наверное, для того, чтобы было сложнее вынести этот код в библиотеку вспомогательных вещей.
5. Даже учитывая, что это всего лишь пример, неясно почему Console.ReadLine стоит внутри FindUniqueElements, а не в Main после вызова функции.

Резюме: код примера, на мой взгляд, должен был выглять либо так:
using System;
using System.Collections;

public class Program
{
   static string [] TEST_VALUES = {"A","A","B","C","C","D","E","F","B","C","G","F"};
   static void Main(string [] args)
   {
      string [] result = FindUniqueElements(TEST_VALUES);
      Console.ReadLine();
   }
   
   private static string[] FindUniqueElements(string [] values)
   {
      Hashtable table = new Hashtable();
      for (int i = 0; i < values.Length; i++)
      {
         if (!table.ContainsKey(values[i]))
         {
            table.Add(values[i], null);
            Console.WriteLine(values[i]);
         }
      }
      string[] result = new string[table.Count];
      table.Keys.CopyTo(result, 0);
      return result;
   }
}

А еще лучше, если после примера будет показано, как это надо делать в работе:
using Wintellect.PowerCollections;
...
Algorithms.RemoveDuplicates(TEST_VALUES);

И дана ссылка на отличную библиотеку PowerCollections.
Re[2]: [ANN] Some Cool Tips for .NET для начинающих
От: Igor Sukhov  
Дата: 26.12.06 02:22
Оценка:
Здравствуйте, Красин, Вы писали:

S>>Some Cool Tips for .NET Вопросы-Ответы для начинающих о .Net.


К>Попадаются и вредные советы:


Код откровенно убогий, нет даже намека на то, что автор представляет себе что такое стиль написания кода.

Для начинающих — от начинающих. Чего тут обсуждать-то ?
http://rsdn.org/File/76/Logo.gif * thriving in a production environment *
Re: [ANN] Some Cool Tips for .NET для начинающих
От: ie Россия http://ziez.blogspot.com/
Дата: 26.12.06 03:09
Оценка:
Здравствуйте, stele, Вы писали:

S>Some Cool Tips for .NET Вопросы-Ответы для начинающих о .Net.


Мдааа... Ужас!
Начинающему это уж точно читать не следует! Тем более складывается ощущение, что автор сам от начинающего не далеко ушел.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.