eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingNiezmienniki pętli › Re: Niezmienniki pętli
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.P
    OSTED!not-for-mail
    From: Roman Tyczka <n...@b...no>
    Newsgroups: pl.comp.programming
    Subject: Re: Niezmienniki pętli
    Date: Mon, 19 Nov 2018 09:22:44 +0100
    Organization: ATMAN - ATM S.A.
    Lines: 48
    Sender: r...@t...no.found
    Message-ID: <1...@t...com>
    References: <8...@g...com>
    <7...@g...com>
    <d...@g...com>
    <psp6q7$97o$1@node2.news.atman.pl>
    <6...@g...com>
    <pss4d0$14n$1@node2.news.atman.pl>
    <3...@g...com>
    NNTP-Posting-Host: ip-94-75-90-137.wave.com.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset="utf-8"
    Content-Transfer-Encoding: 8bit
    X-Trace: node1.news.atman.pl 1542615764 11855 94.75.90.137 (19 Nov 2018 08:22:44 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Mon, 19 Nov 2018 08:22:44 +0000 (UTC)
    User-Agent: 40tude_Dialog/2.0.15.84
    Xref: news-archive.icm.edu.pl pl.comp.programming:212930
    [ ukryj nagłówki ]

    On Sun, 18 Nov 2018 23:14:44 -0800 (PST), Maciej Sobczak wrote:

    > Wystarczy rozszerzyć składnię asserta. W tej chwili assert musi dostać jedno
    wyrażenie, ale można by go rozszerzyć tak, żeby akceptował dowolne fragmenty kodu. W
    niektórych językach to się robi o tyle łatwiejsze, że wszystko jest albo może być
    wyrażeniem, również pętla While czy cokolwiek innego - wtedy do takiego asserta można
    wsadzić dowolny fragment kodu, nawet z własnymi definicjami zmiennych wykorzystanych
    w środku. Ale w C++ chyba niewiele trzeba, żeby to osiągnąć, np. z taką składnią:
    >
    > assert(dowolnyfragmentkodu, wynik_bool);
    >
    > I użyć tego tak:
    >
    > assert(
    > int i; // albo inne definicje
    > int j = x; // x jest na zewnątrz, ale widać go tutaj
    >
    > while (orzemy_jak_możemy)
    > {
    > // obliczenia, wywołania funkcji, itd.
    > ...
    > },
    >
    > x > 0 && i < 10 // jakiś ostateczny warunek
    > );
    >
    > I wtedy assert, tylko w trybie debug, wykonuje ten kod a na końcu sprawdza warunek
    logiczny z drugiego swojego argumentu. W trybie release nic nie robi.
    >
    > Kto zaproponuje definicję makra assert o takich zdolnościach?

    Makra nie zaproponuję, ale wrzucę ciekawostkę.
    W języku Solidity, używanym do smart kontraktów w sieci Ethereum
    (kryptowaluty) stosuje się coś co się nazywa modifier, przykładowo dopisuje
    się w klasie modifier isOwner, który sprawdza czy kontrakt wywołał jego
    właściciel i tenże modifier dopisuje się do pozostałych metod, które mają
    go sprawdzać przed wywołaniem, w przykładzie robi to metoda getData():

    [...]
    modifier isOwner {
    require(msg.sender == owner);
    }

    function getData() public isOwner {
    return data
    }
    [...]


    ps. require to odpowiednik asserta

    --
    pozdrawiam
    Roman Tyczka

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: