نمایش نتایج 1 تا 2 از 2

نام تاپیک: کاربرد Raise چیست؟

  1. #1

    کاربرد Raise چیست؟

    سلام به همه.
    کاربرد raise و raiseexception چیست؟

    سپاس.

  2. #2
    کاربر دائمی آواتار Saeed_m_Farid
    تاریخ عضویت
    تیر 1386
    محل زندگی
    فضای تهی میان دیوارها
    سن
    44
    پست
    1,046

    نقل قول: کاربرد Raise چیست؟

    نقل قول نوشته شده توسط p_ooya مشاهده تاپیک
    سلام به همه.
    کاربرد raise و raiseexception چیست؟

    سپاس.
    سلام
    کاربرد Raise رو تو 3 بخش زیر میشه دسته بندی کرد :

    1. زمانیکه ما قصد داریم در حالت خاصی خودمان تولید Exception کنیم، یعنی نمونه ای از کلاس Exception تولید کرده و برای کاربر نهایی یا استفاده کننده سطح بالاتر کد موردنظر تولید می کنیم. مثلاً فرض کنید برنامه شما نیاز به بررسی صحت قفل نرم افزاری داشته باشد، درصورتیکه signature موردنظر درست نبود شما می تونید مثلاً از کد زیر استفاده کنید :
      raise EInOutError.Create('Require signature not present');
      ، البته در یه سطح پایین تر؛ شما می تونید اشاره گر تابع یا پروسیجر تولید کننده Exception رو هم مشخص کنید و به فراخواننده یادآور بشید که پوینتر تابع فراخوانی شده برای بررسی بیشتر چی بوده تا از این طریق اطلاعات جامع تری به فراخواننده برای رهگیری خطای رخداده ارائه بدید :
      raise Exception.Create('Missing parameter') at @MyFunction;
      باید توجه داشته باشید که در صورت ایجاد حالت استثناء دیگه کنترل از دست شما خارج میشه و به داخلی ترین بلاک try...except که کد شما رو فراخوانی کرده بر میگرده و ...
    2. حالت بعدی، زمانیه که شما احتمال میدین که شاید کدتون بیافته تو حالت استثناء ولی مجبورید از try...except هم استفاده کنید و از طرف دیگه باید Exception رو به فراخواننده انتقال بدین (از جمله در مواردی که نیاز به آزاد سازی منابع دارید)، مثلاً وقتی با فایلها یا محدودیت حجمی هارد و ... درگیر هستید ( بقول معروف نخواهید که کدتون Exception رو بخوره! و به فراخواننده نده)، مثل کد زیر :

      function GetFileList(const Path: string): TStringList;
      var
      I: Integer;
      SearchRec: TSearchRec;
      begin
      Result := TStringList.Create;
      try
      I := FindFirst(Path, 0, SearchRec);
      while I = 0 do
      begin
      Result.Add(SearchRec.Name);
      I := FindNext(SearchRec);
      end;
      except
      Result.Free;
      raise;
      end;
      end;
    3. حالت سوم هم زمانی هست که شما قصد دارید Exception رو خودتون عوض کنید، یعنی متن استثناء رو عوض کنید (مثلاً Exception ای که انتظار رخ دادنشو دارید فارسی نمایش داده بشه و ...)؛ در اینحالت هم میتونید از raise استفاده کنید :
      type
      ETrigError = class(EMathError);
      function Tan(X: Extended): Extended;
      begin
      try
      Result := Sin(X) / Cos(X);
      except
      on EMathError do
      raise ETrigError.Create('Tan ورود مقدار نادرست برای تابع');
      end;
      end;

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •